Как работает RenderPass в Qt3D - PullRequest
0 голосов
/ 01 июля 2018

В данном коде, что такое использование 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
                }
            ]
        }

1 Ответ

0 голосов
/ 06 июля 2018

Ключи фильтра должны совпадать с соответствующими ключами фильтра в RenderPassFilter на диаграмме кадров.

Например, если вы хотите иметь граф кадров, который рендерится только с шейдерами, указанными в прямом проходе, вы можете написать что-то вроде:

RenderSettings{ 
    activeFrameGraph: Viewport {
        RenderPassFilter {
            matchAny: [FilterKey { name: "pass"; value: "forward" }]
            RenderSurfaceSelector {
                ClearBuffers {
                }
            }
        }
    }
}

Вы можете иметь несколько фильтров RenderPassFilters в одном графике кадра. Это позволяет вам визуализировать одну и ту же сцену с разными шейдерами, например, чтобы показать сцену с разными эффектами в разных видовых экранах или нарисовать разные текстуры и смешать их вместе в последнем проходе.

...