c – OpenGL上的多线程渲染

c – OpenGL上的多线程渲染,第1张

概述我有一个多线程应用程序,其中我试图用不同的线程呈现.首先,我尝试在所有线程之间使用相同的呈现上下文,但是我为其他线程获取NULL当前上下文.我已经在互联网上阅读,一个上下文只能一次在一个线程当前. 所以我决定做一些不同的事情.我创建一个窗口,我从它获得HDC并创建了第一个RC.在这之后,我在线程之间共享这个HDC,并且在创建的每个新线程中,我从同一个HDC获取一个新的RC,并且使它成为当前的线程. 我有一个多线程应用程序,其中我试图用不同的线程呈现.首先,我尝试在所有线程之间使用相同的呈现上下文,但是我为其他线程获取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 – OpenGL上的多线程渲染全部内容,希望文章能够帮你解决c – OpenGL上的多线程渲染所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1248792.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存