diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-06-21 17:22:51 -0700 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-07-01 19:47:35 +0300 |
commit | a17b0bcd82ebe8628b69588d19773d26596b86da (patch) | |
tree | 06e53bf42b059b28780e995020733aaaeb6487b1 /src/mbgl/renderer/painter.hpp | |
parent | eb7cfea7eacad8a179fb3167b88508f8f1f7fdd2 (diff) | |
download | qtlocation-mapboxgl-a17b0bcd82ebe8628b69588d19773d26596b86da.tar.gz |
[core] Fix overdraw mode on Linux
- Use glBindAttribLocation for GLSL attributes.
- Create a separate shader for each shader that supports overdraw.
Needed because each uniform location must be known for every program.
- Create a separate VAO for each shader inside buckets.
Needed because we can only bind a VAO to a specific shader.
Fixes #5435.
Diffstat (limited to 'src/mbgl/renderer/painter.hpp')
-rw-r--r-- | src/mbgl/renderer/painter.hpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp index 1f511467d0..197466e94c 100644 --- a/src/mbgl/renderer/painter.hpp +++ b/src/mbgl/renderer/painter.hpp @@ -53,8 +53,6 @@ class CircleShader; class PatternShader; class IconShader; class RasterShader; -class SDFGlyphShader; -class SDFIconShader; class CollisionBoxShader; struct ClipID; @@ -137,7 +135,7 @@ private: float scaleDivisor, std::array<float, 2> texsize, SDFShader& sdfShader, - void (SymbolBucket::*drawSDF)(SDFShader&, gl::ObjectStore&), + void (SymbolBucket::*drawSDF)(SDFShader&, gl::ObjectStore&, bool), // Layout style::AlignmentType rotationAlignment, @@ -208,11 +206,24 @@ private: std::unique_ptr<PatternShader> patternShader; std::unique_ptr<IconShader> iconShader; std::unique_ptr<RasterShader> rasterShader; - std::unique_ptr<SDFGlyphShader> sdfGlyphShader; - std::unique_ptr<SDFIconShader> sdfIconShader; + std::unique_ptr<SDFShader> sdfGlyphShader; + std::unique_ptr<SDFShader> sdfIconShader; std::unique_ptr<CollisionBoxShader> collisionBoxShader; std::unique_ptr<CircleShader> circleShader; + std::unique_ptr<PlainShader> plainOverdrawShader; + std::unique_ptr<OutlineShader> outlineOverdrawShader; + std::unique_ptr<OutlinePatternShader> outlinePatternOverdrawShader; + std::unique_ptr<LineShader> lineOverdrawShader; + std::unique_ptr<LineSDFShader> linesdfOverdrawShader; + std::unique_ptr<LinepatternShader> linepatternOverdrawShader; + std::unique_ptr<PatternShader> patternOverdrawShader; + std::unique_ptr<IconShader> iconOverdrawShader; + std::unique_ptr<RasterShader> rasterOverdrawShader; + std::unique_ptr<SDFShader> sdfGlyphOverdrawShader; + std::unique_ptr<SDFShader> sdfIconOverdrawShader; + std::unique_ptr<CircleShader> circleOverdrawShader; + // Set up the stencil quad we're using to generate the stencil mask. StaticVertexBuffer tileStencilBuffer = { // top left triangle @@ -241,6 +252,8 @@ private: }; VertexArrayObject tileBorderArray; + + VertexArrayObject coveringRasterOverdrawArray; }; } // namespace mbgl |