gpt4 book ai didi

c++ - 窗口在 NVIDIA 显卡上使用 OpenGL 渲染闪烁

转载 作者:行者123 更新时间:2023-11-30 03:53:54 27 4
gpt4 key购买 nike

在我的项目中,我使用 SDL2 + OpenGL。有简单的代码。当我想清除缓冲区并开始在其中绘制时,函数 VPreRender() 被调用。之后,当我想在屏幕上显示这个缓冲区时,我使用函数 VPostRender()

当程序使用集成视频卡 (HD Intel) 启动时,窗口出现时不会闪烁。但是当我使用高性能 NVIDIA 视频卡启动程序时,它开始闪烁几秒钟然后停止。然后一切看起来都很好。如果我想调整窗口大小,也会出现同样的情况。那我做错了什么?为什么窗口在闪烁?

bool SDLRender::VPreRender()
{
glClearColor(m_backgroundColor.r, m_backgroundColor.g, m_backgroundColor.b, m_backgroundColor.a);
glClear ( GL_COLOR_BUFFER_BIT );
}

bool SDLRender::VPostRender()
{
SDL_GL_SwapWindow(m_pWindow);
}

最佳答案

您所描述的行为是每帧多次调用窗口系统交换函数的典型症状。

结果是您尚未渲染的帧显示在显示器上。假设系统使用普通双缓冲,并且您进行了两次交换调用,那么第一次交换调用会向缓冲区显示您渲染的帧,但紧随其后的第二次交换调用会将其替换为另一个可以包含任何内容的缓冲区。

在渲染和桌面组合过程中如何处理缓冲区是非常依赖于系统的。因此,确切的症状取决于系统,甚至可能随着时间而改变,这并不奇怪。在有效帧和无效帧之间闪烁当然是一种可能性。

为避免这种情况,您需要确保在完成所有渲染后每帧调用一次 SDL_GL_SwapWindow()

关于c++ - 窗口在 NVIDIA 显卡上使用 OpenGL 渲染闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com