From f121c0e386cafd6c92581c3a66b2335aa22ceb82 Mon Sep 17 00:00:00 2001 From: unkl nik Date: Sat, 21 Oct 2023 22:23:22 +0200 Subject: [PATCH] add more texture & shader examples --- .../shaders/texture_drawing/cubes_panning.fs | 61 ++++++ examples/shaders/texture_drawing/main.go | 49 +++++ examples/shaders/texture_waves/main.go | 67 ++++++ examples/shaders/texture_waves/space.png | Bin 0 -> 22425 bytes examples/shaders/texture_waves/wave.fs | 37 ++++ examples/textures/textured_curve/main.go | 201 ++++++++++++++++++ examples/textures/textured_curve/road.png | Bin 0 -> 1006 bytes 7 files changed, 415 insertions(+) create mode 100644 examples/shaders/texture_drawing/cubes_panning.fs create mode 100644 examples/shaders/texture_drawing/main.go create mode 100644 examples/shaders/texture_waves/main.go create mode 100644 examples/shaders/texture_waves/space.png create mode 100644 examples/shaders/texture_waves/wave.fs create mode 100644 examples/textures/textured_curve/main.go create mode 100644 examples/textures/textured_curve/road.png diff --git a/examples/shaders/texture_drawing/cubes_panning.fs b/examples/shaders/texture_drawing/cubes_panning.fs new file mode 100644 index 0000000..1d75e4e --- /dev/null +++ b/examples/shaders/texture_drawing/cubes_panning.fs @@ -0,0 +1,61 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Output fragment color +out vec4 finalColor; + +// Custom variables +#define PI 3.14159265358979323846 +uniform float uTime = 0.0; + +float divisions = 5.0; +float angle = 0.0; + +vec2 VectorRotateTime(vec2 v, float speed) +{ + float time = uTime*speed; + float localTime = fract(time); // The time domain this works on is 1 sec. + + if ((localTime >= 0.0) && (localTime < 0.25)) angle = 0.0; + else if ((localTime >= 0.25) && (localTime < 0.50)) angle = PI/4*sin(2*PI*localTime - PI/2); + else if ((localTime >= 0.50) && (localTime < 0.75)) angle = PI*0.25; + else if ((localTime >= 0.75) && (localTime < 1.00)) angle = PI/4*sin(2*PI*localTime); + + // Rotate vector by angle + v -= 0.5; + v = mat2(cos(angle), -sin(angle), sin(angle), cos(angle))*v; + v += 0.5; + + return v; +} + +float Rectangle(in vec2 st, in float size, in float fill) +{ + float roundSize = 0.5 - size/2.0; + float left = step(roundSize, st.x); + float top = step(roundSize, st.y); + float bottom = step(roundSize, 1.0 - st.y); + float right = step(roundSize, 1.0 - st.x); + + return (left*bottom*right*top)*fill; +} + +void main() +{ + vec2 fragPos = fragTexCoord; + fragPos.xy += uTime/9.0; + + fragPos *= divisions; + vec2 ipos = floor(fragPos); // Get the integer coords + vec2 fpos = fract(fragPos); // Get the fractional coords + + fpos = VectorRotateTime(fpos, 0.2); + + float alpha = Rectangle(fpos, 0.216, 1.0); + vec3 color = vec3(0.3, 0.3, 0.3); + + finalColor = vec4(color, alpha); +} \ No newline at end of file diff --git a/examples/shaders/texture_drawing/main.go b/examples/shaders/texture_drawing/main.go new file mode 100644 index 0000000..2d1566f --- /dev/null +++ b/examples/shaders/texture_drawing/main.go @@ -0,0 +1,49 @@ +package main + +import ( + rl "github.com/gen2brain/raylib-go/raylib" +) + +func main() { + screenWidth := int32(800) + screenHeight := int32(450) + + rl.InitWindow(screenWidth, screenHeight, "raylib [shaders] example - texture drawing") + + imBlank := rl.GenImageColor(1024, 1024, rl.Blank) + texture := rl.LoadTextureFromImage(imBlank) + rl.UnloadImage(imBlank) + + shader := rl.LoadShader("", "cubes_panning.fs") + + time := []float32{0} + + timeLoc := rl.GetShaderLocation(shader, "uTime") + + rl.SetShaderValue(shader, timeLoc, time, rl.ShaderUniformFloat) + + rl.SetTargetFPS(60) + + for !rl.WindowShouldClose() { + + time = nil + time = []float32{float32(rl.GetTime())} + rl.SetShaderValue(shader, timeLoc, time, rl.ShaderUniformFloat) + + rl.BeginDrawing() + + rl.ClearBackground(rl.RayWhite) + + rl.BeginShaderMode(shader) + rl.DrawTexture(texture, 0, 0, rl.White) + rl.EndShaderMode() + + rl.DrawText("BACKGROUND is PAINTED and ANIMATED on SHADER!", 10, 10, 20, rl.Maroon) + + rl.EndDrawing() + } + + rl.UnloadShader(shader) // Unload shader + + rl.CloseWindow() +} diff --git a/examples/shaders/texture_waves/main.go b/examples/shaders/texture_waves/main.go new file mode 100644 index 0000000..ecdccd0 --- /dev/null +++ b/examples/shaders/texture_waves/main.go @@ -0,0 +1,67 @@ +package main + +import ( + rl "github.com/gen2brain/raylib-go/raylib" +) + +func main() { + screenWidth := int32(800) + screenHeight := int32(450) + + rl.InitWindow(screenWidth, screenHeight, "raylib [shaders] example - texture waves") + + texture := rl.LoadTexture("space.png") + + shader := rl.LoadShader("", "wave.fs") + + secondsLoc := rl.GetShaderLocation(shader, "seconds") + freqXLoc := rl.GetShaderLocation(shader, "freqX") + freqYLoc := rl.GetShaderLocation(shader, "freqY") + ampXLoc := rl.GetShaderLocation(shader, "ampX") + ampYLoc := rl.GetShaderLocation(shader, "ampY") + speedXLoc := rl.GetShaderLocation(shader, "speedX") + speedYLoc := rl.GetShaderLocation(shader, "speedY") + + freqX := []float32{25} + freqY := []float32{25} + ampX := []float32{5} + ampY := []float32{5} + speedX := []float32{8} + speedY := []float32{8} + + screensize := []float32{float32(rl.GetScreenWidth()), float32(rl.GetScreenHeight())} + + rl.SetShaderValue(shader, rl.GetShaderLocation(shader, "size"), screensize, rl.ShaderUniformVec2) + rl.SetShaderValue(shader, freqXLoc, freqX, rl.ShaderUniformFloat) + rl.SetShaderValue(shader, freqYLoc, freqY, rl.ShaderUniformFloat) + rl.SetShaderValue(shader, ampXLoc, ampX, rl.ShaderUniformFloat) + rl.SetShaderValue(shader, ampYLoc, ampY, rl.ShaderUniformFloat) + rl.SetShaderValue(shader, speedXLoc, speedX, rl.ShaderUniformFloat) + rl.SetShaderValue(shader, speedYLoc, speedY, rl.ShaderUniformFloat) + + seconds := []float32{0} + + rl.SetTargetFPS(60) + + for !rl.WindowShouldClose() { + + seconds[0] += rl.GetFrameTime() + rl.SetShaderValue(shader, secondsLoc, seconds, rl.ShaderUniformFloat) + + rl.BeginDrawing() + + rl.ClearBackground(rl.RayWhite) + + rl.BeginShaderMode(shader) + rl.DrawTexture(texture, 0, 0, rl.White) + rl.DrawTexture(texture, texture.Width, 0, rl.White) + rl.EndShaderMode() + + rl.EndDrawing() + } + + rl.UnloadShader(shader) + rl.UnloadTexture(texture) + + rl.CloseWindow() +} diff --git a/examples/shaders/texture_waves/space.png b/examples/shaders/texture_waves/space.png new file mode 100644 index 0000000000000000000000000000000000000000..5d016e41bcd778dcb56dc680b753b39a6cd48eb7 GIT binary patch literal 22425 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