2016-08-23 12 views
-1

いくつかのOpenGL関数がアプリケーションを強制的に60fpsで動作させるような問題が発生しています。私はSDL2を使用しています。私は無効化されたVsyncと思っていた初期化中にSDL2とOpenGL、VsyncでFPSを強制的に無効にしていますか?

と指定しています。たとえば、次のコード行は毎回16ミリ秒を返します(ループ内で実行する唯一のコードであると仮定します。以前に同様の方法で画面上に何かを描画した場合、代わりにその関数を実行するのに16ミリ秒かかります)これはミリ秒単位ではなくマイクロ秒単位で表示されます)。

Uint32 begin = SDL_GetTicks(); 
GLint lightBuffer = glGetUniformLocation(cNight_shader.gProgramID, "lightBuffer"); 
GLint varying_time = glGetUniformLocation(cNight_shader.gProgramID, "varying_colour"); 
glActiveTexture(GL_TEXTURE2); 
glBindTexture(GL_TEXTURE_2D, texColorBuffer); 

glUseProgram(cNight_shader.gProgramID); 
glUniform1i(lightBuffer, 2); 
glUniform1f(varying_time, cNight_shader.f1); 
draw_quad(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); // (0, 0, myTexture); 
glUseProgram(NULL); 
glBindTexture(GL_TEXTURE_2D, 0); 
glActiveTexture(GL_TEXTURE0); 
Uint32 end = SDL_GetTicks(); 
std::cout << end - begin << std::endl; 

これについての助けがあれば幸いです。また、私は任意のシェーダやバッファを使用して単純なをしない場合のことに注意したいと思います:

glBindTexture(GL_TEXTURE_2D, texture_id); 
draw quad(); 
glBindTexture(GL_TEXTURE_2D, 0); 

これはFPSを強制しないので、私は問題が私のシェーダに関連していると思っていますしかし、なぜ私は理解していない。

+1

'SDL_SetHintWithPriority(...)'を試しましたか? [参考資料](https://wiki.libsdl.org/SDL_SetHintWithPriority)。 'SDL_SetHintWithPriority(SDL_HINT_RENDER_VSYNC、" 0 "、SDL_HINT_OVERRIDE);' –

+0

@BiagioFesta: 'SDL_HINT_RENDER_VSYNC'はレンダラーを作成する前に、OpenGLではなくSDLレンダラーシステム用です。 – genpfault

+0

'glUseProgram(NULL);; < - 注意すると、' NULL'はメソッドが期待する整数0に評価されるとは限りません。 – SurvivalMachine

答えて

0

私はVsyncを強制的にVsyncに設定していましたが、これはVsyncがバッファを交換するときだけ遅延させると思って混乱していましたが、説明したようにhere

関連する問題