Hoist symbol dynamic UBO out of drawable loop (#1884)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -101,6 +101,10 @@ void SymbolLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParamete
|
||||
propertiesUpdated = false;
|
||||
}
|
||||
|
||||
const SymbolDynamicUBO dynamicUBO = {/*.fade_change=*/parameters.symbolFadeChange,
|
||||
/*.pad1=*/0,
|
||||
/*.pad2=*/{0, 0}};
|
||||
|
||||
layerGroup.visitDrawables([&](gfx::Drawable& drawable) {
|
||||
if (!drawable.getTileID() || !drawable.getData()) {
|
||||
return;
|
||||
@@ -120,6 +124,12 @@ void SymbolLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParamete
|
||||
iconPropertiesUpdated = false;
|
||||
}
|
||||
|
||||
if (!dynamicBuffer) {
|
||||
dynamicBuffer = parameters.context.createUniformBuffer(&dynamicUBO, sizeof(dynamicUBO));
|
||||
} else {
|
||||
dynamicBuffer->update(&dynamicUBO, sizeof(dynamicUBO));
|
||||
}
|
||||
|
||||
// from RenderTile::translatedMatrix
|
||||
const auto translate = isText ? evaluated.get<style::TextTranslate>() : evaluated.get<style::IconTranslate>();
|
||||
const auto anchor = isText ? evaluated.get<style::TextTranslateAnchor>()
|
||||
@@ -171,13 +181,10 @@ void SymbolLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParamete
|
||||
/*.pad=*/{0},
|
||||
};
|
||||
|
||||
const SymbolDynamicUBO dynamicUBO = {/*.fade_change=*/parameters.symbolFadeChange,
|
||||
/*.pad1=*/0,
|
||||
/*.pad2=*/{0, 0}};
|
||||
|
||||
auto& uniforms = drawable.mutableUniformBuffers();
|
||||
uniforms.createOrUpdate(idSymbolDrawableUBOName, &drawableUBO, context);
|
||||
uniforms.createOrUpdate(idSymbolDynamicUBOName, &dynamicUBO, context);
|
||||
|
||||
uniforms.addOrReplace(idSymbolDynamicUBOName, dynamicBuffer);
|
||||
uniforms.addOrReplace(idSymbolDrawablePaintUBOName, isText ? textPaintBuffer : iconPaintBuffer);
|
||||
|
||||
#if MLN_RENDER_BACKEND_METAL
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
private:
|
||||
gfx::UniformBufferPtr textPaintBuffer;
|
||||
gfx::UniformBufferPtr iconPaintBuffer;
|
||||
gfx::UniformBufferPtr dynamicBuffer;
|
||||
|
||||
bool textPropertiesUpdated = false;
|
||||
bool iconPropertiesUpdated = false;
|
||||
|
||||
Reference in New Issue
Block a user