OSDN Git Service

FDK.Activity に、デバイス依存リソースの作成と解放用のメソッドを追加。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Mon, 19 Sep 2016 09:04:08 +0000 (18:04 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Mon, 19 Sep 2016 09:04:08 +0000 (18:04 +0900)
デバイスの再構築時に 活性化する と 活性化しない を呼び出すと、Activity の状態もリセットされてしまうため。

FDK24/Activity.cs

index ec876ec..0e72897 100644 (file)
@@ -7,37 +7,108 @@ namespace FDK
 {
        public class Activity
        {
-               public bool 活性化している
-               {
-                       get;
-                       private set;    // 派生クラスからも設定は禁止。
-               } = false;
+               public bool 活性化している { get; private set; } = false; // 派生クラスからも設定は禁止。
                public bool 活性化していない
                {
                        get { return !this.活性化している; }
                        private set { this.活性化している = !value; }  // 派生クラスからも設定は禁止。
                }
-               public bool 最初の進行描画である { get; set; } = false;
+               public bool デバイス依存リソースが生成されている { get; private set; } = false;   // 派生クラスからも設定は禁止。
+               public bool デバイス依存リソースが生成されていない
+               {
+                       get { return !this.デバイス依存リソースが生成されている; }
+                       private set { this.デバイス依存リソースが生成されている = !value; }   // 派生クラスからも設定は禁止。
+               }
 
+               /// <summary>
+               /// この Activity を初期化し、進行や描画を行える状態にする。
+               /// これにはデバイス依存リソースの作成も含まれる。
+               /// </summary>
                public void 活性化する( FDK.メディア.デバイスリソース dr )
                {
                        Debug.Assert( this.活性化していない );
+
                        this.On活性化( dr );
                        this.活性化している = true;
-                       this.最初の進行描画である = true;
+
+                       this.デバイス依存リソースを作成する( dr );
                }
+               
+               /// <summary>
+               /// この Activity を終了し、進行や描画を行わない状態に戻す。
+               /// これにはデバイス依存リソースの解放も含まれる。
+               /// </summary>
                public void 非活性化する( FDK.メディア.デバイスリソース dr )
                {
                        Debug.Assert( this.活性化している );
+
                        this.On非活性化( dr );
                        this.活性化している = false;
+
+                       this.デバイス依存リソースを解放する( dr );
                }
 
+               /// <summary>
+               /// デバイスに依存するリソースを作成する。
+               /// </summary>
+               /// <remarks>
+               /// 活性化時だけではなく、活性化している最中はいつでも
+               /// (デバイスが再構築またはリサイズされた 後 に)呼び出される可能性がある。
+               /// </remarks>
+               public void デバイス依存リソースを作成する( FDK.メディア.デバイスリソース dr )
+               {
+                       Debug.Assert( this.活性化している );
+                       Debug.Assert( this.デバイス依存リソースが生成されていない );
+
+                       this.Onデバイス依存リソースの作成( dr );
+                       this.デバイス依存リソースが生成されている = true;
+               }
+
+               /// <summary>
+               /// デバイスに依存するリソースを解放する。
+               /// </summary>
+               /// <remarks>
+               /// 非活性化時だけではなく、活性化している最中はいつでも
+               /// (デバイスが再構築またはリサイズされる 前 に)呼び出される可能性がある。
+               /// </remarks>
+               public void デバイス依存リソースを解放する( FDK.メディア.デバイスリソース dr )
+               {
+                       Debug.Assert( this.活性化している );
+                       Debug.Assert( this.デバイス依存リソースが生成されている );
+
+                       this.Onデバイス依存リソースの解放( dr );
+                       this.デバイス依存リソースが生成されていない = true;
+               }
+
+               /* public void 進行描画する( FDK.メディア.デバイスリソース dr )
+               {
+                       // このクラスでは、進行描画用の共通メソッドは定義しない。
+                       // (派生クラスにより引数がいろいろ変わるので、共通して定義する意味が薄い。)
+                       
+                       // 以下は、推奨される実装の一部。
+
+                       // 活性化していないときに呼び出しがあるならコーディングミス。
+                       Debug.Assert( this.活性化していない );
+               
+                       // デバイス依存リソースが使えないなら何もしない(デバイス再構築またはリサイズ中)。
+                       if( this.デバイス依存リソースが解放済みである )
+                               return;
+               }
+               */
+
+               // 以下、派生クラスでオーバーライドするもの。
+
                protected virtual void On活性化( FDK.メディア.デバイスリソース dr )
                {
                }
                protected virtual void On非活性化( FDK.メディア.デバイスリソース dr )
                {
                }
+               protected virtual void Onデバイス依存リソースの作成( FDK.メディア.デバイスリソース dr )
+               {
+               }
+               protected virtual void Onデバイス依存リソースの解放( FDK.メディア.デバイスリソース dr )
+               {
+               }
        }
 }