OSDN Git Service

PCの性能が低いと譜面スクロールがガタガタになることがあったミスを修正。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Wed, 14 Jun 2017 09:15:03 +0000 (18:15 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Wed, 14 Jun 2017 09:15:03 +0000 (18:15 +0900)
アプリ側で描画してからDirectComposition側で表示されるまでの間がバラバラになることが原因。
演奏ステージの描画について、実際にフレームが表示される時刻に合わせて現在時刻(処理時刻)を進めるように修正。
高速進行については、描画は無関係なので調整なし。

FDK/メディア/グラフィックデバイス.cs
StrokeStyleT/ステージ/演奏/演奏ステージ.cs

index de6641b..c8e4987 100644 (file)
@@ -165,6 +165,23 @@ namespace FDK.メディア
                //----------------
                #endregion
 
+               /// <summary>
+               ///             現在時刻から、DirectComposition Engine による次のフレーム表示時刻までの間隔[秒]を返す。
+               /// </summary>
+               /// <remarks>
+               ///             この時刻の仕様と使い方については、以下を参照。
+               ///             Architecture and components - MSDN
+               ///             https://msdn.microsoft.com/en-us/library/windows/desktop/hh437350.aspx
+               /// </remarks>
+               public double 次のDComp表示までの残り時間sec
+               {
+                       get
+                       {
+                               var fs = this.DCompDevice.FrameStatistics;
+                               return ( fs.NextEstimatedFrameTime - fs.CurrentTime ) / fs.TimeFrequency;
+                       }
+               }
+
 
                /// <summary>
                ///             初期化処理。
@@ -304,28 +321,6 @@ namespace FDK.メディア
                        this._スワップチェーンに依存するグラフィックリソースを作成する( d3dDevice );
                }
 
-#if DEBUG
-               public void DCompDebug_CurrentTimeを保存する()
-               {
-                       this._Currenttime = this.DCompDevice.FrameStatistics.CurrentTime;
-               }
-               public double DCompDebug_経過時間msを返す()
-               {
-                       return 1000.0 * FDK.カウンタ.QPCTimer.生カウント相対値を秒へ変換して返す( this.DCompDevice.FrameStatistics.CurrentTime - this._Currenttime );
-               }
-               public void DCompDebug_16ms以上かかってたら画面をフラッシュする()
-               {
-                       if( this.DCompDebug_経過時間msを返す() > 16.6 )
-                       {
-                               this.D2DDeviceContext.BeginDraw();
-                               this.D2DDeviceContext.Clear( Color4.White );
-                               this.D2DDeviceContext.EndDraw();
-                       }
-               }
-
-               private long _Currenttime = 0;
-#endif
-
                /// <summary>
                ///             バックバッファに対応するウィンドウのハンドル。
                ///             コンストラクタで指定する。
index c578db0..36909b2 100644 (file)
@@ -514,7 +514,7 @@ namespace SST.ステージ.演奏
                                        this._コンボ.進行描画する( gd );
                                        this._回転羽.進行描画する( gd );
 
-                                       double 演奏時刻sec = this._演奏開始からの経過時間secを返す();
+                                       double 演奏時刻sec = this._演奏開始からの経過時間secを返す() + gd.次のDComp表示までの残り時間sec;
 
                                        #region " 背景動画とBGMの進行描画。"
                                        //----------------