diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-08-15 13:37:19 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-08-15 13:37:19 +0200 |
commit | ba67fcd830d41399ec8d225fd9536a4f780056ff (patch) | |
tree | a21f9acbea732931723fdd88dfb029aba3168b3b /src | |
parent | a81c2efba233b3d8638e43a0c2c919c6217c27c7 (diff) | |
download | qtlocation-mapboxgl-ba67fcd830d41399ec8d225fd9536a4f780056ff.tar.gz |
refactor vao object to use acutal OpenGL IDs rather than object pointers
Diffstat (limited to 'src')
-rw-r--r-- | src/geometry/vao.cpp | 46 | ||||
-rw-r--r-- | src/geometry/vertex_buffer.cpp | 4 | ||||
-rw-r--r-- | src/shader/composite_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/dot_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/gaussian_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/icon_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/line_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/linejoin_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/outline_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/pattern_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/plain_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/raster_shader.cpp | 1 | ||||
-rw-r--r-- | src/shader/shader.cpp | 5 | ||||
-rw-r--r-- | src/shader/text_shader.cpp | 1 |
14 files changed, 64 insertions, 2 deletions
diff --git a/src/geometry/vao.cpp b/src/geometry/vao.cpp new file mode 100644 index 0000000000..4c459c436d --- /dev/null +++ b/src/geometry/vao.cpp @@ -0,0 +1,46 @@ +#include <mbgl/geometry/vao.hpp> + +namespace mbgl { + +#if GL_ARB_vertex_array_object + +VertexArrayObject::~VertexArrayObject() { + if (vao) { + glDeleteVertexArrays(1, &vao); + } +} + +void VertexArrayObject::bindVertexArrayObject() { + if (!vao) { + glGenVertexArrays(1, &vao); + } + glBindVertexArray(vao); +} + +void VertexArrayObject::verifyBinding(Shader &shader, GLuint vertexBuffer, GLuint elementsBuffer, + char *offset) { + if (bound_shader != shader.getID()) { + throw std::runtime_error(std::string("trying to rebind VAO to another shader from " + + std::to_string(bound_shader) + "(" + bound_shader_name + ") to " + + std::to_string(shader.getID()) + "(" + shader.name + ")" )); + } else if (bound_offset != offset) { + throw std::runtime_error("trying to bind VAO to another offset"); + } else if (bound_vertex_buffer != vertexBuffer) { + throw std::runtime_error("trying to bind VAO to another vertex buffer"); + } else if (bound_elements_buffer != elementsBuffer) { + throw std::runtime_error("trying to bind VAO to another elements buffer"); + } +} + +void VertexArrayObject::storeBinding(Shader &shader, GLuint vertexBuffer, GLuint elementsBuffer, + char *offset) { + bound_shader = shader.getID(); + bound_shader_name = shader.name; + bound_offset = offset; + bound_vertex_buffer = vertexBuffer; + bound_elements_buffer = elementsBuffer; +} + +#endif + +} diff --git a/src/geometry/vertex_buffer.cpp b/src/geometry/vertex_buffer.cpp index 56072e161d..888cc57a99 100644 --- a/src/geometry/vertex_buffer.cpp +++ b/src/geometry/vertex_buffer.cpp @@ -26,3 +26,7 @@ void VertexBuffer::bind() { glBindBuffer(GL_ARRAY_BUFFER, buffer); } } + +uint32_t VertexBuffer::getID() const { + return buffer; +}
\ No newline at end of file diff --git a/src/shader/composite_shader.cpp b/src/shader/composite_shader.cpp index 07fe0c0740..9ed0a1b83e 100644 --- a/src/shader/composite_shader.cpp +++ b/src/shader/composite_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; CompositeShader::CompositeShader() : Shader( + "composite", shaders[COMPOSITE_SHADER].vertex, shaders[COMPOSITE_SHADER].fragment ) { diff --git a/src/shader/dot_shader.cpp b/src/shader/dot_shader.cpp index 8e2837f2cc..54163d6982 100644 --- a/src/shader/dot_shader.cpp +++ b/src/shader/dot_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; DotShader::DotShader() : Shader( + "dot", shaders[DOT_SHADER].vertex, shaders[DOT_SHADER].fragment ) { diff --git a/src/shader/gaussian_shader.cpp b/src/shader/gaussian_shader.cpp index eb88677565..d22006020c 100644 --- a/src/shader/gaussian_shader.cpp +++ b/src/shader/gaussian_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; GaussianShader::GaussianShader() : Shader( + "gaussian", shaders[GAUSSIAN_SHADER].vertex, shaders[GAUSSIAN_SHADER].fragment ) { diff --git a/src/shader/icon_shader.cpp b/src/shader/icon_shader.cpp index 6455d870a2..4973dc4119 100644 --- a/src/shader/icon_shader.cpp +++ b/src/shader/icon_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; IconShader::IconShader() : Shader( + "icon", shaders[ICON_SHADER].vertex, shaders[ICON_SHADER].fragment ) { diff --git a/src/shader/line_shader.cpp b/src/shader/line_shader.cpp index 529ab0d316..1b0527366e 100644 --- a/src/shader/line_shader.cpp +++ b/src/shader/line_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; LineShader::LineShader() : Shader( + "line", shaders[LINE_SHADER].vertex, shaders[LINE_SHADER].fragment ) { diff --git a/src/shader/linejoin_shader.cpp b/src/shader/linejoin_shader.cpp index 73b7a1e745..e8ec306ed9 100644 --- a/src/shader/linejoin_shader.cpp +++ b/src/shader/linejoin_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; LinejoinShader::LinejoinShader() : Shader( + "linejoin", shaders[LINEJOIN_SHADER].vertex, shaders[LINEJOIN_SHADER].fragment ) { diff --git a/src/shader/outline_shader.cpp b/src/shader/outline_shader.cpp index b1e57bf0f3..d9c19fa805 100644 --- a/src/shader/outline_shader.cpp +++ b/src/shader/outline_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; OutlineShader::OutlineShader() : Shader( + "outline", shaders[OUTLINE_SHADER].vertex, shaders[OUTLINE_SHADER].fragment ) { diff --git a/src/shader/pattern_shader.cpp b/src/shader/pattern_shader.cpp index ec604290a6..8fe6a34e93 100644 --- a/src/shader/pattern_shader.cpp +++ b/src/shader/pattern_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; PatternShader::PatternShader() : Shader( + "pattern", shaders[PATTERN_SHADER].vertex, shaders[PATTERN_SHADER].fragment ) { diff --git a/src/shader/plain_shader.cpp b/src/shader/plain_shader.cpp index 3abc57eaa4..bb0c228992 100644 --- a/src/shader/plain_shader.cpp +++ b/src/shader/plain_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; PlainShader::PlainShader() : Shader( + "plain", shaders[PLAIN_SHADER].vertex, shaders[PLAIN_SHADER].fragment ) { diff --git a/src/shader/raster_shader.cpp b/src/shader/raster_shader.cpp index 51b328fa8f..60d81c61bd 100644 --- a/src/shader/raster_shader.cpp +++ b/src/shader/raster_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; RasterShader::RasterShader() : Shader( + "raster", shaders[RASTER_SHADER].vertex, shaders[RASTER_SHADER].fragment ) { diff --git a/src/shader/shader.cpp b/src/shader/shader.cpp index fa073c42d0..171ce9b7c1 100644 --- a/src/shader/shader.cpp +++ b/src/shader/shader.cpp @@ -8,8 +8,9 @@ using namespace mbgl; -Shader::Shader(const GLchar *vertSource, const GLchar *fragSource) - : valid(false), +Shader::Shader(const char *name, const GLchar *vertSource, const GLchar *fragSource) + : name(name), + valid(false), program(0) { util::timer timer("shader compilation", Event::Shader); diff --git a/src/shader/text_shader.cpp b/src/shader/text_shader.cpp index c9e70825ce..f6de934e2f 100644 --- a/src/shader/text_shader.cpp +++ b/src/shader/text_shader.cpp @@ -8,6 +8,7 @@ using namespace mbgl; TextShader::TextShader() : Shader( + "text", shaders[TEXT_SHADER].vertex, shaders[TEXT_SHADER].fragment ) { |