diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-05-23 18:30:49 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-05-23 18:30:49 +0200 |
commit | 889ef68b5b9d3c794aade48ed829b9ba2fcfac2f (patch) | |
tree | 2a561e25235704cebc765e8a3787ac3809c68735 /include | |
parent | 7d767f518b62ddb00ba0c526b3d52d140c36197c (diff) | |
download | qtlocation-mapboxgl-889ef68b5b9d3c794aade48ed829b9ba2fcfac2f.tar.gz |
first draft at blurring
Diffstat (limited to 'include')
-rw-r--r-- | include/llmr/renderer/bucket.hpp | 3 | ||||
-rw-r--r-- | include/llmr/renderer/painter.hpp | 4 | ||||
-rw-r--r-- | include/llmr/renderer/prerendered_texture.hpp | 28 | ||||
-rw-r--r-- | include/llmr/shader/gaussian_shader.hpp | 29 | ||||
-rw-r--r-- | include/llmr/shader/raster_shader.hpp | 4 |
5 files changed, 68 insertions, 0 deletions
diff --git a/include/llmr/renderer/bucket.hpp b/include/llmr/renderer/bucket.hpp index 283a2c94bb..f8447be89a 100644 --- a/include/llmr/renderer/bucket.hpp +++ b/include/llmr/renderer/bucket.hpp @@ -4,6 +4,7 @@ #include <string> #include <llmr/map/tile.hpp> #include <llmr/util/noncopyable.hpp> +#include <llmr/renderer/prerendered_texture.hpp> namespace llmr { @@ -14,6 +15,8 @@ public: virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id) = 0; virtual bool hasData() const = 0; virtual ~Bucket() {} + + std::unique_ptr<PrerenderedTexture> prerendered; }; } diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp index a1db116b62..10f706880a 100644 --- a/include/llmr/renderer/painter.hpp +++ b/include/llmr/renderer/painter.hpp @@ -19,6 +19,7 @@ #include <llmr/shader/text_shader.hpp> #include <llmr/shader/dot_shader.hpp> #include <llmr/shader/composite_shader.hpp> +#include <llmr/shader/gaussian_shader.hpp> #include <llmr/map/transform_state.hpp> @@ -77,6 +78,7 @@ public: void renderDebugText(DebugBucket& bucket); void renderDebugText(const std::vector<std::string> &strings); + void renderFill(FillBucket& bucket, const FillProperties& properties, const Tile::ID& id, const mat4 &mat); void renderFill(FillBucket& bucket, const std::string& layer_name, const Tile::ID& id); void renderLine(LineBucket& bucket, const std::string& layer_name, const Tile::ID& id); void renderIcon(IconBucket& bucket, const std::string& layer_name, const Tile::ID& id); @@ -148,6 +150,7 @@ private: std::unique_ptr<TextShader> textShader; std::unique_ptr<DotShader> dotShader; std::unique_ptr<CompositeShader> compositeShader; + std::unique_ptr<GaussianShader> gaussianShader; // Set up the stencil quad we're using to generate the stencil mask. VertexBuffer tileStencilBuffer = { @@ -165,6 +168,7 @@ private: VertexArrayObject coveringPlainArray; VertexArrayObject coveringPatternArray; VertexArrayObject coveringRasterArray; + VertexArrayObject coveringGaussianArray; VertexArrayObject compositeArray; VertexArrayObject matteArray; diff --git a/include/llmr/renderer/prerendered_texture.hpp b/include/llmr/renderer/prerendered_texture.hpp new file mode 100644 index 0000000000..f74fe1d115 --- /dev/null +++ b/include/llmr/renderer/prerendered_texture.hpp @@ -0,0 +1,28 @@ +#ifndef LLMR_RENDERER_PRERENDERED_TEXTURE +#define LLMR_RENDERER_PRERENDERED_TEXTURE + +#include <llmr/util/noncopyable.hpp> +#include <llmr/platform/gl.hpp> + +namespace llmr { + +class PrerenderedTexture : private util::noncopyable { +public: + ~PrerenderedTexture(); + + void bindTexture(); + void bindFramebuffer(); + void unbindFramebuffer(); + + inline GLuint getTexture() const { return texture; } + +private: + GLint previous_fbo = 0; + GLuint fbo = 0; + GLuint texture = 0; + bool mipmapped = false; +}; + +} + +#endif diff --git a/include/llmr/shader/gaussian_shader.hpp b/include/llmr/shader/gaussian_shader.hpp new file mode 100644 index 0000000000..c3589c1534 --- /dev/null +++ b/include/llmr/shader/gaussian_shader.hpp @@ -0,0 +1,29 @@ +#ifndef LLMR_RENDERER_SHADER_GAUSSIAN +#define LLMR_RENDERER_SHADER_GAUSSIAN + +#include <llmr/shader/shader.hpp> + +namespace llmr { + +class GaussianShader : public Shader { +public: + GaussianShader(); + + void bind(char *offset); + + void setImage(int32_t image); + void setOffset(const std::array<float, 2>& offset); + +private: + int32_t a_pos = -1; + + int32_t image = 0; + int32_t u_image = -1; + + std::array<float, 2> offset = {{}}; + int32_t u_offset = -1; +}; + +} + +#endif diff --git a/include/llmr/shader/raster_shader.hpp b/include/llmr/shader/raster_shader.hpp index d037b6e808..adc945e460 100644 --- a/include/llmr/shader/raster_shader.hpp +++ b/include/llmr/shader/raster_shader.hpp @@ -13,6 +13,7 @@ public: void setImage(int32_t image); void setOpacity(float opacity); + void setBuffer(float buffer); private: int32_t a_pos = -1; @@ -22,6 +23,9 @@ private: float opacity = 0; int32_t u_opacity = -1; + + float buffer = 0; + int32_t u_buffer = -1; }; } |