diff options
Diffstat (limited to 'src/mbgl/renderer/painter_symbol.cpp')
-rw-r--r-- | src/mbgl/renderer/painter_symbol.cpp | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/mbgl/renderer/painter_symbol.cpp b/src/mbgl/renderer/painter_symbol.cpp index 0538485824..5f59d6a8a6 100644 --- a/src/mbgl/renderer/painter_symbol.cpp +++ b/src/mbgl/renderer/painter_symbol.cpp @@ -23,7 +23,7 @@ void Painter::renderSDF(SymbolBucket &bucket, float sdfFontSize, std::array<float, 2> texsize, SDFShader& sdfShader, - void (SymbolBucket::*drawSDF)(SDFShader&)) + void (SymbolBucket::*drawSDF)(SDFShader&, gl::GLObjectStore&)) { mat4 vtxMatrix = translatedMatrix(matrix, styleProperties.translate, id, styleProperties.translateAnchor); @@ -49,7 +49,7 @@ void Painter::renderSDF(SymbolBucket &bucket, float fontScale = fontSize / sdfFontSize; matrix::scale(exMatrix, exMatrix, fontScale, fontScale, 1.0f); - config.program = sdfShader.program; + config.program = sdfShader.getID(); sdfShader.u_matrix = vtxMatrix; sdfShader.u_exmatrix = exMatrix; sdfShader.u_texsize = texsize; @@ -101,7 +101,7 @@ void Painter::renderSDF(SymbolBucket &bucket, sdfShader.u_buffer = (haloOffset - styleProperties.haloWidth / fontScale) / sdfPx; setDepthSublayer(0); - (bucket.*drawSDF)(sdfShader); + (bucket.*drawSDF)(sdfShader, glObjectStore); } // Then, we draw the text/icon over the halo @@ -122,7 +122,7 @@ void Painter::renderSDF(SymbolBucket &bucket, sdfShader.u_buffer = (256.0f - 64.0f) / 256.0f; setDepthSublayer(1); - (bucket.*drawSDF)(sdfShader); + (bucket.*drawSDF)(sdfShader, glObjectStore); } } @@ -137,22 +137,6 @@ void Painter::renderSymbol(SymbolBucket& bucket, const SymbolLayer& layer, const config.depthMask = GL_FALSE; - if (bucket.hasCollisionBoxData()) { - config.stencilOp.reset(); - config.stencilTest = GL_TRUE; - - config.program = collisionBoxShader->program; - collisionBoxShader->u_matrix = matrix; - collisionBoxShader->u_scale = std::pow(2, state.getZoom() - id.z); - collisionBoxShader->u_zoom = state.getZoom() * 10; - collisionBoxShader->u_maxzoom = (id.z + 1) * 10; - config.lineWidth = 1.0f; - - setDepthSublayer(0); - bucket.drawCollisionBoxes(*collisionBoxShader); - - } - // TODO remove the `true ||` when #1673 is implemented const bool drawAcrossEdges = (data.mode == MapMode::Continuous) && (true || !(layout.text.allowOverlap || layout.icon.allowOverlap || layout.text.ignorePlacement || layout.icon.ignorePlacement)); @@ -190,7 +174,7 @@ void Painter::renderSymbol(SymbolBucket& bucket, const SymbolLayer& layer, const SpriteAtlas* activeSpriteAtlas = layer.spriteAtlas; const bool iconScaled = fontScale != 1 || data.pixelRatio != activeSpriteAtlas->getPixelRatio() || bucket.iconsNeedLinear; const bool iconTransformed = layout.icon.rotationAlignment == RotationAlignmentType::Map || angleOffset != 0 || state.getPitch() != 0; - activeSpriteAtlas->bind(sdf || state.isChanging() || iconScaled || iconTransformed); + activeSpriteAtlas->bind(sdf || state.isChanging() || iconScaled || iconTransformed, glObjectStore); if (sdf) { renderSDF(bucket, @@ -227,7 +211,7 @@ void Painter::renderSymbol(SymbolBucket& bucket, const SymbolLayer& layer, const float x = state.getHeight() / 2.0f * std::tan(state.getPitch()); float extra = (topedgelength + x) / topedgelength - 1; - config.program = iconShader->program; + config.program = iconShader->getID(); iconShader->u_matrix = vtxMatrix; iconShader->u_exmatrix = exMatrix; iconShader->u_texsize = {{ float(activeSpriteAtlas->getWidth()) / 4.0f, float(activeSpriteAtlas->getHeight()) / 4.0f }}; @@ -246,7 +230,7 @@ void Painter::renderSymbol(SymbolBucket& bucket, const SymbolLayer& layer, const iconShader->u_opacity = properties.icon.opacity; setDepthSublayer(0); - bucket.drawIcons(*iconShader); + bucket.drawIcons(*iconShader, glObjectStore); } } @@ -258,7 +242,7 @@ void Painter::renderSymbol(SymbolBucket& bucket, const SymbolLayer& layer, const config.depthTest = GL_FALSE; } - glyphAtlas->bind(); + glyphAtlas->bind(glObjectStore); renderSDF(bucket, id, @@ -271,4 +255,20 @@ void Painter::renderSymbol(SymbolBucket& bucket, const SymbolLayer& layer, const &SymbolBucket::drawGlyphs); } + if (bucket.hasCollisionBoxData()) { + config.stencilOp.reset(); + config.stencilTest = GL_TRUE; + + config.program = collisionBoxShader->getID(); + collisionBoxShader->u_matrix = matrix; + collisionBoxShader->u_scale = std::pow(2, state.getZoom() - id.z); + collisionBoxShader->u_zoom = state.getZoom() * 10; + collisionBoxShader->u_maxzoom = (id.z + 1) * 10; + config.lineWidth = 1.0f; + + setDepthSublayer(0); + bucket.drawCollisionBoxes(*collisionBoxShader, glObjectStore); + + } + } |