加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – OpenGL上的多线程渲染

发布时间:2020-12-16 05:38:57 所属栏目:百科 来源:网络整理
导读:我有一个多线程应用程序,其中我试图用不同的线程呈现.首先,我尝试在所有线程之间使用相同的呈现上下文,但是我为其他线程获取NULL当前上下文.我已经在互联网上阅读,一个上下文只能一次在一个线程当前. 所以我决定做一些不同的事情.我创建一个窗口,我从它获得H
我有一个多线程应用程序,其中我试图用不同的线程呈现.首先,我尝试在所有线程之间使用相同的呈现上下文,但是我为其他线程获取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上都是免费的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读