From bfd128128589e3941a6895e6d4b2fe3624fd577c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 13 Aug 2014 17:46:15 +0200 Subject: only set changed glDepthRange values --- include/mbgl/renderer/painter.hpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'include') diff --git a/include/mbgl/renderer/painter.hpp b/include/mbgl/renderer/painter.hpp index 26e1bd3955..4cf99f102d 100644 --- a/include/mbgl/renderer/painter.hpp +++ b/include/mbgl/renderer/painter.hpp @@ -130,6 +130,7 @@ public: void useProgram(uint32_t program); void lineWidth(float lineWidth); void depthMask(bool value); + void depthRange(float near, float far); public: mat4 vtxMatrix; @@ -156,6 +157,7 @@ private: float gl_lineWidth = 0; bool gl_depthMask = true; std::array gl_viewport = {{ 0, 0 }}; + std::array gl_depthRange = {{ 0, 1 }}; float strata = 0; RenderPass pass = RenderPass::Opaque; const float strata_epsilon = 1.0f / (1 << 16); -- cgit v1.2.1 From a0e8851530e6009703e0e922a55c92c2f32dee82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 13 Aug 2014 17:46:36 +0200 Subject: use vaos only when the value is 1, not when it is merely defined --- include/mbgl/geometry/vao.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/mbgl/geometry/vao.hpp b/include/mbgl/geometry/vao.hpp index 71d7ff89fe..e27e2c58a4 100644 --- a/include/mbgl/geometry/vao.hpp +++ b/include/mbgl/geometry/vao.hpp @@ -11,7 +11,7 @@ class VertexArrayObject { public: template void bind(Shader& shader, VertexBuffer& vertex_buffer, char *offset) { -#ifdef GL_ARB_vertex_array_object +#if GL_ARB_vertex_array_object if (!vao) { glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -28,7 +28,7 @@ public: vertex_buffer.bind(); shader.bind(offset); -#ifdef GL_ARB_vertex_array_object +#if GL_ARB_vertex_array_object shader_ptr = &shader; vertex_buffer_ptr = &vertex_buffer; elements_buffer_ptr = nullptr; @@ -45,7 +45,7 @@ public: template void bind(Shader& shader, VertexBuffer& vertex_buffer, ElementsBuffer& elements_buffer, char *offset) { -#ifdef GL_ARB_vertex_array_object +#if GL_ARB_vertex_array_object if (!vao) { glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -60,7 +60,7 @@ public: elements_buffer.bind(); shader.bind(offset); -#ifdef GL_ARB_vertex_array_object +#if GL_ARB_vertex_array_object shader_ptr = &shader; vertex_buffer_ptr = &vertex_buffer; elements_buffer_ptr = &elements_buffer; @@ -76,7 +76,7 @@ public: } ~VertexArrayObject() { -#ifdef GL_ARB_vertex_array_object +#if GL_ARB_vertex_array_object if (vao) { glDeleteVertexArrays(1, &vao); } @@ -84,7 +84,7 @@ public: } private: -#ifdef GL_ARB_vertex_array_object +#if GL_ARB_vertex_array_object GLuint vao = 0; // For debug reasons, we're storing the bind information so that we can -- cgit v1.2.1 From 1799c1b04c7123fa66fe333bdabf0ba575c9c54c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Thu, 14 Aug 2014 12:58:15 +0200 Subject: fix image pattern rendering --- include/mbgl/geometry/sprite_atlas.hpp | 1 + include/mbgl/shader/pattern_shader.hpp | 24 ++++++++++---------- include/mbgl/util/mat3.hpp | 40 ++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 include/mbgl/util/mat3.hpp (limited to 'include') diff --git a/include/mbgl/geometry/sprite_atlas.hpp b/include/mbgl/geometry/sprite_atlas.hpp index dc2378c2fb..bc123abe13 100644 --- a/include/mbgl/geometry/sprite_atlas.hpp +++ b/include/mbgl/geometry/sprite_atlas.hpp @@ -49,6 +49,7 @@ public: inline float getHeight() const { return height; } inline float getTextureWidth() const { return width * pixelRatio; } inline float getTextureHeight() const { return height * pixelRatio; } + inline float getPixelRatio() const { return pixelRatio; } private: void allocate(); diff --git a/include/mbgl/shader/pattern_shader.hpp b/include/mbgl/shader/pattern_shader.hpp index b1b49b54df..e574b755dc 100644 --- a/include/mbgl/shader/pattern_shader.hpp +++ b/include/mbgl/shader/pattern_shader.hpp @@ -11,33 +11,33 @@ public: void bind(char *offset); - void setColor(const std::array& color); - void setOffset(const std::array& offset); - void setPatternSize(const std::array& pattern_size); void setPatternTopLeft(const std::array& pattern_tl); void setPatternBottomRight(const std::array& pattern_br); + void setOpacity(float opacity); + void setImage(int image); void setMix(float mix); + void setPatternMatrix(const std::array &patternmatrix); private: int32_t a_pos = -1; - std::array color = {{}}; - int32_t u_color = -1; - - std::array offset = {{}}; - int32_t u_offset = -1; - - std::array pattern_size = {{}}; - int32_t u_pattern_size = -1; - std::array pattern_tl = {{}}; int32_t u_pattern_tl = -1; std::array pattern_br = {{}}; int32_t u_pattern_br = -1; + float opacity = 0; + int32_t u_opacity = -1; + + int image = 0; + int32_t u_image = -1; + float mix = 0; int32_t u_mix = -1; + + std::array patternmatrix = {{}}; + int32_t u_patternmatrix = -1; }; } diff --git a/include/mbgl/util/mat3.hpp b/include/mbgl/util/mat3.hpp new file mode 100644 index 0000000000..d44b1435d3 --- /dev/null +++ b/include/mbgl/util/mat3.hpp @@ -0,0 +1,40 @@ +// This is an incomplete port of http://glmatrix.net/ +// +// Copyright (c) 2013 Brandon Jones, Colin MacKenzie IV +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the +// use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not claim +// that you wrote the original software. If you use this software in a +// product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. + +#ifndef MBGL_UTIL_MAT3 +#define MBGL_UTIL_MAT3 + +#include + +namespace mbgl { + +typedef std::array mat3; + +namespace matrix { + +void identity(mat3& out); +void scale(mat3& out, const mat3& a, float x, float y); + +} +} + +#endif -- cgit v1.2.1 From d6bfb4be651d512708d953a26f27907c4f7940d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Thu, 14 Aug 2014 18:24:53 +0200 Subject: fix binding to vaos --- include/mbgl/geometry/elements_buffer.hpp | 3 ++- include/mbgl/geometry/vao.hpp | 5 ++++- include/mbgl/platform/gl.hpp | 9 ++++++--- include/mbgl/renderer/fill_bucket.hpp | 5 ++--- include/mbgl/renderer/line_bucket.hpp | 4 ++-- include/mbgl/renderer/symbol_bucket.hpp | 7 +++++-- 6 files changed, 21 insertions(+), 12 deletions(-) (limited to 'include') diff --git a/include/mbgl/geometry/elements_buffer.hpp b/include/mbgl/geometry/elements_buffer.hpp index ed60338e08..ce07c9fa67 100644 --- a/include/mbgl/geometry/elements_buffer.hpp +++ b/include/mbgl/geometry/elements_buffer.hpp @@ -6,8 +6,9 @@ namespace mbgl { +template struct ElementGroup { - VertexArrayObject array; + 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 e27e2c58a4..1023fc118d 100644 --- a/include/mbgl/geometry/vao.hpp +++ b/include/mbgl/geometry/vao.hpp @@ -22,7 +22,7 @@ public: if (shader_ptr != &shader) { if (shader_ptr != nullptr) { - fprintf(stderr, "shader rebind!"); + throw std::runtime_error("shader rebind!"); } #endif vertex_buffer.bind(); @@ -55,6 +55,9 @@ public: } if (shader_ptr != &shader) { + if (shader_ptr != nullptr) { + throw std::runtime_error("shader rebind!"); + } #endif vertex_buffer.bind(); elements_buffer.bind(); diff --git a/include/mbgl/platform/gl.hpp b/include/mbgl/platform/gl.hpp index a29b230dbf..cc2a681d42 100644 --- a/include/mbgl/platform/gl.hpp +++ b/include/mbgl/platform/gl.hpp @@ -26,9 +26,12 @@ #elif TARGET_OS_MAC #include #include - #define glGenVertexArrays glGenVertexArraysAPPLE - #define glBindVertexArray glBindVertexArrayAPPLE - #define glDeleteVertexArrays glDeleteVertexArraysAPPLE + #if GL_APPLE_vertex_array_object + #define GL_ARB_vertex_array_object 1 + #define glGenVertexArrays glGenVertexArraysAPPLE + #define glBindVertexArray glBindVertexArrayAPPLE + #define glDeleteVertexArrays glDeleteVertexArraysAPPLE + #endif #else #error Unsupported Apple platform #endif diff --git a/include/mbgl/renderer/fill_bucket.hpp b/include/mbgl/renderer/fill_bucket.hpp index e9340cce68..e8d6bf99e1 100644 --- a/include/mbgl/renderer/fill_bucket.hpp +++ b/include/mbgl/renderer/fill_bucket.hpp @@ -34,9 +34,8 @@ class FillBucket : public Bucket { static void *realloc(void *data, void *ptr, unsigned int size); static void free(void *userData, void *ptr); - - typedef ElementGroup triangle_group_type; - typedef ElementGroup line_group_type; + 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 f65ca35605..a33dde34e0 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 ElementGroup triangle_group_type; - typedef ElementGroup point_group_type; + typedef ElementGroup<1> triangle_group_type; + typedef ElementGroup<1> point_group_type; public: LineBucket(LineVertexBuffer& vertexBuffer, TriangleElementsBuffer& triangleElementsBuffer, diff --git a/include/mbgl/renderer/symbol_bucket.hpp b/include/mbgl/renderer/symbol_bucket.hpp index e890274238..fb1678fc8b 100644 --- a/include/mbgl/renderer/symbol_bucket.hpp +++ b/include/mbgl/renderer/symbol_bucket.hpp @@ -50,6 +50,9 @@ typedef std::vector Symbols; class SymbolBucket : public Bucket { + typedef ElementGroup<1> TextElementGroup; + typedef ElementGroup<1> IconElementGroup; + public: SymbolBucket(const StyleBucketSymbol &properties, Collision &collision); @@ -94,13 +97,13 @@ private: struct { TextVertexBuffer vertices; TriangleElementsBuffer triangles; - std::vector groups; + std::vector groups; } text; struct { IconVertexBuffer vertices; TriangleElementsBuffer triangles; - std::vector groups; + std::vector groups; } icon; }; -- cgit v1.2.1 From 3ec4446ee6a32c392e971f6f5ef6df810b351476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Fri, 15 Aug 2014 11:11:37 +0200 Subject: add missing include --- include/mbgl/geometry/elements_buffer.hpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'include') diff --git a/include/mbgl/geometry/elements_buffer.hpp b/include/mbgl/geometry/elements_buffer.hpp index ce07c9fa67..1282beb239 100644 --- a/include/mbgl/geometry/elements_buffer.hpp +++ b/include/mbgl/geometry/elements_buffer.hpp @@ -4,6 +4,8 @@ #include #include +#include + namespace mbgl { template -- cgit v1.2.1 From ba67fcd830d41399ec8d225fd9536a4f780056ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Fri, 15 Aug 2014 13:37:19 +0200 Subject: refactor vao object to use acutal OpenGL IDs rather than object pointers --- include/mbgl/geometry/buffer.hpp | 8 ++- include/mbgl/geometry/vao.hpp | 114 ++++++++++++-------------------- include/mbgl/geometry/vertex_buffer.hpp | 5 ++ include/mbgl/shader/shader.hpp | 7 +- 4 files changed, 59 insertions(+), 75 deletions(-) (limited to 'include') diff --git a/include/mbgl/geometry/buffer.hpp b/include/mbgl/geometry/buffer.hpp index 20489cb33c..446177d443 100644 --- a/include/mbgl/geometry/buffer.hpp +++ b/include/mbgl/geometry/buffer.hpp @@ -62,6 +62,10 @@ public: } } + inline GLuint getID() const { + return buffer; + } + protected: // increase the buffer size by at least /required/ bytes. inline void *addElement() { @@ -72,7 +76,7 @@ protected: while (length < pos + itemSize) length += defaultLength; array = realloc(array, length); if (array == nullptr) { - throw std::runtime_error("Buffer reallocation failed¯"); + throw std::runtime_error("Buffer reallocation failed"); } } pos += itemSize; @@ -106,7 +110,7 @@ private: size_t length = 0; // GL buffer ID - uint32_t buffer = 0; + GLuint buffer = 0; }; } diff --git a/include/mbgl/geometry/vao.hpp b/include/mbgl/geometry/vao.hpp index 1023fc118d..87408ddbad 100644 --- a/include/mbgl/geometry/vao.hpp +++ b/include/mbgl/geometry/vao.hpp @@ -1,104 +1,74 @@ #ifndef MBGL_GEOMETRY_VAO #define MBGL_GEOMETRY_VAO +#include #include #include namespace mbgl { +#if GL_ARB_vertex_array_object class VertexArrayObject { public: template - void bind(Shader& shader, VertexBuffer& vertex_buffer, char *offset) { -#if GL_ARB_vertex_array_object - if (!vao) { - glGenVertexArrays(1, &vao); - glBindVertexArray(vao); - } else { - // We have been given the correct information. - glBindVertexArray(vao); - } - - if (shader_ptr != &shader) { - if (shader_ptr != nullptr) { - throw std::runtime_error("shader rebind!"); - } -#endif - vertex_buffer.bind(); + inline void bind(Shader& shader, VertexBuffer &vertexBuffer, char *offset) { + bindVertexArrayObject(); + if (bound_shader == 0) { + vertexBuffer.bind(); shader.bind(offset); - -#if GL_ARB_vertex_array_object - shader_ptr = &shader; - vertex_buffer_ptr = &vertex_buffer; - elements_buffer_ptr = nullptr; - offset_ptr = offset; - } else if (vertex_buffer_ptr != &vertex_buffer) { - throw std::runtime_error("trying to bind VAO to another vertex buffer"); - } else if (elements_buffer_ptr != nullptr) { - throw std::runtime_error("trying to bind VAO to another elements buffer"); - } else if (offset_ptr != offset) { - throw std::runtime_error("trying to bind VAO to another offset"); + storeBinding(shader, vertexBuffer.getID(), 0, offset); + } else { + verifyBinding(shader, vertexBuffer.getID(), 0, offset); } -#endif } template - void bind(Shader& shader, VertexBuffer& vertex_buffer, ElementsBuffer& elements_buffer, char *offset) { -#if GL_ARB_vertex_array_object - if (!vao) { - glGenVertexArrays(1, &vao); - glBindVertexArray(vao); - } else { - // We have been given the correct information. - glBindVertexArray(vao); - } - - if (shader_ptr != &shader) { - if (shader_ptr != nullptr) { - throw std::runtime_error("shader rebind!"); - } -#endif - vertex_buffer.bind(); - elements_buffer.bind(); + inline void bind(Shader& shader, VertexBuffer &vertexBuffer, ElementsBuffer &elementsBuffer, char *offset) { + bindVertexArrayObject(); + if (bound_shader == 0) { + vertexBuffer.bind(); + elementsBuffer.bind(); shader.bind(offset); - -#if GL_ARB_vertex_array_object - shader_ptr = &shader; - vertex_buffer_ptr = &vertex_buffer; - elements_buffer_ptr = &elements_buffer; - offset_ptr = offset; - } else if (vertex_buffer_ptr != &vertex_buffer) { - throw std::runtime_error("trying to bind VAO to another vertex buffer"); - } else if (elements_buffer_ptr != &elements_buffer) { - throw std::runtime_error("trying to bind VAO to another elements buffer"); - } else if (offset_ptr != offset) { - throw std::runtime_error("trying to bind VAO to another offset"); + storeBinding(shader, vertexBuffer.getID(), elementsBuffer.getID(), offset); + } else { + verifyBinding(shader, vertexBuffer.getID(), elementsBuffer.getID(), offset); } -#endif } - ~VertexArrayObject() { -#if GL_ARB_vertex_array_object - if (vao) { - glDeleteVertexArrays(1, &vao); - } -#endif - } + ~VertexArrayObject(); private: -#if GL_ARB_vertex_array_object + void bindVertexArrayObject(); + void storeBinding(Shader &shader, GLuint vertexBuffer, GLuint elementsBuffer, char *offset); + void verifyBinding(Shader &shader, GLuint vertexBuffer, GLuint elementsBuffer, char *offset); + GLuint vao = 0; // For debug reasons, we're storing the bind information so that we can // detect errors and report - void *shader_ptr = nullptr; - void *vertex_buffer_ptr = nullptr; - void *elements_buffer_ptr = nullptr; - char *offset_ptr = 0; -#endif + GLuint bound_shader = 0; + const char *bound_shader_name = ""; + GLuint bound_vertex_buffer = 0; + GLuint bound_elements_buffer = 0; + char *bound_offset = 0; }; +#else + +class VertexArrayObject { +public: + template + void bind(Shader& shader, Buffers& buffers, char *offset) { + for (auto &buffer : buffers) { + buffer.bind(); + } + shader.bind(offset); + } +}; + +#endif + } #endif diff --git a/include/mbgl/geometry/vertex_buffer.hpp b/include/mbgl/geometry/vertex_buffer.hpp index 58fd4a9d03..05cda94245 100644 --- a/include/mbgl/geometry/vertex_buffer.hpp +++ b/include/mbgl/geometry/vertex_buffer.hpp @@ -25,6 +25,11 @@ public: */ void bind(); + /* + * Returns the OpenGL ID of the buffer object. + */ + uint32_t getID() const; + private: const std::vector array; uint32_t buffer = 0; diff --git a/include/mbgl/shader/shader.hpp b/include/mbgl/shader/shader.hpp index 2398cb12e3..fa2d5a0a8e 100644 --- a/include/mbgl/shader/shader.hpp +++ b/include/mbgl/shader/shader.hpp @@ -9,13 +9,18 @@ namespace mbgl { class Shader : private util::noncopyable { public: - Shader(const char *vertex, const char *fragment); + Shader(const char *name, const char *vertex, const char *fragment); ~Shader(); + const char *name; bool valid; uint32_t program; void setMatrix(const std::array& matrix); + inline uint32_t getID() const { + return program; + } + private: bool compileShader(uint32_t *shader, uint32_t type, const char *source); -- cgit v1.2.1 From 8c3675755e2b0692599ac887178ba0ef8689e89c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Fri, 15 Aug 2014 13:39:49 +0200 Subject: base static vertexbuffer on buffer object --- include/mbgl/geometry/static_vertex_buffer.hpp | 26 +++++++++++++++++ include/mbgl/geometry/vertex_buffer.hpp | 40 -------------------------- include/mbgl/renderer/painter.hpp | 28 +++++++++--------- include/mbgl/renderer/raster_bucket.hpp | 6 ++-- 4 files changed, 43 insertions(+), 57 deletions(-) create mode 100644 include/mbgl/geometry/static_vertex_buffer.hpp delete mode 100644 include/mbgl/geometry/vertex_buffer.hpp (limited to 'include') diff --git a/include/mbgl/geometry/static_vertex_buffer.hpp b/include/mbgl/geometry/static_vertex_buffer.hpp new file mode 100644 index 0000000000..ce932269f0 --- /dev/null +++ b/include/mbgl/geometry/static_vertex_buffer.hpp @@ -0,0 +1,26 @@ +#ifndef MBGL_GEOMETRY_STATIC_VERTEX_BUFFER +#define MBGL_GEOMETRY_STATIC_VERTEX_BUFFER + +#include + +#include +#include +#include +#include + +namespace mbgl { + +class StaticVertexBuffer : public Buffer< + 4, // bytes per vertex (2 * signed short == 4 bytes) + GL_ARRAY_BUFFER, + 32 // default length +> { +public: + typedef int16_t vertex_type; + + StaticVertexBuffer(std::initializer_list> init); +}; + +} + +#endif diff --git a/include/mbgl/geometry/vertex_buffer.hpp b/include/mbgl/geometry/vertex_buffer.hpp deleted file mode 100644 index 05cda94245..0000000000 --- a/include/mbgl/geometry/vertex_buffer.hpp +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef MBGL_GEOMETRY_VERTEX_BUFFER -#define MBGL_GEOMETRY_VERTEX_BUFFER - -#include -#include -#include -#include - -namespace mbgl { - -class VertexBuffer { -public: - typedef int16_t vertex_type; - VertexBuffer(std::initializer_list init); - ~VertexBuffer(); - - /* - * Returns the number of elements in this buffer. This is not the number of - * bytes, but rather the number of coordinates with associated information. - */ - size_t index() const; - - /* - * Transfers this buffer to the GPU and binds the buffer to the GL context. - */ - void bind(); - - /* - * Returns the OpenGL ID of the buffer object. - */ - uint32_t getID() const; - -private: - const std::vector array; - uint32_t buffer = 0; -}; - -} - -#endif diff --git a/include/mbgl/renderer/painter.hpp b/include/mbgl/renderer/painter.hpp index 4cf99f102d..1ef5fee836 100644 --- a/include/mbgl/renderer/painter.hpp +++ b/include/mbgl/renderer/painter.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include @@ -176,16 +176,16 @@ public: std::unique_ptr gaussianShader; // Set up the stencil quad we're using to generate the stencil mask. - VertexBuffer tileStencilBuffer = { + StaticVertexBuffer tileStencilBuffer = { // top left triangle - 0, 0, - 4096, 0, - 0, 4096, + { 0, 0 }, + { 4096, 0 }, + { 0, 4096 }, // bottom right triangle - 4096, 0, - 0, 4096, - 4096, 4096 + { 4096, 0 }, + { 0, 4096 }, + { 4096, 4096 }, }; VertexArrayObject coveringPlainArray; @@ -197,12 +197,12 @@ public: VertexArrayObject matteArray; // Set up the tile boundary lines we're using to draw the tile outlines. - VertexBuffer tileBorderBuffer = { - 0, 0, - 4096, 0, - 4096, 4096, - 0, 4096, - 0, 0 + StaticVertexBuffer tileBorderBuffer = { + { 0, 0 }, + { 4096, 0 }, + { 4096, 4096 }, + { 0, 4096 }, + { 0, 0 }, }; VertexArrayObject tileBorderArray; diff --git a/include/mbgl/renderer/raster_bucket.hpp b/include/mbgl/renderer/raster_bucket.hpp index a68475565b..66cceac8e7 100644 --- a/include/mbgl/renderer/raster_bucket.hpp +++ b/include/mbgl/renderer/raster_bucket.hpp @@ -11,7 +11,7 @@ namespace mbgl { class RasterShader; -class VertexBuffer; +class StaticVertexBuffer; class VertexArrayObject; class RasterBucket : public Bucket { @@ -26,9 +26,9 @@ public: const StyleBucketRaster &properties; PrerenderedTexture texture; - void drawRaster(RasterShader& shader, VertexBuffer &vertices, VertexArrayObject &array); + void drawRaster(RasterShader& shader, StaticVertexBuffer &vertices, VertexArrayObject &array); - void drawRaster(RasterShader& shader, VertexBuffer &vertices, VertexArrayObject &array, GLuint texture); + void drawRaster(RasterShader& shader, StaticVertexBuffer &vertices, VertexArrayObject &array, GLuint texture); Raster raster; -- cgit v1.2.1 From 8c2c7f769fffcd217698824719b0a0ba45fbef13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Fri, 15 Aug 2014 15:10:49 +0200 Subject: coalesce texture uploads at the beginning of a frame --- include/mbgl/geometry/glyph_atlas.hpp | 1 + include/mbgl/geometry/sprite_atlas.hpp | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/mbgl/geometry/glyph_atlas.hpp b/include/mbgl/geometry/glyph_atlas.hpp index e05cbe3b90..07011d324e 100644 --- a/include/mbgl/geometry/glyph_atlas.hpp +++ b/include/mbgl/geometry/glyph_atlas.hpp @@ -32,6 +32,7 @@ public: const SDFGlyph& glyph); void removeGlyphs(uint64_t tile_id); void bind(); + void upload(); public: const uint16_t width = 0; diff --git a/include/mbgl/geometry/sprite_atlas.hpp b/include/mbgl/geometry/sprite_atlas.hpp index bc123abe13..c30499a53d 100644 --- a/include/mbgl/geometry/sprite_atlas.hpp +++ b/include/mbgl/geometry/sprite_atlas.hpp @@ -41,10 +41,12 @@ public: // NEVER CALL THIS FUNCTION FROM THE RENDER THREAD! it is blocking. Rect waitForImage(const std::string &name, const Sprite &sprite); - // Binds the image buffer of this sprite atlas to the GPU, and uploads data if it is out - // of date. + // Binds the image buffer of this sprite atlas to the GPU. void bind(bool linear = false); + // Uploads the image buffer to the GPU if it is out of date. + void upload(); + inline float getWidth() const { return width; } inline float getHeight() const { return height; } inline float getTextureWidth() const { return width * pixelRatio; } -- cgit v1.2.1 From 6c4597250282f4e051ba52ad6447e7fe039fb5fa Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 13 Aug 2014 15:43:25 -0700 Subject: allow crosstile labels and add `symbol-avoid-edges` --- include/mbgl/style/style_bucket.hpp | 1 + include/mbgl/text/collision.hpp | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/mbgl/style/style_bucket.hpp b/include/mbgl/style/style_bucket.hpp index 11b87d849d..58d4d705db 100644 --- a/include/mbgl/style/style_bucket.hpp +++ b/include/mbgl/style/style_bucket.hpp @@ -40,6 +40,7 @@ public: PlacementType placement = PlacementType::Point; float min_distance = 250.0f; + bool avoid_edges = false; struct { bool allow_overlap = false; diff --git a/include/mbgl/text/collision.hpp b/include/mbgl/text/collision.hpp index 87ebdb279e..6771765c14 100644 --- a/include/mbgl/text/collision.hpp +++ b/include/mbgl/text/collision.hpp @@ -3,15 +3,35 @@ #include +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +#ifndef __clang__ +#pragma GCC diagnostic ignored "-Wunused-local-typedefs" +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif +#include +#include +#include +#include +#pragma GCC diagnostic pop + namespace mbgl { +namespace bg = boost::geometry; +namespace bgm = bg::model; +namespace bgi = bg::index; +typedef bgm::point Point; +typedef bgm::box Box; +typedef std::pair PlacementValue; +typedef bgi::rtree> Tree; + class Collision { public: Collision(float zoom, float tileExtent, float tileSize, float placementDepth = 1); ~Collision(); - float getPlacementScale(const GlyphBoxes &glyphs, float minPlacementScale); + float getPlacementScale(const GlyphBoxes &glyphs, float minPlacementScale, bool avoidEdges); PlacementRange getPlacementRange(const GlyphBoxes &glyphs, float placementScale, bool horizontal); void insert(const GlyphBoxes &glyphs, const CollisionAnchor &anchor, float placementScale, @@ -20,6 +40,10 @@ public: private: void *hTree; void *cTree; + PlacementValue leftEdge; + PlacementValue topEdge; + PlacementValue rightEdge; + PlacementValue bottomEdge; public: const float tilePixelRatio; -- cgit v1.2.1 From 937f82fcda03d382b3f2011d4ad4d60cb9d8d8e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Thu, 14 Aug 2014 13:21:36 +0200 Subject: use pimpl for collision in tile_parser --- include/mbgl/map/tile_parser.hpp | 5 +++-- include/mbgl/text/collision.hpp | 5 ++--- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/mbgl/map/tile_parser.hpp b/include/mbgl/map/tile_parser.hpp index f011d47a38..fa64dad6d5 100644 --- a/include/mbgl/map/tile_parser.hpp +++ b/include/mbgl/map/tile_parser.hpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include @@ -28,6 +27,7 @@ class StyleBucketLine; class StyleBucketSymbol; class StyleLayerGroup; class VectorTileData; +class Collision; class TileParser { public: @@ -37,6 +37,7 @@ public: const std::shared_ptr &glyphStore, const std::shared_ptr &spriteAtlas, const std::shared_ptr &sprite); + ~TileParser(); public: void parse(); @@ -65,7 +66,7 @@ private: std::shared_ptr sprite; std::shared_ptr texturePool; - Collision collision; + std::unique_ptr collision; }; } diff --git a/include/mbgl/text/collision.hpp b/include/mbgl/text/collision.hpp index 6771765c14..e2e2414ba7 100644 --- a/include/mbgl/text/collision.hpp +++ b/include/mbgl/text/collision.hpp @@ -29,7 +29,6 @@ class Collision { public: Collision(float zoom, float tileExtent, float tileSize, float placementDepth = 1); - ~Collision(); float getPlacementScale(const GlyphBoxes &glyphs, float minPlacementScale, bool avoidEdges); PlacementRange getPlacementRange(const GlyphBoxes &glyphs, float placementScale, @@ -38,8 +37,8 @@ public: const PlacementRange &placementRange, bool horizontal); private: - void *hTree; - void *cTree; + Tree hTree; + Tree cTree; PlacementValue leftEdge; PlacementValue topEdge; PlacementValue rightEdge; -- cgit v1.2.1 From 32a1711d8cd00a5d85c61802f79619b85b9cc38a Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 13 Aug 2014 16:16:08 -0700 Subject: remove support for composite layers --- include/mbgl/renderer/painter.hpp | 6 ------ include/mbgl/shader/composite_shader.hpp | 29 ----------------------------- include/mbgl/style/property_key.hpp | 2 -- include/mbgl/style/style_properties.hpp | 11 ----------- include/mbgl/style/types.hpp | 2 -- 5 files changed, 50 deletions(-) delete mode 100644 include/mbgl/shader/composite_shader.hpp (limited to 'include') diff --git a/include/mbgl/renderer/painter.hpp b/include/mbgl/renderer/painter.hpp index 1ef5fee836..eb5f427898 100644 --- a/include/mbgl/renderer/painter.hpp +++ b/include/mbgl/renderer/painter.hpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include @@ -46,7 +45,6 @@ class PrerenderedTexture; struct FillProperties; struct RasterProperties; -struct CompositeProperties; class LayerDescription; class RasterTileData; @@ -111,13 +109,11 @@ public: void drawClippingMasks(const std::set> &sources); void drawClippingMask(const mat4& matrix, const ClipID& clip); - void clearFramebuffers(); void resetFramebuffer(); void bindFramebuffer(); void pushFramebuffer(); GLuint popFramebuffer(); void discardFramebuffers(); - void drawComposite(GLuint texture, const CompositeProperties &properties); bool needsAnimation() const; private: @@ -172,7 +168,6 @@ public: std::unique_ptr rasterShader; std::unique_ptr textShader; std::unique_ptr dotShader; - std::unique_ptr compositeShader; std::unique_ptr gaussianShader; // Set up the stencil quad we're using to generate the stencil mask. @@ -193,7 +188,6 @@ public: VertexArrayObject coveringRasterArray; VertexArrayObject coveringGaussianArray; - VertexArrayObject compositeArray; VertexArrayObject matteArray; // Set up the tile boundary lines we're using to draw the tile outlines. diff --git a/include/mbgl/shader/composite_shader.hpp b/include/mbgl/shader/composite_shader.hpp deleted file mode 100644 index c0c1704f3d..0000000000 --- a/include/mbgl/shader/composite_shader.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef MBGL_SHADER_COMPOSITE_SHADER -#define MBGL_SHADER_COMPOSITE_SHADER - -#include - -namespace mbgl { - -class CompositeShader : public Shader { -public: - CompositeShader(); - - void bind(char *offset); - - void setImage(int32_t image); - void setOpacity(float opacity); - -private: - int32_t a_pos = -1; - - int32_t image = 0; - int32_t u_image = -1; - - float opacity = 0; - int32_t u_opacity = -1; -}; - -} - -#endif diff --git a/include/mbgl/style/property_key.hpp b/include/mbgl/style/property_key.hpp index aee5db0385..ec68ea991e 100644 --- a/include/mbgl/style/property_key.hpp +++ b/include/mbgl/style/property_key.hpp @@ -51,8 +51,6 @@ enum class PropertyKey { TextTranslateY, TextTranslateAnchor, - CompositeOpacity, - RasterOpacity, RasterHueRotate, RasterBrightness, // for transitions only diff --git a/include/mbgl/style/style_properties.hpp b/include/mbgl/style/style_properties.hpp index f12ab430e3..742ae63f0f 100644 --- a/include/mbgl/style/style_properties.hpp +++ b/include/mbgl/style/style_properties.hpp @@ -76,16 +76,6 @@ struct SymbolProperties { } }; - -struct CompositeProperties { - inline CompositeProperties() {} - float opacity = 1.0f; - - inline bool isVisible() const { - return opacity > 0; - } -}; - struct RasterProperties { inline RasterProperties() {} float opacity = 1.0f; @@ -109,7 +99,6 @@ typedef util::variant< FillProperties, LineProperties, SymbolProperties, - CompositeProperties, RasterProperties, BackgroundProperties, std::false_type diff --git a/include/mbgl/style/types.hpp b/include/mbgl/style/types.hpp index 55b7685fd3..fa21f819a5 100644 --- a/include/mbgl/style/types.hpp +++ b/include/mbgl/style/types.hpp @@ -19,7 +19,6 @@ enum class StyleLayerType : uint8_t { Line, Symbol, Raster, - Composite, Background }; @@ -29,7 +28,6 @@ MBGL_DEFINE_ENUM_CLASS(StyleLayerTypeClass, StyleLayerType, { { StyleLayerType::Line, "line" }, { StyleLayerType::Symbol, "symbol" }, { StyleLayerType::Raster, "raster" }, - { StyleLayerType::Composite, "composite" }, { StyleLayerType::Background, "background" }, { StyleLayerType(-1), "unknown" }, }); -- cgit v1.2.1 From 5a59b5f5fcdf3e13e2e3812066719231ae30aef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Mon, 18 Aug 2014 14:05:52 +0200 Subject: fix warnings --- include/mbgl/text/collision.hpp | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/mbgl/text/collision.hpp b/include/mbgl/text/collision.hpp index e2e2414ba7..7e65e979da 100644 --- a/include/mbgl/text/collision.hpp +++ b/include/mbgl/text/collision.hpp @@ -5,6 +5,7 @@ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" +#pragma GCC diagnostic ignored "-Wdeprecated-register" #ifndef __clang__ #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" -- cgit v1.2.1 From d147e18153910d4f21eaece75e06725b1249c8f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Tue, 19 Aug 2014 11:38:26 +0200 Subject: update mapbox/variant --- include/mbgl/style/filter_expression.hpp | 2 +- include/mbgl/style/function_properties.hpp | 2 +- include/mbgl/style/property_value.hpp | 2 +- include/mbgl/style/style_bucket.hpp | 4 ++-- include/mbgl/style/style_properties.hpp | 2 +- include/mbgl/style/value.hpp | 2 +- include/mbgl/util/recursive_wrapper.hpp | 2 +- include/mbgl/util/variant.hpp | 25 ++++++++++++++++++++++--- 8 files changed, 30 insertions(+), 11 deletions(-) (limited to 'include') diff --git a/include/mbgl/style/filter_expression.hpp b/include/mbgl/style/filter_expression.hpp index 2a6a2927e7..2a96578792 100644 --- a/include/mbgl/style/filter_expression.hpp +++ b/include/mbgl/style/filter_expression.hpp @@ -10,7 +10,7 @@ namespace mbgl { class FilterExpression { public: - typedef util::recursive_wrapper Wrapper; + typedef mapbox::util::recursive_wrapper Wrapper; enum class Operator : uint8_t { And, diff --git a/include/mbgl/style/function_properties.hpp b/include/mbgl/style/function_properties.hpp index 8cd7ce6e28..56092f9a63 100644 --- a/include/mbgl/style/function_properties.hpp +++ b/include/mbgl/style/function_properties.hpp @@ -27,7 +27,7 @@ private: }; template -using Function = util::variant< +using Function = mapbox::util::variant< std::false_type, ConstantFunction, StopsFunction diff --git a/include/mbgl/style/property_value.hpp b/include/mbgl/style/property_value.hpp index 4d148dc029..1b22b31177 100644 --- a/include/mbgl/style/property_value.hpp +++ b/include/mbgl/style/property_value.hpp @@ -7,7 +7,7 @@ namespace mbgl { -typedef util::variant< +typedef mapbox::util::variant< std::string, TranslateAnchorType, RotateAnchorType, diff --git a/include/mbgl/style/style_bucket.hpp b/include/mbgl/style/style_bucket.hpp index 58d4d705db..67c3142059 100644 --- a/include/mbgl/style/style_bucket.hpp +++ b/include/mbgl/style/style_bucket.hpp @@ -89,8 +89,8 @@ public: float buffer = 0.03125f; }; -typedef util::variant StyleBucketRender; +typedef mapbox::util::variant StyleBucketRender; class StyleBucket { diff --git a/include/mbgl/style/style_properties.hpp b/include/mbgl/style/style_properties.hpp index 742ae63f0f..bbe8812bc7 100644 --- a/include/mbgl/style/style_properties.hpp +++ b/include/mbgl/style/style_properties.hpp @@ -95,7 +95,7 @@ struct BackgroundProperties { Color color = {{ 0, 0, 0, 1 }}; }; -typedef util::variant< +typedef mapbox::util::variant< FillProperties, LineProperties, SymbolProperties, diff --git a/include/mbgl/style/value.hpp b/include/mbgl/style/value.hpp index 5e6260e5a6..b981f1db9c 100644 --- a/include/mbgl/style/value.hpp +++ b/include/mbgl/style/value.hpp @@ -9,7 +9,7 @@ namespace mbgl { -typedef util::variant Value; +typedef mapbox::util::variant Value; std::string toString(const Value &value); diff --git a/include/mbgl/util/recursive_wrapper.hpp b/include/mbgl/util/recursive_wrapper.hpp index a616805c0f..54b27634a3 100644 --- a/include/mbgl/util/recursive_wrapper.hpp +++ b/include/mbgl/util/recursive_wrapper.hpp @@ -3,7 +3,7 @@ #include -namespace mbgl { namespace util { +namespace mapbox { namespace util { template class recursive_wrapper diff --git a/include/mbgl/util/variant.hpp b/include/mbgl/util/variant.hpp index ddc82ee311..1eca5160c7 100644 --- a/include/mbgl/util/variant.hpp +++ b/include/mbgl/util/variant.hpp @@ -35,7 +35,7 @@ // translates to 100 #define VARIANT_VERSION (VARIANT_MAJOR_VERSION*100000) + (VARIANT_MINOR_VERSION*100) + (VARIANT_PATCH_VERSION) -namespace mbgl { namespace util { namespace detail { +namespace mapbox { namespace util { namespace detail { static constexpr std::size_t invalid_value = std::size_t(-1); @@ -487,6 +487,8 @@ private: } // namespace detail +struct no_init {}; + template class variant { @@ -503,12 +505,16 @@ private: public: + VARIANT_INLINE variant() : type_index(sizeof...(Types) - 1) { new (&data) typename detail::select_type<0, Types...>::type(); } + VARIANT_INLINE variant(no_init) + : type_index(detail::invalid_value) {} + template ::value>::type> VARIANT_INLINE explicit variant(T const& val) noexcept @@ -715,11 +721,24 @@ auto VARIANT_INLINE static apply_visitor(F f, V & v0, V & v1) -> decltype(V::bin return V::binary_visit(v0, v1, f); } +// getter interface +template +ResultType & get(T & var) +{ + return var.template get(); +} + +template +ResultType const& get(T const& var) +{ + return var.template get(); +} + // operator<< -template +template VARIANT_INLINE std::basic_ostream& -operator<< (std::basic_ostream& out, Variant const& rhs) +operator<< (std::basic_ostream& out, variant const& rhs) { detail::printer> visitor(out); apply_visitor(visitor, rhs); -- cgit v1.2.1