summaryrefslogtreecommitdiff
path: root/include/llmr/renderer
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-02-28 12:25:45 +0100
committerKonstantin Käfer <mail@kkaefer.com>2014-02-28 12:25:45 +0100
commit4e73a4d47cd1287f6a5ac3bfc66dc024b0b268e4 (patch)
tree70def4e281be863605a6c93d9ec51be7b6497c69 /include/llmr/renderer
parentae3bd04171a671a877c3240ed505096186c280cc (diff)
parent675b8eb1fef9e4fc99516b2fa64505107b1fa6bf (diff)
downloadqtlocation-mapboxgl-4e73a4d47cd1287f6a5ac3bfc66dc024b0b268e4.tar.gz
Merge branch 'master' into tessellation
Conflicts: include/llmr/renderer/fill_bucket.hpp src/renderer/fill_bucket.cpp src/renderer/painter.cpp
Diffstat (limited to 'include/llmr/renderer')
-rw-r--r--include/llmr/renderer/fill_bucket.hpp7
-rw-r--r--include/llmr/renderer/line_bucket.hpp6
-rw-r--r--include/llmr/renderer/painter.hpp4
-rw-r--r--include/llmr/renderer/point_bucket.hpp51
-rw-r--r--include/llmr/renderer/shader-point.hpp41
5 files changed, 103 insertions, 6 deletions
diff --git a/include/llmr/renderer/fill_bucket.hpp b/include/llmr/renderer/fill_bucket.hpp
index d5f36211e5..4c82b7b315 100644
--- a/include/llmr/renderer/fill_bucket.hpp
+++ b/include/llmr/renderer/fill_bucket.hpp
@@ -68,10 +68,11 @@ private:
std::shared_ptr<LineElementsBuffer> lineElementsBuffer;
// hold information on where the vertices are located in the FillBuffer
- const uint32_t vertex_start;
- const uint32_t triangle_elements_start;
- const uint32_t line_elements_start;
+ const size_t vertex_start;
+ const size_t triangle_elements_start;
+ const size_t line_elements_start;
VertexArrayObject array;
+
std::vector<triangle_group_type> triangleGroups;
std::vector<line_group_type> lineGroups;
diff --git a/include/llmr/renderer/line_bucket.hpp b/include/llmr/renderer/line_bucket.hpp
index 993b1d18ed..8b03fc5ad4 100644
--- a/include/llmr/renderer/line_bucket.hpp
+++ b/include/llmr/renderer/line_bucket.hpp
@@ -47,9 +47,9 @@ private:
std::shared_ptr<TriangleElementsBuffer> triangleElementsBuffer;
std::shared_ptr<PointElementsBuffer> pointElementsBuffer;
- const uint32_t vertex_start;
- const uint32_t triangle_elements_start;
- const uint32_t point_elements_start;
+ const size_t vertex_start;
+ const size_t triangle_elements_start;
+ const size_t point_elements_start;
std::vector<triangle_group_type> triangleGroups;
std::vector<point_group_type> pointGroups;
diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp
index b6934131d6..aa3a3d73f7 100644
--- a/include/llmr/renderer/painter.hpp
+++ b/include/llmr/renderer/painter.hpp
@@ -12,6 +12,7 @@
#include <llmr/renderer/shader-pattern.hpp>
#include <llmr/renderer/shader-line.hpp>
#include <llmr/renderer/shader-linejoin.hpp>
+#include <llmr/renderer/shader-point.hpp>
namespace llmr {
@@ -23,6 +24,7 @@ class Tile;
class FillBucket;
class LineBucket;
+class PointBucket;
class Painter : private util::noncopyable {
public:
@@ -36,6 +38,7 @@ public:
void renderBackground();
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 renderPoint(PointBucket& bucket, const std::string& layer_name, const Tile::ID& id);
private:
void setupShaders();
@@ -63,6 +66,7 @@ private:
std::unique_ptr<LineShader> lineShader;
std::unique_ptr<LinejoinShader> linejoinShader;
std::unique_ptr<PatternShader> patternShader;
+ std::unique_ptr<PointShader> pointShader;
// Set up the stencil quad we're using to generate the stencil mask.
VertexBuffer tileStencilBuffer = {
diff --git a/include/llmr/renderer/point_bucket.hpp b/include/llmr/renderer/point_bucket.hpp
new file mode 100644
index 0000000000..9da7edc30e
--- /dev/null
+++ b/include/llmr/renderer/point_bucket.hpp
@@ -0,0 +1,51 @@
+#ifndef LLMR_RENDERER_POINTBUCKET
+#define LLMR_RENDERER_POINTBUCKET
+
+#include <llmr/renderer/bucket.hpp>
+#include <llmr/style/bucket_description.hpp>
+#include <llmr/geometry/elements_buffer.hpp>
+#include <llmr/geometry/point_buffer.hpp>
+
+#include <vector>
+#include <memory>
+
+#ifndef BUFFER_OFFSET
+#define BUFFER_OFFSET(i) ((char *)nullptr + (i))
+#endif
+
+namespace llmr {
+
+class Style;
+class PointVertexBuffer;
+class BucketDescription;
+class PointShader;
+struct Coordinate;
+struct pbf;
+
+class PointBucket : public Bucket {
+public:
+ PointBucket(const std::shared_ptr<PointVertexBuffer>& vertexBuffer,
+ const BucketDescription& bucket_desc);
+
+ virtual void render(Painter& painter, const std::string& layer_name, const Tile::ID& id);
+
+ void addGeometry(pbf& data);
+
+ bool hasPoints() const;
+
+ void drawPoints(PointShader& shader);
+
+public:
+ const BucketGeometryDescription geometry;
+
+private:
+ std::shared_ptr<PointVertexBuffer> vertexBuffer;
+ VertexArrayObject<PointShader> array;
+
+ const size_t vertex_start;
+ size_t vertex_end = 0;
+};
+
+}
+
+#endif
diff --git a/include/llmr/renderer/shader-point.hpp b/include/llmr/renderer/shader-point.hpp
new file mode 100644
index 0000000000..1de38504cf
--- /dev/null
+++ b/include/llmr/renderer/shader-point.hpp
@@ -0,0 +1,41 @@
+#ifndef LLMR_RENDERER_SHADER_POINT
+#define LLMR_RENDERER_SHADER_POINT
+
+#include "shader.hpp"
+
+namespace llmr {
+
+class PointShader : public Shader {
+public:
+ PointShader();
+
+ void bind(char *offset);
+
+ void setImage(int32_t image);
+ void setColor(const std::array<float, 4>& color);
+ void setPointTopLeft(const std::array<float, 2>& point_tl);
+ void setPointBottomRight(const std::array<float, 2>& point_br);
+ void setSize(float size);
+
+private:
+ int32_t a_pos = -1;
+
+ int32_t image = -1;
+ int32_t u_image = -1;
+
+ std::array<float, 4> color = {};
+ int32_t u_color = -1;
+
+ std::array<float, 2> point_tl = {};
+ int32_t u_point_tl = -1;
+
+ std::array<float, 2> point_br = {};
+ int32_t u_point_br = -1;
+
+ float size = 0;
+ int32_t u_size = -1;
+};
+
+}
+
+#endif