- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在主窗口中使用 OpenGL 创建一个 Win32 应用程序(不使用 GLUT)。我现在在 WM_PAINT 中有我的绘图代码,当我调用 swapBuffers 时,它必须使自己失效,因为它不断地重新渲染并使用大量的 cpu 资源。我怎样才能让它像使用 GDI 一样只在它真正收到 WM_PAINT 时才渲染?
谢谢
最佳答案
WM_PAINT 消息会一直发送,直到 Windows 验证了窗口的脏区域。重置脏区的 API 是“EndPaint”。
调用 SwapBuffers 根本不会影响无效的窗口区域。
您的 WM_PAINT 处理程序应该类似于以下内容:
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd,&ps);
wglMakeCurrent(hdc,scene.m_oglContext);
scene.Render(); //
wglSwapBuffers(hdc);
wglMakeCurrent(hdc,0);
EndPaint(hwnd,&ps);
return 0;
许多用于 Open GL 编程的示例代码在应用程序启动时都具有单个 HDC 和 OpenGL 上下文设置。虽然它使示例代码更简单,但这确实意味着代码无法正确处理多个 OpenGL 上下文。此 WM_PAINT 处理程序假定为场景创建了 OpenGL 上下文,然后根据需要使其成为当前上下文。
根据需要交换 OpenGL 上下文的副作用是,从 BeginPaint 检索到的 hdc 用作渲染(和 SwapBuffer)目标,这意味着如果其他窗口被拖动到应用的窗口。
关于c++ - SwapBuffers 导致重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842319/
我正在使用多线程 OpenGL 渲染到一个窗口中。如果我按下一个按钮,模型将旋转 5 秒。轮换后,我打印出 FPS。其余时间 OpenGL 什么都不做。模型不会随着时间的推移而改变,所有线程在旋转时都
我有一个 OpenGL 程序可以在我所有的计算机上运行,但只有一台。这是一款配备 Vista 64 和 Radeon HD4850 的台式机。问题似乎出在我对 SwapBuffers(hdc) 的
我正在主窗口中使用 OpenGL 创建一个 Win32 应用程序(不使用 GLUT)。我现在在 WM_PAINT 中有我的绘图代码,当我调用 swapBuffers 时,它必须使自己失效,因为它不断地
我发现 OpenGL 中的 SwapBuffers 将忙于等待,只要显卡未完成渲染或正在等待 V-Sync。 这对我来说是个问题,因为我不想在等待卡完成时浪费 100% 的 CPU 内核。我不是在写游
我正在寻找一种可移植方法来制作非阻塞 SwapBuffers(),即使 VSync 已激活。 换句话说,是否有可能收到事件通知或知道下一个 VSync 之前的延迟? 最佳答案 IIRC 此扩展可帮助:
Vsync 阻塞 SwapBuffers(),这正是我想要的。我的问题是,由于输入消息转到拥有窗口的同一个线程,因此在 SwapBuffers() 被阻止时进入的任何消息都不会立即处理,但只有在 vs
想象这样一种情况: 我使用双缓冲 我可以通过不调用 glClear() 来优化我的绘图代码,如果我假设后台缓冲区的状态与我离开它两个时的状态相同 swapBuffers()前。 我可以依赖这个假设吗?
我正在尝试以 60Fps 而不是 30Fps 运行游戏。游戏锁定为 30fps,因此我可以达到 60fps 的唯一方法是帧插值。 对于插值部分,我将使用 OpenCV,我找到了 this pretty
注意到 WebGL 中不存在 SwapBuffer 功能,如果是这种情况,我们如何在绘制调用中更改状态并在 WebGL 中绘制多个对象,WebGL 在什么时间点在内部调用 swapBuffer? 最佳
我编写了一个 OpenGL 应用程序,它会在某些机器上崩溃(在我自己的测试机器上运行:Windows 8、Windows 7、Windows Vista (x86) - 但在某些装有 Windows
我已经实现了GPUImage framework在我的 cocos2d 项目中,GPUImage 框架是一个 BSD 许可的 iOS 库,可让您将 GPU 加速滤镜和其他效果应用于图像、实时摄像机视频
好的,所以我在 Windows 上遇到了一些与 OpenGL 相关的线程问题。我正在使用 C# .NET 来包装 GL。我在 Windows7 x64 上。 所以我尝试了两种不同的测试。在每次测试中,
我是一名优秀的程序员,十分优秀!