2016-08-23 105 views
-1

我遇到了一些OpenGL函數似乎強制我的應用程序運行60fps的問題。我正在使用SDL2和我指定SDL2和OpenGL,強制禁用Vsync的FPS?

SDL_GL_SetSwapInterval(0) 

在初始化過程中,我認爲禁用Vsync。例如,以下代碼行將每次返回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(...)'? [Here Reference](https://wiki.libsdl.org/SDL_SetHintWithPriority)。在創建渲染器之前:'SDL_SetHintWithPriority(SDL_HINT_RENDER_VSYNC,「0」,SDL_HINT_OVERRIDE);' –

+0

@BiagioFesta:'SDL_HINT_RENDER_VSYNC'只適用於SDL Renderer系統,不適用於OpenGL。 – genpfault

+0

'glUseProgram(NULL);'< - 這裏小心,'NULL'並不總是計算出方法期望的整數0。 – SurvivalMachine

回答

0

所以我想通了,事實證明,我的驅動程序已經設置了Vsync,這導致了這一點,我感到困惑,因爲我認爲Vsync只會在交換緩衝區時強制延遲,但顯然不是這種情況,如解釋here