gs-helper: Add maximum vertices parameter to VertexHelper
This commit is contained in:
parent
e3d217712f
commit
c07f2123d7
|
|
@ -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]);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue