+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Diagnostics;\r
-using SharpDX.Direct3D9;\r
-using FDK;\r
-\r
-namespace DTXMania\r
-{\r
- /// <summary>\r
- /// 描画フレーム毎にGPUをフラッシュして、描画遅延を防ぐ。\r
- /// DirectX9の、Occlusion Queryを用いる。(Flush属性付きでGetDataする)\r
- /// Device Lost対策のため、QueueをCActivitiyのManagedリソースとして扱う。\r
- /// On進行描画()を呼び出すことで、GPUをフラッシュする。\r
- /// </summary>\r
- internal class CActFlushGPU : CActivity\r
- {\r
- // CActivity 実装\r
-\r
- public override void OnManagedリソースの作成()\r
- {\r
- if (!base.b活性化してない)\r
- {\r
- try // #xxxxx 2012.12.31 yyagi: to prepare flush, first of all, I create q queue to the GPU.\r
- {\r
- IDirect3DQuery9 = new SharpDX.Direct3D9.Query(CDTXMania.Instance.Device, QueryType.Occlusion);\r
- }\r
- catch (Exception e)\r
- {\r
- Trace.TraceError(e.Message);\r
- }\r
- base.OnManagedリソースの作成();\r
- }\r
- }\r
- public override void OnManagedリソースの解放()\r
- {\r
- IDirect3DQuery9.Dispose();\r
- IDirect3DQuery9 = null;\r
- base.OnManagedリソースの解放();\r
- }\r
- public override int On進行描画()\r
- {\r
- if (!base.b活性化してない)\r
- {\r
- IDirect3DQuery9.Issue(Issue.End);\r
- DWM.Flush();\r
- IDirect3DQuery9.GetData<int>( out _, true ); // flush GPU queue\r
- }\r
- return 0;\r
- }\r
-\r
- // その他\r
-\r
- #region [ private ]\r
- //-----------------\r
- private SharpDX.Direct3D9.Query IDirect3DQuery9;\r
- //-----------------\r
- #endregion\r
- }\r
-}\r