在给定的代码中,RenderPass和filterKeys的用途是什么?
FilterKey {name:“ pass”;值:“阴影贴图”}
在上述声明中,谁使用这些名称和值?
Technique {
graphicsApiFilter {
api: GraphicsApiFilter.OpenGL
profile: GraphicsApiFilter.CoreProfile
majorVersion: 3
minorVersion: 2
}
renderPasses: [
RenderPass {
filterKeys: [ FilterKey { name: "pass"; value: "shadowmap" } ]
shaderProgram: ShaderProgram {
vertexShaderCode: loadSource("qrc:/shaders/shadowmap.vert")
fragmentShaderCode: loadSource("qrc:/shaders/shadowmap.frag")
}
renderStates: [
PolygonOffset { scaleFactor: 4; depthSteps: 4 },
DepthTest { depthFunction: DepthTest.Less }
]
},
RenderPass {
filterKeys: [ FilterKey { name : "pass"; value : "forward" } ]
shaderProgram: ShaderProgram {
vertexShaderCode: loadSource("qrc:/shaders/ads.vert")
fragmentShaderCode: loadSource("qrc:/shaders/ads.frag")
}
// no special render state set => use the default set of states
}
]
}
答案 0 :(得分:0)
过滤器键将需要与框架图中RenderPassFilter中的相应过滤器键匹配。
例如,如果您想要一个仅使用前向传递中指定的着色器进行渲染的框架图,则可以编写如下内容:
RenderSettings{
activeFrameGraph: Viewport {
RenderPassFilter {
matchAny: [FilterKey { name: "pass"; value: "forward" }]
RenderSurfaceSelector {
ClearBuffers {
}
}
}
}
}
在同一帧图中可以有多个RenderPassFilter。这样一来,您可以使用不同的着色器渲染同一场景,例如在不同的视口中显示具有不同效果的场景,或者绘制不同的纹理并在最终遍历中将它们融合在一起。