chunkmesher: push vertices normals to GPU
parent
da6608c66a
commit
b4dd3be584
|
@ -16,7 +16,8 @@ namespace chunkmesher{
|
||||||
void sendtogpu(Chunk::Chunk* chunk);
|
void sendtogpu(Chunk::Chunk* chunk);
|
||||||
void draw(Chunk::Chunk* chunk, glm::mat4 model);
|
void draw(Chunk::Chunk* chunk, glm::mat4 model);
|
||||||
|
|
||||||
void quad(Chunk::Chunk* chunk, glm::vec3 bottomLeft, glm::vec3 topLeft, glm::vec3 topRight, glm::vec3 bottomRight, Block block, bool backFace);
|
void quad(Chunk::Chunk* chunk, glm::vec3 bottomLeft, glm::vec3 topLeft, glm::vec3 topRight,
|
||||||
|
glm::vec3 bottomRight, glm::vec3 normal, Block block, bool backFace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
#version 330 core
|
#version 330 core
|
||||||
|
|
||||||
in vec4 vColor;
|
in vec4 vColor;
|
||||||
|
in vec3 vNormal;
|
||||||
|
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
FragColor = vColor;
|
FragColor = vColor;
|
||||||
// FragColor= vec4(1.0f, 1.0f, 1.0f, 1.0f);
|
// FragColor= vec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,20 @@
|
||||||
#version 330 core
|
#version 330 core
|
||||||
|
|
||||||
layout (location = 0) in vec3 aPos;
|
layout (location = 0) in vec3 aPos;
|
||||||
layout (location = 1) in vec3 aColor;
|
layout (location = 1) in vec3 aNormal;
|
||||||
|
layout (location = 2) in vec3 aColor;
|
||||||
|
|
||||||
uniform mat4 model;
|
uniform mat4 model;
|
||||||
uniform mat4 view;
|
uniform mat4 view;
|
||||||
uniform mat4 projection;
|
uniform mat4 projection;
|
||||||
|
|
||||||
out vec4 vColor;
|
out vec4 vColor;
|
||||||
|
out vec3 vNormal;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vColor = vec4(aColor, 1.0f);
|
vColor = vec4(aColor, 1.0f);
|
||||||
|
vNormal = aNormal;
|
||||||
|
|
||||||
gl_Position = projection * view * model * vec4(aPos, 1.0);
|
gl_Position = projection * view * model * vec4(aPos, 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,6 +151,7 @@ void mesh(Chunk::Chunk* chunk)
|
||||||
glm::vec3(x[0] + du[0] + dv[0], x[1] + du[1] + dv[1],
|
glm::vec3(x[0] + du[0] + dv[0], x[1] + du[1] + dv[1],
|
||||||
x[2] + du[2] + dv[2]),
|
x[2] + du[2] + dv[2]),
|
||||||
glm::vec3(x[0] + dv[0], x[1] + dv[1], x[2] + dv[2]),
|
glm::vec3(x[0] + dv[0], x[1] + dv[1], x[2] + dv[2]),
|
||||||
|
glm::vec3(backFace ? q[0] : -q[0], backFace ? q[1] : -q[1], backFace ? q[2] : -q[2] ),
|
||||||
mask[n], backFace);
|
mask[n], backFace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,17 +193,24 @@ void sendtogpu(Chunk::Chunk* chunk)
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, chunk->VBO);
|
glBindBuffer(GL_ARRAY_BUFFER, chunk->VBO);
|
||||||
glBufferData(GL_ARRAY_BUFFER, chunk->vertices.size() * sizeof(GLfloat), &(chunk->vertices[0]), GL_STATIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, chunk->vertices.size() * sizeof(GLfloat), &(chunk->vertices[0]), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
// position attribute
|
||||||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void *)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
|
||||||
|
// normal attribute
|
||||||
|
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void *)(3*
|
||||||
|
sizeof(float)));
|
||||||
|
glEnableVertexAttribArray(1);
|
||||||
|
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, chunk->EBO);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, chunk->EBO);
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, chunk->indices.size() * sizeof(GLuint), &(chunk->indices[0]), GL_STATIC_DRAW);
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, chunk->indices.size() * sizeof(GLuint), &(chunk->indices[0]), GL_STATIC_DRAW);
|
||||||
|
|
||||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0);
|
// color attribute
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, chunk->colorBuffer);
|
glBindBuffer(GL_ARRAY_BUFFER, chunk->colorBuffer);
|
||||||
glBufferData(GL_ARRAY_BUFFER, chunk->colors.size() * sizeof(GLfloat), &(chunk->colors[0]), GL_STATIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, chunk->colors.size() * sizeof(GLfloat), &(chunk->colors[0]), GL_STATIC_DRAW);
|
||||||
|
|
||||||
glEnableVertexAttribArray(1);
|
glEnableVertexAttribArray(2);
|
||||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0);
|
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0);
|
||||||
|
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
@ -236,24 +244,38 @@ void draw(Chunk::Chunk* chunk, glm::mat4 model)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void quad(Chunk::Chunk* chunk, glm::vec3 bottomLeft, glm::vec3 topLeft, glm::vec3 topRight, glm::vec3 bottomRight, Block block, bool backFace)
|
void quad(Chunk::Chunk* chunk, glm::vec3 bottomLeft, glm::vec3 topLeft, glm::vec3 topRight,
|
||||||
|
glm::vec3 bottomRight, glm::vec3 normal, Block block, bool backFace)
|
||||||
{
|
{
|
||||||
|
|
||||||
chunk->vertices.push_back(bottomLeft.x);
|
chunk->vertices.push_back(bottomLeft.x);
|
||||||
chunk->vertices.push_back(bottomLeft.y);
|
chunk->vertices.push_back(bottomLeft.y);
|
||||||
chunk->vertices.push_back(bottomLeft.z);
|
chunk->vertices.push_back(bottomLeft.z);
|
||||||
|
chunk->vertices.push_back(normal.x);
|
||||||
|
chunk->vertices.push_back(normal.y);
|
||||||
|
chunk->vertices.push_back(normal.z);
|
||||||
|
|
||||||
chunk->vertices.push_back(bottomRight.x);
|
chunk->vertices.push_back(bottomRight.x);
|
||||||
chunk->vertices.push_back(bottomRight.y);
|
chunk->vertices.push_back(bottomRight.y);
|
||||||
chunk->vertices.push_back(bottomRight.z);
|
chunk->vertices.push_back(bottomRight.z);
|
||||||
|
chunk->vertices.push_back(normal.x);
|
||||||
|
chunk->vertices.push_back(normal.y);
|
||||||
|
chunk->vertices.push_back(normal.z);
|
||||||
|
|
||||||
chunk->vertices.push_back(topLeft.x);
|
chunk->vertices.push_back(topLeft.x);
|
||||||
chunk->vertices.push_back(topLeft.y);
|
chunk->vertices.push_back(topLeft.y);
|
||||||
chunk->vertices.push_back(topLeft.z);
|
chunk->vertices.push_back(topLeft.z);
|
||||||
|
chunk->vertices.push_back(normal.x);
|
||||||
|
chunk->vertices.push_back(normal.y);
|
||||||
|
chunk->vertices.push_back(normal.z);
|
||||||
|
|
||||||
chunk->vertices.push_back(topRight.x);
|
chunk->vertices.push_back(topRight.x);
|
||||||
chunk->vertices.push_back(topRight.y);
|
chunk->vertices.push_back(topRight.y);
|
||||||
chunk->vertices.push_back(topRight.z);
|
chunk->vertices.push_back(topRight.z);
|
||||||
|
chunk->vertices.push_back(normal.x);
|
||||||
|
chunk->vertices.push_back(normal.y);
|
||||||
|
chunk->vertices.push_back(normal.z);
|
||||||
|
|
||||||
|
|
||||||
if (backFace)
|
if (backFace)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue