微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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上都是免费的.

原文地址:https://www.jb51.cc/c/114142.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