[core] Added missing overdraw arrays
This commit is contained in:
@@ -242,6 +242,11 @@ private:
|
||||
VertexArrayObject backgroundPatternArray;
|
||||
VertexArrayObject backgroundArray;
|
||||
|
||||
VertexArrayObject coveringPlaingOverdrawArray;
|
||||
VertexArrayObject coveringRasterOverdrawArray;
|
||||
VertexArrayObject backgroundPatternOverdrawArray;
|
||||
VertexArrayObject backgroundOverdrawArray;
|
||||
|
||||
// Set up the tile boundary lines we're using to draw the tile outlines.
|
||||
StaticVertexBuffer tileBorderBuffer = {
|
||||
{ 0, 0 },
|
||||
@@ -252,8 +257,6 @@ private:
|
||||
};
|
||||
|
||||
VertexArrayObject tileBorderArray;
|
||||
|
||||
VertexArrayObject coveringRasterOverdrawArray;
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -21,8 +21,11 @@ void Painter::renderBackground(const BackgroundLayer& layer) {
|
||||
optional<SpriteAtlasPosition> imagePosA;
|
||||
optional<SpriteAtlasPosition> imagePosB;
|
||||
|
||||
const auto& shaderPattern = isOverdraw() ? patternOverdrawShader : patternShader;
|
||||
const auto& shaderPlain = isOverdraw() ? plainOverdrawShader : plainShader;
|
||||
const bool overdraw = isOverdraw();
|
||||
const auto& shaderPattern = overdraw ? patternOverdrawShader : patternShader;
|
||||
const auto& shaderPlain = overdraw ? plainOverdrawShader : plainShader;
|
||||
auto& arrayBackgroundPattern = overdraw ? backgroundPatternOverdrawArray : backgroundPatternArray;
|
||||
auto& arrayBackground = overdraw ? backgroundOverdrawArray : backgroundArray;
|
||||
|
||||
if (isPatterned) {
|
||||
imagePosA = spriteAtlas->getPosition(properties.backgroundPattern.value.from, true);
|
||||
@@ -41,14 +44,14 @@ void Painter::renderBackground(const BackgroundLayer& layer) {
|
||||
shaderPattern->u_opacity = properties.backgroundOpacity;
|
||||
|
||||
spriteAtlas->bind(true, store);
|
||||
backgroundPatternArray.bind(*shaderPattern, tileStencilBuffer, BUFFER_OFFSET(0), store);
|
||||
arrayBackgroundPattern.bind(*shaderPattern, tileStencilBuffer, BUFFER_OFFSET(0), store);
|
||||
|
||||
} else {
|
||||
config.program = shaderPlain->getID();
|
||||
shaderPlain->u_color = properties.backgroundColor;
|
||||
shaderPlain->u_opacity = properties.backgroundOpacity;
|
||||
|
||||
backgroundArray.bind(*shaderPlain, tileStencilBuffer, BUFFER_OFFSET(0), store);
|
||||
arrayBackground.bind(*shaderPlain, tileStencilBuffer, BUFFER_OFFSET(0), store);
|
||||
}
|
||||
|
||||
config.stencilTest = GL_FALSE;
|
||||
|
||||
@@ -11,10 +11,14 @@ namespace mbgl {
|
||||
void Painter::drawClippingMasks(const std::map<UnwrappedTileID, ClipID>& stencils) {
|
||||
MBGL_DEBUG_GROUP("clipping masks");
|
||||
|
||||
const bool overdraw = isOverdraw();
|
||||
const auto& shaderPlain = overdraw ? plainOverdrawShader : plainShader;
|
||||
auto& arrayCoveringPlain = overdraw ? coveringPlaingOverdrawArray : coveringPlainArray;
|
||||
|
||||
mat4 matrix;
|
||||
const GLuint mask = 0b11111111;
|
||||
|
||||
config.program = plainShader->getID();
|
||||
config.program = shaderPlain->getID();
|
||||
config.stencilOp.reset();
|
||||
config.stencilTest = GL_TRUE;
|
||||
config.depthTest = GL_FALSE;
|
||||
@@ -22,7 +26,7 @@ void Painter::drawClippingMasks(const std::map<UnwrappedTileID, ClipID>& stencil
|
||||
config.colorMask = { GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE };
|
||||
config.stencilMask = mask;
|
||||
|
||||
coveringPlainArray.bind(*plainShader, tileStencilBuffer, BUFFER_OFFSET_0, store);
|
||||
arrayCoveringPlain.bind(*shaderPlain, tileStencilBuffer, BUFFER_OFFSET_0, store);
|
||||
|
||||
for (const auto& stencil : stencils) {
|
||||
const auto& id = stencil.first;
|
||||
@@ -31,7 +35,7 @@ void Painter::drawClippingMasks(const std::map<UnwrappedTileID, ClipID>& stencil
|
||||
MBGL_DEBUG_GROUP(std::string{ "mask: " } + util::toString(id));
|
||||
state.matrixFor(matrix, id);
|
||||
matrix::multiply(matrix, projMatrix, matrix);
|
||||
plainShader->u_matrix = matrix;
|
||||
shaderPlain->u_matrix = matrix;
|
||||
|
||||
const GLint ref = (GLint)(clip.reference.to_ulong());
|
||||
config.stencilFunc = { GL_ALWAYS, ref, mask };
|
||||
|
||||
Reference in New Issue
Block a user