-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,所以我想這個問題是關係到我的着色器,但我不明白爲什麼。
您是否試過'SDL_SetHintWithPriority(...)'? [Here Reference](https://wiki.libsdl.org/SDL_SetHintWithPriority)。在創建渲染器之前:'SDL_SetHintWithPriority(SDL_HINT_RENDER_VSYNC,「0」,SDL_HINT_OVERRIDE);' –
@BiagioFesta:'SDL_HINT_RENDER_VSYNC'只適用於SDL Renderer系統,不適用於OpenGL。 – genpfault
'glUseProgram(NULL);'< - 這裏小心,'NULL'並不總是計算出方法期望的整數0。 – SurvivalMachine