diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-08-07 07:47:31 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-08-07 08:33:30 +0200 |
commit | fd64e870fad0e619704e79689f20645760dbdc0e (patch) | |
tree | e5ef1654a217bf82f0bb3549d1c8f1762f1a9f25 /src/render/renderers/opengl/renderer/renderview.cpp | |
parent | 44470868450c440ca874ba585e2b71dfc8e89f1d (diff) | |
parent | 8af94d9a048f7d26a8137c3c51dcf47605fcf4b6 (diff) |
Merge "Merge remote-tracking branch 'qt-gerrit/dev' into wip/refactor"
Diffstat (limited to 'src/render/renderers/opengl/renderer/renderview.cpp')
-rw-r--r-- | src/render/renderers/opengl/renderer/renderview.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/render/renderers/opengl/renderer/renderview.cpp b/src/render/renderers/opengl/renderer/renderview.cpp index ebb1ee7ab..5845fe147 100644 --- a/src/render/renderers/opengl/renderer/renderview.cpp +++ b/src/render/renderers/opengl/renderer/renderview.cpp @@ -656,10 +656,7 @@ QVector<RenderCommand *> RenderView::buildDrawRenderCommands(const QVector<Entit RenderPass *pass = passData.pass; if (pass->hasRenderStates()) { command->m_stateSet = new RenderStateSet(); - addToRenderStateSet(command->m_stateSet, pass->renderStates(), m_manager->renderStateManager()); - - // Merge per pass stateset with global stateset - // so that the local stateset only overrides + addUniqueStatesToRenderStateSet(command->m_stateSet, pass->renderStates(), m_manager->renderStateManager()); if (m_stateSet != nullptr) command->m_stateSet->merge(m_stateSet); command->m_changeCost = m_renderer->defaultRenderState()->changeCost(command->m_stateSet); @@ -779,15 +776,26 @@ QVector<RenderCommand *> RenderView::buildComputeRenderCommands(const QVector<En // 1 RenderCommand per RenderPass pass on an Entity with a Mesh for (const RenderPassParameterData &passData : renderPassData) { // Add the RenderPass Parameters - ParameterInfoList globalParameters = passData.parameterInfo; + RenderCommand *command = new RenderCommand(); RenderPass *pass = passData.pass; - parametersFromParametersProvider(&globalParameters, m_manager->parameterManager(), pass); - RenderCommand *command = new RenderCommand(); + if (pass->hasRenderStates()) { + command->m_stateSet = new RenderStateSet(); + addUniqueStatesToRenderStateSet(command->m_stateSet, pass->renderStates(), m_manager->renderStateManager()); + + // Merge per pass stateset with global stateset + // so that the local stateset only overrides + if (m_stateSet != nullptr) + command->m_stateSet->merge(m_stateSet); + command->m_changeCost = m_renderer->defaultRenderState()->changeCost(command->m_stateSet); + } + command->m_type = RenderCommand::Compute; command->m_workGroups[0] = std::max(m_workGroups[0], computeJob->x()); command->m_workGroups[1] = std::max(m_workGroups[1], computeJob->y()); command->m_workGroups[2] = std::max(m_workGroups[2], computeJob->z()); + + ParameterInfoList globalParameters = passData.parameterInfo; setShaderAndUniforms(command, pass, globalParameters, |