need to figure out how to use modified matrix in drawing prerendered textures

This commit is contained in:
Lauren Budorick
2014-08-07 17:43:21 -07:00
parent ec7f7de5c4
commit 54ed547f90
5 changed files with 38 additions and 29 deletions

View File

@@ -125,6 +125,7 @@ public:
inline std::shared_ptr<uv::loop> getLoop() { return loop; }
inline timestamp getAnimationTime() const { return animationTime; }
inline timestamp getTime() const { return animationTime; }
void updateTiles();
private:
// uv async callbacks
@@ -139,7 +140,6 @@ private:
void updateSources();
void updateSources(const std::shared_ptr<StyleLayerGroup> &group);
void updateTiles();
void updateRenderState();
size_t countLayers(const std::vector<LayerDescription>& layers);

View File

@@ -705,7 +705,7 @@ void Map::renderLayer(std::shared_ptr<StyleLayer> layer_desc, RenderPass pass) {
if (!layer_desc->getProperties<SymbolProperties>().isVisible()) return;
break;
case StyleLayerType::Raster:
if (pass == Translucent) return;
if (pass == Opaque) return;
if (!layer_desc->getProperties<RasterProperties>().isVisible()) return;
break;
default:

View File

@@ -68,7 +68,7 @@ void TileParser::parseStyleLayers(std::shared_ptr<StyleLayerGroup> group) {
if (layer_desc->isBackground()) {
// background is a special, fake bucket
continue;
} else if (layer_desc->layers && layer_desc->type != StyleLayerType::Raster) {
} else if (layer_desc->layers) {
// This is a layer group.
parseStyleLayers(layer_desc->layers);
}

View File

@@ -14,6 +14,7 @@ void Painter::preparePrerender(RasterBucket &bucket) {
const GLenum discards[] = {GL_COLOR_ATTACHMENT0};
glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, discards);
#endif
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0, 0, bucket.properties.size, bucket.properties.size);
@@ -28,7 +29,7 @@ void Painter::finishPrerender(RasterBucket &bucket) {
void Painter::renderPrerenderedTexture(RasterBucket &bucket) {
const int buffer = bucket.properties.buffer * 4096.0f;
// draw the texture on a quad
useProgram(rasterShader->program);
rasterShader->setMatrix(matrix);

View File

@@ -7,39 +7,47 @@
using namespace mbgl;
void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id) {
if (pass == Translucent) return;
if (pass != Translucent) return;
const RasterProperties &properties = layer_desc->getProperties<RasterProperties>();
if (layer_desc->layers) {
bucket.texture.bindFramebuffer();
preparePrerender(bucket);
if (!bucket.texture.getTexture()) {
const RasterProperties modifiedProperties = [&]{
RasterProperties modifiedProperties = properties;
modifiedProperties.opacity = 1; // figure out why this was here
return modifiedProperties;
}();
bucket.texture.bindFramebuffer();
preparePrerender(bucket);
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;
}();
map.renderLayers(layer_desc->layers);
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;
// }();
// TODO set painter->matrix = vtxMatrix; ?
map.updateTiles();
map.renderLayers(layer_desc->layers);
if (bucket.properties.blur > 0) {
bucket.texture.blur(*this, bucket.properties.blur);
}
bucket.texture.unbindFramebuffer();
finishPrerender(bucket);
if (bucket.properties.blur > 0) {
bucket.texture.blur(*this, bucket.properties.blur);
}
bucket.texture.unbindFramebuffer();
finishPrerender(bucket);
renderPrerenderedTexture(bucket);
}
@@ -55,7 +63,7 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay
glDepthRange(strata + strata_epsilon, 1.0f);
if (!bucket.hasData()) {
bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray, bucket.texture.getTexture());
// bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray, bucket.texture.getTexture());
} else {
bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray);
}