Atlas texture repeat example.

This commit is contained in:
jussi
2025-01-25 17:36:29 +02:00
parent 9a1161541d
commit c8131ea958
5 changed files with 69 additions and 2 deletions

View File

@@ -0,0 +1,28 @@
#version 330
// Input vertex attributes (from vertex shader)
in vec3 fragPosition;
in vec2 fragTexCoord;
in vec4 fragColor;
// Input uniform values
uniform sampler2D texture0;
uniform vec2 atlasSize;
uniform vec2 tileTexSize;
// Output fragment color
out vec4 finalColor;
vec2 texTileSize = tileTexSize / atlasSize;
vec2 atlasTileSize = atlasSize / tileTexSize;
void main() {
vec2 tileTexCoord = fract( vec2( fragPosition.x, fragPosition.y ) / tileTexSize );
// Get tile texture corner.
vec2 texOffset = floor( fragTexCoord / texTileSize ) * texTileSize;
vec2 fragCoord = tileTexCoord / atlasTileSize + texOffset;
vec4 texelColor = texture( texture0, fragCoord );
finalColor = texelColor * fragColor;
}

View File

@@ -10,16 +10,20 @@ in vec4 vertexColor;
uniform mat4 mvp;
// Output vertex attributes (to fragment shader)
out vec3 fragPosition;
out vec2 fragTexCoord;
out vec3 fragNormal;
out vec4 fragColor;
// NOTE: Add here your custom variables
void main() {
// Send vertex attributes to fragment shader
fragPosition = vertexPosition;
fragTexCoord = vertexTexCoord;
fragNormal = vertexNormal;
fragColor = vertexColor;
// Calculate final vertex position
gl_Position = mvp * vec4( vertexPosition, 1.0 );
}
}