add basic edge shading

This commit is contained in:
catangent 2024-12-23 18:45:07 +00:00
parent c600c82e8f
commit c19a19166b
5 changed files with 73 additions and 182 deletions

View file

@ -6,6 +6,13 @@ uniform vec2 textureTiling;
in vec2 fragTexCoord;
in vec2 fragTexCoord2;
in vec4 fragColor;
flat in int ambientOcclusionSide1;
flat in int ambientOcclusionSide2;
flat in int ambientOcclusionCorner1;
flat in int ambientOcclusionCorner2;
flat in int ambientOcclusionCorner3;
flat in int quadHeight;
flat in int quadWidth;
out vec4 outColor;
@ -13,4 +20,10 @@ void main()
{
vec2 texCoord = (floor(fragTexCoord*textureTiling) + fract(fragTexCoord2)) / textureTiling;
outColor = texture(diffuseMap, texCoord);
ivec2 floorFragTexCoord2 = ivec2(fragTexCoord2);
if ((fragTexCoord2.x < 0.05 || fragTexCoord2.x > quadWidth-0.05) && (((ambientOcclusionSide1 >> floorFragTexCoord2.y) & 1) == 1)) outColor *= 0.5;
else if((fragTexCoord2.y < 0.05 || fragTexCoord2.y > quadHeight-0.05) && (((ambientOcclusionSide2 >> floorFragTexCoord2.y) & 1) == 1)) outColor *= 0.5;
outColor.a = 1;
}

View file

@ -2,13 +2,22 @@
in vec3 vertexPosition;
in vec2 vertexTexCoord;
in vec2 vertexTexCoord2;
in vec2 vertexTexCoord2;
in vec4 vertexColor;
in vec4 vertexTangent; // metadata1
out vec2 fragTexCoord;
out vec2 fragTexCoord2;
out vec4 fragColor;
flat out int ambientOcclusionSide1;
flat out int ambientOcclusionSide2;
flat out int ambientOcclusionCorner1;
flat out int ambientOcclusionCorner2;
flat out int ambientOcclusionCorner3;
flat out int quadHeight;
flat out int quadWidth;
uniform mat4 mvp;
void main() {
@ -16,4 +25,15 @@ void main() {
fragColor = vertexColor;
fragTexCoord2 = vertexTexCoord2;
gl_Position = mvp*vec4(vertexPosition, 1.0);
// metadata 1 processing
ambientOcclusionSide1 = floatBitsToInt(vertexTangent.x);
ambientOcclusionSide2 = floatBitsToInt(vertexTangent.y);
int metadata1Z = floatBitsToInt(vertexTangent.z);
int metadata1W = floatBitsToInt(vertexTangent.w);
ambientOcclusionCorner1 = (metadata1Z & 0x1) >> 0;
ambientOcclusionCorner2 = (metadata1Z & 0x2) >> 1;
ambientOcclusionCorner3 = (metadata1Z & 0x4) >> 2;
quadHeight = (metadata1Z & 0x1f8) >> 3;
quadWidth = (metadata1Z & 0x7e00) >> 9;
}