UBO layer bind optimization (#2335)
This commit is contained in:
@@ -93,8 +93,7 @@ void TileLayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters)
|
||||
const auto debugGroupRender = parameters.encoder->createDebugGroup(label_render.c_str());
|
||||
#endif
|
||||
|
||||
bindUniformBuffers();
|
||||
|
||||
bool bindUBOs = false;
|
||||
visitDrawables([&](gfx::Drawable& drawable) {
|
||||
if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) {
|
||||
return;
|
||||
@@ -121,10 +120,17 @@ void TileLayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters)
|
||||
context.setStencilMode(drawable.getEnableStencil() ? stencilMode3d : gfx::StencilMode::disabled());
|
||||
}
|
||||
|
||||
if (!bindUBOs) {
|
||||
bindUniformBuffers();
|
||||
bindUBOs = true;
|
||||
}
|
||||
|
||||
drawable.draw(parameters);
|
||||
});
|
||||
|
||||
unbindUniformBuffers();
|
||||
if (bindUBOs) {
|
||||
unbindUniformBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
void TileLayerGroupGL::bindUniformBuffers() const {
|
||||
@@ -178,8 +184,7 @@ void LayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters) {
|
||||
return;
|
||||
}
|
||||
|
||||
bindUniformBuffers();
|
||||
|
||||
bool bindUBOs = false;
|
||||
visitDrawables([&](gfx::Drawable& drawable) {
|
||||
if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) {
|
||||
return;
|
||||
@@ -193,10 +198,17 @@ void LayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters) {
|
||||
tweaker->execute(drawable, parameters);
|
||||
}
|
||||
|
||||
if (!bindUBOs) {
|
||||
bindUniformBuffers();
|
||||
bindUBOs = true;
|
||||
}
|
||||
|
||||
drawable.draw(parameters);
|
||||
});
|
||||
|
||||
unbindUniformBuffers();
|
||||
if (bindUBOs) {
|
||||
unbindUniformBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
void LayerGroupGL::bindUniformBuffers() const {
|
||||
|
||||
@@ -46,8 +46,7 @@ void LayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) {
|
||||
auto& context = static_cast<Context&>(parameters.context);
|
||||
auto& renderPass = static_cast<RenderPass&>(*parameters.renderPass);
|
||||
|
||||
bindUniformBuffers(renderPass);
|
||||
|
||||
bool bindUBOs = false;
|
||||
visitDrawables([&](gfx::Drawable& drawable) {
|
||||
if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) {
|
||||
return;
|
||||
@@ -57,10 +56,17 @@ void LayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) {
|
||||
tweaker->execute(drawable, parameters);
|
||||
}
|
||||
|
||||
if (!bindUBOs) {
|
||||
bindUniformBuffers(renderPass);
|
||||
bindUBOs = true;
|
||||
}
|
||||
|
||||
drawable.draw(parameters);
|
||||
});
|
||||
|
||||
unbindUniformBuffers(renderPass);
|
||||
if (bindUBOs) {
|
||||
unbindUniformBuffers(renderPass);
|
||||
}
|
||||
}
|
||||
|
||||
void LayerGroup::bindUniformBuffers(RenderPass& renderPass) const noexcept {
|
||||
|
||||
@@ -120,8 +120,7 @@ void TileLayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) {
|
||||
parameters.renderTileClippingMasks(stencilTiles);
|
||||
}
|
||||
|
||||
bindUniformBuffers(renderPass);
|
||||
|
||||
bool bindUBOs = false;
|
||||
visitDrawables([&](gfx::Drawable& drawable) {
|
||||
if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) {
|
||||
return;
|
||||
@@ -139,10 +138,17 @@ void TileLayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) {
|
||||
renderPass.setDepthStencilState(state);
|
||||
}
|
||||
|
||||
if (!bindUBOs) {
|
||||
bindUniformBuffers(renderPass);
|
||||
bindUBOs = true;
|
||||
}
|
||||
|
||||
drawable.draw(parameters);
|
||||
});
|
||||
|
||||
unbindUniformBuffers(renderPass);
|
||||
if (bindUBOs) {
|
||||
unbindUniformBuffers(renderPass);
|
||||
}
|
||||
}
|
||||
|
||||
void TileLayerGroup::bindUniformBuffers(RenderPass& renderPass) const noexcept {
|
||||
|
||||
Reference in New Issue
Block a user