SDL2和OpenGL,强制FPS禁用Vsync?

时间:2016-08-23 23:07:10

标签: c++ opengl frame-rate

我遇到一些问题,其中一些OpenGL函数似乎迫使我的应用程序运行60fps。我使用SDL2并指定

SDL_GL_SetSwapInterval(0)

在初始化期间,我认为禁用了Vsync。例如,下面的代码行每次都会返回16 ms(假设它是我在循环中运行的唯一代码,如果我以前以类似的方式在屏幕上绘制某些内容,则运行该函数需要16 ms这一个将是微秒而不是毫秒):

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 个答案:

答案 0 :(得分:0)

所以我想通了,事实证明我的驱动程序设置了Vsync强制导致这个,我感到困惑,因为我认为Vsync只会在交换缓冲区时强制延迟,但事实显然不是这样,解释here