[MERGE_UNSURE] use bytes for vertex info

further reduces vram usage: down to 8MB in test world.
Huge odd decrease in performance on the Radeon HD6850, unsure to merge this into master
vram-reduce
EmaMaker 2023-07-19 14:41:40 +02:00
parent 4fa89fd2f5
commit 32b9c3e8ca
3 changed files with 15 additions and 15 deletions

View File

@ -17,9 +17,9 @@ namespace chunkmesher{
Chunk::Chunk* chunk;
GLuint numVertices{0};
std::vector<GLfloat> vertices;
std::vector<GLfloat> extents;
std::vector<GLfloat> texinfo;
std::vector<GLubyte> vertices;
std::vector<GLubyte> extents;
std::vector<GLubyte> texinfo;
};
oneapi::tbb::concurrent_queue<MeshData*>& getMeshDataQueue();

View File

@ -1,8 +1,8 @@
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aExtents;
layout (location = 2) in vec2 aInfo;
layout (location = 0) in uvec3 aPos;
layout (location = 1) in uvec3 aExtents;
layout (location = 2) in uvec2 aInfo;
uniform mat4 model;
@ -18,9 +18,9 @@ void main()
vs_out.Extents = aExtents;
vs_out.BlockType = aInfo.y;
if(aExtents.x == 0) vs_out.Normal = vec3(1.0 - 2*aInfo.x, 0.0, 0.0);
else if(aExtents.y == 0) vs_out.Normal = vec3(0.0, 1.0 - 2*aInfo.x, 0.0);
else vs_out.Normal = vec3(0.0, 0.0, 1.0 - 2*aInfo.x);
if(aExtents.x == 0.0) vs_out.Normal = vec3(1.0 - 2.0*aInfo.x, 0.0, 0.0);
else if(aExtents.y == 0.0) vs_out.Normal = vec3(0.0, 1.0 - 2.0*aInfo.x, 0.0);
else vs_out.Normal = vec3(0.0, 0.0, 1.0 - 2.0*aInfo.x);
vs_out.Normal = mat3(transpose(inverse(model))) * vs_out.Normal;
gl_Position = model * vec4(aPos, 1.0);

View File

@ -236,21 +236,21 @@ void sendtogpu(MeshData* mesh_data)
// position attribute
glBindBuffer(GL_ARRAY_BUFFER, mesh_data->chunk->VBO);
glBufferData(GL_ARRAY_BUFFER, mesh_data->vertices.size() * sizeof(GLfloat), &(mesh_data->vertices[0]), GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0);
glBufferData(GL_ARRAY_BUFFER, mesh_data->vertices.size() * sizeof(GLubyte), &(mesh_data->vertices[0]), GL_STATIC_DRAW);
glVertexAttribIPointer(0, 3, GL_UNSIGNED_BYTE, 3 * sizeof(GLubyte), (void *)0);
glEnableVertexAttribArray(0);
// normal attribute
glBindBuffer(GL_ARRAY_BUFFER, mesh_data->chunk->extentsBuffer);
glBufferData(GL_ARRAY_BUFFER, mesh_data->extents.size() * sizeof(GLfloat), &(mesh_data->extents[0]), GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)(0));
glBufferData(GL_ARRAY_BUFFER, mesh_data->extents.size() * sizeof(GLubyte), &(mesh_data->extents[0]), GL_STATIC_DRAW);
glVertexAttribIPointer(1, 3, GL_UNSIGNED_BYTE, 3 * sizeof(GLubyte), (void *)0);
glEnableVertexAttribArray(1);
// texcoords attribute
glBindBuffer(GL_ARRAY_BUFFER, mesh_data->chunk->texinfoBuffer);
glBufferData(GL_ARRAY_BUFFER, mesh_data->texinfo.size() * sizeof(GLfloat), &(mesh_data->texinfo[0]), GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, mesh_data->texinfo.size() * sizeof(GLubyte), &(mesh_data->texinfo[0]), GL_STATIC_DRAW);
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void *)0);
glVertexAttribIPointer(2, 2, GL_UNSIGNED_BYTE, 2 * sizeof(GLubyte), (void *)0);
glBindVertexArray(0);