From 4b88d9867b0fa6408ccb6182419fb5a7e4dbfbe4 Mon Sep 17 00:00:00 2001 From: unkl nik Date: Sun, 15 Oct 2023 20:02:24 +0200 Subject: [PATCH] Add Color Mix Example --- examples/shaders/multi_sample2d/color_mix.fs | 27 ++++++++ examples/shaders/multi_sample2d/main.go | 69 ++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 examples/shaders/multi_sample2d/color_mix.fs create mode 100644 examples/shaders/multi_sample2d/main.go diff --git a/examples/shaders/multi_sample2d/color_mix.fs b/examples/shaders/multi_sample2d/color_mix.fs new file mode 100644 index 0000000..e794d32 --- /dev/null +++ b/examples/shaders/multi_sample2d/color_mix.fs @@ -0,0 +1,27 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec3 vertexPos; +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform sampler2D texture1; +uniform vec4 colDiffuse; + +uniform float divider = 0.5; + +out vec4 finalColor; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor0 = texture(texture0, fragTexCoord); + vec4 texelColor1 = texture(texture1, fragTexCoord); + + float x = fract(fragTexCoord.s); + float final = smoothstep(divider - 0.1, divider + 0.1, x); + + finalColor = mix(texelColor0, texelColor1, final); +} \ No newline at end of file diff --git a/examples/shaders/multi_sample2d/main.go b/examples/shaders/multi_sample2d/main.go new file mode 100644 index 0000000..6ebbc03 --- /dev/null +++ b/examples/shaders/multi_sample2d/main.go @@ -0,0 +1,69 @@ +package main + +import ( + rl "github.com/gen2brain/raylib-go/raylib" +) + +func main() { + screenWidth := int32(800) + screenHeight := int32(450) + + rl.SetConfigFlags(rl.FlagMsaa4xHint) // Enable Multi Sampling Anti Aliasing 4x (if available) + + rl.InitWindow(screenWidth, screenHeight, "raylib [shaders] example - multiple sample2D") + + imRed := rl.GenImageColor(int(screenWidth), int(screenHeight), rl.NewColor(uint8(255), uint8(0), uint8(0), uint8(255))) + texRed := rl.LoadTextureFromImage(imRed) + rl.UnloadImage(imRed) + + imBlue := rl.GenImageColor(int(screenWidth), int(screenHeight), rl.NewColor(uint8(0), uint8(0), uint8(255), uint8(255))) + texBlue := rl.LoadTextureFromImage(imBlue) + rl.UnloadImage(imBlue) + + shader := rl.LoadShader("", "color_mix.fs") + + texBlueLoc := rl.GetShaderLocation(shader, "texture1") + dividerLoc := rl.GetShaderLocation(shader, "divider") + dividerValue := []float32{0.5} + + rl.SetTargetFPS(60) + + for !rl.WindowShouldClose() { + + if rl.IsKeyDown(rl.KeyRight) { + dividerValue[0] += 0.01 + } else if rl.IsKeyDown(rl.KeyLeft) { + dividerValue[0] -= 0.01 + } + + if dividerValue[0] < 0 { + dividerValue[0] = 0 + } else if dividerValue[0] > 1 { + dividerValue[0] = 1 + } + + rl.SetShaderValue(shader, dividerLoc, dividerValue, rl.ShaderUniformFloat) + + rl.BeginDrawing() + + rl.ClearBackground(rl.RayWhite) + + rl.BeginShaderMode(shader) + + rl.SetShaderValueTexture(shader, texBlueLoc, texBlue) + rl.DrawTexture(texRed, 0, 0, rl.White) + + rl.EndShaderMode() + + rl.DrawText("USE LEFT/RIGHT ARROW KEYS TO MIX COLORS", 15, 17, 20, rl.Black) + rl.DrawText("USE LEFT/RIGHT ARROW KEYS TO MIX COLORS", 16, 16, 20, rl.White) + + rl.EndDrawing() + } + + rl.UnloadShader(shader) // Unload shader + rl.UnloadTexture(texRed) // Unload texture + rl.UnloadTexture(texBlue) // Unload texture + + rl.CloseWindow() +}