From eb8e5fcf1598f25123aad83c41594af232a7ab60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Tue, 11 Feb 2014 16:00:40 +0100 Subject: [PATCH] move group struct to shared file --- include/llmr/geometry/elements_buffer.hpp | 18 +++++++++++++++++- include/llmr/renderer/fill_bucket.hpp | 19 ++++--------------- src/renderer/fill_bucket.cpp | 4 ++-- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/include/llmr/geometry/elements_buffer.hpp b/include/llmr/geometry/elements_buffer.hpp index 82d97f8b6..7a7ce6b12 100644 --- a/include/llmr/geometry/elements_buffer.hpp +++ b/include/llmr/geometry/elements_buffer.hpp @@ -1,10 +1,26 @@ #ifndef LLMR_GEOMETRY_TRIANGLE_ELEMENTS_BUFFER #define LLMR_GEOMETRY_TRIANGLE_ELEMENTS_BUFFER -#include "buffer.hpp" +#include namespace llmr { +template +class VertexArrayObject; + +template +struct ElementGroup { + VertexArrayObject array; + uint32_t vertex_length; + uint32_t elements_length; + + ElementGroup() : vertex_length(0), elements_length(0) {} + ElementGroup(uint32_t vertex_length, uint32_t elements_length) + : vertex_length(vertex_length), + elements_length(elements_length) { + } +}; + class TriangleElementsBuffer : public Buffer< 6, // bytes per triangle (3 * unsigned short == 6 bytes) GL_ELEMENT_ARRAY_BUFFER diff --git a/include/llmr/renderer/fill_bucket.hpp b/include/llmr/renderer/fill_bucket.hpp index e8b278b32..a72413521 100644 --- a/include/llmr/renderer/fill_bucket.hpp +++ b/include/llmr/renderer/fill_bucket.hpp @@ -1,9 +1,9 @@ #ifndef LLMR_RENDERER_FILLBUCKET #define LLMR_RENDERER_FILLBUCKET -#include "bucket.hpp" +#include #include -#include +#include #include #include @@ -25,6 +25,7 @@ struct Coordinate; struct pbf; class FillBucket : public Bucket { + typedef ElementGroup group_type; public: FillBucket(const std::shared_ptr& vertexBuffer, const std::shared_ptr& elementsBuffer, @@ -46,24 +47,12 @@ private: std::shared_ptr vertexBuffer; std::shared_ptr elementsBuffer; - struct group { - VertexArrayObject array; - uint32_t vertex_length; - uint32_t elements_length; - - group() : vertex_length(0), elements_length(0) {} - group(uint32_t vertex_length, uint32_t elements_length) - : vertex_length(vertex_length), - elements_length(elements_length) { - } - }; - // hold information on where the vertices are located in the FillBuffer uint32_t vertex_start; uint32_t elements_start; uint32_t length; VertexArrayObject array; - std::vector groups; + std::vector> groups; }; } diff --git a/src/renderer/fill_bucket.cpp b/src/renderer/fill_bucket.cpp index 2c5270174..bcb6bf43e 100644 --- a/src/renderer/fill_bucket.cpp +++ b/src/renderer/fill_bucket.cpp @@ -73,7 +73,7 @@ void FillBucket::addGeometry(const std::vector& line) { index.groups.emplace_back(); } - group& group = index.groups.back(); + group_type& group = index.groups.back(); // We're generating triangle fans, so we always start with the first // coordinate in this polygon. @@ -106,7 +106,7 @@ uint32_t FillBucket::size() const { void FillBucket::drawElements(PlainShader& shader) { char *vertex_index = BUFFER_OFFSET(vertex_start * vertexBuffer->itemSize); char *elements_index = BUFFER_OFFSET(elements_start * elementsBuffer->itemSize); - for (group& group : groups) { + for (group_type& group : groups) { group.array.bind(shader, *vertexBuffer, *elementsBuffer, vertex_index); glDrawElements(GL_TRIANGLES, group.elements_length * 3 - 3, GL_UNSIGNED_SHORT, elements_index); vertex_index += group.vertex_length * 2 * sizeof(uint16_t);