From fb5c3a888d7ecac412c2a74112ce98ec0242e145 Mon Sep 17 00:00:00 2001 From: Lauren Budorick Date: Thu, 7 Aug 2014 18:38:56 -0700 Subject: [PATCH] textures binding to map, just the wrong textures -- but so much closer --- include/mbgl/map/map.hpp | 5 ++-- src/renderer/painter_raster.cpp | 41 ++++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index a7c692c77..669f2868c 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -46,6 +46,9 @@ public: void rerender(); void renderLayers(std::shared_ptr group); + enum RenderPass { Opaque, Translucent }; + + void renderLayer(std::shared_ptr layer_desc, RenderPass pass); // Forces a map update: always triggers a rerender. void update(); @@ -148,11 +151,9 @@ private: // the stylesheet. void prepare(); - enum RenderPass { Opaque, Translucent }; // Unconditionally performs a render with the current map state. void render(); - void renderLayer(std::shared_ptr layer_desc, RenderPass pass); private: bool async = false; diff --git a/src/renderer/painter_raster.cpp b/src/renderer/painter_raster.cpp index dcf88f4e5..e752cce87 100644 --- a/src/renderer/painter_raster.cpp +++ b/src/renderer/painter_raster.cpp @@ -1,9 +1,12 @@ #include #include #include +#include #include #include +#include + using namespace mbgl; void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr layer_desc, const Tile::ID& id) { @@ -19,25 +22,35 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr lay preparePrerender(bucket); - const RasterProperties modifiedProperties = [&]{ - RasterProperties modifiedProperties = properties; - modifiedProperties.opacity = 1; // figure out why this was here - return modifiedProperties; - }(); +// const RasterProperties modifiedProperties = [&]{ +// RasterProperties modifiedProperties = properties; +// modifiedProperties.opacity = 1; // figure out why this was here +// return modifiedProperties; +// }(); const int buffer = bucket.properties.buffer * 4096.0f; -// const mat4 vtxMatrix = [&]{ -// mat4 vtxMatrix; -// matrix::ortho(vtxMatrix, -buffer, 4096 + buffer, -4096 - buffer, buffer, 0, 1); -// matrix::translate(vtxMatrix, vtxMatrix, 0, -4096, 0); -// return vtxMatrix; -// }(); + const mat4 oldMatrix = matrix; -// TODO set painter->matrix = vtxMatrix; ? + const mat4 preMatrix = [&]{ + mat4 vtxMatrix; + matrix::ortho(vtxMatrix, -buffer, 4096 + buffer, -4096 - buffer, buffer, 0, 1); + matrix::translate(vtxMatrix, vtxMatrix, 0, -4096, 0); + return vtxMatrix; + }(); + matrix = preMatrix; + + // call updateTiles to get parsed data for sublayers map.updateTiles(); - map.renderLayers(layer_desc->layers); + + 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); + setTranslucent(); + map.renderLayer(*it, Map::RenderPass::Translucent); + } if (bucket.properties.blur > 0) { bucket.texture.blur(*this, bucket.properties.blur); @@ -46,6 +59,8 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr lay bucket.texture.unbindFramebuffer(); finishPrerender(bucket); + matrix = oldMatrix; + } renderPrerenderedTexture(bucket);