gpt4 book ai didi

qt - Qt 5 中的 OpenGL 与 QOpenGL/QtOpenGL : differences and limitations?

转载 作者:行者123 更新时间:2023-12-02 05:07:20 25 4
gpt4 key购买 nike

因为有两种方式使用 OpenGL Qt 5 ( QOpenGL/QtOpenGL 包装器和常规 OpenGL API),我想知道每一个都有什么限制。有人可以告诉我 QOpenGL 包装器是否有我应该注意的限制吗?

我问这个问题的原因是因为我不想开始使用 QOpenGL 包装器并发现我无法使用 OpenGL API 的全部功能。有没有人对这两者都有经验,并且可以在功能、性能和易用性方面提供一些提示?

最佳答案

I don't want to start using QOpenGL wrapper and find out that I can't use the full capability of OpenGL API

Qt 5.0 的 OpenGL 包装器构建在 OpenGL ES(嵌入式系统)2.0 规范之上,该规范本质上是桌面 OpenGL 3.0 规范的淡化版本。 Qt 选择此规范是为了促进可移植性,因为除了几乎所有现代 PC 都支持之外,它还受到移动平台的广泛支持。如果您选择使用 Qt 包装器,则必须解决 OpenGL ES 2.0 规范的缺点,这些缺点在很大程度上分为以下几类:

  1. 没有固定功能的管道功能。 (无转换堆栈、glBeginglEndglLightf 等)
  2. 不支持高级 OpenGL 3+ 功能或仅支持扩展。 (纹理缓冲区对象、计算着色器、原子加载存储纹理、曲面分割着色器、统一缓冲区对象等...)
  3. 缺乏某些纹理格式(整数纹理、图像纹理等)
  4. GLSL 语法和语义存在细微差别。 (缺少布局限定符、通过 highplowp 声明等实现的数据精度要求......)
  5. 缺乏一些便捷的方法。 (glBlitFramebufferglMultiDrawArraysglDrawRangeElements 等...)

有关 OpenGL ES 2.0 规范的完整说明,请查看 here .

但是,缺乏功能并不意味着 Qt 包装器无法完成您所需要的功能。尽管 OpenGL ES 2.0 缺少许多有用的功能,但您仍然可以完成完整桌面 OpenGL 规范允许的 99% 的功能。如果您决定通过自定义包装器使用桌面 OpenGL 规范,Qt 仍然可以通过使用 QGLFormat 类来管理桌面 OpenGL 上下文的创建和窗口化。

请记住,如果您决定使用桌面 OpenGL 包装器,并在 Qt 应用程序中使用它们,Qt 提供的某些类可能会干扰您的自定义包装器的操作。例如,QGLWidget 上的 QPainter 操作可能会利用 OpenGL ES 规范的功能,并可能会干扰包装器对象的操作。

就我个人而言,我更喜欢使用自定义 OpenGL 包装器,因为我非常喜欢桌面 OpenGL 规范,因为功能集定义得更好,并且它们提供了更多选项来解决问题。另一方面,Qt 5 提供了一些绝对出色的架构,用于使用 OpenGL ES 制作快速、强大的动态用户界面。 (通过QtQuick 2和QML)

哪种 API 最适合您的需求本质上取决于您是否面向嵌入式或移动平台(在这种情况下您被迫使用 OpenGL ES),以及您是否愿意牺牲额外的开发时间来编写和维护自定义 OpenGL 3+ wrapper 。

关于qt - Qt 5 中的 OpenGL 与 QOpenGL/QtOpenGL : differences and limitations?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671816/

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