VSYNCを使用せずにFPSを固定することについて簡単に質問があります。VSYNCなしの固定フレームレート描画ループの作成に関する考え方
私は現在、描画間の時間を計算している の描画ループを持っており、フレームレートを試して安定させるのに必要な時間を引いています。
static clock_t dt = clock();
static clock_t startDraw;
static clock_t endDraw;
while (_running)
{
update();
// Draw after desired elapsed time
if (clock() - dt >= _timestep)
{
startDraw = clock();
draw();
_window->SwapBuffer();
endDraw = clock();
dt = clock() - (endDraw- startDraw);
}
}
_timeStepが60fpsのを表現するために、現在16ですが、私は後で30fpsのにこれを変更することもできます。
は、ここで私が今持っているものです。
これはVSYNCがないと40〜62fpsの間で変動するので、アプローチが間違っているか、何かを見落としているかどうかはわかりません。
私の目標は、VSYNCのトグルを設定することです。実際にこの機能を追加したいのです。
注:私はレンダリングにOpenGL_2.0を使用しています。
私の主な関心事はCPU使用量です。私の目標は、NDKを通じてAndroidのサポートを追加することです。私は現在、SwapBufferでダブルバッファリングを使用しています。 – redsting
あなたが考えることができる1つのことは、draw()の前にSwapBufferを行うことです。そうすれば、ディスプレイが最初にリフレッシュされます(タイミングコードでdraw()のコストがかからないようにします)。これにより、わずかに安定したリフレッシュレートが得られます。唯一の注意点は、画面のリフレッシュが常に1フレーム遅れることですが、通常の30fpsまたは60fpsのアプリケーションでは大したことではないはずです。 – Skyd