move group struct to shared file
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user