我遇到一些问题,其中一些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,所以我认为这个问题与我的着色器有关,但我不明白为什么。