summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjussi2025-01-25 17:36:29 +0200
committerjussi2025-01-25 17:36:29 +0200
commitc8131ea95846f76fb196a78ce9c9b09aeb15736c (patch)
tree49ddc03c06cd6cdeaddb26008da8400cf854fb14
parent9a1161541d6b066dc7f6e3ca0cdf008f19d3f7be (diff)
downloadreilua-enhanced-c8131ea95846f76fb196a78ce9c9b09aeb15736c.tar.gz
reilua-enhanced-c8131ea95846f76fb196a78ce9c9b09aeb15736c.tar.bz2
reilua-enhanced-c8131ea95846f76fb196a78ce9c9b09aeb15736c.zip
Atlas texture repeat example.
-rw-r--r--README.md1
-rw-r--r--changelog1
-rw-r--r--examples/resources/shaders/glsl330/atlas_repeat.fs28
-rw-r--r--examples/resources/shaders/glsl330/base.vs6
-rw-r--r--examples/texture_atlas_repeat/main.lua35
5 files changed, 69 insertions, 2 deletions
diff --git a/README.md b/README.md
index 0d70415..e7a5bc5 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,6 @@ List of some MISSING features that are planned to be included. For specific func
## Roadmap
* v0.9
- * Move to raylib 5.5.
## Usage
diff --git a/changelog b/changelog
index 2e23fe8..7202e6a 100644
--- a/changelog
+++ b/changelog
@@ -35,6 +35,7 @@ DETAILED CHANGES:
- ADDED: BUFFER_UNSIGNED_LONG and BUFFER_LONG.
- FIXED: Bitwise functions now use 64 bit integers.
- 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
diff --git a/examples/resources/shaders/glsl330/atlas_repeat.fs b/examples/resources/shaders/glsl330/atlas_repeat.fs
new file mode 100644
index 0000000..90547f0
--- /dev/null
+++ b/examples/resources/shaders/glsl330/atlas_repeat.fs
@@ -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;
+}
diff --git a/examples/resources/shaders/glsl330/base.vs b/examples/resources/shaders/glsl330/base.vs
index c6e94f6..b29bed8 100644
--- a/examples/resources/shaders/glsl330/base.vs
+++ b/examples/resources/shaders/glsl330/base.vs
@@ -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 );
-} \ No newline at end of file
+}
diff --git a/examples/texture_atlas_repeat/main.lua b/examples/texture_atlas_repeat/main.lua
new file mode 100644
index 0000000..6056e71
--- /dev/null
+++ b/examples/texture_atlas_repeat/main.lua
@@ -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