-2
|
MichaÅ Kalinowski · 技术社区 · 7 年前 |
![]() |
1
2
你的问题格式不正确。没有什么可以阻止您在OpenGL中使用Qt 和 使用OpenGL扩展。 您可以使用Qt来管理OpenGL窗口,同时使用带有扩展的直接OpenGL命令进行渲染。你不是 必修的 使用Qt的OpenGL界面在OpenGL窗口中进行渲染。 Qt不提供“额外的opengl功能”它 不能 提供“额外的opengl功能”它不是OpenGL的一部分,因此它不能使OpenGL功能神奇地出现。 没有用于鼠标、键盘、游戏板或任何其他Qt处理的东西的OpenGL扩展。Qt的窗口功能和OpenGL扩展是 两件完全不同的事 彻底地 正交;没有什么可以阻止您同时使用Qt+OpenGL和OpenGL扩展。
除非你停下来
你自己
. 看,Qt有这个OpenGL抽象层。这是一组围绕OpenGL的包装类:
如果你的问题是是否直接使用Qt+OpenGL而不是使用Qt的OpenGL抽象层,那是另一回事。 第一个问题是Qt的抽象层绑定到OpenGL . 当它 偶尔地 不是“扩展”; 核心功能 .
例如,不能将整数用于Qt抽象的顶点属性。
The
请注意,这只是一个功能。Qt没有作为核心桌面OpenGL一部分的包装类支持的其他内容(这不是一个全面的列表):
此外,由于Qt的抽象是围绕ES 2.0进行的,所以它不关心核心OpenGL上下文。例如,它仍然具有非缓冲顶点属性(
因此,如果您想要实际使用核心桌面OpenGL功能,那么Qt抽象层就不存在了。
例如(这是我个人最讨厌的事),
OpenGL buffer objects
没有打印。执行异步
类似地,出于众所周知的原因,他们将顶点属性规范函数(等效于
这就是Qt抽象层的最大问题。如果你能在这些限制下生活,请随意使用它。对于制作桌面OpenGL应用程序的人来说,它们可能限制太多。 |
![]() |
2
2
你(OP)在评论中对另一个答案写道:
我认为您完全误解了什么是OpenGL扩展以及它们是如何工作的。OpenGL扩展允许向OpenGL添加新功能(可能实际包含在更高的核心版本中)和/或公开特定于供应商的功能,如访问仅适用于非常特定的窄范围GPU的特殊GPU功能。 另一方面,Qt为以可移植方式处理操作系统细节的应用程序提供了一个框架。Qt和OpenGL彼此完全正交 没有什么 OpenGL扩展在任何方面都类似于Qt。Qt有一个OpenGL集成模块,如果你要求的话,它还将加载OpenGL扩展;但这并不意味着它是一个“Qt”的东西。 |
![]() |
3
2
我认为你没有抓住重点。OpenGL(包括提供普通OpenGL所没有的一些额外功能的扩展)“只是”一个用于渲染2D和3D的图形库。另一方面,Qt要多得多。OpenGL本身只提供渲染。你甚至不能用它创建一个窗口(就像你在Windows/Linux中使用的那样)。为了添加任何类型的用户输入处理,您需要Qt(和许多其他类似框架)提供的额外层-集成到操作系统的窗口管理器中,处理鼠标和键盘事件等。Qt也支持OpenGL扩展,因此如果您想使用它们,就不必丢弃它们。 对于OpenGL任务(有或没有系统支持的扩展),您是否需要Qt,这需要您自己决定。Qt确实提供了许多很好的功能,这些功能将帮助您实现出色的OpenGL交互,但是这是一个巨大的开销,并且取决于您的目标系统,您可能需要使用更小的框架,具有更小的内存(包括所有库文件的持久存储)占用空间和CPU使用率。其他流行的选择有GLFW、freeglut和SDL/SDL2,所有这些都至少提供了启动和运行应用程序的基础知识(窗口创建和鼠标/键盘处理)。 |
![]() |
DELI · 如何在QML中修改TableView数据? 2 年前 |
![]() |
joshp · Pysides6列从设置向后跨距 2 年前 |
![]() |
MingMing · C++在MaCOS 11上显示权限对话框 2 年前 |
![]() |
K.Mulier · PyQt5:如何将QObject移动到主线程? 6 年前 |