[core] change bool overdraw to PaintMode::Overdraw
This commit is contained in:
@@ -119,49 +119,57 @@ bool FillBucket::needsClipping() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
void FillBucket::drawElements(PlainShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void FillBucket::drawElements(PlainShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte* vertex_index = BUFFER_OFFSET(0);
|
||||
GLbyte* elements_index = BUFFER_OFFSET(0);
|
||||
for (auto& group : triangleGroups) {
|
||||
assert(group);
|
||||
group->array[overdraw ? 1 : 0].bind(shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT, elements_index));
|
||||
group->array[paintMode == PaintMode::Overdraw ? 1 : 0].bind(
|
||||
shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * vertexBuffer.itemSize;
|
||||
elements_index += group->elements_length * triangleElementsBuffer.itemSize;
|
||||
}
|
||||
}
|
||||
|
||||
void FillBucket::drawElements(PatternShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void FillBucket::drawElements(PatternShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte* vertex_index = BUFFER_OFFSET(0);
|
||||
GLbyte* elements_index = BUFFER_OFFSET(0);
|
||||
for (auto& group : triangleGroups) {
|
||||
assert(group);
|
||||
group->array[overdraw ? 3 : 2].bind(shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT, elements_index));
|
||||
group->array[paintMode == PaintMode::Overdraw ? 3 : 2].bind(
|
||||
shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * vertexBuffer.itemSize;
|
||||
elements_index += group->elements_length * triangleElementsBuffer.itemSize;
|
||||
}
|
||||
}
|
||||
|
||||
void FillBucket::drawVertices(OutlineShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void FillBucket::drawVertices(OutlineShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte* vertex_index = BUFFER_OFFSET(0);
|
||||
GLbyte* elements_index = BUFFER_OFFSET(0);
|
||||
for (auto& group : lineGroups) {
|
||||
assert(group);
|
||||
group->array[overdraw ? 1 : 0].bind(shader, vertexBuffer, lineElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_LINES, group->elements_length * 2, GL_UNSIGNED_SHORT, elements_index));
|
||||
group->array[paintMode == PaintMode::Overdraw ? 1 : 0].bind(
|
||||
shader, vertexBuffer, lineElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_LINES, group->elements_length * 2, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * vertexBuffer.itemSize;
|
||||
elements_index += group->elements_length * lineElementsBuffer.itemSize;
|
||||
}
|
||||
}
|
||||
|
||||
void FillBucket::drawVertices(OutlinePatternShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void FillBucket::drawVertices(OutlinePatternShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte* vertex_index = BUFFER_OFFSET(0);
|
||||
GLbyte* elements_index = BUFFER_OFFSET(0);
|
||||
for (auto& group : lineGroups) {
|
||||
assert(group);
|
||||
group->array[overdraw? 3 : 2].bind(shader, vertexBuffer, lineElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_LINES, group->elements_length * 2, GL_UNSIGNED_SHORT, elements_index));
|
||||
group->array[paintMode == PaintMode::Overdraw ? 3 : 2].bind(
|
||||
shader, vertexBuffer, lineElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_LINES, group->elements_length * 2, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * vertexBuffer.itemSize;
|
||||
elements_index += group->elements_length * lineElementsBuffer.itemSize;
|
||||
}
|
||||
|
||||
@@ -27,10 +27,10 @@ public:
|
||||
|
||||
void addGeometry(const GeometryCollection&);
|
||||
|
||||
void drawElements(PlainShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawElements(PatternShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawVertices(OutlineShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawVertices(OutlinePatternShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawElements(PlainShader&, gl::ObjectStore&, PaintMode);
|
||||
void drawElements(PatternShader&, gl::ObjectStore&, PaintMode);
|
||||
void drawVertices(OutlineShader&, gl::ObjectStore&, PaintMode);
|
||||
void drawVertices(OutlinePatternShader&, gl::ObjectStore&, PaintMode);
|
||||
|
||||
private:
|
||||
FillVertexBuffer vertexBuffer;
|
||||
|
||||
@@ -460,7 +460,7 @@ bool LineBucket::needsClipping() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
void LineBucket::drawLines(LineShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void LineBucket::drawLines(LineShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte* vertex_index = BUFFER_OFFSET(0);
|
||||
GLbyte* elements_index = BUFFER_OFFSET(0);
|
||||
for (auto& group : triangleGroups) {
|
||||
@@ -468,7 +468,8 @@ void LineBucket::drawLines(LineShader& shader, gl::ObjectStore& store, bool over
|
||||
if (!group->elements_length) {
|
||||
continue;
|
||||
}
|
||||
group->array[overdraw ? 1 : 0].bind(shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
group->array[paintMode == PaintMode::Overdraw ? 1 : 0].bind(
|
||||
shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * vertexBuffer.itemSize;
|
||||
@@ -476,7 +477,7 @@ void LineBucket::drawLines(LineShader& shader, gl::ObjectStore& store, bool over
|
||||
}
|
||||
}
|
||||
|
||||
void LineBucket::drawLineSDF(LineSDFShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void LineBucket::drawLineSDF(LineSDFShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte* vertex_index = BUFFER_OFFSET(0);
|
||||
GLbyte* elements_index = BUFFER_OFFSET(0);
|
||||
for (auto& group : triangleGroups) {
|
||||
@@ -484,7 +485,8 @@ void LineBucket::drawLineSDF(LineSDFShader& shader, gl::ObjectStore& store, bool
|
||||
if (!group->elements_length) {
|
||||
continue;
|
||||
}
|
||||
group->array[overdraw ? 3 : 2].bind(shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
group->array[paintMode == PaintMode::Overdraw ? 3 : 2].bind(
|
||||
shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * vertexBuffer.itemSize;
|
||||
@@ -492,7 +494,7 @@ void LineBucket::drawLineSDF(LineSDFShader& shader, gl::ObjectStore& store, bool
|
||||
}
|
||||
}
|
||||
|
||||
void LineBucket::drawLinePatterns(LinepatternShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void LineBucket::drawLinePatterns(LinepatternShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte* vertex_index = BUFFER_OFFSET(0);
|
||||
GLbyte* elements_index = BUFFER_OFFSET(0);
|
||||
for (auto& group : triangleGroups) {
|
||||
@@ -500,7 +502,8 @@ void LineBucket::drawLinePatterns(LinepatternShader& shader, gl::ObjectStore& st
|
||||
if (!group->elements_length) {
|
||||
continue;
|
||||
}
|
||||
group->array[overdraw ? 5 : 4].bind(shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
group->array[paintMode == PaintMode::Overdraw ? 5 : 4].bind(
|
||||
shader, vertexBuffer, triangleElementsBuffer, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * vertexBuffer.itemSize;
|
||||
|
||||
@@ -32,9 +32,9 @@ public:
|
||||
void addGeometry(const GeometryCollection&);
|
||||
void addGeometry(const GeometryCoordinates& line);
|
||||
|
||||
void drawLines(LineShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawLineSDF(LineSDFShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawLinePatterns(LinepatternShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawLines(LineShader&, gl::ObjectStore&, PaintMode);
|
||||
void drawLineSDF(LineSDFShader&, gl::ObjectStore&, PaintMode);
|
||||
void drawLinePatterns(LinepatternShader&, gl::ObjectStore&, PaintMode);
|
||||
|
||||
private:
|
||||
struct TriangleElement {
|
||||
|
||||
@@ -68,7 +68,7 @@ void Painter::render(const Style& style, const FrameData& frame_, SpriteAtlas& a
|
||||
|
||||
PaintParameters parameters {
|
||||
#ifndef NDEBUG
|
||||
isOverdraw() ? *overdrawShaders : *shaders
|
||||
paintMode() == PaintMode::Overdraw ? *overdrawShaders : *shaders
|
||||
#else
|
||||
*shaders
|
||||
#endif
|
||||
@@ -127,7 +127,7 @@ void Painter::render(const Style& style, const FrameData& frame_, SpriteAtlas& a
|
||||
config.depthMask = GL_TRUE;
|
||||
config.colorMask = { GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE };
|
||||
|
||||
if (isOverdraw()) {
|
||||
if (paintMode() == PaintMode::Overdraw) {
|
||||
config.blend = GL_TRUE;
|
||||
config.blendFunc = { GL_CONSTANT_COLOR, GL_ONE };
|
||||
const float overdraw = 1.0f / 8.0f;
|
||||
@@ -245,7 +245,7 @@ void Painter::renderPass(PaintParameters& parameters,
|
||||
if (!layer.baseImpl->hasRenderPass(pass))
|
||||
continue;
|
||||
|
||||
if (isOverdraw()) {
|
||||
if (paintMode() == PaintMode::Overdraw) {
|
||||
config.blend = GL_TRUE;
|
||||
} else if (pass == RenderPass::Translucent) {
|
||||
config.blendFunc.reset();
|
||||
|
||||
@@ -125,7 +125,7 @@ private:
|
||||
float scaleDivisor,
|
||||
std::array<float, 2> texsize,
|
||||
SDFShader& sdfShader,
|
||||
void (SymbolBucket::*drawSDF)(SDFShader&, gl::ObjectStore&, bool),
|
||||
void (SymbolBucket::*drawSDF)(SDFShader&, gl::ObjectStore&, PaintMode),
|
||||
|
||||
// Layout
|
||||
style::AlignmentType rotationAlignment,
|
||||
@@ -145,9 +145,14 @@ private:
|
||||
void setDepthSublayer(int n);
|
||||
|
||||
#ifndef NDEBUG
|
||||
bool isOverdraw() const { return frame.debugOptions & MapDebugOptions::Overdraw; }
|
||||
PaintMode paintMode() const {
|
||||
return frame.debugOptions & MapDebugOptions::Overdraw ? PaintMode::Overdraw
|
||||
: PaintMode::Regular;
|
||||
}
|
||||
#else
|
||||
bool isOverdraw() const { return false; }
|
||||
PaintMode paintMode() const {
|
||||
return PaintMode::Regular;
|
||||
}
|
||||
#endif
|
||||
|
||||
mat4 projMatrix;
|
||||
|
||||
@@ -69,7 +69,7 @@ void Painter::renderFill(PaintParameters& parameters,
|
||||
// the (non-antialiased) fill.
|
||||
setDepthSublayer(0); // OK
|
||||
}
|
||||
bucket.drawVertices(outlineShader, store, isOverdraw());
|
||||
bucket.drawVertices(outlineShader, store, paintMode());
|
||||
}
|
||||
|
||||
if (pattern) {
|
||||
@@ -105,7 +105,7 @@ void Painter::renderFill(PaintParameters& parameters,
|
||||
|
||||
// Draw the actual triangles into the color & stencil buffer.
|
||||
setDepthSublayer(0);
|
||||
bucket.drawElements(patternShader, store, isOverdraw());
|
||||
bucket.drawElements(patternShader, store, paintMode());
|
||||
|
||||
if (properties.fillAntialias && !isOutlineColorDefined) {
|
||||
config.program = outlinePatternShader.getID();
|
||||
@@ -132,7 +132,7 @@ void Painter::renderFill(PaintParameters& parameters,
|
||||
spriteAtlas->bind(true, store, config, 0);
|
||||
|
||||
setDepthSublayer(2);
|
||||
bucket.drawVertices(outlinePatternShader, store, isOverdraw());
|
||||
bucket.drawVertices(outlinePatternShader, store, paintMode());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -149,7 +149,7 @@ void Painter::renderFill(PaintParameters& parameters,
|
||||
|
||||
// Draw the actual triangles into the color & stencil buffer.
|
||||
setDepthSublayer(1);
|
||||
bucket.drawElements(plainShader, store, isOverdraw());
|
||||
bucket.drawElements(plainShader, store, paintMode());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ void Painter::renderFill(PaintParameters& parameters,
|
||||
outlineShader.u_world = worldSize;
|
||||
|
||||
setDepthSublayer(2);
|
||||
bucket.drawVertices(outlineShader, store, isOverdraw());
|
||||
bucket.drawVertices(outlineShader, store, paintMode());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ void Painter::renderLine(PaintParameters& parameters,
|
||||
linesdfShader.u_image = 0;
|
||||
lineAtlas->bind(store, config, 0);
|
||||
|
||||
bucket.drawLineSDF(linesdfShader, store, isOverdraw());
|
||||
bucket.drawLineSDF(linesdfShader, store, paintMode());
|
||||
|
||||
} else if (!properties.linePattern.value.from.empty()) {
|
||||
optional<SpriteAtlasPosition> imagePosA = spriteAtlas->getPosition(
|
||||
@@ -139,7 +139,7 @@ void Painter::renderLine(PaintParameters& parameters,
|
||||
linepatternShader.u_image = 0;
|
||||
spriteAtlas->bind(true, store, config, 0);
|
||||
|
||||
bucket.drawLinePatterns(linepatternShader, store, isOverdraw());
|
||||
bucket.drawLinePatterns(linepatternShader, store, paintMode());
|
||||
|
||||
} else {
|
||||
config.program = lineShader.getID();
|
||||
@@ -157,7 +157,7 @@ void Painter::renderLine(PaintParameters& parameters,
|
||||
lineShader.u_color = color;
|
||||
lineShader.u_opacity = opacity;
|
||||
|
||||
bucket.drawLines(lineShader, store, isOverdraw());
|
||||
bucket.drawLines(lineShader, store, paintMode());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ void Painter::renderSDF(SymbolBucket& bucket,
|
||||
float sdfFontSize,
|
||||
std::array<float, 2> texsize,
|
||||
SDFShader& sdfShader,
|
||||
void (SymbolBucket::*drawSDF)(SDFShader&, gl::ObjectStore&, bool),
|
||||
void (SymbolBucket::*drawSDF)(SDFShader&, gl::ObjectStore&, PaintMode),
|
||||
|
||||
// Layout
|
||||
AlignmentType rotationAlignment,
|
||||
@@ -96,7 +96,7 @@ void Painter::renderSDF(SymbolBucket& bucket,
|
||||
sdfShader.u_buffer = (haloOffset - haloWidth / fontScale) / sdfPx;
|
||||
|
||||
setDepthSublayer(0);
|
||||
(bucket.*drawSDF)(sdfShader, store, isOverdraw());
|
||||
(bucket.*drawSDF)(sdfShader, store, paintMode());
|
||||
}
|
||||
|
||||
// Then, we draw the text/icon over the halo
|
||||
@@ -107,7 +107,7 @@ void Painter::renderSDF(SymbolBucket& bucket,
|
||||
sdfShader.u_buffer = (256.0f - 64.0f) / 256.0f;
|
||||
|
||||
setDepthSublayer(1);
|
||||
(bucket.*drawSDF)(sdfShader, store, isOverdraw());
|
||||
(bucket.*drawSDF)(sdfShader, store, paintMode());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ void Painter::renderSymbol(PaintParameters& parameters,
|
||||
iconShader.u_fadetexture = 1;
|
||||
|
||||
setDepthSublayer(0);
|
||||
bucket.drawIcons(iconShader, store, isOverdraw());
|
||||
bucket.drawIcons(iconShader, store, paintMode());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,4 +24,10 @@ constexpr RenderPass operator&(RenderPass a, RenderPass b) {
|
||||
return RenderPass(mbgl::underlying_type(a) & mbgl::underlying_type(b));
|
||||
}
|
||||
|
||||
// Defines whether the overdraw shaders should be used instead of the regular shaders.
|
||||
enum class PaintMode : bool {
|
||||
Regular = false,
|
||||
Overdraw = true,
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -601,40 +601,46 @@ void SymbolBucket::swapRenderData() {
|
||||
}
|
||||
}
|
||||
|
||||
void SymbolBucket::drawGlyphs(SDFShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void SymbolBucket::drawGlyphs(SDFShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte *vertex_index = BUFFER_OFFSET_0;
|
||||
GLbyte *elements_index = BUFFER_OFFSET_0;
|
||||
auto& text = renderData->text;
|
||||
for (auto &group : text.groups) {
|
||||
assert(group);
|
||||
group->array[overdraw ? 1 : 0].bind(shader, text.vertices, text.triangles, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT, elements_index));
|
||||
group->array[paintMode == PaintMode::Overdraw ? 1 : 0].bind(
|
||||
shader, text.vertices, text.triangles, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * text.vertices.itemSize;
|
||||
elements_index += group->elements_length * text.triangles.itemSize;
|
||||
}
|
||||
}
|
||||
|
||||
void SymbolBucket::drawIcons(SDFShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void SymbolBucket::drawIcons(SDFShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte *vertex_index = BUFFER_OFFSET_0;
|
||||
GLbyte *elements_index = BUFFER_OFFSET_0;
|
||||
auto& icon = renderData->icon;
|
||||
for (auto &group : icon.groups) {
|
||||
assert(group);
|
||||
group->array[overdraw ? 1 : 0].bind(shader, icon.vertices, icon.triangles, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT, elements_index));
|
||||
group->array[paintMode == PaintMode::Overdraw ? 1 : 0].bind(
|
||||
shader, icon.vertices, icon.triangles, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * icon.vertices.itemSize;
|
||||
elements_index += group->elements_length * icon.triangles.itemSize;
|
||||
}
|
||||
}
|
||||
|
||||
void SymbolBucket::drawIcons(IconShader& shader, gl::ObjectStore& store, bool overdraw) {
|
||||
void SymbolBucket::drawIcons(IconShader& shader, gl::ObjectStore& store, PaintMode paintMode) {
|
||||
GLbyte *vertex_index = BUFFER_OFFSET_0;
|
||||
GLbyte *elements_index = BUFFER_OFFSET_0;
|
||||
auto& icon = renderData->icon;
|
||||
for (auto &group : icon.groups) {
|
||||
assert(group);
|
||||
group->array[overdraw ? 3 : 2].bind(shader, icon.vertices, icon.triangles, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT, elements_index));
|
||||
group->array[paintMode == PaintMode::Overdraw ? 3 : 2].bind(
|
||||
shader, icon.vertices, icon.triangles, vertex_index, store);
|
||||
MBGL_CHECK_ERROR(glDrawElements(GL_TRIANGLES, group->elements_length * 3, GL_UNSIGNED_SHORT,
|
||||
elements_index));
|
||||
vertex_index += group->vertex_length * icon.vertices.itemSize;
|
||||
elements_index += group->elements_length * icon.triangles.itemSize;
|
||||
}
|
||||
|
||||
@@ -82,9 +82,9 @@ public:
|
||||
GlyphAtlas&,
|
||||
GlyphStore&);
|
||||
|
||||
void drawGlyphs(SDFShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawIcons(SDFShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawIcons(IconShader&, gl::ObjectStore&, bool overdraw);
|
||||
void drawGlyphs(SDFShader&, gl::ObjectStore&, PaintMode);
|
||||
void drawIcons(SDFShader&, gl::ObjectStore&, PaintMode);
|
||||
void drawIcons(IconShader&, gl::ObjectStore&, PaintMode);
|
||||
void drawCollisionBoxes(CollisionBoxShader&, gl::ObjectStore&);
|
||||
|
||||
void parseFeatures(const GeometryTileLayer&, const style::Filter&);
|
||||
|
||||
Reference in New Issue
Block a user