[core] Added missing overdraw arrays

This commit is contained in:
Bruno de Oliveira Abinader
2016-07-02 12:16:45 +03:00
parent f94b354b53
commit d8a10ac509
3 changed files with 19 additions and 9 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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 };