2016-08-23 107 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