use unified RenderPass type

This commit is contained in:
Konstantin Käfer
2014-08-12 15:24:02 +02:00
parent 64d5cea94f
commit 18b1469e9e
8 changed files with 21 additions and 21 deletions

View File

@@ -45,8 +45,6 @@ public:
// Triggers a lazy rerender: only performs a render when the map is not clean.
void rerender();
enum RenderPass { Opaque, Translucent };
void renderLayer(std::shared_ptr<StyleLayer> layer_desc, RenderPass pass, const Tile::ID* id = nullptr, const mat4* matrix = nullptr);
// Forces a map update: always triggers a rerender.

View File

@@ -29,6 +29,8 @@
namespace mbgl {
enum class RenderPass : bool { Opaque, Translucent };
class Transform;
class Style;
class Tile;
@@ -154,7 +156,7 @@ private:
bool gl_depthMask = true;
std::array<uint16_t, 2> gl_viewport = {{ 0, 0 }};
float strata = 0;
enum { Opaque, Translucent } pass = Opaque;
RenderPass pass = RenderPass::Opaque;
const float strata_epsilon = 1.0f / (1 << 16);
public:

View File

@@ -611,7 +611,7 @@ void Map::renderLayers(std::shared_ptr<StyleLayerGroup> group) {
for (auto it = group->layers.rbegin(), end = group->layers.rend(); it != end; ++it, ++i) {
painter.setOpaque();
painter.setStrata(i * strata_thickness);
renderLayer(*it, Opaque);
renderLayer(*it, RenderPass::Opaque);
}
if (debug::renderTree) {
std::cout << std::string(--indent * 4, ' ') << "}" << std::endl;
@@ -627,7 +627,7 @@ void Map::renderLayers(std::shared_ptr<StyleLayerGroup> group) {
for (auto it = group->layers.begin(), end = group->layers.end(); it != end; ++it, --i) {
painter.setTranslucent();
painter.setStrata(i * strata_thickness);
renderLayer(*it, Translucent);
renderLayer(*it, RenderPass::Translucent);
}
if (debug::renderTree) {
std::cout << std::string(--indent * 4, ' ') << "}" << std::endl;
@@ -637,7 +637,7 @@ void Map::renderLayers(std::shared_ptr<StyleLayerGroup> group) {
void Map::renderLayer(std::shared_ptr<StyleLayer> layer_desc, RenderPass pass, const Tile::ID* id, const mat4* matrix) {
if (layer_desc->layers && layer_desc->type != StyleLayerType::Raster) {
// This is a layer group. We render them during our translucent render pass.
if (pass == Translucent) {
if (pass == RenderPass::Translucent) {
const CompositeProperties &properties = layer_desc->getProperties<CompositeProperties>();
if (properties.isVisible()) {
gl::group group(std::string("group: ") + layer_desc->id);
@@ -698,15 +698,15 @@ void Map::renderLayer(std::shared_ptr<StyleLayer> layer_desc, RenderPass pass, c
if (!layer_desc->getProperties<FillProperties>().isVisible()) return;
break;
case StyleLayerType::Line:
if (pass == Opaque) return;
if (pass == RenderPass::Opaque) return;
if (!layer_desc->getProperties<LineProperties>().isVisible()) return;
break;
case StyleLayerType::Symbol:
if (pass == Opaque) return;
if (pass == RenderPass::Opaque) return;
if (!layer_desc->getProperties<SymbolProperties>().isVisible()) return;
break;
case StyleLayerType::Raster:
if (pass == Opaque) return;
if (pass == RenderPass::Opaque) return;
if (!layer_desc->getProperties<RasterProperties>().isVisible()) return;
break;
default:

View File

@@ -144,16 +144,16 @@ void Painter::clear() {
}
void Painter::setOpaque() {
if (pass != Opaque) {
pass = Opaque;
if (pass != RenderPass::Opaque) {
pass = RenderPass::Opaque;
glDisable(GL_BLEND);
depthMask(true);
}
}
void Painter::setTranslucent() {
if (pass != Translucent) {
pass = Translucent;
if (pass != RenderPass::Translucent) {
pass = RenderPass::Translucent;
glEnable(GL_BLEND);
depthMask(false);
}

View File

@@ -38,7 +38,7 @@ void Painter::renderFill(FillBucket& bucket, const FillProperties& properties, c
// Because we're drawing top-to-bottom, and we update the stencil mask
// below, we have to draw the outline first (!)
if (outline && pass == Translucent) {
if (outline && pass == RenderPass::Translucent) {
useProgram(outlineShader->program);
outlineShader->setMatrix(vtxMatrix);
lineWidth(2.0f); // This is always fixed and does not depend on the pixelRatio!
@@ -70,7 +70,7 @@ void Painter::renderFill(FillBucket& bucket, const FillProperties& properties, c
// glStencilOp(GL_KEEP, GL_KEEP, GL_INCR_WRAP);
}
if ((fill_color[3] >= 1.0f) == (pass == Opaque)) {
if ((fill_color[3] >= 1.0f) == (pass == RenderPass::Opaque)) {
Sprite &sprite = *map.getSprite();
if (properties.image.size() && sprite) {
SpriteAtlas &spriteAtlas = *map.getSpriteAtlas();
@@ -128,7 +128,7 @@ void Painter::renderFill(FillBucket& bucket, const FillProperties& properties, c
// Because we're drawing top-to-bottom, and we update the stencil mask
// below, we have to draw the outline first (!)
if (fringeline && pass == Translucent) {
if (fringeline && pass == RenderPass::Translucent) {
useProgram(outlineShader->program);
outlineShader->setMatrix(vtxMatrix);
lineWidth(2.0f); // This is always fixed and does not depend on the pixelRatio!

View File

@@ -7,7 +7,7 @@ using namespace mbgl;
void Painter::renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix) {
// Abort early.
if (pass == Opaque) return;
if (pass == RenderPass::Opaque) return;
if (!bucket.hasData()) return;
const LineProperties &properties = layer_desc->getProperties<LineProperties>();

View File

@@ -10,7 +10,7 @@
using namespace mbgl;
void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix) {
if (pass != Translucent) return;
if (pass != RenderPass::Translucent) return;
const RasterProperties &properties = layer_desc->getProperties<RasterProperties>();
@@ -37,9 +37,9 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay
int i = 0;
for (auto it = layer_desc->layers->layers.begin(), end = layer_desc->layers->layers.end(); it != end; ++it, --i) {
setOpaque();
map.renderLayer(*it, Map::RenderPass::Opaque, &id, &preMatrix);
map.renderLayer(*it, RenderPass::Opaque, &id, &preMatrix);
setTranslucent();
map.renderLayer(*it, Map::RenderPass::Translucent, &id, &preMatrix);
map.renderLayer(*it, RenderPass::Translucent, &id, &preMatrix);
}
if (bucket.properties.blur > 0) {

View File

@@ -12,7 +12,7 @@ namespace mbgl {
void Painter::renderSymbol(SymbolBucket &bucket, std::shared_ptr<StyleLayer> layer_desc,
const Tile::ID &/*id*/, const mat4 &matrix) {
// Abort early.
if (pass == Opaque) {
if (pass == RenderPass::Opaque) {
return;
}