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

View File

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