Allow property functions for prerender properties, but tie them to the tile's zoom level instead of the map zoom level
fixes #253
This commit is contained in:
@@ -85,9 +85,9 @@ public:
|
||||
void renderText(TextBucket& bucket, const std::string& layer_name, const Tile::ID& id);
|
||||
void renderRaster(RasterBucket& bucket, const std::string& layer_name, const Tile::ID& id);
|
||||
|
||||
void preparePrerender(const GenericProperties &properties);
|
||||
void finishPrerender(const GenericProperties &properties);
|
||||
void renderPrerenderedTexture(Bucket &bucket, const GenericProperties &properties);
|
||||
void preparePrerender(PrerenderedTexture &texture);
|
||||
void finishPrerender(PrerenderedTexture &texture);
|
||||
void renderPrerenderedTexture(PrerenderedTexture &texture, const GenericProperties &properties);
|
||||
|
||||
void resize();
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <llmr/util/noncopyable.hpp>
|
||||
#include <llmr/platform/gl.hpp>
|
||||
#include <llmr/style/properties.hpp>
|
||||
|
||||
namespace llmr {
|
||||
|
||||
@@ -10,7 +11,7 @@ class Painter;
|
||||
|
||||
class PrerenderedTexture : private util::noncopyable {
|
||||
public:
|
||||
PrerenderedTexture(uint16_t size);
|
||||
PrerenderedTexture(const PrerenderProperties &properties);
|
||||
~PrerenderedTexture();
|
||||
|
||||
void bindTexture();
|
||||
@@ -21,8 +22,10 @@ public:
|
||||
|
||||
void blur(Painter& painter, uint16_t passes);
|
||||
|
||||
public:
|
||||
const PrerenderProperties properties;
|
||||
|
||||
private:
|
||||
const uint16_t size;
|
||||
GLint previous_fbo = 0;
|
||||
GLuint fbo = 0;
|
||||
GLuint texture = 0;
|
||||
|
||||
@@ -93,10 +93,16 @@ struct GenericClass {
|
||||
boost::optional<TranslateAnchor> translateAnchor;
|
||||
boost::optional<FunctionProperty> opacity;
|
||||
boost::optional<PropertyTransition> opacity_transition;
|
||||
boost::optional<bool> prerender;
|
||||
boost::optional<float> prerenderBuffer;
|
||||
boost::optional<uint16_t> prerenderSize;
|
||||
boost::optional<uint16_t> prerenderBlur;
|
||||
float prerender = false;
|
||||
boost::optional<FunctionProperty> prerenderBuffer;
|
||||
boost::optional<FunctionProperty> prerenderSize;
|
||||
boost::optional<FunctionProperty> prerenderBlur;
|
||||
};
|
||||
|
||||
struct PrerenderProperties {
|
||||
float buffer = 1.0f / 32.0f;
|
||||
uint16_t size = 256;
|
||||
uint16_t blur = 0;
|
||||
};
|
||||
|
||||
struct GenericProperties {
|
||||
@@ -104,10 +110,21 @@ struct GenericProperties {
|
||||
std::array<float, 2> translate = {{ 0, 0 }};
|
||||
TranslateAnchor translateAnchor = TranslateAnchor::Map;
|
||||
float opacity = 1.0;
|
||||
bool prerender = false;
|
||||
float prerenderBuffer = 1.0f / 32.0f;
|
||||
uint16_t prerenderSize = 256;
|
||||
uint16_t prerenderBlur = 0;
|
||||
bool prerender;
|
||||
|
||||
// These are unresolved properties because the value here is per tile, so it might differ.
|
||||
boost::optional<FunctionProperty> prerenderBuffer;
|
||||
boost::optional<FunctionProperty> prerenderSize;
|
||||
boost::optional<FunctionProperty> prerenderBlur;
|
||||
|
||||
// Obtains prerender properties by integer zoom level.
|
||||
inline PrerenderProperties getPrerenderProperties(int8_t z) const {
|
||||
PrerenderProperties props;
|
||||
if (prerenderBuffer) props.buffer = prerenderBuffer.get().evaluate<float>(z);
|
||||
if (prerenderSize) props.size = prerenderSize.get().evaluate<uint16_t>(z);
|
||||
if (prerenderBlur) props.blur = prerenderBlur.get().evaluate<uint16_t>(z);
|
||||
return props;
|
||||
}
|
||||
|
||||
virtual bool isVisible() const {
|
||||
if (!enabled) { return false; }
|
||||
|
||||
Reference in New Issue
Block a user