QSurfaceFormat类

QSurfaceFormat类代表QSurface的格式。更多...

头文件 #include <QSurfaceFormat>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公开类型

枚举ColorSpace { DefaultColorSpace, sRGBColorSpace }
枚举FormatOption { StereoBuffers, DebugContext, DeprecatedFunctions, ResetNotification, ProtectedContent }
标志FormatOptions
枚举OpenGLContextProfile { NoProfile, CoreProfile, CompatibilityProfile }
枚举RenderableType { DefaultRenderableType, OpenGL, OpenGLES, OpenVG }
枚举SwapBehavior { DefaultSwapBehavior, SingleBuffer, DoubleBuffer, TripleBuffer }

公开函数

QSurfaceFormat()
QSurfaceFormat(QSurfaceFormat::FormatOptions options)
QSurfaceFormat(const QSurfaceFormat &other)
~QSurfaceFormat()
intalphaBufferSize() const
intblueBufferSize() const
const QColorSpace &colorSpace() const
intdepthBufferSize() const
intgreenBufferSize() const
boolhasAlpha() const
intmajorVersion() const
intminorVersion() const
QSurfaceFormat::FormatOptionsoptions() const
QSurfaceFormat::OpenGLContextProfileprofile() const
intredBufferSize() const
QSurfaceFormat::RenderableTyperenderableType() const
intsamples() const
voidsetAlphaBufferSize(int size)
voidsetBlueBufferSize(int size)
(自6.0起) voidsetColorSpace(const QColorSpace &colorSpace)
voidsetDepthBufferSize(int size)
voidsetGreenBufferSize(int size)
voidsetMajorVersion(int major)
voidsetMinorVersion(int minor)
voidsetOption(QSurfaceFormat::FormatOption option, bool on = true)
voidsetOptions(QSurfaceFormat::FormatOptions options)
voidsetProfile(QSurfaceFormat::OpenGLContextProfile profile)
voidsetRedBufferSize(int size)
voidsetRenderableType(QSurfaceFormat::RenderableType type)
voidsetSamples(int numSamples)
voidsetStencilBufferSize(int size)
voidsetStereo(bool enable)
voidsetSwapBehavior(QSurfaceFormat::SwapBehavior behavior)
voidsetSwapInterval(int interval)
voidsetVersion(int major, int minor)
intstencilBufferSize() const
boolstereo() const
QSurfaceFormat::SwapBehaviorswapBehavior() const
intswapInterval() const
booltestOption(QSurfaceFormat::FormatOption option) const
QPair<int, int>version() const
QSurfaceFormat &operator=(const QSurfaceFormat &other)

静态公共成员

QSurfaceFormat默认格式()
voidsetDefaultFormat(const QSurfaceFormat &format)
booloperator!=(const QSurfaceFormat &lhs, const QSurfaceFormat &rhs)
booloperator==(const QSurfaceFormat &lhs, const QSurfaceFormat &rhs)

详细说明

格式包括颜色缓冲区的大小、红、绿、蓝色;alpha 缓冲区的大小;深度和模板缓冲区的大小;以及多采样每像素的样本数。此外,该格式还包含用于渲染的表面配置参数,例如OpenGL配置文件和版本,是否启用立体声缓冲区,以及交换行为。

注意:在解决上下文或窗口格式问题时,启用日志类别 qt.qpa.gl可能很有帮助。根据平台,当涉及到OpenGL初始化以及QSurfaceFormat映射到的本地视觉或帧缓冲区配置时,可能会打印有用的调试信息。

成员类型文档

枚举 QSurfaceFormat::ColorSpace

此枚举用于指定首选颜色空间,用于控制窗口的关联默认帧缓冲区是否能够执行指定的编码更新和混合而不是标准的线性操作。

常量描述
QSurfaceFormat::DefaultColorSpace0默认,未指定的颜色空间。
QSurfaceFormat::sRGBColorSpace1当平台支持 GL_ARB_framebuffer_sRGBGL_EXT_framebuffer_sRGB,并设置此值时,将创建具有具有sRGB功能的默认帧缓冲区的窗口。请注意,某些平台即使在未显式请求的情况下也可能返回具有具有sRGB功能的默认帧缓冲区的窗口。

枚举 QSurfaceFormat::FormatOption
标志 QSurfaceFormat::FormatOptions

此枚举包含用于与QSurfaceFormat一起使用的格式选项。

常量描述
QSurfaceFormat::StereoBuffers0x0001用于请求在表面格式中使用立体声缓冲区。
QSurfaceFormat::DebugContext0x0002用于请求包含额外调试信息的调试上下文。
QSurfaceFormat::DeprecatedFunctions0x0004用于请求在OpenGL上下文配置文件中包含已弃用的函数。如果不指定,则应获取不以支持功能标记为已弃用的向后兼容上下文。这需要OpenGL版本3.0或更高。
QSurfaceFormat::ResetNotification0x0008启用了有关OpenGL上下文重置的通知。然后可以通过上下文的isValid()函数查询状态。注意,不设置此标志不能保证上下文状态丢失永远不会发生。此外,某些实现可能会选择在不管此标志的情况下报告上下文丢失。支持动态启用上下文丢失监控的平台,例如,带WGL的Windows或带GLX的Linux/X11(xcb),将在每次调用makeCurrent()时监控状态。有关此内容的更多信息,请参阅isValid()。
QSurfaceFormat::ProtectedContent0x0010启用对受保护内容的访问。这允许GPU操作受保护资源(表面、缓冲区、纹理),例如DRM保护的视频内容。目前仅适用于EGL。

FormatOptions类型是QFlags<FormatOption>的typedef。它存储了FormatOption值的或组合。

enum QSurfaceFormat::OpenGLContextProfile

此枚举用于指定OpenGL上下文配置文件,并结合QSurfaceFormat::setMajorVersion()和QSurfaceFormat::setMinorVersion()。

配置文件在OpenGL 3.2及以上版本中公开,用于在受限的核心配置文件和可能包含已弃用支持功能兼容配置文件之间进行选择。

请注意,核心配置文件可能仍然包含在更高版本中被弃用和计划删除的功能。要获取对在设置OpenGL版本中核心配置文件的已弃用功能的访问,可以使用QSurfaceFormat格式选项QSurfaceFormat::DeprecatedFunctions

常量描述
QSurfaceFormat::NoProfile0OpenGL版本低于3.2。对于3.2及更高版本与此类似为CoreProfile。
QSurfaceFormat::CoreProfile1OpenGL版本3.0中弃用的功能不可用。
QSurfaceFormat::CompatibilityProfile2OpenGL较早期版本中的功能可用。

enum QSurfaceFormat::RenderableType

此枚举指定表面使用的渲染后端。

常量描述
QSurfaceFormat::DefaultRenderableType0x0默认,未指定的渲染方法
QSurfaceFormat::OpenGL0x1桌面OpenGL渲染
QSurfaceFormat::OpenGLES0x2OpenGL ES 2.0渲染
QSurfaceFormat::OpenVG0x4开放矢量图形渲染

enum QSurfaceFormat::SwapBehavior

此枚举由QSurfaceFormat用于指定表面的交换行为。交换行为主要对应用程序而言是透明的,但它影响渲染延迟和吞吐量等因素。

常量描述
QSurfaceFormat::DefaultSwapBehavior0平台默认的、未指定的交换行为
QSurfaceFormat::SingleBuffer1用于请求单缓冲区,这可能导致在将OpenGL渲染直接输出到屏幕而不使用中间离屏缓冲区时出现闪烁。
QSurfaceFormat::DoubleBuffer2这在桌面平台上通常是默认的交换行为,包括一个后备缓冲区和前端缓冲区。渲染是在后备缓冲区进行,然后将后备缓冲区和前端缓冲区交换,或者根据实现情况将后备缓冲区的内容复制到前端缓冲区。
QSurfaceFormat::TripleBuffer3这种交换行为有时被用于降低在渲染速率刚好足以与屏幕刷新率相适应时跳过帧的风险。根据平台的不同,也可能由于改进的管道行为而稍微更有效地使用GPU。但三缓冲需要额外的内存使用和延迟,具体支持取决于底层数据平台。

成员函数文档

QSurfaceFormat::QSurfaceFormat()

构造一个默认初始化的QSurfaceFormat。

注意:默认请求OpenGL 2.0,因为这提供了跨平台和OpenGL实现的最高级可移植性。

QSurfaceFormat::QSurfaceFormat(QSurfaceFormat::FormatOptions options)

使用给定的格式options构造一个QSurfaceFormat。

QSurfaceFormat::QSurfaceFormat(const QSurfaceFormat &other)

构造一个other的副本。

[noexcept] QSurfaceFormat::~QSurfaceFormat()

销毁 QSurfaceFormat

int QSurfaceFormat::alphaBufferSize() const

获取颜色缓冲区alpha通道的位数。

另请参阅setAlphaBufferSize

int QSurfaceFormat::blueBufferSize() const

获取颜色缓冲区blue通道的位数。

另请参阅setBlueBufferSize

const QColorSpace &QSurfaceFormat::colorSpace() const

返回颜色空间。

另请参阅setColorSpace

[static] QSurfaceFormat QSurfaceFormat::defaultFormat()

返回全局默认表面格式。

当未调用setDefaultFormat()时,这是一个默认构造的QSurfaceFormat

另请参阅setDefaultFormat

int QSurfaceFormat::depthBufferSize() const

返回深度缓冲区的尺寸。

另请参阅setDepthBufferSize

int QSurfaceFormat::greenBufferSize() const

获取颜色缓冲区green通道的位数。

另请参阅setGreenBufferSize

bool QSurfaceFormat::hasAlpha() const

如果_alpha_缓冲区大小大于零,则返回true

这意味着该表面可能用于像素级半透明效果。

int QSurfaceFormat::majorVersion() const

返回主要的OpenGL版本。

默认版本是2.0。

另请参阅setMajorVersion

int QSurfaceFormat::minorVersion() const

返回次要OpenGL版本。

另请参阅setMinorVersion

QSurfaceFormat::FormatOptions QSurfaceFormat::options() const

返回当前设置的格式选项。

另请参阅setOptionsetOptionstestOption

QSurfaceFormat::OpenGLContextProfile QSurfaceFormat::profile() const

获取配置的OpenGL上下文配置文件。

如果请求的OpenGL版本小于3.2,则忽略此设置。

另请参阅setProfile

int QSurfaceFormat::redBufferSize() const

获取颜色缓冲区红色通道的位数大小。

另请参阅setRedBufferSize

QSurfaceFormat::RenderableType QSurfaceFormat::renderableType() const

获取可渲染的类型。

在桌面OpenGL、OpenGL ES和OpenVG之间进行选择。

另请参阅setRenderableType

int QSurfaceFormat::samples() const

当启用多采样时,返回每像素的样本数,或者当禁用多采样时返回-1。默认返回值是-1

另请参阅setSamples

void QSurfaceFormat::setAlphaBufferSize(int size)

设置颜色缓冲区_alpha_通道所需的位数大小。

另请参阅alphaBufferSize

void QSurfaceFormat::setBlueBufferSize(int size)

设置颜色缓冲区蓝色通道所需的位数大小。

另请参阅blueBufferSize

[自6.0开始] void QSurfaceFormat::setColorSpace(const QColorSpace &colorSpace)

设置首选的色彩空间

例如,这允许在支持该功能的平台上请求默认帧缓冲区支持sRGB的窗口。

注意:当请求的色彩空间不受平台支持时,请求将被忽略。在创建窗口后查询 QSurfaceFormat 以验证色彩空间请求能否得到满足。

注意:此设置控制窗口的默认帧缓冲区是否能在给定的色彩空间中进行更新和混合。它本身并不改变应用程序的输出。应用程序的渲染代码仍然必须通过适当的OpenGL调用选择启用在给定色彩空间中进行更新和混合,而不是使用标准线性操作。

此函数是在 Qt 6.0 中引入的。

参见:colorSpace()。

[静态] void QSurfaceFormat::setDefaultFormat(const QSurfaceFormat &format)

设置全局默认表面格式。

此格式默认用于 QOpenGLContextQWindowQOpenGLWidget 等类似类。

可以使用相关类的自身 setFormat() 函数以实例方式覆盖此格式。然而,在应用程序启动时一次性为所有窗口设置格式往往更方便。它还确保在需要共享上下文的情况下正确行为,因为通过此函数设置格式可保证所有上下文和表面(包括 Qt 内部创建的),都将使用相同的格式。

注意:当设置 Qt::AA_ShareOpenGLContexts 时,强烈建议在该函数之前构建 QGuiApplicationQApplication。否则 format 将不会应用到全局共享上下文,因此可能导致后续上下文共享问题时出现问题。

参见:defaultFormat()。

void QSurfaceFormat::setDepthBufferSize(int size)

设置最小深度缓冲区大小为 size

参见:depthBufferSize()。

void QSurfaceFormat::setGreenBufferSize(int size)

设置色彩缓冲区绿色通道所需的 size 比特。

参见:greenBufferSize()。

void QSurfaceFormat::setMajorVersion(int major)

设置所需的 major OpenGL 版本。

参见:majorVersion()。

void QSurfaceFormat::setMinorVersion(int minor)

设置所需的 minor OpenGL 版本。

默认版本是2.0。

参见:minorVersion()。

void QSurfaceFormat::setOption(QSurfaceFormat::FormatOption option, bool on = true)

如果 on 为 true,则设置格式选项 option;否则,清除选项。

