voxel biomes and CPU pushed blocks
This commit is contained in:
parent
7fda2614d7
commit
a0b00b0f1c
24 changed files with 1007 additions and 91 deletions
|
|
@ -6,6 +6,7 @@ layout(location = 2) out vec3 outTangent;
|
|||
layout(location = 3) out vec3 outBitangent;
|
||||
layout(location = 4) out vec2 outTextCoords;
|
||||
layout(location = 5) out mat4 viewMatrix;
|
||||
layout(location = 9) out flat uint outMaterialID;
|
||||
|
||||
layout(set = 0, binding = 0) uniform ProjUniform { mat4 matrix; } projUniform;
|
||||
layout(set = 1, binding = 0) uniform ViewUniform { mat4 matrix; } viewUniform;
|
||||
|
|
@ -93,17 +94,13 @@ void main() {
|
|||
uint triangleVertex = (uint(gl_VertexIndex))% 6u;
|
||||
uint cornerIndex = TRI_TO_CORNER[triangleVertex];
|
||||
|
||||
//uint faceRecordIndex = uint(gl_VertexIndex) / 6u;
|
||||
//uint triangleVertex = uint(gl_VertexIndex) % 6u;
|
||||
//uint cornerIndex = TRI_TO_CORNER[triangleVertex];
|
||||
|
||||
uint packedFace = faces[faceRecordIndex];
|
||||
|
||||
uint voxelX = packedFace & 0x1Fu;
|
||||
uint voxelY = (packedFace >> 5u) & 0x1Fu;
|
||||
uint voxelZ = (packedFace >> 10u) & 0x1Fu;
|
||||
uint faceId = (packedFace >> 15u) & 0x7u;
|
||||
uint matId = (packedFace >> 18u) & 0xFFu;
|
||||
uint voxelX = packedFace & 0xFu;
|
||||
uint voxelY = (packedFace >> 4u) & 0xFu;
|
||||
uint voxelZ = (packedFace >> 8u) & 0xFu;
|
||||
uint faceId = (packedFace >> 12u) & 0x7u;
|
||||
uint matId = (packedFace >> 15u) & 0x7FFu;
|
||||
uint texIdxX = (packedFace >> 26u) & 0x7u;
|
||||
uint texIdxY = (packedFace >> 29u) & 0x7u;
|
||||
|
||||
|
|
@ -111,7 +108,6 @@ void main() {
|
|||
vec2 scalar = vec2(1.0/4.0,1.0/4.0);
|
||||
|
||||
faceId = min(faceId, 7u);
|
||||
matId = min(matId, 4u);
|
||||
|
||||
vec3 localPos = vec3(voxelX, voxelY, voxelZ) + FACE_CORNERS[faceId][cornerIndex];
|
||||
vec3 worldPos = localPos + push_constants.ModelOffset.xyz * 16.0;
|
||||
|
|
@ -119,10 +115,14 @@ void main() {
|
|||
vec4 worldPosVec4 = vec4(worldPos, 1.0);
|
||||
|
||||
gl_Position = projUniform.matrix * viewUniform.matrix * worldPosVec4;
|
||||
|
||||
outPos = worldPosVec4;
|
||||
outNormal = NORMALS[faceId];
|
||||
outTangent = TANGENTS[faceId];
|
||||
outBitangent = BITANGENTS[faceId];
|
||||
outTextCoords = CORNER_UVS_GRASS_BLOCK[faceId][cornerIndex] * scalar + texID;
|
||||
vec2 atlasSize = vec2(64, 64);
|
||||
vec2 texel = 0.5 / atlasSize;
|
||||
vec2 tileMin = vec2(texIdxX, texIdxY) * scalar + texel;
|
||||
vec2 tileMax = vec2(texIdxX + 1u, texIdxY + 1u) * scalar - texel;
|
||||
outTextCoords = mix(tileMin, tileMax, CORNER_UVS_GRASS_BLOCK[faceId][cornerIndex]);
|
||||
outMaterialID = matId;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue