Finished GeometryManager and added AABB raster support

This commit is contained in:
mcrcortex
2024-01-29 12:35:09 +10:00
parent d499a19d4e
commit 787dc88c43
11 changed files with 69 additions and 77 deletions

View File

@@ -21,11 +21,11 @@ struct SectionMeta {
uint posA;
uint posB;
uint AABB;
uint _padA;
uint ptr;
uint cnt;
uint _padB;
uint _padC;
uint cntA;
uint cntB;
uint cntC;
uint cntD;
};
//TODO: see if making the stride 2*4*4 bytes or something cause you get that 16 byte write

View File

@@ -55,11 +55,13 @@ void main() {
}
if (shouldRender) {
uint basePtr = extractQuadStart(meta);
DrawCommand cmd;
cmd.count = extractQuadCount(meta) * 6;
cmd.count = (meta.cntA&0xFFFF) * 6;
cmd.instanceCount = 1;
cmd.firstIndex = 0;
cmd.baseVertex = int(extractQuadStart(meta))<<2;
cmd.baseVertex = int(basePtr)<<2;
cmd.baseInstance = encodeLocalLodPos(detail, ipos);
cmdBuffer[atomicAdd(opaqueDrawCount, 1)] = cmd;
}

View File

@@ -14,12 +14,15 @@ void main() {
uint detail = extractDetail(section);
ivec3 ipos = extractPosition(section);
ivec3 aabbOffset = extractAABBOffset(section);
ivec3 size = extractAABBSize(section);
//Transform ipos with respect to the vertex corner
ipos += ivec3(gl_VertexID&1, (gl_VertexID>>2)&1, (gl_VertexID>>1)&1);
ivec3 pos = (((ipos<<detail)-baseSectionPos)<<5);
pos += aabbOffset;
pos += (ivec3(gl_VertexID&1, (gl_VertexID>>2)&1, (gl_VertexID>>1)&1)*size)*(1<<detail);
vec3 cornerPos = vec3(((ipos<<detail)-baseSectionPos)<<5);
gl_Position = MVP * vec4(cornerPos,1);
gl_Position = MVP * vec4(vec3(pos),1);
//Write to this id
id = sid;

View File

@@ -16,6 +16,10 @@ uint extractQuadStart(SectionMeta meta) {
return meta.ptr;
}
uint extractQuadCount(SectionMeta meta) {
return meta.cnt;
ivec3 extractAABBOffset(SectionMeta meta) {
return (ivec3(meta.AABB)>>ivec3(0,5,10))&31;
}
ivec3 extractAABBSize(SectionMeta meta) {
return ((ivec3(meta.AABB)>>ivec3(15,20,25))&31)+1;//The size is + 1 cause its always at least 1x1x1
}