Finished GeometryManager and added AABB raster support
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user