在 Qt 线程中应用 OpenGL 着色器
Posted
技术标签:
【中文标题】在 Qt 线程中应用 OpenGL 着色器【英文标题】:Applying OpengGL Shader in Qt Thread [closed] 【发布时间】:2013-10-14 11:16:17 【问题描述】:在线程中将着色器添加到 OpenGL 窗口时遇到问题。
代码在这里:https://github.com/odie42/qtopengl
它似乎加载了着色器等,但没有更新缓冲区或其他东西。我不知道为什么不显示着色器/几何图形。
// 编辑
我实际上找到了解决方案。如果有人感兴趣,我会上传工作代码。
【问题讨论】:
能否请您尝试缩小相关代码范围。如果人们不需要阅读大量代码,您可能会得到更多响应。 问题是,我不知道哪个代码是完全相关的。我不知道是否应用着色器/创建几何图形是问题,或者执行此操作的线程中是否存在问题 一般建议是将所有 OpenGL 功能保留在 1 个线程中。在线程之间共享上下文是在找麻烦。 我只是在主线程中创建上下文并将所有处理移至我的线程。 不行。所有 OpenGL 调用都有一个特定的隐式线程本地上下文。因此,如果不是很聪明,就不能跨线程共享上下文。因此,您可能只有 1 个 OpenGL 线程。 【参考方案1】:您需要“移动”opengl 上下文,如下所述:http://www.opengl.org/wiki/OpenGL_and_multithreading
【讨论】:
我其实是在 LogoWidget::startRendering(), context()->moveToThread(&thread); 你确定你的问题是线程相关的,如果代码只在一个线程上运行,它是否有效? 是的,这是来自 Qt Creator 的示例(Cube OpenGL ES 2.0 示例)。我只是将相关调用移到一个线程中。 您似乎没有将 bDoRendering 设置为 true。 它被初始化为 true。即使我在线程的构造函数中将其设置为“true”,我也看不到几何(立方体)。以上是关于在 Qt 线程中应用 OpenGL 着色器的主要内容,如果未能解决你的问题,请参考以下文章
Qt & OpenGL OS X:山狮上的 GLSL 着色器版本只有 120