move group struct to shared file

This commit is contained in:
Konstantin Käfer
2014-02-11 16:00:40 +01:00
parent bec0ad10c4
commit eb8e5fcf15
3 changed files with 23 additions and 18 deletions

View File

@@ -1,10 +1,26 @@
#ifndef LLMR_GEOMETRY_TRIANGLE_ELEMENTS_BUFFER
#define LLMR_GEOMETRY_TRIANGLE_ELEMENTS_BUFFER
#include "buffer.hpp"
#include <llmr/geometry/buffer.hpp>
namespace llmr {
template <typename Shader>
class VertexArrayObject;
template <typename Shader>
struct ElementGroup {
VertexArrayObject<Shader> 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

View File

@@ -1,9 +1,9 @@
#ifndef LLMR_RENDERER_FILLBUCKET
#define LLMR_RENDERER_FILLBUCKET
#include "bucket.hpp"
#include <llmr/renderer/bucket.hpp>
#include <llmr/style/bucket_description.hpp>
#include <llmr/geometry/vao.hpp>
#include <llmr/geometry/elements_buffer.hpp>
#include <llmr/geometry/fill_buffer.hpp>
#include <vector>
@@ -25,6 +25,7 @@ struct Coordinate;
struct pbf;
class FillBucket : public Bucket {
typedef ElementGroup<PlainShader> group_type;
public:
FillBucket(const std::shared_ptr<FillVertexBuffer>& vertexBuffer,
const std::shared_ptr<TriangleElementsBuffer>& elementsBuffer,
@@ -46,24 +47,12 @@ private:
std::shared_ptr<FillVertexBuffer> vertexBuffer;
std::shared_ptr<TriangleElementsBuffer> elementsBuffer;
struct group {
VertexArrayObject<PlainShader> 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<OutlineShader> array;
std::vector<group> groups;
std::vector<ElementGroup<PlainShader>> groups;
};
}

View File

@@ -73,7 +73,7 @@ void FillBucket::addGeometry(const std::vector<Coordinate>& 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);