gpt4 book ai didi

c++ - 为 Qt5 指定 OpenGL Desktop 而不是 ES

转载 作者:行者123 更新时间:2023-11-30 04:49:26 39 4
gpt4 key购买 nike

我终于尝试使用 tutorial 围绕着色器进行思考我发现。我决定从 Qt5 (Windows) 开始,因为我熟悉它并且可以专注于学习 GLSL 本身。我正在做的事情和教程之间的唯一区别是我正在使用 QOpenGLWidget 而不是 QOpenGLWindow (我只有一个带有一个小部件的表单,没什么特别的)。

为了开始使用片段着色器,我在 Qt 中向我的项目添加了一个新的桌面(不是 ES)片段着色器,Qt 生成了以下着色器:

uniform sampler2D qt_Texture0;
varying vec4 qt_TexCoord0;

void main(void)
{
gl_FragColor = texture2D(qt_Texture0, qt_TexCoord0.st);
}

但是,当编译这个着色器时,它会产生这个错误:

QOpenGLShader::compile(Fragment): ERROR: 0:2: '' : No precision specified for (float)

我四处搜索了一下,找到了 this answer其中指出:

No default precision exists for fp types in fragment shaders in OpenGL ES 2.0.

据此,我的结论是我的应用程序使用的是 OpenGL ES 而不是 Desktop(否则它不会期望定义精度)。

我看到的 GL 版本字符串是 OpenGL ES 2.0 (ANGLE 2.1.0.8613f4946861)。 Fwiw,在同一台机器上的 Qt4 中,版本字符串是 3.0.0 - Build 9.17.10.4229

假设我的结论是正确的,我的问题是:如何配置应用程序以使用常规 OpenGL 而不是 OpenGL ES?


评论中关于将表面格式的可渲染类型设置为 OpenGL 的建议似乎很有希望,但它并不奏效。例如,如果我在小部件的构造函数中更改它:

View::View (QWidget *parent) :
QOpenGLWidget(parent),
...
{

QSurfaceFormat f = format();
qDebug() << "type was" << f.renderableType();

f.setRenderableType(QSurfaceFormat::OpenGL);
qDebug() << "type set to" << f.renderableType();

setFormat(f);
qDebug() << "type is now" << format().renderableType();

}

void View::initializeGL () {

qDebug() << __FUNCTION__ << "type is now" << this->format().renderableType();
...

}

问题仍然存在,输出为(0 = 默认,1 = OpenGL,2 = OpenGLES):

type was 0
type set to 1
type is now 1
initializeGL type is now 2

所以它似乎在构造函数和 initializeGL 之间的某个时刻被强制返回到 OpenGLES

在构造任何 GUI 对象之前(以及构造 QApplication 之前)设置默认表面格式时,我也观察到了类似的行为。

最佳答案

如果视频卡被列入黑名单(在编译 Qt 时在 ANGLE 配置中)或视频驱动程序不支持现代 OpenGL(即,如果你只有 Microsoft 提供的库存驱动程序)。

您可以强制应用程序使用 OpenGL 而不是角度,方法是添加:

QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);

在您的 main.cpp 文件中或通过将环境变量 QT_OPENGL 设置为“桌面”(不带引号)。您可以在此处找到更多详细信息:http://doc.qt.io/qt-5/windows-requirements.html

关于c++ - 为 Qt5 指定 OpenGL Desktop 而不是 ES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55399801/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com