From 42d0740ef08be4847d7c9c514fa1bb29dd14fd02 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 26 Aug 2014 14:43:29 -0700 Subject: VertexArrayObject and ElementGroup should be noncopyable --- include/mbgl/geometry/elements_buffer.hpp | 3 ++- include/mbgl/geometry/vao.hpp | 5 +++-- include/mbgl/renderer/fill_bucket.hpp | 5 +++-- include/mbgl/renderer/line_bucket.hpp | 6 +++--- include/mbgl/renderer/symbol_bucket.hpp | 4 ++-- 5 files changed, 13 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/include/mbgl/geometry/elements_buffer.hpp b/include/mbgl/geometry/elements_buffer.hpp index 1282beb239..44b5c71dd2 100644 --- a/include/mbgl/geometry/elements_buffer.hpp +++ b/include/mbgl/geometry/elements_buffer.hpp @@ -3,13 +3,14 @@ #include #include +#include #include namespace mbgl { template -struct ElementGroup { +struct ElementGroup : public util::noncopyable { std::array array; uint32_t vertex_length; uint32_t elements_length; diff --git a/include/mbgl/geometry/vao.hpp b/include/mbgl/geometry/vao.hpp index 87408ddbad..3d32ed28a8 100644 --- a/include/mbgl/geometry/vao.hpp +++ b/include/mbgl/geometry/vao.hpp @@ -3,13 +3,14 @@ #include #include +#include #include namespace mbgl { #if GL_ARB_vertex_array_object -class VertexArrayObject { +class VertexArrayObject : public util::noncopyable { public: template inline void bind(Shader& shader, VertexBuffer &vertexBuffer, char *offset) { @@ -56,7 +57,7 @@ private: #else -class VertexArrayObject { +class VertexArrayObject : public util::noncopyable { public: template void bind(Shader& shader, Buffers& buffers, char *offset) { diff --git a/include/mbgl/renderer/fill_bucket.hpp b/include/mbgl/renderer/fill_bucket.hpp index e8d6bf99e1..0cd756318c 100644 --- a/include/mbgl/renderer/fill_bucket.hpp +++ b/include/mbgl/renderer/fill_bucket.hpp @@ -34,8 +34,9 @@ class FillBucket : public Bucket { static void *realloc(void *data, void *ptr, unsigned int size); static void free(void *userData, void *ptr); - typedef ElementGroup<2> triangle_group_type; - typedef ElementGroup<1> line_group_type; + typedef std::unique_ptr> triangle_group_type; + typedef std::unique_ptr> line_group_type; + public: FillBucket(FillVertexBuffer& vertexBuffer, TriangleElementsBuffer& triangleElementsBuffer, diff --git a/include/mbgl/renderer/line_bucket.hpp b/include/mbgl/renderer/line_bucket.hpp index a33dde34e0..55fe8c4862 100644 --- a/include/mbgl/renderer/line_bucket.hpp +++ b/include/mbgl/renderer/line_bucket.hpp @@ -20,8 +20,9 @@ class LinejoinShader; struct pbf; class LineBucket : public Bucket { - typedef ElementGroup<1> triangle_group_type; - typedef ElementGroup<1> point_group_type; + typedef std::unique_ptr> triangle_group_type; + typedef std::unique_ptr> point_group_type; + public: LineBucket(LineVertexBuffer& vertexBuffer, TriangleElementsBuffer& triangleElementsBuffer, @@ -43,7 +44,6 @@ public: const StyleBucketLine &properties; private: - LineVertexBuffer& vertexBuffer; TriangleElementsBuffer& triangleElementsBuffer; PointElementsBuffer& pointElementsBuffer; diff --git a/include/mbgl/renderer/symbol_bucket.hpp b/include/mbgl/renderer/symbol_bucket.hpp index fb1678fc8b..fccb2924da 100644 --- a/include/mbgl/renderer/symbol_bucket.hpp +++ b/include/mbgl/renderer/symbol_bucket.hpp @@ -50,8 +50,8 @@ typedef std::vector Symbols; class SymbolBucket : public Bucket { - typedef ElementGroup<1> TextElementGroup; - typedef ElementGroup<1> IconElementGroup; + typedef std::unique_ptr> TextElementGroup; + typedef std::unique_ptr> IconElementGroup; public: SymbolBucket(const StyleBucketSymbol &properties, Collision &collision); -- cgit v1.2.1 From c3cb4582250fc9f6bc125cfa11729a502b7d7a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 27 Aug 2014 12:08:21 +0200 Subject: make ElementGroup and VertexArrayObject movable to avoid using unique_ptrs --- include/mbgl/geometry/elements_buffer.hpp | 5 +++++ include/mbgl/geometry/vao.hpp | 10 ++++++++++ include/mbgl/renderer/fill_bucket.hpp | 4 ++-- include/mbgl/renderer/line_bucket.hpp | 4 ++-- include/mbgl/renderer/symbol_bucket.hpp | 4 ++-- 5 files changed, 21 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/mbgl/geometry/elements_buffer.hpp b/include/mbgl/geometry/elements_buffer.hpp index 44b5c71dd2..56080e29fe 100644 --- a/include/mbgl/geometry/elements_buffer.hpp +++ b/include/mbgl/geometry/elements_buffer.hpp @@ -20,6 +20,11 @@ struct ElementGroup : public util::noncopyable { : vertex_length(vertex_length), elements_length(elements_length) { } + + ElementGroup(ElementGroup &&rhs) noexcept + : array(std::move(rhs.array)), + vertex_length(rhs.vertex_length), + elements_length(rhs.elements_length) {}; }; class TriangleElementsBuffer : public Buffer< diff --git a/include/mbgl/geometry/vao.hpp b/include/mbgl/geometry/vao.hpp index 3d32ed28a8..bb1f571fff 100644 --- a/include/mbgl/geometry/vao.hpp +++ b/include/mbgl/geometry/vao.hpp @@ -12,6 +12,16 @@ namespace mbgl { #if GL_ARB_vertex_array_object class VertexArrayObject : public util::noncopyable { public: + inline VertexArrayObject() {}; + + inline VertexArrayObject(VertexArrayObject &&rhs) noexcept + : vao(rhs.vao), + bound_shader(rhs.bound_shader), + bound_shader_name(rhs.bound_shader_name), + bound_vertex_buffer(rhs.bound_vertex_buffer), + bound_elements_buffer(rhs.bound_elements_buffer), + bound_offset(rhs.bound_offset) {}; + template inline void bind(Shader& shader, VertexBuffer &vertexBuffer, char *offset) { bindVertexArrayObject(); diff --git a/include/mbgl/renderer/fill_bucket.hpp b/include/mbgl/renderer/fill_bucket.hpp index 0cd756318c..15868e4092 100644 --- a/include/mbgl/renderer/fill_bucket.hpp +++ b/include/mbgl/renderer/fill_bucket.hpp @@ -34,8 +34,8 @@ class FillBucket : public Bucket { static void *realloc(void *data, void *ptr, unsigned int size); static void free(void *userData, void *ptr); - typedef std::unique_ptr> triangle_group_type; - typedef std::unique_ptr> line_group_type; + typedef ElementGroup<2> triangle_group_type; + typedef ElementGroup<1> line_group_type; public: FillBucket(FillVertexBuffer& vertexBuffer, diff --git a/include/mbgl/renderer/line_bucket.hpp b/include/mbgl/renderer/line_bucket.hpp index 55fe8c4862..c7e375a0a1 100644 --- a/include/mbgl/renderer/line_bucket.hpp +++ b/include/mbgl/renderer/line_bucket.hpp @@ -20,8 +20,8 @@ class LinejoinShader; struct pbf; class LineBucket : public Bucket { - typedef std::unique_ptr> triangle_group_type; - typedef std::unique_ptr> point_group_type; + typedef ElementGroup<1> triangle_group_type; + typedef ElementGroup<1> point_group_type; public: LineBucket(LineVertexBuffer& vertexBuffer, diff --git a/include/mbgl/renderer/symbol_bucket.hpp b/include/mbgl/renderer/symbol_bucket.hpp index fccb2924da..fb1678fc8b 100644 --- a/include/mbgl/renderer/symbol_bucket.hpp +++ b/include/mbgl/renderer/symbol_bucket.hpp @@ -50,8 +50,8 @@ typedef std::vector Symbols; class SymbolBucket : public Bucket { - typedef std::unique_ptr> TextElementGroup; - typedef std::unique_ptr> IconElementGroup; + typedef ElementGroup<1> TextElementGroup; + typedef ElementGroup<1> IconElementGroup; public: SymbolBucket(const StyleBucketSymbol &properties, Collision &collision); -- cgit v1.2.1