为验证选项是否得到尊重,在创建表面/上下文后比较实际的格式与请求的格式。

参见:setOptions(), options 以及 testOption()。

void QSurfaceFormat::setOptions(QSurfaceFormat::FormatOptions options)

设置格式选项为options

为验证选项是否得到尊重,在创建表面/上下文后比较实际的格式与请求的格式。

另请参阅options() 和 testOption

void QSurfaceFormat::setProfile(QSurfaceFormat::OpenGLContextProfile profile)

设置期望的OpenGL上下文profile

如果请求的OpenGL版本小于3.2,则忽略此设置。

另请参阅profile

void QSurfaceFormat::setRedBufferSize(int size)

设置颜色缓冲区红色通道期望的size位。

另请参阅redBufferSize

void QSurfaceFormat::setRenderableType(QSurfaceFormat::RenderableType type)

设置期望的可渲染type

在桌面OpenGL、OpenGL ES和OpenVG之间进行选择。

另请参阅renderableType

void QSurfaceFormat::setSamples(int numSamples)

当启用多采样时,设置每像素首选样本数到numSamples。默认情况下,多采样是禁用的。

另请参阅samples

void QSurfaceFormat::setStencilBufferSize(int size)

设置期望的模板缓冲区大小为size位。

另请参阅stencilBufferSize

void QSurfaceFormat::setStereo(bool enable)

如果enable为true,将启用立体缓冲区;否则禁用立体缓冲区。

默认情况下,立体缓冲区是禁用的。

立体缓冲区提供了额外的颜色缓冲区来生成左眼和右眼图像。

另请参阅stereo

void QSurfaceFormat::setSwapBehavior(QSurfaceFormat::SwapBehavior behavior)

设置表面的交换behavior

交换行为指定是否需要单缓冲、双缓冲或三缓冲。默认情况下,DefaultSwapBehavior给出了平台的默认交换行为。

另请参阅swapBehavior

void QSurfaceFormat::setSwapInterval(int interval)

设置首选的交换间隔。交换间隔指定在缓冲区交换之前显示的最小视频帧数。这可以用来将GL绘图与屏幕的垂直刷新同步。

interval值设置为0将关闭垂直刷新同步,任何大于0的值将打开垂直同步。将interval设置为更高的值,例如10,意味着每交换一次缓冲区之间有10次垂直扫描。

默认间隔是1。

更改交换间隔可能不被底层平台支持。在这种情况下,请求将被静默忽略。

另请参阅 swapInterval

void QSurfaceFormat::setVersion(int major, int minor)

设置所需的 majorminor OpenGL 版本。

默认版本是2.0。

另请参阅 version

int QSurfaceFormat::stencilBufferSize() const

返回束线缓冲区的大小(位)。

另请参阅 setStencilBufferSize

bool QSurfaceFormat::stereo() const

如果启用立体缓冲区,则返回 true;否则返回 false。立体缓冲区默认情况下是禁用的。

另请参阅 setStereo

QSurfaceFormat::SwapBehavior QSurfaceFormat::swapBehavior() const

返回配置的交换行为。

另请参阅 setSwapBehavior

int QSurfaceFormat::swapInterval() const

返回交换间隔。

另请参阅 setSwapInterval

bool QSurfaceFormat::testOption(QSurfaceFormat::FormatOption option) const

如果设置了格式选项 option,则返回 true;否则返回 false。

另请参阅 options

QPair<int, int> QSurfaceFormat::version() const

返回一个表示 OpenGL 版本的 QPair<int, int>。

对于版本检查很有用,例如 format.version() >= qMakePair(3, 2)

另请参阅 setVersion

QSurfaceFormat &QSurfaceFormat::operator=(const QSurfaceFormat &other)

other 赋值给此对象。

相关非成员函数

[noexcept] bool operator!=(const QSurfaceFormat &lhs, const QSurfaceFormat &rhs)

如果两个 QSurfaceFormat 对象 lhsrhs 的所有选项都相等,则返回 false;否则返回 true

[noexcept] bool operator==(const QSurfaceFormat &lhs, const QSurfaceFormat &rhs)

如果两个 QSurfaceFormat 对象 lhsrhs 的所有选项都相等,则返回 true

© 2024 Qt公司有限公司。本文档中包含的文档贡献是各自所有者的版权。提供的文档根据自由软件基金会发布的条款,受GNU自由文档许可(FDL)版本1.3的许可。Qt及其相关标志是Qt公司 Ltd.在芬兰以及其他国家和世界各地的商标。所有其他商标均为各自所有者的财产。