diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-02-28 12:25:45 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-02-28 12:25:45 +0100 |
commit | 4e73a4d47cd1287f6a5ac3bfc66dc024b0b268e4 (patch) | |
tree | 70def4e281be863605a6c93d9ec51be7b6497c69 /include/llmr/renderer | |
parent | ae3bd04171a671a877c3240ed505096186c280cc (diff) | |
parent | 675b8eb1fef9e4fc99516b2fa64505107b1fa6bf (diff) | |
download | qtlocation-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.hpp | 7 | ||||
-rw-r--r-- | include/llmr/renderer/line_bucket.hpp | 6 | ||||
-rw-r--r-- | include/llmr/renderer/painter.hpp | 4 | ||||
-rw-r--r-- | include/llmr/renderer/point_bucket.hpp | 51 | ||||
-rw-r--r-- | include/llmr/renderer/shader-point.hpp | 41 |
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 |