From 45e2ea897f75d647786fd4413ce2848f942f84d2 Mon Sep 17 00:00:00 2001 From: mcrcortex <18544518+MCRcortex@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:10:33 +1000 Subject: [PATCH] add textures --- .../assets/voxy/shaders/lod/mesh/frag.glsl | 18 +++++++++++++++++- .../assets/voxy/shaders/lod/mesh/mesh.glsl | 9 ++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/voxy/shaders/lod/mesh/frag.glsl b/src/main/resources/assets/voxy/shaders/lod/mesh/frag.glsl index fd2ef5e8..c47c4188 100644 --- a/src/main/resources/assets/voxy/shaders/lod/mesh/frag.glsl +++ b/src/main/resources/assets/voxy/shaders/lod/mesh/frag.glsl @@ -1,10 +1,13 @@ #version 460 core +#extension GL_NV_fragment_shader_barycentric : require + layout(binding = 0) uniform sampler2D blockModelAtlas; layout(binding = 2) uniform sampler2D depthTex; layout(location=1) perprimitiveNV in PerPrimData { uvec4 data; + vec4 uvData; } primIn; layout(location = 0) out vec4 outColour; @@ -45,9 +48,22 @@ vec2 getBaseUV() { return modelUV + (vec2(face>>1, face&1u) * (1.0/(vec2(3.0, 2.0)*256.0))); } +bool isTri0() { + return (gl_PrimitiveID&(1<<31))==0; +} void main() { - vec2 uv = vec2(0); + bool tri0 = isTri0(); + //1,2,0 + //1,3,2 + //vec2((corner>>1)&1u, corner&1u) + + //vec2(0,gl_BaryCoordNV.x)+vec2(gl_BaryCoordNV.y,0)+vec2(0,0); + //vec2(0,gl_BaryCoordNV.x)+vec2(gl_BaryCoordNV.y,gl_BaryCoordNV.y)+vec2(gl_BaryCoordNV.z,0); + + + vec2 uv = fma(mix(gl_BaryCoordNV.zx+gl_BaryCoordNV.y, gl_BaryCoordNV.yx, bvec2(tri0)), primIn.uvData.zw, primIn.uvData.xy); + //Need to interpolate //Tile is the tile we are in vec2 tile; diff --git a/src/main/resources/assets/voxy/shaders/lod/mesh/mesh.glsl b/src/main/resources/assets/voxy/shaders/lod/mesh/mesh.glsl index 14fcb4b4..5132c3aa 100644 --- a/src/main/resources/assets/voxy/shaders/lod/mesh/mesh.glsl +++ b/src/main/resources/assets/voxy/shaders/lod/mesh/mesh.glsl @@ -29,6 +29,7 @@ layout(std430) taskNV in Task { layout(location=1) perprimitiveNV out PerPrimData { uvec4 data; + vec4 uvData; } primOut[]; @@ -172,7 +173,7 @@ void setup(Quad quad) { } vec2 getUvCorner(uint corner) { - return faceSize.xz + axisFaceSize*vec2((corner>>1)&1u, corner&1u);; + return faceSize.xz + axisFaceSize*vec2((corner>>1)&1u, corner&1u); } uvec4 createQuadData(Quad quad) { @@ -293,7 +294,8 @@ void main() { gl_MeshVerticesNV[vertId++].gl_Position = p0; primOut[triId].data = data; - gl_MeshPrimitivesNV[triId++].gl_PrimitiveID = int(qid); + primOut[triId].uvData = vec4(faceSize.xz, axisFaceSize); + gl_MeshPrimitivesNV[triId++].gl_PrimitiveID = int(qid|(0u<<31)); } { @@ -304,7 +306,8 @@ void main() { gl_MeshVerticesNV[vertId++].gl_Position = p3; primOut[triId].data = data; - gl_MeshPrimitivesNV[triId++].gl_PrimitiveID = int(qid); + primOut[triId].uvData = vec4(faceSize.xz, axisFaceSize); + gl_MeshPrimitivesNV[triId++].gl_PrimitiveID = int(qid|(1u<<31)); }