diff --git a/src/main/resources/assets/voxy/shaders/lod/gl46/quads.frag b/src/main/resources/assets/voxy/shaders/lod/gl46/quads.frag index 330e24df..e0d16ad1 100644 --- a/src/main/resources/assets/voxy/shaders/lod/gl46/quads.frag +++ b/src/main/resources/assets/voxy/shaders/lod/gl46/quads.frag @@ -1,6 +1,9 @@ #version 460 core //Use quad shuffling to compute fragment mip //#extension GL_KHR_shader_subgroup_quad: enable +#ifdef USE_SINGLE_TRI +#define USE_NV_BARRY +#endif #ifdef USE_NV_BARRY #extension GL_NV_fragment_shader_barycentric: require @@ -115,8 +118,13 @@ void main() { //Tile is the tile we are in vec2 tile; #ifdef USE_NV_BARRY + #ifdef USE_SINGLE_TRI + if (gl_BaryCoordNV.x>=0.5||gl_BaryCoordNV.y>=0.5) discard; + vec2 uv = gl_BaryCoordNV.yx*(vec2((interData.x>>8)&0xFu, (interData.x>>12)&0xFu)+1)*2; + #else vec2 uv = mix(gl_BaryCoordNV.yx, 1-gl_BaryCoordNV.xz, gl_PrimitiveID&1)*(vec2((interData.x>>8)&0xFu, (interData.x>>12)&0xFu)+1); #endif + #endif vec2 uv2 = modf(uv, tile)*(1.0/(vec2(3.0,2.0)*256.0)); vec4 colour; diff --git a/src/main/resources/assets/voxy/shaders/lod/gl46/quads3.vert b/src/main/resources/assets/voxy/shaders/lod/gl46/quads3.vert index 2fd63921..03ad7215 100644 --- a/src/main/resources/assets/voxy/shaders/lod/gl46/quads3.vert +++ b/src/main/resources/assets/voxy/shaders/lod/gl46/quads3.vert @@ -7,6 +7,10 @@ #define POSITION_SCRATCH_BINDING 5 #define LIGHTING_SAMPLER_BINDING 1 +#ifdef USE_SINGLE_TRI +#define USE_NV_BARRY +#endif + #import #import #import diff --git a/src/main/resources/assets/voxy/shaders/lod/quad_util.glsl b/src/main/resources/assets/voxy/shaders/lod/quad_util.glsl index dcc62a54..e140c777 100644 --- a/src/main/resources/assets/voxy/shaders/lod/quad_util.glsl +++ b/src/main/resources/assets/voxy/shaders/lod/quad_util.glsl @@ -162,7 +162,9 @@ void setupQuad(out QuadData quad, const in Quad rawQuad, uvec2 sPos, bool genera } vec4 faceSize = getFaceSize(faceData); - + #ifdef USE_SINGLE_TRI + faceSize *= 2; + #endif vec3 quadStart = extractPos(rawQuad); float depthOffset = extractFaceIndentation(faceData); quadStart += swizzelDataAxis(face>>1, vec3(faceSize.xz, mix(depthOffset, 1-depthOffset, float(face&1u)))); @@ -170,7 +172,11 @@ void setupQuad(out QuadData quad, const in Quad rawQuad, uvec2 sPos, bool genera quad.lodScale = lodScale; quad.axis = face>>1; quad.basePoint = (quadStart*lodScale)+vec3(baseSection<<5); - quad.quadSizeAddin = (faceSize.yw + quadSize - 1); + #ifdef USE_SINGLE_TRI + quad.quadSizeAddin = (faceSize.yw + (quadSize - 1)*2); + #else + quad.quadSizeAddin = faceSize.yw + quadSize - 1; + #endif quad.uvCorner = faceSize.xz; }