- class QAbstractOpenGLFunctions#
QAbstractOpenGLFunctions
类是暴露每个OpenGL版本和配置文件的所有功能的类族的基础类。 更多...摘要#
方法#
def
__init__()
def
isInitialized()
def
owningContext()
虚拟方法#
注意:
本文档可能包含从C++自动翻译到Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建工单的方式通知我们。
详细描述#
不同平台上的OpenGL实现可以根据该平台上的OpenGL ABI链接一定数量的OpenGL函数。例如,在Microsoft Windows上,只能链接到OpenGL 1.1中的函数,这些函数在构建时进行链接。所有其他函数必须在运行时解决。解决这一问题的传统方法要么使用QOpenGLContext::getProcAddress(),要么使用QOpenGLFunctions。前者既麻烦又容易出错,意味着直接处理函数指针。后者仅公开OpenGL ES 2和桌面OpenGL中常见的函数。然而,对于编写实际OpenGL应用程序,许多新的OpenGL功能非常有用。
Qt现在提供了一组类,所有这些类都从
QAbstractOpenGLFunctions
继承,通过对应的成员函数公开每个核心OpenGL函数。有一个用于OpenGL版本和配置文件的每个有效组合的类。每个类都遵循以下命名约定QOpenGLFunctions_<MAJOR VERSION>_<MINOR VERSION>[_PROFILE]
对于OpenGL 1.0到3.0的版本,没有配置文件,导致以下类出现
QOpenGLFunctions_1_0
QOpenGLFunctions_1_1
QOpenGLFunctions_1_2
QOpenGLFunctions_1_3
QOpenGLFunctions_1_4
QOpenGLFunctions_1_5
QOpenGLFunctions_2_0
QOpenGLFunctions_2_1
QOpenGLFunctions_3_0
其中每个类都从
QAbstractOpenGLFunctions
继承。OpenGL 3.1移除了许多已废弃的函数,导致了更加简单且通用的API。
OpenGL 3.2引入了配置文件的概念。目前为OpenGL定义了两个配置文件:核心和兼容性。
核心配置文件不包括OpenGL 3.1中删除的任何函数。兼容性配置文件包括与相同版本的OpenGL核心配置文件中的所有函数以及OpenGL 3.1中删除的所有函数。因此,兼容性配置文件类允许使用新的OpenGL功能,同时也允许您继续使用您的旧OpenGL代码。对于新的OpenGL代码,应首选核心配置文件。
请注意,一些供应商(尤其是Apple)没有实现兼容性配置文件。因此,如果您希望针对macOS上的新OpenGL功能进行开发,那么您应确保通过QSurfaceFormat::setProfile()请求核心配置文件上下文。
Qt为所有版本和核心及兼容性配置文件的组合提供类。OpenGL 3.1到4.3版本的类为
QOpenGLFunctions_3_1
QOpenGLFunctions_3_2_Core
QOpenGLFunctions_3_2_Compatibility
QOpenGLFunctions_3_3_Core
QOpenGLFunctions_3_3_Compatibility
QOpenGLFunctions_4_0_Core
QOpenGLFunctions_4_0_Compatibility
QOpenGLFunctions_4_1_Core
QOpenGLFunctions_4_1_Compatibility
QOpenGLFunctions_4_2_Core
QOpenGLFunctions_4_2_Compatibility
QOpenGLFunctions_4_3_Core
QOpenGLFunctions_4_3_Compatibility
其中每个类都从
QAbstractOpenGLFunctions
继承。可以使用
get()
从对应于正在使用的OpenGL版本和配置文件的类对象中获取一个指向的指针。如果以这种方式获得,请注意QOpenGLContext保留了对象的所有权。这样做是为了该实例可以被缓存和共享。在使用任何公开的OpenGL函数之前,您必须确保对象已解析OpenGL函数的函数指针。这只需要在每个实例中使用initializeOpenGLFunctions()执行一次。初始化后,此对象可被用于调用对应版本和配置文件的任意OpenGL函数。请注意,initializeOpenGLFunctions()在某些情况下可能会失败,因此请检查返回值。可能导致初始化失败的情况是,您有一个包含不在当前用于解析函数指针的上下文中的函数的版本或配置文件的函数对象。
如果您仅使用函数对象,则如果您尝试使用不包含在该版本和配置文件中的函数,将在编译时出现错误。这显然比在运行时出现未定义的行为更容易调试。
另请参阅
- __init__()#
构造一个
QAbstractOpenGLFunctions
对象。- initializeOpenGLFunctions()#
- 返回类型:
布尔类型
- isInitialized()#
- 返回类型:
布尔类型
- owningContext()#
- 返回类型:
- setOwningContext(context)#
- 参数:
context -
QOpenGLContext