c – OpenGL上的多线程渲染

我有一个多线程应用程序,其中我试图用不同的线程呈现.首先,我尝试在所有线程之间使用相同的呈现上下文,但是我为其他线程获取NULL当前上下文.我已经在互联网上阅读,一个上下文只能一次在一个线程当前.

所以我决定做一些不同的事情.我创建一个窗口,我从它获得HDC并创建了第一个RC.在这之后,我在线程之间共享这个HDC,并且在创建的每个新线程中,我从同一个HDC获取一个新的RC,并且使它成为当前的线程.每当我这样做,RC返回总是不同的(通常是前一个值1).我做出一个断言来检查wglGetCurrentContext()是否返回一个RC,它看起来像是返回刚创建的一个.但是在渲染之后,我没有渲染,如果我调用GetLastError()我获得错误6(无效句柄)

那么,这是否意味着,尽管wglCreateContext()的每一个新的调用都给了我一个新的值,不知何故这意味着所有这些不同的值与OpenGL调用相同的“连接通道”?

这是否意味着我将永远不得不对线程上的上一个渲染上下文进行无效,并在新的渲染上激活它?我真的必须让这个同步,或者有什么其他的方式来解决这个问题吗?

解决方法

I have a multithreaded application,in which I’m trying to render with different threads.

别!!!

您将无法尝试多线程渲染您的渲染器.基本上你正在跑到一个大的比赛条件,而驱动程序将忙于同步线程以某种方式使其理解.

为了获得最佳的渲染性能,所有OpenGL操作只能保留一个线程.所有并行化在GPU上都是免费的.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...