gs-helper: Add maximum vertices parameter to VertexHelper

This commit is contained in:
Michael Fabian Dirks 2017-06-29 03:39:16 +02:00
parent e3d217712f
commit c07f2123d7
2 changed files with 23 additions and 21 deletions

View File

@ -19,19 +19,21 @@
#include "gs-helper.h"
Helper::VertexBuffer::VertexBuffer() {
m_positions.resize(1);
m_normals.resize(1);
m_tangents.resize(1);
m_colors.resize(1);
m_uvs.resize(1);
m_uvs[0].resize(1);
m_uvArrays.resize(1);
m_uvArrays[0].width = 2;
m_uvArrays[0].array = m_uvs[0].data();
Helper::VertexBuffer::VertexBuffer(size_t maxVertices) {
m_positions.resize(maxVertices);
m_normals.resize(maxVertices);
m_tangents.resize(maxVertices);
m_colors.resize(maxVertices);
m_uvs.resize(8);
m_uvArrays.resize(8);
for (size_t idx = 0; idx < 8; idx++) {
m_uvs[idx].resize(maxVertices);
m_uvArrays[idx].width = 2;
m_uvArrays[idx].array = m_uvs[idx].data();
}
m_vertexData = gs_vbdata_create();
m_vertexData->num = 1;
m_vertexData->num = maxVertices;
m_vertexData->points = m_positions.data();
m_vertexData->normals = m_normals.data();
m_vertexData->tangents = m_normals.data();
@ -73,9 +75,9 @@ gs_vertbuffer_t* Helper::VertexBuffer::update() {
for (size_t vert = 0; vert < verts; vert++) {
Vertex& v = this->at(vert);
vec3_copy(&m_positions[vert], &v.position);
vec3_copy(&m_normals[vert], &v.normal);
vec3_copy(&m_tangents[vert], &v.tangent);
vec3_copy(&(m_positions.at(vert)), &v.position);
vec3_copy(&(m_normals.at(vert)), &v.normal);
vec3_copy(&(m_tangents.at(vert)), &v.tangent);
m_colors[vert] = v.color;
for (size_t layer = 0; layer < m_uvs.size(); layer++) {
vec2_copy(&m_uvs[layer][vert], &v.uv[layer]);

View File

@ -28,20 +28,20 @@ namespace Helper {
struct Vertex {
Vertex();
vec3
position,
normal,
vec3
position,
normal,
tangent;
vec2 uv[8];
uint32_t
uint32_t
color;
};
class VertexBuffer : public std::vector<Vertex> {
public:
VertexBuffer();
VertexBuffer(size_t maxVertices);
virtual ~VertexBuffer();
void set_uv_layers(size_t count);
size_t get_uv_layers();
@ -55,4 +55,4 @@ namespace Helper {
std::vector<uint32_t> m_colors;
std::vector<std::vector<vec2>> m_uvs;
};
}
}