トップページ > 記事閲覧
GetFPS改良の要望
名前:名無三 日時: 2020/02/07 11:35

お世話になっております。 GetFPSについて、最初からリフレッシュレートと同値のFPSが出ているものとして処理をスタートさせることはできますでしょうか? また、フレームレートに応じて加算、乗算に補正をかける関数の追加を提案します。 例:動作はしません float correct_add(float p1) { int ScreenFlipCount, StartTime, FrameTime; ScreenFlip(); ScreenFlipCount = 0; StartTime = GetNowCount(); while (true) {//サンプルでのリフレッシュレート取得そのまま // 画面切り替えを行ってVYSNC待ちをする ScreenFlip(); // 1秒経過していたらループから抜ける if (GetNowCount() - StartTime >= 1000) break; // ScreenFlip を行った回数をインクリメント ScreenFlipCount++; } return p1 * ScreenFlipCount /GetFPS() ; } float correct_mult(float p1) { int ScreenFlipCount, StartTime, FrameTime; ScreenFlip(); ScreenFlipCount = 0; StartTime = GetNowCount(); while (true) { //サンプルでのリフレッシュレート取得そのまま // 画面切り替えを行ってVYSNC待ちをする ScreenFlip(); // 1秒経過していたらループから抜ける if (GetNowCount() - StartTime >= 1000) break; // ScreenFlip を行った回数をインクリメント ScreenFlipCount++; } return pow(p1, ScreenFlipCount / GetFPS()); } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { float x=0,y=1.f; while (ProcessMessage() == 0) { x+=correct_add(10.0f); // 60fpsのとき10ピクセル動かすように加算値を補正する y*=correct_mult(0.9f); // 60fpsのとき0.9ずつ乗算するようにy値を補正する SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); DrawString(int(x), int(y), "hello", GetColor(255, 255, 255)); Screen_Flip(); if (CheckHitKey(KEY_INPUT_ESCAPE) != 0) break; } }
メンテ

Page: 1 |

Re: GetFPS改良の要望 ( No.1 )
名前:管理人 日時:2020/02/09 07:21

> GetFPSについて、最初からリフレッシュレートと同値のFPSが出ているものとして処理をスタートさせることはできますでしょうか? リフレッシュレートと同値のFPSとなっているかは起動直後の動作の安定具合に依存しますが、 今までのように返ってくる値が非常に小さい値ではないように手を加えてみましたので、 よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) > また、フレームレートに応じて加算、乗算に補正をかける関数の追加を提案します。 correct_add も correct_mult も一度関数に入ると1秒間は出てこないように見えるのですが、 どのような用途に使用するものなのでしょうか?
メンテ
Re: GetFPS改良の要望 ( No.2 )
名前:名無三 日時:2020/02/09 19:08

GetFPSの挙動確認できました、ありがとうございます。 > correct_add も correct_mult も一度関数に入ると1秒間は出てこないように見えるのですが、どのような用途に使用するものなのでしょうか? すいません、リフレッシュレート(もしくは基準となるFPS)の取得部分をそのままにしてしまっていました。 例えばFPSを60~30に可変するなどの際や処理が重くて既定のFPSを維持できない場合、この関数を利用して演算部分を構成すれば 見かけ上の動作スピードを維持することができると思います。 各自での実装でもよいかとも思いましたが、自分がゲームに作っていた際にかなり面倒に感じた処理ですのであったら便利だったろうなと。
メンテ
Re: GetFPS改良の要望 ( No.3 )
名前:管理人 日時:2020/02/11 00:10

ご説明ありがとうございます、理解できました 理解したうえで考えたのですが、やはりこの辺りの処理はソフトの仕様によって 細かく変わってくると思うので、ぴったり関数の仕様とソフトのやりたい可変FPSの 仕様が一致したときのみ使用される場合がある( それでも自前で実装したい方も居られる )と 考えると需要は少ないかな、と思うので、DXライブラリの関数として用意するのは 止めておこうと思います m(_ _)m
メンテ
Re: GetFPS改良の要望 ( No.4 )
名前:名無三(解決) 日時:2020/02/11 16:49

承知しました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存