本页内容

QSurfaceFormat Class

QSurfaceFormat 类表示QSurface 的格式。更多内容...

头文件: #include <QSurfaceFormat>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

公共类型

enum FormatOption { StereoBuffers, DebugContext, DeprecatedFunctions, ResetNotification, ProtectedContent }
flags FormatOptions
enum OpenGLContextProfile { NoProfile, CoreProfile, CompatibilityProfile }
enum RenderableType { DefaultRenderableType, OpenGL, OpenGLES, OpenVG }
enum SwapBehavior { DefaultSwapBehavior, SingleBuffer, DoubleBuffer, TripleBuffer }

公共函数

QSurfaceFormat()
QSurfaceFormat(QSurfaceFormat::FormatOptions options)
QSurfaceFormat(const QSurfaceFormat &other)
~QSurfaceFormat()
int alphaBufferSize() const
int blueBufferSize() const
const QColorSpace &colorSpace() const
int depthBufferSize() const
int greenBufferSize() const
bool hasAlpha() const
int majorVersion() const
int minorVersion() const
QSurfaceFormat::FormatOptions options() const
QSurfaceFormat::OpenGLContextProfile profile() const
int redBufferSize() const
QSurfaceFormat::RenderableType renderableType() const
int samples() const
void setAlphaBufferSize(int size)
void setBlueBufferSize(int size)
(since 6.0) void setColorSpace(const QColorSpace &colorSpace)
void setDepthBufferSize(int size)
void setGreenBufferSize(int size)
void setMajorVersion(int major)
void setMinorVersion(int minor)
void setOption(QSurfaceFormat::FormatOption option, bool on = true)
void setOptions(QSurfaceFormat::FormatOptions options)
void setProfile(QSurfaceFormat::OpenGLContextProfile profile)
void setRedBufferSize(int size)
void setRenderableType(QSurfaceFormat::RenderableType type)
void setSamples(int numSamples)
void setStencilBufferSize(int size)
void setStereo(bool enable)
void setSwapBehavior(QSurfaceFormat::SwapBehavior behavior)
void setSwapInterval(int interval)
void setVersion(int major, int minor)
int stencilBufferSize() const
bool stereo() const
QSurfaceFormat::SwapBehavior swapBehavior() const
int swapInterval() const
bool testOption(QSurfaceFormat::FormatOption option) const
std::pair<int, int> version() const
QSurfaceFormat &operator=(const QSurfaceFormat &other)

静态公共成员

QSurfaceFormat defaultFormat()
void setDefaultFormat(const QSurfaceFormat &format)
bool operator!=(const QSurfaceFormat &lhs, const QSurfaceFormat &rhs)
bool operator==(const QSurfaceFormat &lhs, const QSurfaceFormat &rhs)

详细说明

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

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

成员类型文档

enum QSurfaceFormat::FormatOption
flags 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::CompatibilityProfile2早期 OpenGL 版本中的功能可用。

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

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

另请参阅 setBlueBufferSize()。

const QColorSpace &QSurfaceFormat::colorSpace() const

返回颜色空间。

另请参阅 setColorSpace()。

[static] QSurfaceFormat QSurfaceFormat::defaultFormat()

返回全局默认表面格式。

当未调用setDefaultFormat()时,该对象为通过默认构造函数构造的QSurfaceFormat 。

另请参阅 setDefaultFormat()。

int QSurfaceFormat::depthBufferSize() const

返回深度缓冲区的大小。

另请参阅 setDepthBufferSize()。

int QSurfaceFormat::greenBufferSize() const

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

另请参阅 setGreenBufferSize()。

bool QSurfaceFormat::hasAlpha() const

如果透明度缓冲区大小大于零,则返回true 。

这意味着该曲面可用于实现按像素计算的半透明效果。

int QSurfaceFormat::majorVersion() const

返回 OpenGL 的主版本号。

默认版本为 2.0。

另请参阅 setMajorVersion()。

int QSurfaceFormat::minorVersion() const

返回 OpenGL 的次版本号。

另请参阅 setMinorVersion()。

QSurfaceFormat::FormatOptions QSurfaceFormat::options() const

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

另请参阅 setOption()、setOptions() 和testOption()。

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通道中设置所需的size 位。

另请参阅 alphaBufferSize()。

void QSurfaceFormat::setBlueBufferSize(int size)

在颜色缓冲区的蓝色通道中,通过位设置所需的size 值。

另请参阅 blueBufferSize()。

[since 6.0] void QSurfaceFormat::setColorSpace(const QColorSpace &colorSpace)

设置首选的colorSpace 。

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

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

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

该函数在 Qt 6.0 中引入。

另请参阅 colorSpace()。

[static] void QSurfaceFormat::setDefaultFormat(const QSurfaceFormat &format)

设置全局默认表面format 。

QOpenGLContext 、QWindow 、QOpenGLWidget 以及类似类默认使用此格式。

可以通过使用相关类自身的 setFormat() 函数,按实例逐个覆盖该格式。 不过,在应用程序启动时一次性为所有窗口设置格式通常更为方便。此外,在需要共享上下文的情况下,这也能保证正确的行为,因为通过此函数设置格式可确保所有上下文和表面(即使是 Qt 内部创建的)都将使用相同的格式。

另请参阅 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 ` 为真,则设置格式选项 `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)

设置所需的major 和minor 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()。

std::pair<int, int> QSurfaceFormat::version() const

返回一个表示 OpenGL 版本的 std::pair<int, int>。

适用于版本检查,例如 format.version() >= std::pair(3, 2)

另请参阅 setVersion()。

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

将other 分配给此对象。

相关非成员

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

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

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

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

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.