diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 669f2868c..f7397497e 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -49,6 +49,7 @@ public: enum RenderPass { Opaque, Translucent }; void renderLayer(std::shared_ptr layer_desc, RenderPass pass); + void renderLayer(std::shared_ptr layer_desc, RenderPass pass, Tile::ID id); // Forces a map update: always triggers a rerender. void update(); @@ -178,10 +179,10 @@ private: public: View &view; + TransformState state; private: Transform transform; - TransformState state; std::shared_ptr fileSource; diff --git a/src/map/map.cpp b/src/map/map.cpp index 54d77bd36..3db6e1171 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -719,3 +719,65 @@ void Map::renderLayer(std::shared_ptr layer_desc, RenderPass pass) { style_source.source->render(painter, layer_desc); } } + +//void Map::renderLayer(std::shared_ptr layer_desc, RenderPass pass, Tile::ID &id) { +// if (!layer_desc->bucket) { +// fprintf(stderr, "[WARNING] layer '%s' is missing bucket\n", layer_desc->id.c_str()); +// return; +// } +// +// if (!layer_desc->bucket->style_source) { +// fprintf(stderr, "[WARNING] can't find source for layer '%s'\n", layer_desc->id.c_str()); +// return; +// } +// +// StyleSource &style_source = *layer_desc->bucket->style_source; +// +// // Skip this layer if there is no data. +// if (!style_source.source) { +// return; +// } +// +// // Skip this layer if it's outside the range of min/maxzoom. +// // This may occur when there /is/ a bucket created for this layer, but the min/max-zoom +// // is set to a fractional value, or value that is larger than the source maxzoom. +// const double zoom = state.getZoom(); +// if (layer_desc->bucket->min_zoom > zoom || +// layer_desc->bucket->max_zoom <= zoom) { +// return; +// } +// +// // Abort early if we can already deduce from the bucket type that +// // we're not going to render anything anyway during this pass. +// switch (layer_desc->type) { +// case StyleLayerType::Fill: +// if (!layer_desc->getProperties().isVisible()) return; +// break; +// case StyleLayerType::Line: +// if (pass == Opaque) return; +// if (!layer_desc->getProperties().isVisible()) return; +// break; +// case StyleLayerType::Icon: +// if (pass == Opaque) return; +// if (!layer_desc->getProperties().isVisible()) return; +// break; +// case StyleLayerType::Text: +// if (pass == Opaque) return; +// if (!layer_desc->getProperties().isVisible()) return; +// break; +// case StyleLayerType::Raster: +// if (pass == Opaque) return; +// if (!layer_desc->getProperties().isVisible()) return; +// break; +// default: +// break; +// } +// +// if (debug::renderTree) { +// std::cout << std::string(indent * 4, ' ') << "- " << layer_desc->id << " (" +// << layer_desc->type << ")" << std::endl; +// } +//// style_source.source->render(painter, layer_desc); +// painter.renderTileLayer(id, layer_desc); +//} + diff --git a/src/renderer/painter_raster.cpp b/src/renderer/painter_raster.cpp index fd81a490f..1462af76b 100644 --- a/src/renderer/painter_raster.cpp +++ b/src/renderer/painter_raster.cpp @@ -1,9 +1,11 @@ #include +#include #include #include #include #include #include +#include using namespace mbgl; @@ -28,7 +30,7 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr lay const int buffer = bucket.properties.buffer * 4096.0f; - const mat4 oldMatrix = matrix; + const mat4 oldMatrix = vtxMatrix; const mat4 preMatrix = [&]{ mat4 vtxMatrix; @@ -37,7 +39,15 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr lay return vtxMatrix; }(); - matrix = preMatrix; +// *id.matrix = vtxMatrix; + + + map.state.matrixFor(matrix, id); + matrix::ortho(vtxMatrix, -buffer, 4096 + buffer, -4096 - buffer, buffer, 0, 1); + matrix::translate(vtxMatrix, vtxMatrix, 0, -4096, 0); + + +// glUniformMatrix4fv(matrix, 1, GL_FALSE, preMatrix.data()); // call updateTiles to get parsed data for sublayers map.updateTiles(); @@ -49,6 +59,8 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr lay setTranslucent(); map.renderLayer(*it, Map::RenderPass::Translucent); } + +// TODO make a separate renderLayer overload that takes a prerendered + tileID if (bucket.properties.blur > 0) { bucket.texture.blur(*this, bucket.properties.blur); @@ -57,7 +69,7 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr lay bucket.texture.unbindFramebuffer(); finishPrerender(bucket); - matrix = oldMatrix; +// Tile(id).matrix = oldMatrix; }