• R/O
  • HTTP
  • SSH
  • HTTPS

CsWin10Desktop3: Commit

Visual C# 7.0, Windows10 Desktop App


Commit MetaInfo

Revisióne176c1e78751732a283065325f31afcf8a9c0580 (tree)
Tiempo2017-09-11 16:53:56
Autorくまかみ工房 <kumakamikoubou@gmai...>
Commiterくまかみ工房

Log Message

画像の表示に、レイヤーパラメータオプションを追加。

その他微修正。

Cambiar Resumen

Diferencia

--- a/FDK/ApplicationForm.cs
+++ b/FDK/ApplicationForm.cs
@@ -128,18 +128,18 @@ namespace FDK
128128
129129
130130 /// <summary>
131- /// <see cref="Run"/>での初期化が終わり、メインループに入っていれば true。
131+ /// コンストラクタでの初期化が終わっていれば true。
132132 /// </summary>
133133 protected bool _初期化完了 = false;
134134
135135 /// <summary>
136- /// フォーム生成時のパラメータを返す。
136+ /// フォーム生成時のパラメータを編集して返す。
137137 /// </summary>
138138 protected override CreateParams CreateParams
139139 {
140140 get
141141 {
142- // DWM によってトップウィンドウごとに割り当てられるリダイレクトサーフェスを持たない
142+ // DWM によってトップウィンドウごとに割り当てられるリダイレクトサーフェスを持たない。(リダイレクトへの画像転送がなくなる分、少し速くなるらしい)
143143 const int WS_EX_NOREDIRECTIONBITMAP = 0x00200000;
144144
145145 var cp = base.CreateParams;
@@ -157,7 +157,7 @@ namespace FDK
157157 {
158158 Log.Info( $"新しいサイズ: {this.ClientSize}" );
159159
160- // メインループ(RenderLoop)が始まる前にも数回呼び出されるので、それをはじく。
160+ // メインループ(RenderLoop)が始まる前にも数回呼び出されることがあるので、それをはじく。
161161 if( !( this._初期化完了 ) )
162162 {
163163 Log.Info( "アプリケーションの初期化がまだ完了していないので、リサイズ処理をスキップします。" );
@@ -170,6 +170,7 @@ namespace FDK
170170 // return;
171171 //}
172172
173+ // スワップチェーンとその依存リソースを解放し、改めて作成しなおす。
173174 var gd = ApplicationForm.グラフィックデバイス;
174175
175176 gd.D3DDeviceを取得する( ( d3dDevice ) => {
@@ -183,16 +184,20 @@ namespace FDK
183184 }
184185 }
185186
186- protected virtual void スワップチェーンに依存するグラフィックリソースを作成する( SharpDX.Direct3D11.Device d3dDevice ) { }
187- protected virtual void スワップチェーンに依存するグラフィックリソースを解放する() { }
188-
187+ protected virtual void スワップチェーンに依存するグラフィックリソースを作成する( SharpDX.Direct3D11.Device d3dDevice )
188+ {
189+ // 派生クラスで実装すること。
190+ }
191+ protected virtual void スワップチェーンに依存するグラフィックリソースを解放する()
192+ {
193+ // 派生クラスで実装すること。
194+ }
189195
190196 /// <summary>
191197 /// ウィンドウを全画面モードにする直前に取得し、
192198 /// 再びウィンドウモードに戻して状態を復元する時に参照する。
193199 /// (<see cref="全画面モード"/> を参照。)
194200 /// </summary>
195- private (Size clientSize, FormBorderStyle formBorderStyle)
196- _ウィンドウモードの情報のバックアップ;
201+ private (Size clientSize, FormBorderStyle formBorderStyle) _ウィンドウモードの情報のバックアップ;
197202 }
198203 }
--- a/FDK/メディア/画像.cs
+++ b/FDK/メディア/画像.cs
@@ -98,7 +98,7 @@ namespace FDK.メディア
9898 /// それが困る場合には、<paramref name="描画先矩形を整数境界に合わせる"/> に true を指定すること。
9999 /// ただし、これを true にした場合、タイルのように並べて描画した場合に1pxずれる場合がある。この場合は false にすること。
100100 /// </remarks>
101- public virtual void 描画する( グラフィックデバイス gd, float 左位置, float 上位置, float 不透明度0to1 = 1.0f, float X方向拡大率 = 1.0f, float Y方向拡大率 = 1.0f, RectangleF? 転送元矩形 = null, bool 描画先矩形を整数境界に合わせる = false, Matrix? 変換行列3D = null )
101+ public virtual void 描画する( グラフィックデバイス gd, float 左位置, float 上位置, float 不透明度0to1 = 1.0f, float X方向拡大率 = 1.0f, float Y方向拡大率 = 1.0f, RectangleF? 転送元矩形 = null, bool 描画先矩形を整数境界に合わせる = false, Matrix? 変換行列3D = null, LayerParameters1? レイヤーパラメータ = null )
102102 {
103103 Debug.Assert( this.活性化している );
104104
@@ -131,14 +131,26 @@ namespace FDK.メディア
131131 // ブレンドモードをD2Dレンダーターゲットに設定する。
132132 dc.PrimitiveBlend = ( this.加算合成 ) ? PrimitiveBlend.Add : PrimitiveBlend.SourceOver;
133133
134- // D2Dレンダーターゲットに Bitmap を描画する。
135- dc.DrawBitmap(
136- bitmap: this._Bitmap,
137- destinationRectangle: 転送先矩形,
138- opacity: 不透明度0to1,
139- interpolationMode: this.補正モード,
140- sourceRectangle: 転送元矩形,
141- erspectiveTransformRef: 変換行列3D ); // null 指定可。
134+ using( var layer = new Layer( dc ) )
135+ {
136+ // レイヤーパラメータの指定があれば、描画前に Push する。
137+ if( null != レイヤーパラメータ )
138+ dc.PushLayer( (LayerParameters1) レイヤーパラメータ, layer );
139+
140+ // D2Dレンダーターゲットに Bitmap を描画する。
141+ dc.DrawBitmap(
142+ bitmap: this._Bitmap,
143+ destinationRectangle: 転送先矩形,
144+ opacity: 不透明度0to1,
145+ interpolationMode: this.補正モード,
146+ sourceRectangle: 転送元矩形,
147+ erspectiveTransformRef: 変換行列3D ); // null 指定可。
148+
149+ // レイヤーパラメータの指定があれば、描画後に Pop する。
150+ if( null != レイヤーパラメータ )
151+ dc.PopLayer();
152+ }
153+
142154 } );
143155 }
144156
@@ -150,7 +162,7 @@ namespace FDK.メディア
150162 /// <param name="変換行列3D">射影行列。</param>
151163 /// <param name="不透明度0to1">不透明度。(0:透明~1:不透明)</param>
152164 /// <param name="転送元矩形">描画する画像範囲。</param>
153- public virtual void 描画する( グラフィックデバイス gd, Matrix3x2? 変換行列2D = null, Matrix? 変換行列3D = null, float 不透明度0to1 = 1.0f, RectangleF? 転送元矩形 = null )
165+ public virtual void 描画する( グラフィックデバイス gd, Matrix3x2? 変換行列2D = null, Matrix? 変換行列3D = null, float 不透明度0to1 = 1.0f, RectangleF? 転送元矩形 = null, LayerParameters1? レイヤーパラメータ = null )
154166 {
155167 Debug.Assert( this.活性化している );
156168
@@ -163,14 +175,26 @@ namespace FDK.メディア
163175 dc.Transform = ( 変換行列2D ?? Matrix3x2.Identity ) * dc.Transform;
164176 dc.PrimitiveBlend = ( this.加算合成 ) ? PrimitiveBlend.Add : PrimitiveBlend.SourceOver;
165177
166- // D2Dレンダーターゲットに this.Bitmap を描画する。
167- dc.DrawBitmap(
168- bitmap: this._Bitmap,
169- destinationRectangle: null,
170- opacity: 不透明度0to1,
171- interpolationMode: this.補正モード,
172- sourceRectangle: 転送元矩形,
173- erspectiveTransformRef: 変換行列3D ); // null 指定可。
178+ using( var layer = new Layer( dc ) )
179+ {
180+ // レイヤーパラメータの指定があれば、描画前に Push する。
181+ if( null != レイヤーパラメータ )
182+ dc.PushLayer( (LayerParameters1) レイヤーパラメータ, layer );
183+
184+ // D2Dレンダーターゲットに this.Bitmap を描画する。
185+ dc.DrawBitmap(
186+ bitmap: this._Bitmap,
187+ destinationRectangle: null,
188+ opacity: 不透明度0to1,
189+ interpolationMode: this.補正モード,
190+ sourceRectangle: 転送元矩形,
191+ erspectiveTransformRef: 変換行列3D ); // null 指定可。
192+
193+ // レイヤーパラメータの指定があれば、描画後に Pop する。
194+ if( null != レイヤーパラメータ )
195+ dc.PopLayer();
196+ }
197+
174198 } );
175199 }
176200
Show on old repository browser