OSDN Git Service

f83c3958b58cbe2620779ce89f1aac422eaf2211
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CActFlushGPU.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Diagnostics;\r
5 using SlimDX.Direct3D9;\r
6 using FDK;\r
7 \r
8 namespace DTXMania\r
9 {\r
10         /// <summary>\r
11         /// 描画フレーム毎にGPUをフラッシュして、描画遅延を防ぐ。\r
12         /// DirectX9の、Occlusion Queryを用いる。(Flush属性付きでGetDataする)\r
13         /// Device Lost対策のため、QueueをCActivitiyのManagedリソースとして扱う。\r
14         /// On進行描画()を呼び出すことで、GPUをフラッシュする。\r
15         /// </summary>\r
16         internal class CActFlushGPU : CActivity\r
17         {\r
18                 // CActivity 実装\r
19 \r
20                 public override void OnManagedリソースの作成()\r
21                 {\r
22                         if (!base.b活性化してない)\r
23                         {\r
24                                 try                     // #xxxxx 2012.12.31 yyagi: to prepare flush, first of all, I create q queue to the GPU.\r
25                                 {\r
26                                         IDirect3DQuery9 = new SlimDX.Direct3D9.Query(CDTXMania.Instance.Device, QueryType.Occlusion);\r
27                                 }\r
28                                 catch (Exception e)\r
29                                 {\r
30                                         Trace.TraceError(e.Message);\r
31                                 }\r
32                                 base.OnManagedリソースの作成();\r
33                         }\r
34                 }\r
35                 public override void OnManagedリソースの解放()\r
36                 {\r
37                         IDirect3DQuery9.Dispose();\r
38                         IDirect3DQuery9 = null;\r
39                         base.OnManagedリソースの解放();\r
40                 }\r
41                 public override int On進行描画()\r
42                 {\r
43                         if (!base.b活性化してない)\r
44                         {\r
45                                 IDirect3DQuery9.Issue(Issue.End);\r
46                                 DWM.Flush();\r
47                                 IDirect3DQuery9.GetData<int>(true);     // flush GPU queue\r
48                         }\r
49                         return 0;\r
50                 }\r
51 \r
52                 // その他\r
53 \r
54                 #region [ private ]\r
55                 //-----------------\r
56                 private SlimDX.Direct3D9.Query IDirect3DQuery9;\r
57                 //-----------------\r
58                 #endregion\r
59         }\r
60 }\r