rm rasterize_properties, should be close to working...doesn't work

This commit is contained in:
Lauren Budorick
2014-08-06 17:40:48 -07:00
parent 9e1156d660
commit 560cc112e1
20 changed files with 94 additions and 279 deletions

View File

@@ -150,54 +150,6 @@ void Painter::renderFill(FillBucket& bucket, std::shared_ptr<StyleLayer> layer_d
// Abort early.
if (!bucket.hasData()) return;
const FillProperties &properties = layer_desc->getProperties<FillProperties>();
// if (layer_desc->rasterize && layer_desc->rasterize->isEnabled(id.z)) {
// if (pass == Translucent) {
// const RasterizedProperties rasterize = layer_desc->rasterize->get(id.z);
// // Buffer value around the 0..4096 extent that will be drawn into the 256x256 pixel
// // texture. We later scale the texture so that the actual bounds will align with this
// // tile's bounds. The reason we do this is so that the
// if (!bucket.prerendered) {
// bucket.prerendered = std::make_unique<PrerenderedTexture>(rasterize);
// bucket.prerendered->bindFramebuffer();
//
// preparePrerender(*bucket.prerendered);
//
// const FillProperties modifiedProperties = [&]{
// FillProperties modifiedProperties = properties;
// modifiedProperties.opacity = 1;
// return modifiedProperties;
// }();
//
// // When drawing the fill, we want to draw a buffer around too, so we
// // essentially downscale everyting, and then upscale it later when rendering.
// const int buffer = rasterize.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;
// }();
//
// setOpaque();
// renderFill(bucket, modifiedProperties, id, vtxMatrix);
//
// setTranslucent();
// renderFill(bucket, modifiedProperties, id, vtxMatrix);
//
// if (rasterize.blur > 0) {
// bucket.prerendered->blur(*this, rasterize.blur);
// }
//
// // RESET STATE
// bucket.prerendered->unbindFramebuffer();
// finishPrerender(*bucket.prerendered);
// }
//
// renderPrerenderedTexture(*bucket.prerendered, properties);
// }
// } else {
const mat4 &vtxMatrix = translatedMatrix(properties.translate, id, properties.translateAnchor);
renderFill(bucket, properties, id, vtxMatrix);
// }
const mat4 &vtxMatrix = translatedMatrix(properties.translate, id, properties.translateAnchor);
renderFill(bucket, properties, id, vtxMatrix);
}

View File

@@ -1,9 +1,11 @@
#include <mbgl/renderer/painter.hpp>
#include <mbgl/style/style_properties.hpp>
#include <mbgl/renderer/prerendered_texture.hpp>
#include <mbgl/renderer/raster_bucket.hpp>
using namespace mbgl;
void Painter::preparePrerender(PrerenderedTexture &texture) {
void Painter::preparePrerender(RasterBucket &bucket) {
glDisable(GL_DEPTH_TEST);
glDisable(GL_STENCIL_TEST);
@@ -14,19 +16,18 @@ void Painter::preparePrerender(PrerenderedTexture &texture) {
#endif
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0, 0, texture.properties.size, texture.properties.size);
glViewport(0, 0, bucket.properties.size, bucket.properties.size);
}
void Painter::finishPrerender(PrerenderedTexture &/*texture*/) {
void Painter::finishPrerender(RasterBucket &bucket) {
glEnable(GL_DEPTH_TEST);
glEnable(GL_STENCIL_TEST);
glViewport(0, 0, gl_viewport[0], gl_viewport[1]);
}
template <typename Properties>
void Painter::renderPrerenderedTexture(PrerenderedTexture &texture, const Properties &properties) {
const int buffer = texture.properties.buffer * 4096.0f;
void Painter::renderPrerenderedTexture(RasterBucket &bucket) {
const int buffer = bucket.properties.buffer * 4096.0f;
// draw the texture on a quad
useProgram(rasterShader->program);
@@ -39,11 +40,8 @@ void Painter::renderPrerenderedTexture(PrerenderedTexture &texture, const Proper
rasterShader->setImage(0);
rasterShader->setBuffer(buffer);
rasterShader->setOpacity(1);
// rasterShader->setOpacity(properties.opacity); // TODO find a place to pass opacity and change this back
texture.bindTexture();
// rasterShader->setOpacity(bucket.properties.opacity); // TODO find a place to pass opacity and change this back
bucket.texture.bindTexture();
coveringRasterArray.bind(*rasterShader, tileStencilBuffer, BUFFER_OFFSET(0));
glDrawArrays(GL_TRIANGLES, 0, (GLsizei)tileStencilBuffer.index());
}
template void Painter::renderPrerenderedTexture(PrerenderedTexture &, const FillProperties &);
template void Painter::renderPrerenderedTexture(PrerenderedTexture &, const RasterizedProperties &);

View File

@@ -11,81 +11,37 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay
const RasterProperties &properties = layer_desc->getProperties<RasterProperties>();
if (layer_desc->rasterize) {
auto rasterize = std::make_unique<RasterizeProperties>();
if (layer_desc->layers) {
bucket.texture.bindFramebuffer();
if (pass == Translucent) {
// Buffer value around the 0..4096 extent that will be drawn into the 256x256 pixel
// texture. We later scale the texture so that the actual bounds will align with this
// tile's bounds. The reason we do this is so that the
const RasterizedProperties rasterize = layer_desc->rasterize->get(id.z);
if (!bucket.prerendered) {
bucket.prerendered = std::make_unique<PrerenderedTexture>(rasterize);
bucket.prerendered->bindFramebuffer();
preparePrerender(*bucket.prerendered);
const RasterProperties modifiedProperties = [&]{
RasterProperties modifiedProperties = properties;
// modifiedProperties.opacity = 1; // figure out why this was here
return modifiedProperties;
}();
// When drawing the fill, we want to draw a buffer around too, so we
// essentially downscale everyting, and then upscale it later when rendering.
const int buffer = rasterize.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;
}();
setOpaque();
// renderFill(bucket, modifiedProperties, id, vtxMatrix);
// resize();
// changeMatrix();
// map.updateRenderState();
// drawClippingMasks(getActiveSources());
// Actually render the layers
map.renderLayers(layer_desc->layers);
// Finalize the rendering, e.g. by calling debug render calls per tile.
// This guarantees that we have at least one function per tile called.
// When only rendering layers via the stylesheet, it's possible that we don't
// ever visit a tile during rendering.
// for (const std::shared_ptr<StyleSource> &source : getActiveSources()) {
// source->source->finishRender(painter);
// }
//
// // Schedule another rerender when we definitely need a next frame.
// if (transform.needsTransition() || style->hasTransitions()) {
// update();
// }
glFlush();
preparePrerender(bucket);
if (rasterize.blur > 0) {
bucket.prerendered->blur(*this, rasterize.blur);
}
// RESET STATE
bucket.prerendered->unbindFramebuffer();
finishPrerender(*bucket.prerendered);
}
renderPrerenderedTexture(*bucket.prerendered, properties);
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;
}();
map.renderLayers(layer_desc->layers);
if (bucket.properties.blur > 0) {
bucket.texture.blur(*this, bucket.properties.blur);
}
bucket.texture.unbindFramebuffer();
finishPrerender(bucket);
renderPrerenderedTexture(bucket);
}
depthMask(false);
@@ -94,7 +50,7 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay
rasterShader->setMatrix(matrix);
rasterShader->setBuffer(0);
rasterShader->setOpacity(1);
// rasterShader->setOpacity(properties.opacity * tile_data->raster->opacity);
// rasterShader->setOpacity(properties.opacity * tile_data->raster->opacity); // TODO fix
glDepthRange(strata + strata_epsilon, 1.0f);
bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray);
@@ -102,7 +58,3 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay
depthMask(true);
}
void Painter::renderRaster(GLuint texture, const RasterizeProperties &properties){
// TODO do I need this?
// map.renderLayers(layer_desc->layers);
}

View File

@@ -1,10 +1,11 @@
#include <mbgl/renderer/prerendered_texture.hpp>
#include <mbgl/renderer/painter.hpp>
#include <mbgl/style/style_bucket.hpp>
using namespace mbgl;
PrerenderedTexture::PrerenderedTexture(const RasterizedProperties &properties)
PrerenderedTexture::PrerenderedTexture(const StyleBucketRaster &properties)
: properties(properties) {
}
@@ -40,8 +41,7 @@ void PrerenderedTexture::bindFramebuffer() {
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
// glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, properties.size, properties.size, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); // TODO change this back once i have non-zero size readings
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, properties.size, properties.size, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
}

View File

@@ -3,16 +3,12 @@
using namespace mbgl;
RasterBucket::RasterBucket(const std::shared_ptr<Texturepool> &texturepool)
: raster(texturepool) {
RasterBucket::RasterBucket(const std::shared_ptr<Texturepool> &texturepool, const StyleBucketRaster& properties)
: properties(properties),
texture(properties),
raster(texturepool) {
}
//RasterBucket::RasterBucket(const StyleBucketRaster &properties)
// : properties(properties) {
//}
// TODO ^ Somehow overload with another constructor for prerender?
void RasterBucket::render(Painter &painter, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID &id) {
painter.renderRaster(*this, layer_desc, id);
}