need to figure out how to use modified matrix in drawing prerendered textures
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user