summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-05-23 18:30:49 +0200
committerKonstantin Käfer <mail@kkaefer.com>2014-05-23 18:30:49 +0200
commit889ef68b5b9d3c794aade48ed829b9ba2fcfac2f (patch)
tree2a561e25235704cebc765e8a3787ac3809c68735 /include
parent7d767f518b62ddb00ba0c526b3d52d140c36197c (diff)
downloadqtlocation-mapboxgl-889ef68b5b9d3c794aade48ed829b9ba2fcfac2f.tar.gz
first draft at blurring
Diffstat (limited to 'include')
-rw-r--r--include/llmr/renderer/bucket.hpp3
-rw-r--r--include/llmr/renderer/painter.hpp4
-rw-r--r--include/llmr/renderer/prerendered_texture.hpp28
-rw-r--r--include/llmr/shader/gaussian_shader.hpp29
-rw-r--r--include/llmr/shader/raster_shader.hpp4
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;
};
}