QRhiGraphicsPipeline Class
图形管道状态资源。更多内容...
| 头文件: | #include <rhi/qrhi.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS GuiPrivate) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
| qmake: | QT += gui-private |
| 自: | Qt 6.6 |
| 继承自: | QRhiResource |
公共类型
(since 6.6) struct | StencilOpState |
(since 6.6) struct | TargetBlend |
| enum | BlendFactor { Zero, One, SrcColor, OneMinusSrcColor, DstColor, …, OneMinusSrc1Alpha } |
| enum | BlendOp { Add, Subtract, ReverseSubtract, Min, Max } |
| flags | ColorMask |
| enum | ColorMaskComponent { R, G, B, A } |
| enum | CompareOp { Never, Less, Equal, LessOrEqual, Greater, …, Always } |
| enum | CullMode { None, Front, Back } |
| enum | Flag { UsesBlendConstants, UsesStencilRef, UsesScissor, CompileShadersWithDebugInfo, UsesShadingRate, UsesIndirectDraws } |
| flags | Flags |
| enum | FrontFace { CCW, CW } |
| enum | PolygonMode { Fill, Line } |
| enum | StencilOp { StencilZero, Keep, Replace, IncrementAndClamp, DecrementAndClamp, …, DecrementAndWrap } |
| enum | Topology { Triangles, TriangleStrip, TriangleFan, Lines, LineStrip, …, Patches } |
公共函数
| const QRhiShaderStage * | cbeginShaderStages() const |
| const QRhiGraphicsPipeline::TargetBlend * | cbeginTargetBlends() const |
| const QRhiShaderStage * | cendShaderStages() const |
| const QRhiGraphicsPipeline::TargetBlend * | cendTargetBlends() const |
| virtual bool | create() = 0 |
| QRhiGraphicsPipeline::CullMode | cullMode() const |
| int | depthBias() const |
| QRhiGraphicsPipeline::CompareOp | depthOp() const |
| QRhiGraphicsPipeline::Flags | flags() const |
| QRhiGraphicsPipeline::FrontFace | frontFace() const |
(since 6.11) bool | hasDepthClamp() const |
| bool | hasDepthTest() const |
| bool | hasDepthWrite() const |
| bool | hasStencilTest() const |
| float | lineWidth() const |
(since 6.7) int | multiViewCount() const |
| int | patchControlPointCount() const |
| QRhiGraphicsPipeline::PolygonMode | polygonMode() const |
| QRhiRenderPassDescriptor * | renderPassDescriptor() const |
| int | sampleCount() const |
| void | setCullMode(QRhiGraphicsPipeline::CullMode mode) |
| void | setDepthBias(int bias) |
(since 6.11) void | setDepthClamp(bool enable) |
| void | setDepthOp(QRhiGraphicsPipeline::CompareOp op) |
| void | setDepthTest(bool enable) |
| void | setDepthWrite(bool enable) |
| void | setFlags(QRhiGraphicsPipeline::Flags f) |
| void | setFrontFace(QRhiGraphicsPipeline::FrontFace f) |
| void | setLineWidth(float width) |
(since 6.7) void | setMultiViewCount(int count) |
| void | setPatchControlPointCount(int count) |
| void | setPolygonMode(QRhiGraphicsPipeline::PolygonMode mode) |
| void | setRenderPassDescriptor(QRhiRenderPassDescriptor *desc) |
| void | setSampleCount(int s) |
| void | setShaderResourceBindings(QRhiShaderResourceBindings *srb) |
| void | setShaderStages(std::initializer_list<QRhiShaderStage> list) |
| void | setShaderStages(InputIterator first, InputIterator last) |
| void | setSlopeScaledDepthBias(float bias) |
| void | setStencilBack(const QRhiGraphicsPipeline::StencilOpState &state) |
| void | setStencilFront(const QRhiGraphicsPipeline::StencilOpState &state) |
| void | setStencilReadMask(quint32 mask) |
| void | setStencilTest(bool enable) |
| void | setStencilWriteMask(quint32 mask) |
| void | setTargetBlends(std::initializer_list<QRhiGraphicsPipeline::TargetBlend> list) |
| void | setTargetBlends(InputIterator first, InputIterator last) |
| void | setTopology(QRhiGraphicsPipeline::Topology t) |
| void | setVertexInputLayout(const QRhiVertexInputLayout &layout) |
| QRhiShaderResourceBindings * | shaderResourceBindings() const |
| const QRhiShaderStage * | shaderStageAt(qsizetype index) const |
| qsizetype | shaderStageCount() const |
| float | slopeScaledDepthBias() const |
| QRhiGraphicsPipeline::StencilOpState | stencilBack() const |
| QRhiGraphicsPipeline::StencilOpState | stencilFront() const |
| quint32 | stencilReadMask() const |
| quint32 | stencilWriteMask() const |
| const QRhiGraphicsPipeline::TargetBlend * | targetBlendAt(qsizetype index) const |
| qsizetype | targetBlendCount() const |
| QRhiGraphicsPipeline::Topology | topology() const |
| QRhiVertexInputLayout | vertexInputLayout() const |
重新实现的公共函数
| virtual QRhiResource::Type | resourceType() const override |
详细描述
表示一个图形管道。这在底层原生图形 API 中具体对应什么,因情况而异。在存在管道对象概念的地方(例如 Vulkan),QRhi 后端将在调用create() 时创建此类对象。 在其他情况下,例如 OpenGL 中,QRhiGraphicsPipeline 可能仅收集各种状态,而create() 的主要任务是设置相应的着色器程序,但会将检查任何请求状态的操作推迟到稍后。
与所有QRhiResource 子类一样,这里采用两阶段初始化模式:通过设置器(例如setDepthTest())设置的任何值,只有在调用create() 之后才会生效。一旦 QRhiGraphicsPipeline 通过create() 初始化完成,请避免更改任何值。若要更改某些状态,请设置新值并再次调用create()。 但是,这实际上会释放所有底层原生资源并创建新的资源。因此,这可能是一项耗时且开销较大的操作。建议采用的方法是创建多个具有不同状态的管道,并在录制渲染通道时使用switch between them 。
注意: 必须设置 着色器阶段。至少必须有一个阶段,并且必须包含顶点阶段。
注意: 必须设置 着色器资源绑定。在调用create()时,所引用的QRhiShaderResourceBindings 必须已调用过create()。与没有绑定的QRhiShaderResourceBindings 关联也是有效的,只要任何阶段中的着色器都不依赖任何资源即可。 使用未指定任何实际资源的QRhiShaderResourceBindings 对象(即绑定点对应的缓冲区、纹理等均设置为nullptr )也是有效的,只要在记录渲染通道时,通过setShaderResources()设置了layout-compatible QRhiShaderResourceBindings ,该对象为所有绑定指定了资源。
注意: 必须设置渲 染通道描述符。要获取可传递给setRenderPassDescriptor() 的QRhiRenderPassDescriptor ,请使用QRhiTextureRenderTarget::newCompatibleRenderPassDescriptor() 或QRhiSwapChain::newCompatibleRenderPassDescriptor()。
注意: 必须设置 顶点输入布局。
注意: sampleCount() 的默认值为 1,且必须与渲染目标的颜色、深度和模板附件的采样数相匹配。
注意: 深度测试 、深度写入和模板测试默认处于禁用状态。面剔除模式默认为不进行剔除。
注意: stencilReadMask() 和stencilWriteMask() 均适用于两个面。它们默认值均为 0xFF。
使用示例
图形管线的所有设置都有默认值,这些默认值可能适用于许多应用程序。因此,创建图形管线的最简示例如下。此示例假设顶点着色器在输入位置 0 处接收一个vec3 position 输入。利用QRhiShaderResourceBindings 和QRhiRenderPassDescriptor 对象,加上顶点阶段和片段阶段的QShader 集合,可以像这样创建一个管线:
QRhiShaderResourceBindings *srb;
QRhiRenderPassDescriptor *rpDesc;
QShader vs, fs;
// ...
QRhiVertexInputLayout inputLayout;
inputLayout.setBindings({ { 3 * sizeof(float) } });
inputLayout.setAttributes({ { 0, 0, QRhiVertexInputAttribute::Float3, 0 } });
QRhiGraphicsPipeline *ps = rhi->newGraphicsPipeline();
ps->setShaderStages({ { QRhiShaderStage::Vertex, vs }, { QRhiShaderStage::Fragment, fs } });
ps->setVertexInputLayout(inputLayout);
ps->setShaderResourceBindings(srb);
ps->setRenderPassDescriptor(rpDesc);
if (!ps->create()) { error(); }上述代码创建了一个管道对象,该对象对许多设置和状态使用默认值。例如,它将采用Triangles 拓扑,不进行背面剔除,禁用混合但启用所有四个通道的颜色写入,禁用深度测试/写入,并禁用模板操作。
注意:这是一个 兼容性保障有限的 RHI API,详情请参阅QRhi 。
另请参阅 QRhiCommandBuffer 和QRhi 。
成员类型文档
enum QRhiGraphicsPipeline::BlendFactor
指定混合系数
| 常量 | 值 |
|---|---|
QRhiGraphicsPipeline::Zero | 0 |
QRhiGraphicsPipeline::One | 1 |
QRhiGraphicsPipeline::SrcColor | 2 |
QRhiGraphicsPipeline::OneMinusSrcColor | 3 |
QRhiGraphicsPipeline::DstColor | 4 |
QRhiGraphicsPipeline::OneMinusDstColor | 5 |
QRhiGraphicsPipeline::SrcAlpha | 6 |
QRhiGraphicsPipeline::OneMinusSrcAlpha | 7 |
QRhiGraphicsPipeline::DstAlpha | 8 |
QRhiGraphicsPipeline::OneMinusDstAlpha | 9 |
QRhiGraphicsPipeline::ConstantColor | 10 |
QRhiGraphicsPipeline::OneMinusConstantColor | 11 |
QRhiGraphicsPipeline::ConstantAlpha | 12 |
QRhiGraphicsPipeline::OneMinusConstantAlpha | 13 |
QRhiGraphicsPipeline::SrcAlphaSaturate | 14 |
QRhiGraphicsPipeline::Src1Color | 15 |
QRhiGraphicsPipeline::OneMinusSrc1Color | 16 |
QRhiGraphicsPipeline::Src1Alpha | 17 |
QRhiGraphicsPipeline::OneMinusSrc1Alpha | 18 |
enum QRhiGraphicsPipeline::BlendOp
指定混合运算
| 常量 | 值 |
|---|---|
QRhiGraphicsPipeline::Add | 0 |
QRhiGraphicsPipeline::Subtract | 1 |
QRhiGraphicsPipeline::ReverseSubtract | 2 |
QRhiGraphicsPipeline::Min | 3 |
QRhiGraphicsPipeline::Max | 4 |
enum QRhiGraphicsPipeline::ColorMaskComponent
flags QRhiGraphicsPipeline::ColorMask
用于指定颜色写入掩码的标志值
| 常量 | 值 |
|---|---|
QRhiGraphicsPipeline::R | 1 << 0 |
QRhiGraphicsPipeline::G | 1 << 1 |
QRhiGraphicsPipeline::B | 1 << 2 |
QRhiGraphicsPipeline::A | 1 << 3 |
ColorMask 类型是QFlags<ColorMaskComponent> 的 typedef 定义。它存储 ColorMaskComponent 值的按“或”运算组合。
enum QRhiGraphicsPipeline::CompareOp
指定深度或模板比较函数
| 常量 | 值 | 描述 |
|---|---|---|
QRhiGraphicsPipeline::Never | 0 | |
QRhiGraphicsPipeline::Less | 1 | (深度比较的默认值) |
QRhiGraphicsPipeline::Equal | 2 | |
QRhiGraphicsPipeline::LessOrEqual | 3 | |
QRhiGraphicsPipeline::Greater | 4 | |
QRhiGraphicsPipeline::NotEqual | 5 | |
QRhiGraphicsPipeline::GreaterOrEqual | 6 | |
QRhiGraphicsPipeline::Always | 7 | (模板的默认设置) |
enum QRhiGraphicsPipeline::CullMode
指定剔除模式
| 常量 | 值 | 描述 |
|---|---|---|
QRhiGraphicsPipeline::None | 0 | 不进行剔除(默认) |
QRhiGraphicsPipeline::Front | 1 | 剔除前表面 |
QRhiGraphicsPipeline::Back | 2 | 剔除背面 |
enum QRhiGraphicsPipeline::Flag
flags QRhiGraphicsPipeline::Flags
用于描述管道动态状态的标志值及其他选项。视口始终是动态的。
| 常量 | 值 | 描述 |
|---|---|---|
QRhiGraphicsPipeline::UsesBlendConstants | 1 << 0 | 表示将通过QRhiCommandBuffer::setBlendConstants()设置混合颜色常量 |
QRhiGraphicsPipeline::UsesStencilRef | 1 << 1 | 表示将通过 `QRhiCommandBuffer::setStencilRef()` 设置混合颜色常量 |
QRhiGraphicsPipeline::UsesScissor | 1 << 2 | 表示将通过QRhiCommandBuffer::setScissor()设置剪切矩形 |
QRhiGraphicsPipeline::CompileShadersWithDebugInfo | 1 << 3 | 请求以启用调试信息的方式编译着色器。这仅在涉及从源代码进行运行时着色器编译时才相关,且仅当底层基础设施支持此功能时才适用。具体来说,这与 Vulkan 和 SPIR-V 无关,因为 GLSL 到 SPIR-V 的编译不会在运行时进行。 另一方面,以 Direct3D 和 HLSL 为例,这里有多种选择:当QShader 包包含预编译的字节码(DXBC )时,应通过生成.qsb 文件的工具请求调试信息,这与 Vulkan 和 SPIR-V 的情况类似。 然而,当预生成的或运行时生成的QShader 包中包含 HLSL 源代码时,编译的第一阶段(HLSL 源代码到中间格式)也会在运行时进行,且会考虑此标志。 调试信息对于RenderDoc等工具尤为重要,因为它允许在调查渲染管线以及执行顶点或片段着色器调试时查看原始源代码。 |
QRhiGraphicsPipeline::UsesShadingRate | 1 << 4 | 表示将通过QRhiCommandBuffer::setShadingRate() 设置每次绘制(每条管道)的着色速率值。如果不指定此标志却仍调用 setShadingRate(),可能会根据底层图形 API 产生不同且出乎意料的结果。 |
QRhiGraphicsPipeline::UsesIndirectDraws (since Qt 6.12) | 1 << 5 | 表示该管道将用于间接绘制调用(QRhiCommandBuffer::drawIndirect() 或QRhiCommandBuffer::drawIndexedIndirect())。设置此标志可让 Metal 后端在 GPU 驱动的渲染中使用间接命令缓冲区(ICB),这能显著降低大量绘制操作时的 CPU 开销。 在使用间接渲染时,即使不设置此标志,功能依然正常,但在 Metal 上可能会导致性能不佳。此标志对其他后端没有影响。 |
Flags 类型是QFlags<Flag> 的 typedef 定义。它存储了 Flag 值的按“或”运算组合。
enum QRhiGraphicsPipeline::FrontFace
指定前面的绕组顺序
| 常量 | 值 | 描述 |
|---|---|---|
QRhiGraphicsPipeline::CCW | 0 | 逆时针(默认) |
QRhiGraphicsPipeline::CW | 1 | 顺时针 |
enum QRhiGraphicsPipeline::PolygonMode
指定多边形光栅化模式
多边形模式(Metal 中的“三角形填充模式”,D3D 中的“填充模式”)指定了渲染多边形时使用的填充模式。多边形可以绘制为实心(填充),也可以绘制为线框(线条)。
对非填充多边形模式的支持是可选的,并通过QRhi::NonFillPolygonMode 特性进行标识。在 OpenGL ES 以及某些 Vulkan 实现中,该特性很可能被报告为不支持,这意味着无法使用“填充”以外的值。
| 常量 | 值 | 描述 |
|---|---|---|
QRhiGraphicsPipeline::Fill | 0 | 多边形的内部被填充(默认) |
QRhiGraphicsPipeline::Line | 1 | 多边形的边界边被绘制为线段。 |
enum QRhiGraphicsPipeline::StencilOp
指定模板运算
| 常量 | 值 | 描述 |
|---|---|---|
QRhiGraphicsPipeline::StencilZero | 0 | |
QRhiGraphicsPipeline::Keep | 1 | (默认) |
QRhiGraphicsPipeline::Replace | 2 | |
QRhiGraphicsPipeline::IncrementAndClamp | 3 | |
QRhiGraphicsPipeline::DecrementAndClamp | 4 | |
QRhiGraphicsPipeline::Invert | 5 | |
QRhiGraphicsPipeline::IncrementAndWrap | 6 | |
QRhiGraphicsPipeline::DecrementAndWrap | 7 |
enum QRhiGraphicsPipeline::Topology
指定基本拓扑
| 常量 | 值 | 描述 |
|---|---|---|
QRhiGraphicsPipeline::Triangles | 0 | (默认) |
QRhiGraphicsPipeline::TriangleStrip | 1 | |
QRhiGraphicsPipeline::TriangleFan | 2 | (仅在支持QRhi::TriangleFanTopology 时可用) |
QRhiGraphicsPipeline::Lines | 3 | |
QRhiGraphicsPipeline::LineStrip | 4 | |
QRhiGraphicsPipeline::Points | 5 | |
QRhiGraphicsPipeline::Patches | 6 | (仅在支持QRhi::Tessellation 时可用,且要求管道中包含细分阶段) |
成员函数文档
const QRhiShaderStage *QRhiGraphicsPipeline::cbeginShaderStages() const
返回一个指向着色器阶段列表中第一个项的常量迭代器。
const QRhiGraphicsPipeline::TargetBlend *QRhiGraphicsPipeline::cbeginTargetBlends() const
返回一个指向渲染目标混合设置列表中第一个项的常量迭代器。
const QRhiShaderStage *QRhiGraphicsPipeline::cendShaderStages() const
返回一个常量迭代器,该迭代器指向着色器阶段列表中最后一个项的下一位置。
const QRhiGraphicsPipeline::TargetBlend *QRhiGraphicsPipeline::cendTargetBlends() const
返回一个常量迭代器,该迭代器指向渲染目标混合设置列表中最后一个项之后的下一个位置。
[pure virtual] bool QRhiGraphicsPipeline::create()
创建相应的本机图形资源。如果由于之前调用了 create() 且未调用相应的destroy(),导致已存在相关资源,则会先隐式调用destroy()。
成功时返回true ,图形操作失败时返回false 。无论返回值如何,调用destroy() 总是安全的。
注意: 根据底层图形 API 的不同,这 可能是一项开销较大的操作,尤其是在将着色器从源代码或中间字节码格式编译/优化为 GPU 自有指令集时。 在适用情况下,QRhi 后端会自动配置相关的非持久化机制来加速此过程,例如Vulkan后端会自动创建VkPipelineCache ,以在应用程序生命周期内提高数据复用效率。
注意:驱动程序 还可能针对着色器和管道数据采用各种持久性(基于磁盘)缓存策略,这些策略对 Qt 而言是不可见的,且超出 Qt 的控制范围。 在某些情况下,根据图形 API 和QRhi 后端的不同,QRhi 中提供了用于手动管理此类缓存的机制,允许检索一个可序列化的 blob,该 blob 随后可在应用程序的未来运行中重新加载,以确保更快的管道创建时间。详情请参阅QRhi::pipelineCacheData() 和QRhi::setPipelineCacheData()。 另请注意,当使用由更高层级的 Qt XML 框架(如Qt Quick )管理的QRhi 实例时,此类基于磁盘的缓存可能会自动处理,例如QQuickWindow 默认使用基于磁盘的管道缓存(该缓存是驱动程序级缓存之外的补充)。
QRhiGraphicsPipeline::CullMode QRhiGraphicsPipeline::cullMode() const
返回当前设置的面剔除模式。
另请参阅 setCullMode()。
int QRhiGraphicsPipeline::depthBias() const
返回当前设置的深度偏置。
另请参阅 setDepthBias()。
QRhiGraphicsPipeline::CompareOp QRhiGraphicsPipeline::depthOp() const
返回深度比较函数。
另请参阅 ` setDepthOp()`。
QRhiGraphicsPipeline::Flags QRhiGraphicsPipeline::flags() const
返回当前设置的标志。
另请参阅 setFlags()。
QRhiGraphicsPipeline::FrontFace QRhiGraphicsPipeline::frontFace() const
返回当前设置的前面模式。
另请参阅 setFrontFace()。
[since 6.11] bool QRhiGraphicsPipeline::hasDepthClamp() const
如果启用了深度限制,则返回 true。
该函数自 Qt 6.11 起引入。
bool QRhiGraphicsPipeline::hasDepthTest() const
如果深度测试已启用,则返回 true。
bool QRhiGraphicsPipeline::hasDepthWrite() const
如果深度写入已启用,则返回 true。
bool QRhiGraphicsPipeline::hasStencilTest() const
如果启用了模板测试,则返回 true。
float QRhiGraphicsPipeline::lineWidth() const
返回当前设置的线宽。默认值为 1.0f。
另请参阅 setLineWidth()。
[since 6.7] int QRhiGraphicsPipeline::multiViewCount() const
返回视图计数。默认值为 0,表示不进行多视图渲染。
该函数于 Qt 6.7 中引入。
另请参阅 setMultiViewCount()。
int QRhiGraphicsPipeline::patchControlPointCount() const
返回当前设置的补丁控制点数量。
另请参阅 setPatchControlPointCount()。
QRhiGraphicsPipeline::PolygonMode QRhiGraphicsPipeline::polygonMode() const
返回多边形模式。
另请参阅 setPolygonMode()。
QRhiRenderPassDescriptor *QRhiGraphicsPipeline::renderPassDescriptor() const
返回当前设置的QRhiRenderPassDescriptor 。
另请参阅 setRenderPassDescriptor()。
[override virtual] QRhiResource::Type QRhiGraphicsPipeline::resourceType() const
重写了:QRhiResource::resourceType() const。
返回资源类型。
int QRhiGraphicsPipeline::sampleCount() const
返回当前设置的采样数。1 表示不进行多采样抗锯齿。
另请参阅 setSampleCount()。
void QRhiGraphicsPipeline::setCullMode(QRhiGraphicsPipeline::CullMode mode)
设置指定的面剔除mode 。
另请参阅 cullMode()。
void QRhiGraphicsPipeline::setDepthBias(int bias)
设置深度bias 。默认值为0。
另请参阅 depthBias()。
[since 6.11] void QRhiGraphicsPipeline::setDepthClamp(bool enable)
当enable 为true时,启用深度钳位。启用深度钳位后,原本会被近裁剪平面或远裁剪平面裁剪的基元将被栅格化,其深度值被限制在指定深度范围内。当禁用此功能(默认设置)时,此类基元将被裁剪。
注意: 当报告QRhi::DepthClamp 功能不被支持时,此 设置将被忽略。
该函数自 Qt 6.11 起引入。
另请参阅 hasDepthClamp()。
void QRhiGraphicsPipeline::setDepthOp(QRhiGraphicsPipeline::CompareOp op)
设置深度比较函数op 。
另请参阅 depthOp()。
void QRhiGraphicsPipeline::setDepthTest(bool enable)
根据enable 启用或禁用深度检测。默认情况下,深度检测和深度数据的写入均被禁用。
另请参阅 hasDepthTest() 和setDepthWrite()。
void QRhiGraphicsPipeline::setDepthWrite(bool enable)
根据enable ,控制将深度数据写入深度缓冲区。默认情况下,此功能处于禁用状态。深度写入通常与深度测试一起启用。
注意: 在未启用深度测试的情况下启用 深度写入可能会导致结果与预期不符,应尽量避免。
另请参阅 hasDepthWrite() 和setDepthTest()。
void QRhiGraphicsPipeline::setFlags(QRhiGraphicsPipeline::Flags f)
设置标志f 。
另请参阅 flags()。
void QRhiGraphicsPipeline::setFrontFace(QRhiGraphicsPipeline::FrontFace f)
设置前视图模式f 。
另请参阅 frontFace()。
void QRhiGraphicsPipeline::setLineWidth(float width)
设置行width 。如果运行时报告不支持QRhi::WideLines 功能,则除1.0f以外的值将被忽略。
另请参阅 lineWidth()。
[since 6.7] void QRhiGraphicsPipeline::setMultiViewCount(int count)
设置视图count 以启用多视图渲染。默认值为0,表示不进行多视图渲染。count 必须大于等于2才能触发多视图渲染。
仅当报告支持多视图渲染(MultiView feature )时,多视图渲染功能才可用。渲染目标必须是 2D 纹理数组,且该渲染目标的颜色附件必须设置相同的count 值。
有关多视图渲染的更多详细信息,请参阅QRhiColorAttachment::setMultiViewCount()。
该函数于 Qt 6.7 中引入。
另请参阅 multiViewCount()、QRhi::MultiView 以及QRhiColorAttachment::setMultiViewCount()。
void QRhiGraphicsPipeline::setPatchControlPointCount(int count)
将补丁控制点数量设置为count 。默认值为 3。仅当拓扑设置为Patches 时才使用此选项。
另请参阅 patchControlPointCount()。
void QRhiGraphicsPipeline::setPolygonMode(QRhiGraphicsPipeline::PolygonMode mode)
设置多边形mode 。默认值为 Fill。
另请参阅 polygonMode() 和QRhi::NonFillPolygonMode 。
void QRhiGraphicsPipeline::setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
与指定的QRhiRenderPassDescriptor 相关联desc 。
另请参阅 renderPassDescriptor()。
void QRhiGraphicsPipeline::setSampleCount(int s)
设置采样数。s 的典型值为 1、4 或 8。管道必须始终与渲染目标兼容,即采样数必须一致。
另请参阅 sampleCount() 和QRhi::supportedSampleCounts()。
void QRhiGraphicsPipeline::setShaderResourceBindings(QRhiShaderResourceBindings *srb)
与描述资源绑定布局以及资源本身(QRhiBuffer 、QRhiTexture )的srb 相关联。后者是可选的,因为在创建管道时仅需考虑布局。因此,此处传入的srb 可以不指定实际的缓冲区或纹理对象(nullptr ),只要在记录绘制调用之前,通过setShaderResources()绑定了另一个layout-compatible QRhiShaderResourceBindings 即可。
另请参阅 shaderResourceBindings()。
void QRhiGraphicsPipeline::setShaderStages(std::initializer_list<QRhiShaderStage> list)
设置着色器阶段的list 。
template <typename InputIterator> void QRhiGraphicsPipeline::setShaderStages(InputIterator first, InputIterator last)
根据迭代器first 和last 设置着色器阶段列表。
void QRhiGraphicsPipeline::setSlopeScaledDepthBias(float bias)
设置斜率缩放深度bias 。默认值为 0。
另请参阅 slopeScaledDepthBias()。
void QRhiGraphicsPipeline::setStencilBack(const QRhiGraphicsPipeline::StencilOpState &state)
为背面设置模板测试state 。
另请参阅 stencilBack()。
void QRhiGraphicsPipeline::setStencilFront(const QRhiGraphicsPipeline::StencilOpState &state)
为前表面设置模板测试state 。
另请参阅 stencilFront()。
void QRhiGraphicsPipeline::setStencilReadMask(quint32 mask)
设置模板读取值mask 。默认值为0xFF。
另请参阅 stencilReadMask()。
void QRhiGraphicsPipeline::setStencilTest(bool enable)
根据enable 启用或禁用模板测试。默认情况下,此功能处于禁用状态。
另请参阅 hasStencilTest()。
void QRhiGraphicsPipeline::setStencilWriteMask(quint32 mask)
设置模板写入值mask 。默认值为0xFF。
另请参阅 stencilWriteMask()。
void QRhiGraphicsPipeline::setTargetBlends(std::initializer_list<QRhiGraphicsPipeline::TargetBlend> list)
设置渲染目标混合设置的list 。这是一个列表,因为当使用多个渲染目标时(即包含多个QRhiColorAttachment 的QRhiTextureRenderTarget ),每个渲染目标(颜色附件)都需要一个TargetBlend 结构。
默认情况下,会设置一个通过默认构造函数生成的TargetBlend 。
另请参阅 QRhi::MaxColorAttachments 。
template <typename InputIterator> void QRhiGraphicsPipeline::setTargetBlends(InputIterator first, InputIterator last)
根据迭代器first 和last 设置渲染目标混合设置列表。
void QRhiGraphicsPipeline::setTopology(QRhiGraphicsPipeline::Topology t)
设置基元拓扑结构t 。
另请参阅 topology()。
void QRhiGraphicsPipeline::setVertexInputLayout(const QRhiVertexInputLayout &layout)
指定顶点输入layout 。
另请参阅 vertexInputLayout()。
QRhiShaderResourceBindings *QRhiGraphicsPipeline::shaderResourceBindings() const
返回当前关联的QRhiShaderResourceBindings 对象。
另请参阅 setShaderResourceBindings()。
const QRhiShaderStage *QRhiGraphicsPipeline::shaderStageAt(qsizetype index) const
返回位于指定index 处的着色器阶段。
qsizetype QRhiGraphicsPipeline::shaderStageCount() const
返回该管道中的着色器阶段数量。
float QRhiGraphicsPipeline::slopeScaledDepthBias() const
返回当前设置的斜率缩放深度偏移量。
另请参阅 setSlopeScaledDepthBias()。
QRhiGraphicsPipeline::StencilOpState QRhiGraphicsPipeline::stencilBack() const
返回当前针对背面面的模板测试状态。
另请参阅 setStencilBack()。
QRhiGraphicsPipeline::StencilOpState QRhiGraphicsPipeline::stencilFront() const
返回当前前面的模板测试状态。
另请参阅 setStencilFront()。
quint32 QRhiGraphicsPipeline::stencilReadMask() const
返回当前的模板读取掩码。
另请参阅 ` setStencilReadMask()`。
quint32 QRhiGraphicsPipeline::stencilWriteMask() const
返回当前的模板写入掩码。
另请参阅 setStencilWriteMask()。
const QRhiGraphicsPipeline::TargetBlend *QRhiGraphicsPipeline::targetBlendAt(qsizetype index) const
返回指定index 处的渲染目标混合设置。
qsizetype QRhiGraphicsPipeline::targetBlendCount() const
返回渲染目标的混合设置数量。
QRhiGraphicsPipeline::Topology QRhiGraphicsPipeline::topology() const
返回当前设置的基元拓扑。
另请参阅 setTopology()。
QRhiVertexInputLayout QRhiGraphicsPipeline::vertexInputLayout() const
返回当前设置的顶点输入布局规范。
另请参阅 setVertexInputLayout()。
© 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.