私はこのコードでSDLを初期化します。私は、非SDLソフトウェアレンダラでレンダリングすると、このコードでウィンドウにそれを提示SDL_RenderPresent()はvsyncを待っていません - どのように待つのですか?
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* win = SDL_CreateWindow(
"SDL Window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
WIDTH,
HEIGHT,
SDL_WINDOW_SHOWN
);
SDL_Renderer* ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_SOFTWARE);
SDL_GL_SetSwapInterval(1); // probably has no effect since it's not using GL
:
SDL_UpdateTexture(screenBuffer, NULL, screenData, WIDTH*4);
SDL_RenderClear(ren);
SDL_RenderCopy(ren, screenBuffer, NULL, NULL);
SDL_RenderPresent(ren);
フレームレートが完全に非キャップで、なぜ私は分かりません。
をSDL_CreateRendererフラグに追加すると、単にウィンドウが空白の画面になります。 SDL_RENDERER_SOFTWARE
フラグを使用する必要がありますが(私はSDLのソフトウェアレンダラーを使用してスクリーンを提示する以外には使用しませんが)、そうでなければSDL_RenderPresent()
は非常に長い時間ストールし、1秒あたり約1フレームになります。
SDL_RenderPresent()
はvsyncを待つか、それとも(正確に)自分自身を待つことができますか?
SDLのUpdateWindowSurfaceはvsyncをサポートしていないようです(一部のプラットフォームでは非常に難しく、他のプラットフォームでは実際には使用できません)ので、SDLソフトウェアレンダラーにもその機能がありません。 Vsyncは3次元APIでかなり頑丈なので、減速の問題を解決する方がはるかに簡単かもしれません。 – keltar
GPU APIに依存することで、バイナリスペースを無駄にしたり、互換性を低下させたくないと思います。 – Accumulator
@genpfaultはい、ご迷惑をおかけしていただきありがとうございます。私はコメントを再投稿します。 – HolyBlackCat