SDL2和OpenGL,强制FPS与垂直同步禁用
SDL2 and OpenGL, forcing FPS with Vsync disabled?
我遇到了一个问题,一些OpenGL函数似乎迫使我的应用程序运行60fps。我使用SDL2并指定
SDL_GL_SetSwapInterval(0)
在初始化时,我认为它禁用了垂直同步。例如,下面一行代码每次将返回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,所以我认为这个问题与我的着色器有关,但我不明白为什么。
所以我弄清楚了,原来我的驱动程序已经设置了强制的Vsync,这导致了这一点,我很困惑,因为我认为Vsync只会在交换缓冲区时强制延迟,但这显然不是这种情况,正如这里解释的那样。
相关文章:
- 松弛原子与无同步情况下的记忆连贯性
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- QScrollArea:由垂直滚动条引起的水平滚动条
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 在C++中同步线程
- 与 stdio 同步是否使程序 I/O 非交互式?
- 如何在qt中同步应用程序和显示器的刷新率?
- Windows 进程间同步类似事件?
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 将 10 个线程与原子布尔值同步
- ofstream::close() 是否在 Linux 上调用同步?
- 与Visual Studios(c ++)同步时如何组织github存储库?
- 不支持SFML垂直同步
- 使用 qt 和 opengl、定时精度和垂直同步问题、c++ 显示图像
- iOS中的垂直同步(SDL2/OpenGL ES)
- OpenGL垂直同步使渲染更快
- 关闭了垂直同步,但在我的DirectX 9应用程序中仍然可以获得60FPS
- SDL2和OpenGL,强制FPS与垂直同步禁用
- SDL2 - 垂直同步不起作用