summaryrefslogtreecommitdiff
path: root/include/mbgl
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-08-27 12:36:48 +0200
committerKonstantin Käfer <mail@kkaefer.com>2014-08-27 12:36:48 +0200
commit312cae1a05af9046b44f810b267c3e81acdb29e5 (patch)
tree2a636885d6582f7945826cd703e216d88f5deac4 /include/mbgl
parent489b6642322065111c41bccbcda8ee92ef1f2a44 (diff)
parentc8d76867db12149fbbe9c4652268c9c1cf0c7891 (diff)
downloadqtlocation-mapboxgl-312cae1a05af9046b44f810b267c3e81acdb29e5.tar.gz
Merge pull request #451 from mapbox/noncopyable-vao
VertexArrayObject and ElementGroup should be noncopyable
Diffstat (limited to 'include/mbgl')
-rw-r--r--include/mbgl/geometry/elements_buffer.hpp8
-rw-r--r--include/mbgl/geometry/vao.hpp15
-rw-r--r--include/mbgl/renderer/fill_bucket.hpp1
-rw-r--r--include/mbgl/renderer/line_bucket.hpp2
4 files changed, 22 insertions, 4 deletions
diff --git a/include/mbgl/geometry/elements_buffer.hpp b/include/mbgl/geometry/elements_buffer.hpp
index 1282beb239..56080e29fe 100644
--- a/include/mbgl/geometry/elements_buffer.hpp
+++ b/include/mbgl/geometry/elements_buffer.hpp
@@ -3,13 +3,14 @@
#include <mbgl/geometry/buffer.hpp>
#include <mbgl/geometry/vao.hpp>
+#include <mbgl/util/noncopyable.hpp>
#include <array>
namespace mbgl {
template <int count>
-struct ElementGroup {
+struct ElementGroup : public util::noncopyable {
std::array<VertexArrayObject, count> array;
uint32_t vertex_length;
uint32_t elements_length;
@@ -19,6 +20,11 @@ struct ElementGroup {
: 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 87408ddbad..bb1f571fff 100644
--- a/include/mbgl/geometry/vao.hpp
+++ b/include/mbgl/geometry/vao.hpp
@@ -3,14 +3,25 @@
#include <mbgl/shader/shader.hpp>
#include <mbgl/platform/gl.hpp>
+#include <mbgl/util/noncopyable.hpp>
#include <stdexcept>
namespace mbgl {
#if GL_ARB_vertex_array_object
-class VertexArrayObject {
+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 <typename Shader, typename VertexBuffer>
inline void bind(Shader& shader, VertexBuffer &vertexBuffer, char *offset) {
bindVertexArrayObject();
@@ -56,7 +67,7 @@ private:
#else
-class VertexArrayObject {
+class VertexArrayObject : public util::noncopyable {
public:
template <typename Shader, typename Buffers>
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..15868e4092 100644
--- a/include/mbgl/renderer/fill_bucket.hpp
+++ b/include/mbgl/renderer/fill_bucket.hpp
@@ -36,6 +36,7 @@ class FillBucket : public Bucket {
typedef ElementGroup<2> triangle_group_type;
typedef ElementGroup<1> 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..c7e375a0a1 100644
--- a/include/mbgl/renderer/line_bucket.hpp
+++ b/include/mbgl/renderer/line_bucket.hpp
@@ -22,6 +22,7 @@ struct pbf;
class LineBucket : public Bucket {
typedef ElementGroup<1> triangle_group_type;
typedef ElementGroup<1> point_group_type;
+
public:
LineBucket(LineVertexBuffer& vertexBuffer,
TriangleElementsBuffer& triangleElementsBuffer,
@@ -43,7 +44,6 @@ public:
const StyleBucketLine &properties;
private:
-
LineVertexBuffer& vertexBuffer;
TriangleElementsBuffer& triangleElementsBuffer;
PointElementsBuffer& pointElementsBuffer;