OpenGL 4.1和Qt 5的严重渲染问题

时间:2014-09-16 00:19:07

标签: opengl-4 qt5.3

我已经看到了一些有希望能够在现代OpenGL上运行Qt5的参考资料。我使用以下代码将我的QQuickView设置为OpenGL 4.1 Core(OSX 10.9与我的MacBook一起支持的最新版本)。

QSurfaceFormat sf = g_mainView->format();
sf.setProfile(QSurfaceFormat::CoreProfile);
sf.setVersion(4, 1);
g_mainView->setFormat(sf);

主要问题。首先,在尝试渲染文本时,应用程序完全崩溃。如果我碰巧在我的QML中只有图像,矩形等,我会得到大量的片段着色器错误。

QOpenGLShader::compile(Fragment): ERROR: 0:1: '' :  #version required and missing.
ERROR: 0:5: 'varying' : syntax error syntax error

*** Problematic Fragment shader source code ***
#define lowp
#define mediump
#define highp

            varying highp vec2 qt_TexCoord0;
            uniform highp float qt_Opacity;
            uniform lowp sampler2D source;
            uniform lowp sampler2D maskSource;
            void main(void) {
                gl_FragColor = texture2D(source, qt_TexCoord0.st) * (texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity;
            }


***
QQuickCustomMaterialShader: Shader compilation failed:
"ERROR: 0:1: '' :  #version required and missing.
ERROR: 0:5: 'varying' : syntax error syntax error
"

Qt5.3还没有为现代OpenGL做好准备吗?或者我只是错误地设置它?我想使用OpenGL 4嵌入我自己的OpenGL图形窗口,所以我的假设是我需要在GL 4下运行的应用程序。还有另外一种方法吗?

2 个答案:

答案 0 :(得分:5)

我在您的错误报告中添加了一些评论并对其进行了投票。这确实是一个Qt错误,如下所述:https://www.opengl.org/wiki/Core_Language_%28GLSL%29#Version第一个预处理程序指令应该是#version,但Qt为自己打破了这个要求,为lowp,mediump和highp添加了定义。 Nvidia驱动程序让你可以逃脱它,但英特尔没有(我不知道ATI'),所以负责的开发人员可能没有测试不同的硬件配置。

实际上,没有简单的解决方法,您可以更改Qt代码而不是添加这些定义(这是分发噩梦),或者不使用QOpenGLShader类,这意味着自己保留原始OpenGL对象。 / p>

答案 1 :(得分:0)

我不同意它是Qt中的一个错误。 如您粘贴的链接中所述: "如果#version指令没有出现在顶部,那么它假定为1.10,这几乎肯定不是你想要的。"

这就是Qt想要的,这也是OpenGL4上下文应该提供/允许的内容。 这是英特尔驱动程序中的一个错误:当您需要> 2.0上下文时,GLSL1.10版本的隐式回退不适用于英特尔驱动程序