Jarvis, Optimise my shit
This commit is contained in:
parent
d1abde919d
commit
9424b29d0a
50 changed files with 1469 additions and 1232 deletions
|
|
@ -80,59 +80,11 @@ const vec3 FACE_CORNERS[8][4] = vec3[8][4](
|
|||
vec3[4](vec3(0.0, 0.0, 1.0), vec3(0.0, 1.0, 1.0), vec3(1.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0)) // Face 7 (cross model pane 2)
|
||||
);
|
||||
|
||||
vec3 buildFaceCornerPosition(uvec3 voxelPos, uint faceId, uint cornerIndex) {
|
||||
vec3 p = vec3(voxelPos);
|
||||
|
||||
if (faceId == 0u) {
|
||||
if (cornerIndex == 0u) return p + vec3(0.0, 1.0, 0.0);
|
||||
if (cornerIndex == 1u) return p + vec3(0.0, 1.0, 1.0);
|
||||
if (cornerIndex == 2u) return p + vec3(1.0, 1.0, 1.0);
|
||||
return p + vec3(1.0, 1.0, 0.0);
|
||||
}
|
||||
|
||||
if (faceId == 1u) {
|
||||
if (cornerIndex == 0u) return p + vec3(0.0, 0.0, 0.0);
|
||||
if (cornerIndex == 1u) return p + vec3(1.0, 0.0, 0.0);
|
||||
if (cornerIndex == 2u) return p + vec3(1.0, 0.0, 1.0);
|
||||
return p + vec3(0.0, 0.0, 1.0);
|
||||
}
|
||||
|
||||
if (faceId == 2u) {
|
||||
if (cornerIndex == 0u) return p + vec3(1.0, 0.0, 0.0);
|
||||
if (cornerIndex == 1u) return p + vec3(1.0, 1.0, 0.0);
|
||||
if (cornerIndex == 2u) return p + vec3(1.0, 1.0, 1.0);
|
||||
return p + vec3(1.0, 0.0, 1.0);
|
||||
}
|
||||
|
||||
if (faceId == 3u) {
|
||||
if (cornerIndex == 0u) return p + vec3(0.0, 0.0, 0.0);
|
||||
if (cornerIndex == 1u) return p + vec3(0.0, 0.0, 1.0);
|
||||
if (cornerIndex == 2u) return p + vec3(0.0, 1.0, 1.0);
|
||||
return p + vec3(0.0, 1.0, 0.0);
|
||||
}
|
||||
|
||||
if (faceId == 4u) {
|
||||
if (cornerIndex == 0u) return p + vec3(0.0, 0.0, 1.0);
|
||||
if (cornerIndex == 1u) return p + vec3(1.0, 0.0, 1.0);
|
||||
if (cornerIndex == 2u) return p + vec3(1.0, 1.0, 1.0);
|
||||
return p + vec3(0.0, 1.0, 1.0);
|
||||
}
|
||||
|
||||
if (cornerIndex == 0u) return p + vec3(0.0, 0.0, 0.0);
|
||||
if (cornerIndex == 1u) return p + vec3(0.0, 1.0, 0.0);
|
||||
if (cornerIndex == 2u) return p + vec3(1.0, 1.0, 0.0);
|
||||
return p + vec3(1.0, 0.0, 0.0);
|
||||
}
|
||||
|
||||
void main() {
|
||||
uint faceRecordIndex = uint(gl_VertexIndex) / 6u;
|
||||
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 & 0xFu;
|
||||
|
|
@ -143,14 +95,6 @@ void main() {
|
|||
uint texIdxX = (packedFace >> 26u) & 0x7u;
|
||||
uint texIdxY = (packedFace >> 29u) & 0x7u;
|
||||
|
||||
// (voxelPos.x & 0xFu) |
|
||||
// ((voxelPos.y & 0xFu) << 4u) |
|
||||
// ((voxelPos.z & 0xFu) << 8u) |
|
||||
// ((faceIndex & 0x7u) << 12u) |
|
||||
// ((materialId & 0x7FFu) << 15u) |
|
||||
// ((textureIndexX & 0x7u) << 26u) |
|
||||
// ((textureIndexY & 0x7u) << 29u);
|
||||
|
||||
vec2 texID = vec2((texIdxX)/4.0,(texIdxY)/4.0);
|
||||
vec2 scalar = vec2(1.0/4.0,1.0/4.0);
|
||||
|
||||
|
|
@ -158,6 +102,11 @@ void main() {
|
|||
|
||||
vec3 localPos = vec3(voxelX, voxelY, voxelZ) + FACE_CORNERS[faceId][cornerIndex];
|
||||
vec3 worldPos = localPos + push_constants.ModelOffset.xyz * 16.0;
|
||||
if (gl_InstanceIndex != 0) {
|
||||
uint encoded = uint(gl_InstanceIndex);
|
||||
worldPos += vec3(int(encoded & 1023u) - 512, int((encoded >> 10u) & 1023u) - 512,
|
||||
int((encoded >> 20u) & 1023u) - 512) * 16.0;
|
||||
}
|
||||
|
||||
outTextCoord = CORNER_UVS_GRASS_BLOCK[faceId][cornerIndex] * scalar + texID;
|
||||
outMaterialIdx = matId;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue