some cleaning up, raster spin->hue-rotate rename
This commit is contained in:
@@ -43,6 +43,7 @@ class RasterBucket;
|
||||
class PrerenderedTexture;
|
||||
|
||||
struct FillProperties;
|
||||
struct RasterProperties;
|
||||
struct CompositeProperties;
|
||||
|
||||
class LayerDescription;
|
||||
@@ -87,9 +88,8 @@ public:
|
||||
void renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id, const mat4 &matrix);
|
||||
|
||||
void preparePrerender(RasterBucket &bucket);
|
||||
void finishPrerender(RasterBucket &bucket);
|
||||
|
||||
void renderPrerenderedTexture(RasterBucket &bucket, const mat4 &matrix);
|
||||
void renderPrerenderedTexture(RasterBucket &bucket, const mat4 &matrix, const RasterProperties& properties);
|
||||
|
||||
void createPrerendered(RasterBucket& bucket, std::shared_ptr<StyleLayer> layer_desc, const Tile::ID& id);
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ enum class PropertyKey {
|
||||
CompositeOpacity,
|
||||
|
||||
RasterOpacity,
|
||||
RasterSpin,
|
||||
RasterHueRotate,
|
||||
RasterBrightnessLow,
|
||||
RasterBrightnessHigh,
|
||||
RasterSaturation,
|
||||
|
||||
@@ -89,7 +89,7 @@ struct CompositeProperties {
|
||||
struct RasterProperties {
|
||||
inline RasterProperties() {}
|
||||
float opacity = 1.0f;
|
||||
float spin = 0.0f;
|
||||
float hue_rotate = 0.0f;
|
||||
std::array<float, 2> brightness = {{ 0, 1 }};
|
||||
float saturation = 0.0f;
|
||||
float contrast = 0.0f;
|
||||
|
||||
@@ -45,7 +45,6 @@ TileParser::TileParser(const std::string &data, VectorTileData &tile,
|
||||
spriteAtlas(spriteAtlas),
|
||||
sprite(sprite),
|
||||
collision(tile.id.z, 4096, tile.source.tile_size, tile.depth) {
|
||||
// placement(tile.id.z, tile.id.z >= tile.source.max_zoom ? tile.source.max_zoom - tile.id.z : 1) { // TODO : i'm guessing remove this in the rebase?
|
||||
}
|
||||
|
||||
void TileParser::parse() {
|
||||
@@ -84,7 +83,6 @@ void TileParser::parseStyleLayers(std::shared_ptr<StyleLayerGroup> group) {
|
||||
// contain any data that falls into this bucket.
|
||||
tile.buckets[layer_desc->bucket->name] = std::move(bucket);
|
||||
}
|
||||
// TODO? here, no bucket is being created for prerender raster layers (though buckets are being created for its sublayers)...
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "[WARNING] layer '%s' does not have child layers or buckets\n", layer_desc->id.c_str());
|
||||
@@ -116,8 +114,7 @@ std::unique_ptr<Bucket> TileParser::createBucket(std::shared_ptr<StyleBucket> bu
|
||||
} else {
|
||||
fprintf(stderr, "[WARNING] unknown bucket render type for layer '%s' (source layer '%s')\n", bucket_desc->name.c_str(), bucket_desc->source_layer.c_str());
|
||||
}
|
||||
} else if (bucket_desc->render.is<StyleBucketRaster>()) {
|
||||
// Assume this is a prerendered raster layer -- TODO more thorough checking here??
|
||||
} else if (bucket_desc->render.is<StyleBucketRaster>() && bucket_desc->render.get<StyleBucketRaster>().prerendered == true) {
|
||||
return createRasterBucket(texturePool, bucket_desc->render.get<StyleBucketRaster>());
|
||||
} else {
|
||||
// The layer specified in the bucket does not exist. Do nothing.
|
||||
|
||||
@@ -20,14 +20,7 @@ void Painter::preparePrerender(RasterBucket &bucket) {
|
||||
glViewport(0, 0, bucket.properties.size, bucket.properties.size);
|
||||
}
|
||||
|
||||
void Painter::finishPrerender(RasterBucket &bucket) {
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
|
||||
glViewport(0, 0, gl_viewport[0], gl_viewport[1]);
|
||||
}
|
||||
|
||||
void Painter::renderPrerenderedTexture(RasterBucket &bucket, const mat4 &matrix) {
|
||||
void Painter::renderPrerenderedTexture(RasterBucket &bucket, const mat4 &matrix, const RasterProperties& properties) {
|
||||
const int buffer = bucket.properties.buffer * 4096.0f;
|
||||
|
||||
// draw the texture on a quad
|
||||
@@ -40,8 +33,7 @@ void Painter::renderPrerenderedTexture(RasterBucket &bucket, const mat4 &matrix)
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
rasterShader->setImage(0);
|
||||
rasterShader->setBuffer(buffer);
|
||||
rasterShader->setOpacity(1);
|
||||
// rasterShader->setOpacity(bucket.properties.opacity); // TODO find a place to pass opacity and change this back
|
||||
rasterShader->setOpacity(properties.opacity);
|
||||
bucket.texture.bindTexture();
|
||||
coveringRasterArray.bind(*rasterShader, tileStencilBuffer, BUFFER_OFFSET(0));
|
||||
glDrawArrays(GL_TRIANGLES, 0, (GLsizei)tileStencilBuffer.index());
|
||||
|
||||
@@ -22,16 +22,8 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay
|
||||
|
||||
preparePrerender(bucket);
|
||||
|
||||
// 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 oldMatrix = vtxMatrix;
|
||||
|
||||
const mat4 preMatrix = [&]{
|
||||
mat4 vtxMatrix;
|
||||
matrix::ortho(vtxMatrix, -buffer, 4096 + buffer, -4096 - buffer, buffer, 0, 1);
|
||||
@@ -39,20 +31,8 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay
|
||||
return vtxMatrix;
|
||||
}();
|
||||
|
||||
// *id.matrix = vtxMatrix;
|
||||
|
||||
|
||||
|
||||
|
||||
// glUniformMatrix4fv(matrix, 1, GL_FALSE, preMatrix.data());
|
||||
|
||||
// call updateTiles to get parsed data for sublayers
|
||||
map.updateTiles();
|
||||
|
||||
// map.state.matrixFor(matrix, id);
|
||||
// matrix::ortho(matrix, -buffer, 4096 + buffer, -4096 - buffer, buffer, 0, 1);
|
||||
// matrix::translate(matrix, matrix, 0, -4096, 0);
|
||||
|
||||
|
||||
int i = 0;
|
||||
for (auto it = layer_desc->layers->layers.begin(), end = layer_desc->layers->layers.end(); it != end; ++it, --i) {
|
||||
@@ -62,39 +42,37 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay
|
||||
map.renderLayer(*it, Map::RenderPass::Translucent, &id, &preMatrix);
|
||||
}
|
||||
|
||||
// TODO make a separate renderLayer overload that takes a prerendered + tileID
|
||||
|
||||
if (bucket.properties.blur > 0) {
|
||||
bucket.texture.blur(*this, bucket.properties.blur);
|
||||
}
|
||||
|
||||
bucket.texture.unbindFramebuffer();
|
||||
finishPrerender(bucket);
|
||||
|
||||
// Tile(id).matrix = oldMatrix;
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
|
||||
glViewport(0, 0, gl_viewport[0], gl_viewport[1]);
|
||||
|
||||
}
|
||||
|
||||
renderPrerenderedTexture(bucket, matrix);
|
||||
renderPrerenderedTexture(bucket, matrix, properties);
|
||||
|
||||
}
|
||||
|
||||
depthMask(false);
|
||||
// Only draw non-prerendered raster here
|
||||
if (bucket.hasData()) {
|
||||
depthMask(false);
|
||||
|
||||
useProgram(rasterShader->program);
|
||||
rasterShader->setMatrix(matrix);
|
||||
rasterShader->setBuffer(0);
|
||||
rasterShader->setOpacity(1);
|
||||
// rasterShader->setOpacity(properties.opacity * tile_data->raster->opacity); // TODO fix
|
||||
useProgram(rasterShader->program);
|
||||
rasterShader->setMatrix(matrix);
|
||||
rasterShader->setBuffer(0);
|
||||
rasterShader->setOpacity(properties.opacity);
|
||||
|
||||
glDepthRange(strata + strata_epsilon, 1.0f);
|
||||
glDepthRange(strata + strata_epsilon, 1.0f);
|
||||
|
||||
if (!bucket.hasData()) {
|
||||
// bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray, bucket.texture.getTexture());
|
||||
} else {
|
||||
bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray);
|
||||
}
|
||||
|
||||
depthMask(true);
|
||||
depthMask(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ const std::map<PropertyKey, PropertyValue> PropertyFallbackValue::properties = {
|
||||
{ PropertyKey::CompositeOpacity, defaultStyleProperties<CompositeProperties>().opacity },
|
||||
|
||||
{ PropertyKey::RasterOpacity, defaultStyleProperties<RasterProperties>().opacity },
|
||||
{ PropertyKey::RasterSpin, defaultStyleProperties<RasterProperties>().spin },
|
||||
{ PropertyKey::RasterHueRotate, defaultStyleProperties<RasterProperties>().hue_rotate },
|
||||
{ PropertyKey::RasterBrightnessLow, defaultStyleProperties<RasterProperties>().brightness[0] },
|
||||
{ PropertyKey::RasterBrightnessHigh, defaultStyleProperties<RasterProperties>().brightness[1] },
|
||||
{ PropertyKey::RasterSaturation, defaultStyleProperties<RasterProperties>().saturation },
|
||||
|
||||
@@ -228,7 +228,7 @@ void StyleLayer::applyStyleProperties<RasterProperties>(const float z, const tim
|
||||
properties.set<RasterProperties>();
|
||||
RasterProperties &raster = properties.get<RasterProperties>();
|
||||
applyStyleProperty(PropertyKey::RasterOpacity, raster.opacity, z, now);
|
||||
applyStyleProperty(PropertyKey::RasterSpin, raster.spin, z, now);
|
||||
applyStyleProperty(PropertyKey::RasterHueRotate, raster.hue_rotate, z, now);
|
||||
applyStyleProperty(PropertyKey::RasterBrightnessLow, raster.brightness[0], z, now);
|
||||
applyStyleProperty(PropertyKey::RasterBrightnessHigh, raster.brightness[1], z, now);
|
||||
applyStyleProperty(PropertyKey::RasterSaturation, raster.saturation, z, now);
|
||||
|
||||
@@ -639,8 +639,8 @@ void StyleParser::parseStyle(JSVal value, ClassProperties &klass) {
|
||||
// TODO edit these?:
|
||||
parseOptionalProperty<Function<float>>("raster-opacity", Key::RasterOpacity, klass, value);
|
||||
parseOptionalProperty<PropertyTransition>("transition-raster-opacity", Key::RasterOpacity, klass, value);
|
||||
parseOptionalProperty<Function<float>>("raster-spin", Key::RasterSpin, klass, value);
|
||||
parseOptionalProperty<PropertyTransition>("transition-raster-spin", Key::RasterSpin, klass, value);
|
||||
parseOptionalProperty<Function<float>>("raster-hue-rotate", Key::RasterHueRotate, klass, value);
|
||||
parseOptionalProperty<PropertyTransition>("transition-raster-hue-rotate", Key::RasterHueRotate, klass, value);
|
||||
parseOptionalProperty<Function<float>>("raster-brightness-low", Key::RasterBrightnessLow, klass, value);
|
||||
parseOptionalProperty<PropertyTransition>("transition-raster-brightness-low", Key::RasterBrightnessLow, klass, value);
|
||||
parseOptionalProperty<Function<float>>("raster-brightness-high", Key::RasterBrightnessHigh, klass, value);
|
||||
|
||||
Reference in New Issue
Block a user