为 Qt5 指定 OpenGL 桌面而不是 ES

2023-12-11

我终于尝试使用着色器来理解着色器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)

我做了一些搜索并发现这个答案其中指出:

OpenGL ES 2.0 中片段着色器中的 fp 类型不存在默认精度。

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

我看到的 GL 版本字符串是OpenGL ES 2.0(角度2.1.0.8613f4946861)。 Fwiw,在同一台机器上的 Qt4 中,版本字符串是3.0.0 - 内部版本 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

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

在构造任何 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Qt5 指定 OpenGL 桌面而不是 ES 的相关文章

随机推荐

  • 使用 Visual AutoLayout 在 NSScrollView 中布局多个视图

    我需要显示内部垂直对齐的多个视图NSScrollView 我首先添加NSTableView and NSButton 我将它们垂直对齐NSTableView在顶部和NSButton在底部 我添加了NSTableview and NSButt
  • 使用以西班牙语显示日期名称的日期时间值设置 x 轴格式

    我有一系列关于天气的数据 在这种情况下 只有 14 天的温度 Plotly 可以很好地自动管理日期 但我无法更改日期的语言并设置 python 区域设置locale setlocale locale LC TIME es ES 不影响 Pl
  • 两个日期计算字段之间的值的 SQL SUM

    我有这个查询 它返回 null SELECT SUM sales as MAT from TABLE2 where Date1 between CONVERT VARCHAR 23 DATEADD MONTH 11 Date1 111 an
  • 比较本地文件与远程文件

    我有以下问题 我有一个本地 zip文件和一个 zip文件位于服务器上 我需要检查是否 zip服务器上的文件与本地的不一样 如果不是 我需要从服务器中提取新的 我的问题是如何在不从服务器下载文件并在本地比较它们的情况下比较它们 我可以在创建时
  • py2app 中的错误

    我正在一个简单的 test py 应用程序上测试 py2app 没有做任何特别的事情 python 3 6 py2app 0 14 当我发出以下命令时 它构建得很好 没有错误 python3 6 setup py py2app A 但当我启
  • 如何在列表框中实现保持?

    如果按住列表框 我想获取列表框索引 这是我的代码
  • 通过手动链接打开多个 Fancybox 画廊

    我尝试转换中提供的解决方案如何通过手动调用 html 中的画廊而不是通过 jquery 选项来打开 fancybox 为了将其应用到多个画廊 但无法使其正常运行 我拥有的是几个具有以下属性的链接 a href class open albu
  • 如何在react-native中使用FormData?

    你好 刚学会使用 js 和 React Native 我无法使用 FormData 它总是显示不受支持的 bodyinit 类型 我想发送文本而不是 JSON stringify 谁能帮我 谢谢 var data new FormData
  • 有没有办法放大 D3 力布局图?

    D3 具有力导向布局here 有没有办法给这个图添加缩放功能 目前 我能够捕获鼠标滚轮事件 但不太确定如何编写重绘函数本身 有什么建议么 var vis d3 select graph append svg svg call d3 beha
  • Java GridBagLayout自动化构建

    我使用 GridBagLayout 和 GridBagConstraints 设计了一个 GUI 它包含可变数量的行 每行都有几种可能的列布局之一 为了测试代码 我使用了不同颜色的面板 GUI 来说明每行和每列中所有单元格的位置和调整大小行
  • 如何打印base64 pdf?

    我从服务器收到要打印的 Base64 pdf 我一直在尝试以下方法 ajax type POST url url data blahblahblah success function data var printWindow window
  • 从 Python 脚本中请求 UAC 提升?

    我希望我的 Python 脚本能够在 Vista 上复制文件 当我从正常运行它时cmd exe窗口中 不会生成任何错误 但不会复制文件 如果我跑cmd exe 以管理员身份 然后运行我的脚本 它工作正常 这是有道理的 因为用户帐户控制 UA
  • 不启动回发

    我在 JBoss AS 7 1 1 上使用 JSF 2 1 7 和 Myfaces CODI 1 0 5 我的
  • 如何在画布上分层绘制图像?

    我有一个我使用的画布drawImage将一堆图像绘制到画布上 我想要的结果是 我希望我绘制的第一个图像位于第 1 层 下一个图像位于第 2 层 依此类推 到底发生了什么 图像被放置在随机层上 const images https attef
  • 如何更改表情符号的颜色?

    我有一个表情符号 我希望它是白色的 但是当我运行程序时它显示为红色 如何将其更改为白色 rating text rating textColor UIColorRGB ffffff The 以下答案解释了为什么您无法更改表情符号字符的颜色
  • 获取自定义控件的ID

    我有一个相当复杂的自定义控件 可以在任何给定的 XPage 上多次使用该控件 在控件中 我创建了几个 viewScope 变量 这些变量对于特定的自定义控件来说必须是唯一的 我想做类似 viewScope put customControl
  • Joomla 3 - 使用什么来代替 allocateRef?

    在我的项目中 我认为有这种方法 public function elegirSeleccionados this gt assignRef pagination this gt get pagination this gt assignRe
  • 根据概率选择获胜者的随机数

    想象一下 您有一组代表竞争对手及其获奖概率的哈希值 0 到 1 之间的浮点数 喜欢 name gt Adam prob gt 0 5 name gt Ben prob gt 1 0 name gt Chris prob gt 0 1 nam
  • 关于国家/地区更改 Ajax 更新 Woocommerce 中运输的结帐

    我正在寻找一种当客户在结帐页面上更改国家 地区时更新订单审核 运费 的方法 我想使用 jQuery 但wc checkout paramswc checkout params 已弃用 function custom checkbox che
  • 为 Qt5 指定 OpenGL 桌面而不是 ES

    我终于尝试使用着色器来理解着色器tutorial我发现 我决定从 Qt5 Windows 开始 因为我熟悉它并且可以专注于学习 GLSL 本身 我正在做的事情和教程之间的唯一区别是我正在使用QOpenGLWidget而不是一个QOpenGL