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

@@ -32,7 +32,6 @@ List of some MISSING features that are planned to be included. For specific func
## Roadmap ## Roadmap
* v0.9 * v0.9
* Move to raylib 5.5.
## Usage ## Usage

View File

@@ -35,6 +35,7 @@ DETAILED CHANGES:
- ADDED: BUFFER_UNSIGNED_LONG and BUFFER_LONG. - ADDED: BUFFER_UNSIGNED_LONG and BUFFER_LONG.
- FIXED: Bitwise functions now use 64 bit integers. - FIXED: Bitwise functions now use 64 bit integers.
- CHANGE: SetBufferData takes table of values. - CHANGE: SetBufferData takes table of values.
- ADDED: Texture atlas repeat example.
------------------------------------------------------------------------ ------------------------------------------------------------------------
Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0 Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0

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; uniform mat4 mvp;
// Output vertex attributes (to fragment shader) // Output vertex attributes (to fragment shader)
out vec3 fragPosition;
out vec2 fragTexCoord; out vec2 fragTexCoord;
out vec3 fragNormal;
out vec4 fragColor; out vec4 fragColor;
// NOTE: Add here your custom variables // NOTE: Add here your custom variables
void main() { void main() {
// Send vertex attributes to fragment shader // Send vertex attributes to fragment shader
fragPosition = vertexPosition;
fragTexCoord = vertexTexCoord; fragTexCoord = vertexTexCoord;
fragNormal = vertexNormal;
fragColor = vertexColor; fragColor = vertexColor;
// Calculate final vertex position // Calculate final vertex position
gl_Position = mvp * vec4( vertexPosition, 1.0 ); gl_Position = mvp * vec4( vertexPosition, 1.0 );
} }

View File

@@ -0,0 +1,35 @@
local atlas = nil
local shader = nil
local GLSL_VERSION = "330" -- PLATFORM_DESKTOP
function RL.init()
RL.SetWindowTitle( "Texture atlas repeat shader" )
RL.SetWindowState( RL.FLAG_VSYNC_HINT )
local path = RL.GetBasePath().."../resources/"
local shaderPath = path.."/shaders/glsl"..GLSL_VERSION.."/"
shader = RL.LoadShader( shaderPath.."base.vs", shaderPath.."atlas_repeat.fs" )
atlas = RL.LoadTexture( path.."images/tiles.png" )
local loc = RL.GetShaderLocation( shader, "atlasSize" )
RL.SetShaderValue( shader, loc, RL.GetTextureSize( atlas ), RL.SHADER_UNIFORM_VEC2 )
loc = RL.GetShaderLocation( shader, "tileTexSize" )
RL.SetShaderValue( shader, loc, { 32, 32 }, RL.SHADER_UNIFORM_VEC2 )
-- Set texture for DrawTriangle.
RL.SetShapesTexture( atlas, { 32 * 4, 0, 32, 32 } )
end
function RL.update( delta )
end
function RL.draw()
RL.ClearBackground( RL.RAYWHITE )
RL.BeginShaderMode( shader )
RL.DrawTexturePro( atlas, { 0, 0, 32, 32 }, { 0, 0, 64, 64 }, { 0.0 }, 0.0, RL.WHITE )
RL.DrawTexturePro( atlas, { 32, 0, 32, 32 }, { 0, 64, 128, 64 }, { 0.0 }, 0.0, RL.WHITE )
RL.DrawTriangle( { 32, 200 }, { 128, 400 }, { 320, 240 }, RL.WHITE )
RL.EndShaderMode()
end