From 4c587660e2112d50e0bb66b4bd3dbb7a2b389dcf Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sun, 23 Jun 2019 18:45:35 +0100 Subject: [PATCH] shader lighting example --- examples/shaders/resources/fudesumi.png | Bin 0 -> 222742 bytes .../shaders/resources/shaders/glsl100/base.fs | 24 + .../shaders/resources/shaders/glsl100/base.vs | 26 ++ .../resources/shaders/glsl100/bloom.fs | 39 ++ .../shaders/resources/shaders/glsl100/blur.fs | 34 ++ .../shaders/glsl100/cross_hatching.fs | 47 ++ .../shaders/glsl100/cross_stitching.fs | 57 +++ .../shaders/glsl100/cubes_panning.fs | 60 +++ .../resources/shaders/glsl100/depth.fs | 26 ++ .../resources/shaders/glsl100/distortion.fs | 54 +++ .../resources/shaders/glsl100/dream_vision.fs | 37 ++ .../resources/shaders/glsl100/eratosthenes.fs | 58 +++ .../resources/shaders/glsl100/fisheye.fs | 43 ++ .../resources/shaders/glsl100/grayscale.fs | 25 + .../resources/shaders/glsl100/julia_set.fs | 81 ++++ .../shaders/glsl100/palette_switch.fs | 29 ++ .../resources/shaders/glsl100/pixelizer.fs | 32 ++ .../shaders/glsl100/posterization.fs | 29 ++ .../resources/shaders/glsl100/predator.fs | 31 ++ .../resources/shaders/glsl100/raymarching.fs | 431 +++++++++++++++++ .../resources/shaders/glsl100/scanlines.fs | 44 ++ .../resources/shaders/glsl100/sobel.fs | 40 ++ .../resources/shaders/glsl100/swirl.fs | 46 ++ .../shaders/resources/shaders/glsl100/wave.fs | 36 ++ .../shaders/resources/shaders/glsl120/base.fs | 22 + .../shaders/resources/shaders/glsl120/base.vs | 26 ++ .../resources/shaders/glsl120/bloom.fs | 37 ++ .../shaders/resources/shaders/glsl120/blur.fs | 32 ++ .../shaders/glsl120/cross_hatching.fs | 45 ++ .../shaders/glsl120/cross_stitching.fs | 55 +++ .../resources/shaders/glsl120/distortion.fs | 52 +++ .../resources/shaders/glsl120/dream_vision.fs | 35 ++ .../resources/shaders/glsl120/fisheye.fs | 41 ++ .../resources/shaders/glsl120/grayscale.fs | 23 + .../shaders/glsl120/palette_switch.fs | 27 ++ .../resources/shaders/glsl120/pixelizer.fs | 30 ++ .../shaders/glsl120/posterization.fs | 27 ++ .../resources/shaders/glsl120/predator.fs | 29 ++ .../resources/shaders/glsl120/scanlines.fs | 42 ++ .../resources/shaders/glsl120/sobel.fs | 38 ++ .../resources/shaders/glsl120/swirl.fs | 44 ++ .../shaders/resources/shaders/glsl330/base.fs | 25 + .../shaders/resources/shaders/glsl330/base.vs | 26 ++ .../shaders/glsl330/basic_lighting.fs | 82 ++++ .../shaders/glsl330/basic_lighting.vs | 33 ++ .../resources/shaders/glsl330/bloom.fs | 40 ++ .../shaders/resources/shaders/glsl330/blur.fs | 35 ++ .../shaders/glsl330/cross_hatching.fs | 48 ++ .../shaders/glsl330/cross_stitching.fs | 59 +++ .../shaders/glsl330/cubes_panning.fs | 61 +++ .../resources/shaders/glsl330/depth.fs | 27 ++ .../resources/shaders/glsl330/distortion.fs | 56 +++ .../resources/shaders/glsl330/dream_vision.fs | 34 ++ .../resources/shaders/glsl330/eratosthenes.fs | 59 +++ .../resources/shaders/glsl330/fisheye.fs | 40 ++ .../resources/shaders/glsl330/grayscale.fs | 26 ++ .../resources/shaders/glsl330/julia_set.fs | 81 ++++ .../resources/shaders/glsl330/overdraw.fs | 26 ++ .../shaders/glsl330/palette_switch.fs | 30 ++ .../resources/shaders/glsl330/pixelizer.fs | 33 ++ .../shaders/glsl330/posterization.fs | 31 ++ .../resources/shaders/glsl330/predator.fs | 32 ++ .../resources/shaders/glsl330/raymarching.fs | 432 ++++++++++++++++++ .../resources/shaders/glsl330/scanlines.fs | 49 ++ .../resources/shaders/glsl330/sobel.fs | 41 ++ .../resources/shaders/glsl330/swirl.fs | 47 ++ .../shaders/resources/shaders/glsl330/wave.fs | 37 ++ examples/shaders/resources/space.png | Bin 0 -> 22517 bytes examples/shaders/resources/texel_checker.png | Bin 0 -> 57153 bytes examples/shaders/shaders_basic_lighting.py | 345 ++++++++++++++ 70 files changed, 3769 insertions(+) create mode 100644 examples/shaders/resources/fudesumi.png create mode 100644 examples/shaders/resources/shaders/glsl100/base.fs create mode 100644 examples/shaders/resources/shaders/glsl100/base.vs create mode 100644 examples/shaders/resources/shaders/glsl100/bloom.fs create mode 100644 examples/shaders/resources/shaders/glsl100/blur.fs create mode 100644 examples/shaders/resources/shaders/glsl100/cross_hatching.fs create mode 100644 examples/shaders/resources/shaders/glsl100/cross_stitching.fs create mode 100644 examples/shaders/resources/shaders/glsl100/cubes_panning.fs create mode 100644 examples/shaders/resources/shaders/glsl100/depth.fs create mode 100644 examples/shaders/resources/shaders/glsl100/distortion.fs create mode 100644 examples/shaders/resources/shaders/glsl100/dream_vision.fs create mode 100644 examples/shaders/resources/shaders/glsl100/eratosthenes.fs create mode 100644 examples/shaders/resources/shaders/glsl100/fisheye.fs create mode 100644 examples/shaders/resources/shaders/glsl100/grayscale.fs create mode 100644 examples/shaders/resources/shaders/glsl100/julia_set.fs create mode 100644 examples/shaders/resources/shaders/glsl100/palette_switch.fs create mode 100644 examples/shaders/resources/shaders/glsl100/pixelizer.fs create mode 100644 examples/shaders/resources/shaders/glsl100/posterization.fs create mode 100644 examples/shaders/resources/shaders/glsl100/predator.fs create mode 100644 examples/shaders/resources/shaders/glsl100/raymarching.fs create mode 100644 examples/shaders/resources/shaders/glsl100/scanlines.fs create mode 100644 examples/shaders/resources/shaders/glsl100/sobel.fs create mode 100644 examples/shaders/resources/shaders/glsl100/swirl.fs create mode 100644 examples/shaders/resources/shaders/glsl100/wave.fs create mode 100644 examples/shaders/resources/shaders/glsl120/base.fs create mode 100644 examples/shaders/resources/shaders/glsl120/base.vs create mode 100644 examples/shaders/resources/shaders/glsl120/bloom.fs create mode 100644 examples/shaders/resources/shaders/glsl120/blur.fs create mode 100644 examples/shaders/resources/shaders/glsl120/cross_hatching.fs create mode 100644 examples/shaders/resources/shaders/glsl120/cross_stitching.fs create mode 100644 examples/shaders/resources/shaders/glsl120/distortion.fs create mode 100644 examples/shaders/resources/shaders/glsl120/dream_vision.fs create mode 100644 examples/shaders/resources/shaders/glsl120/fisheye.fs create mode 100644 examples/shaders/resources/shaders/glsl120/grayscale.fs create mode 100644 examples/shaders/resources/shaders/glsl120/palette_switch.fs create mode 100644 examples/shaders/resources/shaders/glsl120/pixelizer.fs create mode 100644 examples/shaders/resources/shaders/glsl120/posterization.fs create mode 100644 examples/shaders/resources/shaders/glsl120/predator.fs create mode 100644 examples/shaders/resources/shaders/glsl120/scanlines.fs create mode 100644 examples/shaders/resources/shaders/glsl120/sobel.fs create mode 100644 examples/shaders/resources/shaders/glsl120/swirl.fs create mode 100644 examples/shaders/resources/shaders/glsl330/base.fs create mode 100644 examples/shaders/resources/shaders/glsl330/base.vs create mode 100644 examples/shaders/resources/shaders/glsl330/basic_lighting.fs create mode 100644 examples/shaders/resources/shaders/glsl330/basic_lighting.vs create mode 100644 examples/shaders/resources/shaders/glsl330/bloom.fs create mode 100644 examples/shaders/resources/shaders/glsl330/blur.fs create mode 100644 examples/shaders/resources/shaders/glsl330/cross_hatching.fs create mode 100644 examples/shaders/resources/shaders/glsl330/cross_stitching.fs create mode 100644 examples/shaders/resources/shaders/glsl330/cubes_panning.fs create mode 100644 examples/shaders/resources/shaders/glsl330/depth.fs create mode 100644 examples/shaders/resources/shaders/glsl330/distortion.fs create mode 100644 examples/shaders/resources/shaders/glsl330/dream_vision.fs create mode 100644 examples/shaders/resources/shaders/glsl330/eratosthenes.fs create mode 100644 examples/shaders/resources/shaders/glsl330/fisheye.fs create mode 100644 examples/shaders/resources/shaders/glsl330/grayscale.fs create mode 100644 examples/shaders/resources/shaders/glsl330/julia_set.fs create mode 100644 examples/shaders/resources/shaders/glsl330/overdraw.fs create mode 100644 examples/shaders/resources/shaders/glsl330/palette_switch.fs create mode 100644 examples/shaders/resources/shaders/glsl330/pixelizer.fs create mode 100644 examples/shaders/resources/shaders/glsl330/posterization.fs create mode 100644 examples/shaders/resources/shaders/glsl330/predator.fs create mode 100644 examples/shaders/resources/shaders/glsl330/raymarching.fs create mode 100644 examples/shaders/resources/shaders/glsl330/scanlines.fs create mode 100644 examples/shaders/resources/shaders/glsl330/sobel.fs create mode 100644 examples/shaders/resources/shaders/glsl330/swirl.fs create mode 100644 examples/shaders/resources/shaders/glsl330/wave.fs create mode 100644 examples/shaders/resources/space.png create mode 100644 examples/shaders/resources/texel_checker.png create mode 100644 examples/shaders/shaders_basic_lighting.py diff --git a/examples/shaders/resources/fudesumi.png b/examples/shaders/resources/fudesumi.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9038fa22481b59b2eac1cbee89d39a01f0856b GIT binary patch literal 222742 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 Ef{(cVfdBvi literal 0 HcmV?d00001 diff --git a/examples/shaders/resources/shaders/glsl100/base.fs b/examples/shaders/resources/shaders/glsl100/base.fs new file mode 100644 index 0000000..b004ba0 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/base.fs @@ -0,0 +1,24 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables +uniform vec2 resolution = vec2(800, 450); + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord); + + // NOTE: Implement here your fragment shader code + + gl_FragColor = texelColor*colDiffuse; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/base.vs b/examples/shaders/resources/shaders/glsl100/base.vs new file mode 100644 index 0000000..4be76b9 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/base.vs @@ -0,0 +1,26 @@ +#version 100 + +// Input vertex attributes +attribute vec3 vertexPosition; +attribute vec2 vertexTexCoord; +attribute vec3 vertexNormal; +attribute vec4 vertexColor; + +// Input uniform values +uniform mat4 mvp; + +// Output vertex attributes (to fragment shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// NOTE: Add here your custom variables + +void main() +{ + // Send vertex attributes to fragment shader + fragTexCoord = vertexTexCoord; + fragColor = vertexColor; + + // Calculate final vertex position + gl_Position = mvp*vec4(vertexPosition, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/bloom.fs b/examples/shaders/resources/shaders/glsl100/bloom.fs new file mode 100644 index 0000000..a8e1d20 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/bloom.fs @@ -0,0 +1,39 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +const vec2 size = vec2(800, 450); // render size +const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance +const float quality = 2.5; // lower = smaller glow, better quality + +void main() +{ + vec4 sum = vec4(0); + vec2 sizeFactor = vec2(1)/size*quality; + + // Texel color fetching from texture sampler + vec4 source = texture2D(texture0, fragTexCoord); + + const int range = 2; // should be = (samples - 1)/2; + + for (int x = -range; x <= range; x++) + { + for (int y = -range; y <= range; y++) + { + sum += texture2D(texture0, fragTexCoord + vec2(x, y)*sizeFactor); + } + } + + // Calculate final fragment color + gl_FragColor = ((sum/(samples*samples)) + source)*colDiffuse; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/blur.fs b/examples/shaders/resources/shaders/glsl100/blur.fs new file mode 100644 index 0000000..96f780e --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/blur.fs @@ -0,0 +1,34 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +vec3 offset = vec3(0.0, 1.3846153846, 3.2307692308); +vec3 weight = vec3(0.2270270270, 0.3162162162, 0.0702702703); + +void main() +{ + // Texel color fetching from texture sampler + vec3 tc = texture2D(texture0, fragTexCoord).rgb*weight.x; + + tc += texture2D(texture0, fragTexCoord + vec2(offset.y)/renderWidth, 0.0).rgb*weight.y; + tc += texture2D(texture0, fragTexCoord - vec2(offset.y)/renderWidth, 0.0).rgb*weight.y; + + tc += texture2D(texture0, fragTexCoord + vec2(offset.z)/renderWidth, 0.0).rgb*weight.z; + tc += texture2D(texture0, fragTexCoord - vec2(offset.z)/renderWidth, 0.0).rgb*weight.z; + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/cross_hatching.fs b/examples/shaders/resources/shaders/glsl100/cross_hatching.fs new file mode 100644 index 0000000..7d63b0a --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/cross_hatching.fs @@ -0,0 +1,47 @@ +# version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float hatchOffsetY = 5.0; +float lumThreshold01 = 0.9; +float lumThreshold02 = 0.7; +float lumThreshold03 = 0.5; +float lumThreshold04 = 0.3; + +void main() +{ + vec3 tc = vec3(1.0, 1.0, 1.0); + float lum = length(texture2D(texture0, fragTexCoord).rgb); + + if (lum < lumThreshold01) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold02) + { + if (mod(gl_FragCoord .x - gl_FragCoord .y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold03) + { + if (mod(gl_FragCoord .x + gl_FragCoord .y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold04) + { + if (mod(gl_FragCoord .x - gl_FragCoord .y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/cross_stitching.fs b/examples/shaders/resources/shaders/glsl100/cross_stitching.fs new file mode 100644 index 0000000..de6d4f4 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/cross_stitching.fs @@ -0,0 +1,57 @@ +# version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float stitchingSize = 6.0; +int invert = 0; + +vec4 PostFX(sampler2D tex, vec2 uv) +{ + vec4 c = vec4(0.0); + float size = stitchingSize; + vec2 cPos = uv * vec2(renderWidth, renderHeight); + vec2 tlPos = floor(cPos / vec2(size, size)); + tlPos *= size; + + int remX = int(mod(cPos.x, size)); + int remY = int(mod(cPos.y, size)); + + if (remX == 0 && remY == 0) tlPos = cPos; + + vec2 blPos = tlPos; + blPos.y += (size - 1.0); + + if ((remX == remY) || (((int(cPos.x) - int(blPos.x)) == (int(blPos.y) - int(cPos.y))))) + { + if (invert == 1) c = vec4(0.2, 0.15, 0.05, 1.0); + else c = texture2D(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4; + } + else + { + if (invert == 1) c = texture2D(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4; + else c = vec4(0.0, 0.0, 0.0, 1.0); + } + + return c; +} + +void main() +{ + vec3 tc = PostFX(texture0, fragTexCoord).rgb; + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/cubes_panning.fs b/examples/shaders/resources/shaders/glsl100/cubes_panning.fs new file mode 100644 index 0000000..1b1ab15 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/cubes_panning.fs @@ -0,0 +1,60 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// 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); + + gl_FragColor = vec4(color, alpha); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/depth.fs b/examples/shaders/resources/shaders/glsl100/depth.fs new file mode 100644 index 0000000..f6a14eb --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/depth.fs @@ -0,0 +1,26 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; // Depth texture +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + float zNear = 0.01; // camera z near + float zFar = 10.0; // camera z far + float z = texture2D(texture0, fragTexCoord).x; + + // Linearize depth value + float depth = (2.0*zNear)/(zFar + zNear - z*(zFar - zNear)); + + // Calculate final fragment color + gl_FragColor = vec4(depth, depth, depth, 1.0f); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/distortion.fs b/examples/shaders/resources/shaders/glsl100/distortion.fs new file mode 100644 index 0000000..50116ce --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/distortion.fs @@ -0,0 +1,54 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; + +// Input uniform values +uniform sampler2D texture0; + +// NOTE: Default parameters for Oculus Rift DK2 device +const vec2 LeftLensCenter = vec2(0.2863248, 0.5); +const vec2 RightLensCenter = vec2(0.7136753, 0.5); +const vec2 LeftScreenCenter = vec2(0.25, 0.5); +const vec2 RightScreenCenter = vec2(0.75, 0.5); +const vec2 Scale = vec2(0.25, 0.45); +const vec2 ScaleIn = vec2(4.0, 2.5); +const vec4 HmdWarpParam = vec4(1.0, 0.22, 0.24, 0.0); +const vec4 ChromaAbParam = vec4(0.996, -0.004, 1.014, 0.0); + +void main() +{ + // The following two variables need to be set per eye + vec2 LensCenter = fragTexCoord.x < 0.5 ? LeftLensCenter : RightLensCenter; + vec2 ScreenCenter = fragTexCoord.x < 0.5 ? LeftScreenCenter : RightScreenCenter; + + // Scales input texture coordinates for distortion: vec2 HmdWarp(vec2 fragTexCoord, vec2 LensCenter) + vec2 theta = (fragTexCoord - LensCenter)*ScaleIn; // Scales to [-1, 1] + float rSq = theta.x*theta.x + theta.y*theta.y; + vec2 theta1 = theta*(HmdWarpParam.x + HmdWarpParam.y*rSq + HmdWarpParam.z*rSq*rSq + HmdWarpParam.w*rSq*rSq*rSq); + //vec2 tc = LensCenter + Scale*theta1; + + // Detect whether blue texture coordinates are out of range since these will scaled out the furthest + vec2 thetaBlue = theta1*(ChromaAbParam.z + ChromaAbParam.w*rSq); + vec2 tcBlue = LensCenter + Scale*thetaBlue; + + if (any(bvec2(clamp(tcBlue, ScreenCenter - vec2(0.25, 0.5), ScreenCenter + vec2(0.25, 0.5)) - tcBlue))) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + else + { + // Do blue texture lookup + float blue = texture2D(texture0, tcBlue).b; + + // Do green lookup (no scaling) + vec2 tcGreen = LensCenter + Scale*theta1; + float green = texture2D(texture0, tcGreen).g; + + // Do red scale and lookup + vec2 thetaRed = theta1*(ChromaAbParam.x + ChromaAbParam.y*rSq); + vec2 tcRed = LensCenter + Scale*thetaRed; + float red = texture2D(texture0, tcRed).r; + + gl_FragColor = vec4(red, green, blue, 1.0); + } +} diff --git a/examples/shaders/resources/shaders/glsl100/dream_vision.fs b/examples/shaders/resources/shaders/glsl100/dream_vision.fs new file mode 100644 index 0000000..fa9c5b7 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/dream_vision.fs @@ -0,0 +1,37 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + vec4 color = texture2D(texture0, fragTexCoord); + + color += texture2D(texture0, fragTexCoord + 0.001); + color += texture2D(texture0, fragTexCoord + 0.003); + color += texture2D(texture0, fragTexCoord + 0.005); + color += texture2D(texture0, fragTexCoord + 0.007); + color += texture2D(texture0, fragTexCoord + 0.009); + color += texture2D(texture0, fragTexCoord + 0.011); + + color += texture2D(texture0, fragTexCoord - 0.001); + color += texture2D(texture0, fragTexCoord - 0.003); + color += texture2D(texture0, fragTexCoord - 0.005); + color += texture2D(texture0, fragTexCoord - 0.007); + color += texture2D(texture0, fragTexCoord - 0.009); + color += texture2D(texture0, fragTexCoord - 0.011); + + color.rgb = vec3((color.r + color.g + color.b)/3.0); + color = color/9.5; + + gl_FragColor = color; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/eratosthenes.fs b/examples/shaders/resources/shaders/glsl100/eratosthenes.fs new file mode 100644 index 0000000..0d598ca --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/eratosthenes.fs @@ -0,0 +1,58 @@ +#version 100 + +precision mediump float; + +/************************************************************************************* + + The Sieve of Eratosthenes -- a simple shader by ProfJski + An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes + + The screen is divided into a square grid of boxes, each representing an integer value. + Each integer is tested to see if it is a prime number. Primes are colored white. + Non-primes are colored with a color that indicates the smallest factor which evenly divdes our integer. + + You can change the scale variable to make a larger or smaller grid. + Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers. + + WARNING: If you make scale too large, your GPU may bog down! + +***************************************************************************************/ + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Make a nice spectrum of colors based on counter and maxSize +vec4 Colorizer(float counter, float maxSize) +{ + float red = 0.0, green = 0.0, blue = 0.0; + float normsize = counter/maxSize; + + red = smoothstep(0.3, 0.7, normsize); + green = sin(3.14159*normsize); + blue = 1.0 - smoothstep(0.0, 0.4, normsize); + + return vec4(0.8*red, 0.8*green, 0.8*blue, 1.0); +} + +void main() +{ + vec4 color = vec4(1.0); + float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid. + int value = int(scale*floor(fragTexCoord.y*scale) + floor(fragTexCoord.x*scale)); // Group pixels into boxes representing integer values + + if ((value == 0) || (value == 1) || (value == 2)) gl_FragColor = vec4(1.0); + else + { + for (int i = 2; (i < max(2, sqrt(value) + 1)); i++) + { + if ((value - i*floor(value/i)) == 0) + { + color = Colorizer(float(i), scale); + //break; // Uncomment to color by the largest factor instead + } + } + + gl_FragColor = color; + } +} diff --git a/examples/shaders/resources/shaders/glsl100/fisheye.fs b/examples/shaders/resources/shaders/glsl100/fisheye.fs new file mode 100644 index 0000000..8beb3d4 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/fisheye.fs @@ -0,0 +1,43 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +const float PI = 3.1415926535; + +void main() +{ + float aperture = 178.0; + float apertureHalf = 0.5 * aperture * (PI / 180.0); + float maxFactor = sin(apertureHalf); + + vec2 uv = vec2(0.0); + vec2 xy = 2.0 * fragTexCoord.xy - 1.0; + float d = length(xy); + + if (d < (2.0 - maxFactor)) + { + d = length(xy * maxFactor); + float z = sqrt(1.0 - d * d); + float r = atan(d, z) / PI; + float phi = atan(xy.y, xy.x); + + uv.x = r * cos(phi) + 0.5; + uv.y = r * sin(phi) + 0.5; + } + else + { + uv = fragTexCoord.xy; + } + + gl_FragColor = texture2D(texture0, uv); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/grayscale.fs b/examples/shaders/resources/shaders/glsl100/grayscale.fs new file mode 100644 index 0000000..15174ea --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/grayscale.fs @@ -0,0 +1,25 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord)*colDiffuse*fragColor; + + // Convert texel color to grayscale using NTSC conversion weights + float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114)); + + // Calculate final fragment color + gl_FragColor = vec4(gray, gray, gray, texelColor.a); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/julia_set.fs b/examples/shaders/resources/shaders/glsl100/julia_set.fs new file mode 100644 index 0000000..149a559 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/julia_set.fs @@ -0,0 +1,81 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +uniform vec2 screenDims; // Dimensions of the screen +uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c +uniform vec2 offset; // Offset of the scale. +uniform float zoom; // Zoom of the scale. + +const int MAX_ITERATIONS = 255; // Max iterations to do. + +// Square a complex number +vec2 ComplexSquare(vec2 z) +{ + return vec2( + z.x * z.x - z.y * z.y, + z.x * z.y * 2.0 + ); +} + +// Convert Hue Saturation Value (HSV) color into RGB +vec3 Hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + + +void main() +{ + /********************************************************************************************** + Julia sets use a function z^2 + c, where c is a constant. + This function is iterated until the nature of the point is determined. + + If the magnitude of the number becomes greater than 2, then from that point onward + the number will get bigger and bigger, and will never get smaller (tends towards infinity). + 2^2 = 4, 4^2 = 8 and so on. + So at 2 we stop iterating. + + If the number is below 2, we keep iterating. + But when do we stop iterating if the number is always below 2 (it converges)? + That is what MAX_ITERATIONS is for. + Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can + then map to a color. + + We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared. + And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power). + *************************************************************************************************/ + + // The pixel coordinates are scaled so they are on the mandelbrot scale + // NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom + vec2 z = vec2((fragTexCoord.x + offset.x/screenDims.x)*2.5/zoom, (fragTexCoord.y + offset.y/screenDims.y)*1.5/zoom); + + int iterations = 0; + for (iterations = 0; iterations < MAX_ITERATIONS; iterations++) + { + z = ComplexSquare(z) + c; // Iterate function + + if (dot(z, z) > 4.0) break; + } + + // Another few iterations decreases errors in the smoothing calculation. + // See http://linas.org/art-gallery/escape/escape.html for more information. + z = ComplexSquare(z) + c; + z = ComplexSquare(z) + c; + + // This last part smooths the color (again see link above). + float smoothVal = float(iterations) + 1.0 - (log(log(length(z)))/log(2.0)); + + // Normalize the value so it is between 0 and 1. + float norm = smoothVal/float(MAX_ITERATIONS); + + // If in set, color black. 0.999 allows for some float accuracy error. + if (norm > 0.999) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + else gl_FragColor = vec4(Hsv2rgb(vec3(norm, 1.0, 1.0)), 1.0); +} diff --git a/examples/shaders/resources/shaders/glsl100/palette_switch.fs b/examples/shaders/resources/shaders/glsl100/palette_switch.fs new file mode 100644 index 0000000..3861d4c --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/palette_switch.fs @@ -0,0 +1,29 @@ +#version 100 + +precision mediump float; + +const int colors = 8; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform ivec3 palette[colors]; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord) * fragColor; + + // Convert the (normalized) texel color RED component (GB would work, too) + // to the palette index by scaling up from [0, 1] to [0, 255]. + int index = int(texelColor.r * 255.0); + ivec3 color = palette[index]; + + // Calculate final fragment color. Note that the palette color components + // are defined in the range [0, 255] and need to be normalized to [0, 1] + // for OpenGL to work. + gl_FragColor = vec4(color / 255.0, texelColor.a); +} diff --git a/examples/shaders/resources/shaders/glsl100/pixelizer.fs b/examples/shaders/resources/shaders/glsl100/pixelizer.fs new file mode 100644 index 0000000..44fb0ca --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/pixelizer.fs @@ -0,0 +1,32 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float pixelWidth = 5.0; +float pixelHeight = 5.0; + +void main() +{ + float dx = pixelWidth*(1.0/renderWidth); + float dy = pixelHeight*(1.0/renderHeight); + + vec2 coord = vec2(dx*floor(fragTexCoord.x/dx), dy*floor(fragTexCoord.y/dy)); + + vec3 tc = texture2D(texture0, coord).rgb; + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/posterization.fs b/examples/shaders/resources/shaders/glsl100/posterization.fs new file mode 100644 index 0000000..a7942c8 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/posterization.fs @@ -0,0 +1,29 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float gamma = 0.6; +float numColors = 8.0; + +void main() +{ + vec3 color = texture2D(texture0, fragTexCoord.xy).rgb; + + color = pow(color, vec3(gamma, gamma, gamma)); + color = color*numColors; + color = floor(color); + color = color/numColors; + color = pow(color, vec3(1.0/gamma)); + + gl_FragColor = vec4(color, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/predator.fs b/examples/shaders/resources/shaders/glsl100/predator.fs new file mode 100644 index 0000000..37dc0bd --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/predator.fs @@ -0,0 +1,31 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + vec3 color = texture2D(texture0, fragTexCoord).rgb; + vec3 colors[3]; + colors[0] = vec3(0.0, 0.0, 1.0); + colors[1] = vec3(1.0, 1.0, 0.0); + colors[2] = vec3(1.0, 0.0, 0.0); + + float lum = (color.r + color.g + color.b)/3.0; + + vec3 tc = vec3(0.0, 0.0, 0.0); + + if (lum < 0.5) tc = mix(colors[0], colors[1], lum/0.5); + else tc = mix(colors[1], colors[2], (lum - 0.5)/0.5); + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/raymarching.fs b/examples/shaders/resources/shaders/glsl100/raymarching.fs new file mode 100644 index 0000000..4ae7129 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/raymarching.fs @@ -0,0 +1,431 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +uniform vec3 viewEye; +uniform vec3 viewCenter; +uniform vec3 viewUp; +uniform float deltaTime; +uniform float runTime; +uniform vec2 resolution; + +// The MIT License +// Copyright © 2013 Inigo Quilez +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// A list of useful distance function to simple primitives, and an example on how to +// do some interesting boolean operations, repetition and displacement. +// +// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm + +#define AA 1 // make this 1 is your machine is too slow + +//------------------------------------------------------------------ + +float sdPlane( vec3 p ) +{ + return p.y; +} + +float sdSphere( vec3 p, float s ) +{ + return length(p)-s; +} + +float sdBox( vec3 p, vec3 b ) +{ + vec3 d = abs(p) - b; + return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0)); +} + +float sdEllipsoid( in vec3 p, in vec3 r ) +{ + return (length( p/r ) - 1.0) * min(min(r.x,r.y),r.z); +} + +float udRoundBox( vec3 p, vec3 b, float r ) +{ + return length(max(abs(p)-b,0.0))-r; +} + +float sdTorus( vec3 p, vec2 t ) +{ + return length( vec2(length(p.xz)-t.x,p.y) )-t.y; +} + +float sdHexPrism( vec3 p, vec2 h ) +{ + vec3 q = abs(p); +#if 0 + return max(q.z-h.y,max((q.x*0.866025+q.y*0.5),q.y)-h.x); +#else + float d1 = q.z-h.y; + float d2 = max((q.x*0.866025+q.y*0.5),q.y)-h.x; + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +#endif +} + +float sdCapsule( vec3 p, vec3 a, vec3 b, float r ) +{ + vec3 pa = p-a, ba = b-a; + float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 ); + return length( pa - ba*h ) - r; +} + +float sdEquilateralTriangle( in vec2 p ) +{ + const float k = sqrt(3.0); + p.x = abs(p.x) - 1.0; + p.y = p.y + 1.0/k; + if( p.x + k*p.y > 0.0 ) p = vec2( p.x - k*p.y, -k*p.x - p.y )/2.0; + p.x += 2.0 - 2.0*clamp( (p.x+2.0)/2.0, 0.0, 1.0 ); + return -length(p)*sign(p.y); +} + +float sdTriPrism( vec3 p, vec2 h ) +{ + vec3 q = abs(p); + float d1 = q.z-h.y; +#if 1 + // distance bound + float d2 = max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5; +#else + // correct distance + h.x *= 0.866025; + float d2 = sdEquilateralTriangle(p.xy/h.x)*h.x; +#endif + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdCylinder( vec3 p, vec2 h ) +{ + vec2 d = abs(vec2(length(p.xz),p.y)) - h; + return min(max(d.x,d.y),0.0) + length(max(d,0.0)); +} + +float sdCone( in vec3 p, in vec3 c ) +{ + vec2 q = vec2( length(p.xz), p.y ); + float d1 = -q.y-c.z; + float d2 = max( dot(q,c.xy), q.y); + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdConeSection( in vec3 p, in float h, in float r1, in float r2 ) +{ + float d1 = -p.y - h; + float q = p.y - h; + float si = 0.5*(r1-r2)/h; + float d2 = max( sqrt( dot(p.xz,p.xz)*(1.0-si*si)) + q*si - r2, q ); + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdPryamid4(vec3 p, vec3 h ) // h = { cos a, sin a, height } +{ + // Tetrahedron = Octahedron - Cube + float box = sdBox( p - vec3(0,-2.0*h.z,0), vec3(2.0*h.z) ); + + float d = 0.0; + d = max( d, abs( dot(p, vec3( -h.x, h.y, 0 )) )); + d = max( d, abs( dot(p, vec3( h.x, h.y, 0 )) )); + d = max( d, abs( dot(p, vec3( 0, h.y, h.x )) )); + d = max( d, abs( dot(p, vec3( 0, h.y,-h.x )) )); + float octa = d - h.z; + return max(-box,octa); // Subtraction + } + +float length2( vec2 p ) +{ + return sqrt( p.x*p.x + p.y*p.y ); +} + +float length6( vec2 p ) +{ + p = p*p*p; p = p*p; + return pow( p.x + p.y, 1.0/6.0 ); +} + +float length8( vec2 p ) +{ + p = p*p; p = p*p; p = p*p; + return pow( p.x + p.y, 1.0/8.0 ); +} + +float sdTorus82( vec3 p, vec2 t ) +{ + vec2 q = vec2(length2(p.xz)-t.x,p.y); + return length8(q)-t.y; +} + +float sdTorus88( vec3 p, vec2 t ) +{ + vec2 q = vec2(length8(p.xz)-t.x,p.y); + return length8(q)-t.y; +} + +float sdCylinder6( vec3 p, vec2 h ) +{ + return max( length6(p.xz)-h.x, abs(p.y)-h.y ); +} + +//------------------------------------------------------------------ + +float opS( float d1, float d2 ) +{ + return max(-d2,d1); +} + +vec2 opU( vec2 d1, vec2 d2 ) +{ + return (d1.x0.0 ) tmax = min( tmax, tp1 ); + float tp2 = (1.6-ro.y)/rd.y; if( tp2>0.0 ) { if( ro.y>1.6 ) tmin = max( tmin, tp2 ); + else tmax = min( tmax, tp2 ); } +#endif + + float t = tmin; + float m = -1.0; + for( int i=0; i<64; i++ ) + { + float precis = 0.0005*t; + vec2 res = map( ro+rd*t ); + if( res.xtmax ) break; + t += res.x; + m = res.y; + } + + if( t>tmax ) m=-1.0; + return vec2( t, m ); +} + + +float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax ) +{ + float res = 1.0; + float t = mint; + for( int i=0; i<16; i++ ) + { + float h = map( ro + rd*t ).x; + res = min( res, 8.0*h/t ); + t += clamp( h, 0.02, 0.10 ); + if( h<0.001 || t>tmax ) break; + } + return clamp( res, 0.0, 1.0 ); +} + +vec3 calcNormal( in vec3 pos ) +{ + vec2 e = vec2(1.0,-1.0)*0.5773*0.0005; + return normalize( e.xyy*map( pos + e.xyy ).x + + e.yyx*map( pos + e.yyx ).x + + e.yxy*map( pos + e.yxy ).x + + e.xxx*map( pos + e.xxx ).x ); + /* + vec3 eps = vec3( 0.0005, 0.0, 0.0 ); + vec3 nor = vec3( + map(pos+eps.xyy).x - map(pos-eps.xyy).x, + map(pos+eps.yxy).x - map(pos-eps.yxy).x, + map(pos+eps.yyx).x - map(pos-eps.yyx).x ); + return normalize(nor); + */ +} + +float calcAO( in vec3 pos, in vec3 nor ) +{ + float occ = 0.0; + float sca = 1.0; + for( int i=0; i<5; i++ ) + { + float hr = 0.01 + 0.12*float(i)/4.0; + vec3 aopos = nor * hr + pos; + float dd = map( aopos ).x; + occ += -(dd-hr)*sca; + sca *= 0.95; + } + return clamp( 1.0 - 3.0*occ, 0.0, 1.0 ); +} + +// http://iquilezles.org/www/articles/checkerfiltering/checkerfiltering.htm +float checkersGradBox( in vec2 p ) +{ + // filter kernel + vec2 w = fwidth(p) + 0.001; + // analytical integral (box filter) + vec2 i = 2.0*(abs(fract((p-0.5*w)*0.5)-0.5)-abs(fract((p+0.5*w)*0.5)-0.5))/w; + // xor pattern + return 0.5 - 0.5*i.x*i.y; +} + +vec3 render( in vec3 ro, in vec3 rd ) +{ + vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8; + vec2 res = castRay(ro,rd); + float t = res.x; + float m = res.y; + if( m>-0.5 ) + { + vec3 pos = ro + t*rd; + vec3 nor = calcNormal( pos ); + vec3 ref = reflect( rd, nor ); + + // material + col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) ); + if( m<1.5 ) + { + + float f = checkersGradBox( 5.0*pos.xz ); + col = 0.3 + f*vec3(0.1); + } + + // lighting + float occ = calcAO( pos, nor ); + vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) ); + vec3 hal = normalize( lig-rd ); + float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 ); + float dif = clamp( dot( nor, lig ), 0.0, 1.0 ); + float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0); + float dom = smoothstep( -0.1, 0.1, ref.y ); + float fre = pow( clamp(1.0+dot(nor,rd),0.0,1.0), 2.0 ); + + dif *= calcSoftshadow( pos, lig, 0.02, 2.5 ); + dom *= calcSoftshadow( pos, ref, 0.02, 2.5 ); + + float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)* + dif * + (0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 )); + + vec3 lin = vec3(0.0); + lin += 1.30*dif*vec3(1.00,0.80,0.55); + lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ; + lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ; + lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ; + lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ; + col = col*lin; + col += 10.00*spe*vec3(1.00,0.90,0.70); + + col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) ); + } + + return vec3( clamp(col,0.0,1.0) ); +} + +mat3 setCamera( in vec3 ro, in vec3 ta, float cr ) +{ + vec3 cw = normalize(ta-ro); + vec3 cp = vec3(sin(cr), cos(cr),0.0); + vec3 cu = normalize( cross(cw,cp) ); + vec3 cv = normalize( cross(cu,cw) ); + return mat3( cu, cv, cw ); +} + +void main() +{ + vec3 tot = vec3(0.0); +#if AA>1 + for( int m=0; m1 + } + tot /= float(AA*AA); +#endif + + gl_FragColor = vec4( tot, 1.0 ); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/scanlines.fs b/examples/shaders/resources/shaders/glsl100/scanlines.fs new file mode 100644 index 0000000..ce649e1 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/scanlines.fs @@ -0,0 +1,44 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float offset = 0.0; +float frequency = 450.0/3.0; + +uniform float time; + +void main() +{ +/* + // Scanlines method 1 + float tval = 0; //time + vec2 uv = 0.5 + (fragTexCoord - 0.5)*(0.9 + 0.01*sin(0.5*tval)); + + vec4 color = texture2D(texture0, fragTexCoord); + + color = clamp(color*0.5 + 0.5*color*color*1.2, 0.0, 1.0); + color *= 0.5 + 0.5*16.0*uv.x*uv.y*(1.0 - uv.x)*(1.0 - uv.y); + color *= vec4(0.8, 1.0, 0.7, 1); + color *= 0.9 + 0.1*sin(10.0*tval + uv.y*1000.0); + color *= 0.97 + 0.03*sin(110.0*tval); + + fragColor = color; +*/ + // Scanlines method 2 + float globalPos = (fragTexCoord.y + offset) * frequency; + float wavePos = cos((fract(globalPos) - 0.5)*3.14); + + vec4 color = texture2D(texture0, fragTexCoord); + + gl_FragColor = mix(vec4(0.0, 0.3, 0.0, 0.0), color, wavePos); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/sobel.fs b/examples/shaders/resources/shaders/glsl100/sobel.fs new file mode 100644 index 0000000..745562a --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/sobel.fs @@ -0,0 +1,40 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables +vec2 resolution = vec2(800.0, 450.0); + +void main() +{ + float x = 1.0/resolution.x; + float y = 1.0/resolution.y; + + vec4 horizEdge = vec4(0.0); + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0; + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec4 vertEdge = vec4(0.0); + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0; + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb)); + + gl_FragColor = vec4(edge, texture2D(texture0, fragTexCoord).a); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl100/swirl.fs b/examples/shaders/resources/shaders/glsl100/swirl.fs new file mode 100644 index 0000000..7807b80 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/swirl.fs @@ -0,0 +1,46 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values should be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float radius = 250.0; +float angle = 0.8; + +uniform vec2 center; + +void main() +{ + vec2 texSize = vec2(renderWidth, renderHeight); + vec2 tc = fragTexCoord*texSize; + tc -= center; + + float dist = length(tc); + + if (dist < radius) + { + float percent = (radius - dist)/radius; + float theta = percent*percent*angle*8.0; + float s = sin(theta); + float c = cos(theta); + + tc = vec2(dot(tc, vec2(c, -s)), dot(tc, vec2(s, c))); + } + + tc += center; + vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;; + + gl_FragColor = vec4(color.rgb, 1.0);; +} diff --git a/examples/shaders/resources/shaders/glsl100/wave.fs b/examples/shaders/resources/shaders/glsl100/wave.fs new file mode 100644 index 0000000..bcc156c --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/wave.fs @@ -0,0 +1,36 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +uniform float secondes; + +uniform vec2 size; + +uniform float freqX; +uniform float freqY; +uniform float ampX; +uniform float ampY; +uniform float speedX; +uniform float speedY; + +void main() { + float pixelWidth = 1.0 / size.x; + float pixelHeight = 1.0 / size.y; + float aspect = pixelHeight / pixelWidth; + float boxLeft = 0.0; + float boxTop = 0.0; + + vec2 p = fragTexCoord; + p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth; + p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight; + + gl_FragColor = texture2D(texture0, p)*colDiffuse*fragColor; +} diff --git a/examples/shaders/resources/shaders/glsl120/base.fs b/examples/shaders/resources/shaders/glsl120/base.fs new file mode 100644 index 0000000..18799f9 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/base.fs @@ -0,0 +1,22 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables +uniform vec2 resolution = vec2(800, 450); + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord); + + // NOTE: Implement here your fragment shader code + + gl_FragColor = texelColor*colDiffuse; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/base.vs b/examples/shaders/resources/shaders/glsl120/base.vs new file mode 100644 index 0000000..674153d --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/base.vs @@ -0,0 +1,26 @@ +#version 120 + +// Input vertex attributes +attribute vec3 vertexPosition; +attribute vec2 vertexTexCoord; +attribute vec3 vertexNormal; +attribute vec4 vertexColor; + +// Input uniform values +uniform mat4 mvp; + +// Output vertex attributes (to fragment shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// NOTE: Add here your custom variables + +void main() +{ + // Send vertex attributes to fragment shader + fragTexCoord = vertexTexCoord; + fragColor = vertexColor; + + // Calculate final vertex position + gl_Position = mvp*vec4(vertexPosition, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/bloom.fs b/examples/shaders/resources/shaders/glsl120/bloom.fs new file mode 100644 index 0000000..c28836b --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/bloom.fs @@ -0,0 +1,37 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +const vec2 size = vec2(800, 450); // render size +const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance +const float quality = 2.5; // lower = smaller glow, better quality + +void main() +{ + vec4 sum = vec4(0); + vec2 sizeFactor = vec2(1)/size*quality; + + // Texel color fetching from texture sampler + vec4 source = texture2D(texture0, fragTexCoord); + + const int range = 2; // should be = (samples - 1)/2; + + for (int x = -range; x <= range; x++) + { + for (int y = -range; y <= range; y++) + { + sum += texture2D(texture0, fragTexCoord + vec2(x, y)*sizeFactor); + } + } + + // Calculate final fragment color + gl_FragColor = ((sum/(samples*samples)) + source)*colDiffuse; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/blur.fs b/examples/shaders/resources/shaders/glsl120/blur.fs new file mode 100644 index 0000000..99cddfc --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/blur.fs @@ -0,0 +1,32 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +vec3 offset = vec3(0.0, 1.3846153846, 3.2307692308); +vec3 weight = vec3(0.2270270270, 0.3162162162, 0.0702702703); + +void main() +{ + // Texel color fetching from texture sampler + vec3 tc = texture2D(texture0, fragTexCoord).rgb*weight.x; + + tc += texture2D(texture0, fragTexCoord + vec2(offset.y)/renderWidth, 0.0).rgb*weight.y; + tc += texture2D(texture0, fragTexCoord - vec2(offset.y)/renderWidth, 0.0).rgb*weight.y; + + tc += texture2D(texture0, fragTexCoord + vec2(offset.z)/renderWidth, 0.0).rgb*weight.z; + tc += texture2D(texture0, fragTexCoord - vec2(offset.z)/renderWidth, 0.0).rgb*weight.z; + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/cross_hatching.fs b/examples/shaders/resources/shaders/glsl120/cross_hatching.fs new file mode 100644 index 0000000..4651412 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/cross_hatching.fs @@ -0,0 +1,45 @@ +# version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float hatchOffsetY = 5.0; +float lumThreshold01 = 0.9; +float lumThreshold02 = 0.7; +float lumThreshold03 = 0.5; +float lumThreshold04 = 0.3; + +void main() +{ + vec3 tc = vec3(1.0, 1.0, 1.0); + float lum = length(texture2D(texture0, fragTexCoord).rgb); + + if (lum < lumThreshold01) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold02) + { + if (mod(gl_FragCoord .x - gl_FragCoord .y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold03) + { + if (mod(gl_FragCoord .x + gl_FragCoord .y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold04) + { + if (mod(gl_FragCoord .x - gl_FragCoord .y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/cross_stitching.fs b/examples/shaders/resources/shaders/glsl120/cross_stitching.fs new file mode 100644 index 0000000..dee4617 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/cross_stitching.fs @@ -0,0 +1,55 @@ +# version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float stitchingSize = 6.0; +int invert = 0; + +vec4 PostFX(sampler2D tex, vec2 uv) +{ + vec4 c = vec4(0.0); + float size = stitchingSize; + vec2 cPos = uv * vec2(renderWidth, renderHeight); + vec2 tlPos = floor(cPos / vec2(size, size)); + tlPos *= size; + + int remX = int(mod(cPos.x, size)); + int remY = int(mod(cPos.y, size)); + + if (remX == 0 && remY == 0) tlPos = cPos; + + vec2 blPos = tlPos; + blPos.y += (size - 1.0); + + if ((remX == remY) || (((int(cPos.x) - int(blPos.x)) == (int(blPos.y) - int(cPos.y))))) + { + if (invert == 1) c = vec4(0.2, 0.15, 0.05, 1.0); + else c = texture2D(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4; + } + else + { + if (invert == 1) c = texture2D(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4; + else c = vec4(0.0, 0.0, 0.0, 1.0); + } + + return c; +} + +void main() +{ + vec3 tc = PostFX(texture0, fragTexCoord).rgb; + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/distortion.fs b/examples/shaders/resources/shaders/glsl120/distortion.fs new file mode 100644 index 0000000..f9d7f1e --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/distortion.fs @@ -0,0 +1,52 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; + +// Input uniform values +uniform sampler2D texture0; + +// NOTE: Default parameters for Oculus Rift DK2 device +const vec2 LeftLensCenter = vec2(0.2863248, 0.5); +const vec2 RightLensCenter = vec2(0.7136753, 0.5); +const vec2 LeftScreenCenter = vec2(0.25, 0.5); +const vec2 RightScreenCenter = vec2(0.75, 0.5); +const vec2 Scale = vec2(0.25, 0.45); +const vec2 ScaleIn = vec2(4.0, 2.5); +const vec4 HmdWarpParam = vec4(1.0, 0.22, 0.24, 0.0); +const vec4 ChromaAbParam = vec4(0.996, -0.004, 1.014, 0.0); + +void main() +{ + // The following two variables need to be set per eye + vec2 LensCenter = fragTexCoord.x < 0.5 ? LeftLensCenter : RightLensCenter; + vec2 ScreenCenter = fragTexCoord.x < 0.5 ? LeftScreenCenter : RightScreenCenter; + + // Scales input texture coordinates for distortion: vec2 HmdWarp(vec2 fragTexCoord, vec2 LensCenter) + vec2 theta = (fragTexCoord - LensCenter)*ScaleIn; // Scales to [-1, 1] + float rSq = theta.x*theta.x + theta.y*theta.y; + vec2 theta1 = theta*(HmdWarpParam.x + HmdWarpParam.y*rSq + HmdWarpParam.z*rSq*rSq + HmdWarpParam.w*rSq*rSq*rSq); + //vec2 tc = LensCenter + Scale*theta1; + + // Detect whether blue texture coordinates are out of range since these will scaled out the furthest + vec2 thetaBlue = theta1*(ChromaAbParam.z + ChromaAbParam.w*rSq); + vec2 tcBlue = LensCenter + Scale*thetaBlue; + + if (any(bvec2(clamp(tcBlue, ScreenCenter - vec2(0.25, 0.5), ScreenCenter + vec2(0.25, 0.5)) - tcBlue))) gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); + else + { + // Do blue texture lookup + float blue = texture2D(texture0, tcBlue).b; + + // Do green lookup (no scaling) + vec2 tcGreen = LensCenter + Scale*theta1; + float green = texture2D(texture0, tcGreen).g; + + // Do red scale and lookup + vec2 thetaRed = theta1*(ChromaAbParam.x + ChromaAbParam.y*rSq); + vec2 tcRed = LensCenter + Scale*thetaRed; + float red = texture2D(texture0, tcRed).r; + + gl_FragColor = vec4(red, green, blue, 1.0); + } +} diff --git a/examples/shaders/resources/shaders/glsl120/dream_vision.fs b/examples/shaders/resources/shaders/glsl120/dream_vision.fs new file mode 100644 index 0000000..4ca2a86 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/dream_vision.fs @@ -0,0 +1,35 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + vec4 color = texture2D(texture0, fragTexCoord); + + color += texture2D(texture0, fragTexCoord + 0.001); + color += texture2D(texture0, fragTexCoord + 0.003); + color += texture2D(texture0, fragTexCoord + 0.005); + color += texture2D(texture0, fragTexCoord + 0.007); + color += texture2D(texture0, fragTexCoord + 0.009); + color += texture2D(texture0, fragTexCoord + 0.011); + + color += texture2D(texture0, fragTexCoord - 0.001); + color += texture2D(texture0, fragTexCoord - 0.003); + color += texture2D(texture0, fragTexCoord - 0.005); + color += texture2D(texture0, fragTexCoord - 0.007); + color += texture2D(texture0, fragTexCoord - 0.009); + color += texture2D(texture0, fragTexCoord - 0.011); + + color.rgb = vec3((color.r + color.g + color.b)/3.0); + color = color/9.5; + + gl_FragColor = color; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/fisheye.fs b/examples/shaders/resources/shaders/glsl120/fisheye.fs new file mode 100644 index 0000000..6f376ba --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/fisheye.fs @@ -0,0 +1,41 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +const float PI = 3.1415926535; + +void main() +{ + float aperture = 178.0; + float apertureHalf = 0.5 * aperture * (PI / 180.0); + float maxFactor = sin(apertureHalf); + + vec2 uv = vec2(0.0); + vec2 xy = 2.0 * fragTexCoord.xy - 1.0; + float d = length(xy); + + if (d < (2.0 - maxFactor)) + { + d = length(xy * maxFactor); + float z = sqrt(1.0 - d * d); + float r = atan(d, z) / PI; + float phi = atan(xy.y, xy.x); + + uv.x = r * cos(phi) + 0.5; + uv.y = r * sin(phi) + 0.5; + } + else + { + uv = fragTexCoord.xy; + } + + gl_FragColor = texture2D(texture0, uv); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/grayscale.fs b/examples/shaders/resources/shaders/glsl120/grayscale.fs new file mode 100644 index 0000000..4de60d2 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/grayscale.fs @@ -0,0 +1,23 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture2D(texture0, fragTexCoord)*colDiffuse*fragColor; + + // Convert texel color to grayscale using NTSC conversion weights + float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114)); + + // Calculate final fragment color + gl_FragColor = vec4(gray, gray, gray, texelColor.a); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/palette_switch.fs b/examples/shaders/resources/shaders/glsl120/palette_switch.fs new file mode 100644 index 0000000..ab3f79c --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/palette_switch.fs @@ -0,0 +1,27 @@ +#version 120 + +const int colors = 8; + +// Input fragment attributes (from fragment shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform ivec3 palette[colors]; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord) * fragColor; + + // Convert the (normalized) texel color RED component (GB would work, too) + // to the palette index by scaling up from [0, 1] to [0, 255]. + int index = int(texelColor.r * 255.0); + ivec3 color = palette[index]; + + // Calculate final fragment color. Note that the palette color components + // are defined in the range [0, 255] and need to be normalized to [0, 1] + // for OpenGL to work. + gl_FragColor = vec4(color / 255.0, texelColor.a); +} diff --git a/examples/shaders/resources/shaders/glsl120/pixelizer.fs b/examples/shaders/resources/shaders/glsl120/pixelizer.fs new file mode 100644 index 0000000..6f741fa --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/pixelizer.fs @@ -0,0 +1,30 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float pixelWidth = 5.0; +float pixelHeight = 5.0; + +void main() +{ + float dx = pixelWidth*(1.0/renderWidth); + float dy = pixelHeight*(1.0/renderHeight); + + vec2 coord = vec2(dx*floor(fragTexCoord.x/dx), dy*floor(fragTexCoord.y/dy)); + + vec3 tc = texture2D(texture0, coord).rgb; + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/posterization.fs b/examples/shaders/resources/shaders/glsl120/posterization.fs new file mode 100644 index 0000000..475b93a --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/posterization.fs @@ -0,0 +1,27 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float gamma = 0.6; +float numColors = 8.0; + +void main() +{ + vec3 color = texture2D(texture0, fragTexCoord.xy).rgb; + + color = pow(color, vec3(gamma, gamma, gamma)); + color = color*numColors; + color = floor(color); + color = color/numColors; + color = pow(color, vec3(1.0/gamma)); + + gl_FragColor = vec4(color, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/predator.fs b/examples/shaders/resources/shaders/glsl120/predator.fs new file mode 100644 index 0000000..2999cc8 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/predator.fs @@ -0,0 +1,29 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + vec3 color = texture2D(texture0, fragTexCoord).rgb; + vec3 colors[3]; + colors[0] = vec3(0.0, 0.0, 1.0); + colors[1] = vec3(1.0, 1.0, 0.0); + colors[2] = vec3(1.0, 0.0, 0.0); + + float lum = (color.r + color.g + color.b)/3.0; + + vec3 tc = vec3(0.0, 0.0, 0.0); + + if (lum < 0.5) tc = mix(colors[0], colors[1], lum/0.5); + else tc = mix(colors[1], colors[2], (lum - 0.5)/0.5); + + gl_FragColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/scanlines.fs b/examples/shaders/resources/shaders/glsl120/scanlines.fs new file mode 100644 index 0000000..929c79e --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/scanlines.fs @@ -0,0 +1,42 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +float offset = 0.0; +float frequency = 450.0/3.0; + +uniform float time; + +void main() +{ +/* + // Scanlines method 1 + float tval = 0; //time + vec2 uv = 0.5 + (fragTexCoord - 0.5)*(0.9 + 0.01*sin(0.5*tval)); + + vec4 color = texture2D(texture0, fragTexCoord); + + color = clamp(color*0.5 + 0.5*color*color*1.2, 0.0, 1.0); + color *= 0.5 + 0.5*16.0*uv.x*uv.y*(1.0 - uv.x)*(1.0 - uv.y); + color *= vec4(0.8, 1.0, 0.7, 1); + color *= 0.9 + 0.1*sin(10.0*tval + uv.y*1000.0); + color *= 0.97 + 0.03*sin(110.0*tval); + + fragColor = color; +*/ + // Scanlines method 2 + float globalPos = (fragTexCoord.y + offset) * frequency; + float wavePos = cos((fract(globalPos) - 0.5)*3.14); + + vec4 color = texture2D(texture0, fragTexCoord); + + gl_FragColor = mix(vec4(0.0, 0.3, 0.0, 0.0), color, wavePos); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/sobel.fs b/examples/shaders/resources/shaders/glsl120/sobel.fs new file mode 100644 index 0000000..a3f3f2b --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/sobel.fs @@ -0,0 +1,38 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables +vec2 resolution = vec2(800.0, 450.0); + +void main() +{ + float x = 1.0/resolution.x; + float y = 1.0/resolution.y; + + vec4 horizEdge = vec4(0.0); + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0; + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec4 vertEdge = vec4(0.0); + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0; + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb)); + + gl_FragColor = vec4(edge, texture2D(texture0, fragTexCoord).a); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/swirl.fs b/examples/shaders/resources/shaders/glsl120/swirl.fs new file mode 100644 index 0000000..0618e01 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/swirl.fs @@ -0,0 +1,44 @@ +#version 120 + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +// NOTE: Render size values should be passed from code +const float renderWidth = 800; +const float renderHeight = 450; + +float radius = 250.0; +float angle = 0.8; + +uniform vec2 center; + +void main() +{ + vec2 texSize = vec2(renderWidth, renderHeight); + vec2 tc = fragTexCoord*texSize; + tc -= center; + + float dist = length(tc); + + if (dist < radius) + { + float percent = (radius - dist)/radius; + float theta = percent*percent*angle*8.0; + float s = sin(theta); + float c = cos(theta); + + tc = vec2(dot(tc, vec2(c, -s)), dot(tc, vec2(s, c))); + } + + tc += center; + vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;; + + gl_FragColor = vec4(color.rgb, 1.0);; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/base.fs b/examples/shaders/resources/shaders/glsl330/base.fs new file mode 100644 index 0000000..f1418df --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/base.fs @@ -0,0 +1,25 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord); + + // NOTE: Implement here your fragment shader code + + finalColor = texelColor*colDiffuse; +} + diff --git a/examples/shaders/resources/shaders/glsl330/base.vs b/examples/shaders/resources/shaders/glsl330/base.vs new file mode 100644 index 0000000..f3099e8 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/base.vs @@ -0,0 +1,26 @@ +#version 330 + +// Input vertex attributes +in vec3 vertexPosition; +in vec2 vertexTexCoord; +in vec3 vertexNormal; +in vec4 vertexColor; + +// Input uniform values +uniform mat4 mvp; + +// Output vertex attributes (to fragment shader) +out vec2 fragTexCoord; +out vec4 fragColor; + +// NOTE: Add here your custom variables + +void main() +{ + // Send vertex attributes to fragment shader + fragTexCoord = vertexTexCoord; + fragColor = vertexColor; + + // Calculate final vertex position + gl_Position = mvp*vec4(vertexPosition, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/basic_lighting.fs b/examples/shaders/resources/shaders/glsl330/basic_lighting.fs new file mode 100644 index 0000000..50b41f0 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/basic_lighting.fs @@ -0,0 +1,82 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec3 fragPosition; +in vec2 fragTexCoord; +in vec4 fragColor; +in vec3 fragNormal; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +#define MAX_LIGHTS 4 +#define LIGHT_DIRECTIONAL 0 +#define LIGHT_POINT 1 + +struct MaterialProperty { + vec3 color; + int useSampler; + sampler2D sampler; +}; + +struct Light { + int enabled; + int type; + vec3 position; + vec3 target; + vec4 color; +}; + +// Input lighting values +uniform Light lights[MAX_LIGHTS]; +uniform vec4 ambient; +uniform vec3 viewPos; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord); + vec3 lightDot = vec3(0.0); + vec3 normal = normalize(fragNormal); + vec3 viewD = normalize(viewPos - fragPosition); + vec3 specular = vec3(0.0); + + // NOTE: Implement here your fragment shader code + + for (int i = 0; i < MAX_LIGHTS; i++) + { + if (lights[i].enabled == 1) + { + vec3 light = vec3(0.0); + + if (lights[i].type == LIGHT_DIRECTIONAL) + { + light = -normalize(lights[i].target - lights[i].position); + } + + if (lights[i].type == LIGHT_POINT) + { + light = normalize(lights[i].position - fragPosition); + } + + float NdotL = max(dot(normal, light), 0.0); + lightDot += lights[i].color.rgb*NdotL; + + float specCo = 0.0; + if (NdotL > 0.0) specCo = pow(max(0.0, dot(viewD, reflect(-(light), normal))), 16); // 16 refers to shine + specular += specCo; + } + } + + finalColor = (texelColor*((colDiffuse + vec4(specular, 1.0))*vec4(lightDot, 1.0))); + finalColor += texelColor*(ambient/10.0); + + // Gamma correction + finalColor = pow(finalColor, vec4(1.0/2.2)); +} diff --git a/examples/shaders/resources/shaders/glsl330/basic_lighting.vs b/examples/shaders/resources/shaders/glsl330/basic_lighting.vs new file mode 100644 index 0000000..509954d --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/basic_lighting.vs @@ -0,0 +1,33 @@ +#version 330 + +// Input vertex attributes +in vec3 vertexPosition; +in vec2 vertexTexCoord; +in vec3 vertexNormal; +in vec4 vertexColor; + +// Input uniform values +uniform mat4 mvp; +uniform mat4 matModel; + +// Output vertex attributes (to fragment shader) +out vec3 fragPosition; +out vec2 fragTexCoord; +out vec4 fragColor; +out vec3 fragNormal; + +// NOTE: Add here your custom variables + +void main() +{ + // Send vertex attributes to fragment shader + fragPosition = vec3(matModel*vec4(vertexPosition, 1.0f)); + fragTexCoord = vertexTexCoord; + fragColor = vertexColor; + + mat3 normalMatrix = transpose(inverse(mat3(matModel))); + fragNormal = normalize(normalMatrix*vertexNormal); + + // Calculate final vertex position + gl_Position = mvp*vec4(vertexPosition, 1.0); +} diff --git a/examples/shaders/resources/shaders/glsl330/bloom.fs b/examples/shaders/resources/shaders/glsl330/bloom.fs new file mode 100644 index 0000000..333d5b0 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/bloom.fs @@ -0,0 +1,40 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +const vec2 size = vec2(800, 450); // render size +const float samples = 5.0; // pixels per axis; higher = bigger glow, worse performance +const float quality = 2.5; // lower = smaller glow, better quality + +void main() +{ + vec4 sum = vec4(0); + vec2 sizeFactor = vec2(1)/size*quality; + + // Texel color fetching from texture sampler + vec4 source = texture(texture0, fragTexCoord); + + const int range = 2; // should be = (samples - 1)/2; + + for (int x = -range; x <= range; x++) + { + for (int y = -range; y <= range; y++) + { + sum += texture(texture0, fragTexCoord + vec2(x, y)*sizeFactor); + } + } + + // Calculate final fragment color + finalColor = ((sum/(samples*samples)) + source)*colDiffuse; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/blur.fs b/examples/shaders/resources/shaders/glsl330/blur.fs new file mode 100644 index 0000000..e4df406 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/blur.fs @@ -0,0 +1,35 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800; +const float renderHeight = 450; + +float offset[3] = float[](0.0, 1.3846153846, 3.2307692308); +float weight[3] = float[](0.2270270270, 0.3162162162, 0.0702702703); + +void main() +{ + // Texel color fetching from texture sampler + vec3 texelColor = texture(texture0, fragTexCoord).rgb*weight[0]; + + for (int i = 1; i < 3; i++) + { + texelColor += texture(texture0, fragTexCoord + vec2(offset[i])/renderWidth, 0.0).rgb*weight[i]; + texelColor += texture(texture0, fragTexCoord - vec2(offset[i])/renderWidth, 0.0).rgb*weight[i]; + } + + finalColor = vec4(texelColor, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/cross_hatching.fs b/examples/shaders/resources/shaders/glsl330/cross_hatching.fs new file mode 100644 index 0000000..f95ad07 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/cross_hatching.fs @@ -0,0 +1,48 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +float hatchOffsetY = 5.0; +float lumThreshold01 = 0.9; +float lumThreshold02 = 0.7; +float lumThreshold03 = 0.5; +float lumThreshold04 = 0.3; + +void main() +{ + vec3 tc = vec3(1.0, 1.0, 1.0); + float lum = length(texture(texture0, fragTexCoord).rgb); + + if (lum < lumThreshold01) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold02) + { + if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold03) + { + if (mod(gl_FragCoord.x + gl_FragCoord.y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + if (lum < lumThreshold04) + { + if (mod(gl_FragCoord.x - gl_FragCoord.y - hatchOffsetY, 10.0) == 0.0) tc = vec3(0.0, 0.0, 0.0); + } + + finalColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/cross_stitching.fs b/examples/shaders/resources/shaders/glsl330/cross_stitching.fs new file mode 100644 index 0000000..9cdd36c --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/cross_stitching.fs @@ -0,0 +1,59 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800.0; +const float renderHeight = 450.0; + +float stitchingSize = 6.0; + +uniform int invert = 0; + +vec4 PostFX(sampler2D tex, vec2 uv) +{ + vec4 c = vec4(0.0); + float size = stitchingSize; + vec2 cPos = uv * vec2(renderWidth, renderHeight); + vec2 tlPos = floor(cPos / vec2(size, size)); + tlPos *= size; + + int remX = int(mod(cPos.x, size)); + int remY = int(mod(cPos.y, size)); + + if (remX == 0 && remY == 0) tlPos = cPos; + + vec2 blPos = tlPos; + blPos.y += (size - 1.0); + + if ((remX == remY) || (((int(cPos.x) - int(blPos.x)) == (int(blPos.y) - int(cPos.y))))) + { + if (invert == 1) c = vec4(0.2, 0.15, 0.05, 1.0); + else c = texture(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4; + } + else + { + if (invert == 1) c = texture(tex, tlPos * vec2(1.0/renderWidth, 1.0/renderHeight)) * 1.4; + else c = vec4(0.0, 0.0, 0.0, 1.0); + } + + return c; +} + +void main() +{ + vec3 tc = PostFX(texture0, fragTexCoord).rgb; + + finalColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/cubes_panning.fs b/examples/shaders/resources/shaders/glsl330/cubes_panning.fs new file mode 100644 index 0000000..c92418a --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/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/resources/shaders/glsl330/depth.fs b/examples/shaders/resources/shaders/glsl330/depth.fs new file mode 100644 index 0000000..2422f39 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/depth.fs @@ -0,0 +1,27 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; // Depth texture +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +void main() +{ + float zNear = 0.01; // camera z near + float zFar = 10.0; // camera z far + float z = texture(texture0, fragTexCoord).x; + + // Linearize depth value + float depth = (2.0*zNear)/(zFar + zNear - z*(zFar - zNear)); + + // Calculate final fragment color + finalColor = vec4(depth, depth, depth, 1.0f); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/distortion.fs b/examples/shaders/resources/shaders/glsl330/distortion.fs new file mode 100644 index 0000000..cb4be8f --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/distortion.fs @@ -0,0 +1,56 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; + +// Input uniform values +uniform sampler2D texture0; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Default parameters for Oculus Rift DK2 device +const vec2 LeftLensCenter = vec2(0.2863248, 0.5); +const vec2 RightLensCenter = vec2(0.7136753, 0.5); +const vec2 LeftScreenCenter = vec2(0.25, 0.5); +const vec2 RightScreenCenter = vec2(0.75, 0.5); +const vec2 Scale = vec2(0.25, 0.45); +const vec2 ScaleIn = vec2(4.0, 2.5); +const vec4 HmdWarpParam = vec4(1.0, 0.22, 0.24, 0.0); +const vec4 ChromaAbParam = vec4(0.996, -0.004, 1.014, 0.0); + +void main() +{ + // The following two variables need to be set per eye + vec2 LensCenter = fragTexCoord.x < 0.5 ? LeftLensCenter : RightLensCenter; + vec2 ScreenCenter = fragTexCoord.x < 0.5 ? LeftScreenCenter : RightScreenCenter; + + // Scales input texture coordinates for distortion: vec2 HmdWarp(vec2 fragTexCoord, vec2 LensCenter) + vec2 theta = (fragTexCoord - LensCenter)*ScaleIn; // Scales to [-1, 1] + float rSq = theta.x*theta.x + theta.y*theta.y; + vec2 theta1 = theta*(HmdWarpParam.x + HmdWarpParam.y*rSq + HmdWarpParam.z*rSq*rSq + HmdWarpParam.w*rSq*rSq*rSq); + //vec2 tc = LensCenter + Scale*theta1; + + // Detect whether blue texture coordinates are out of range since these will scaled out the furthest + vec2 thetaBlue = theta1*(ChromaAbParam.z + ChromaAbParam.w*rSq); + vec2 tcBlue = LensCenter + Scale*thetaBlue; + + if (any(bvec2(clamp(tcBlue, ScreenCenter - vec2(0.25, 0.5), ScreenCenter + vec2(0.25, 0.5)) - tcBlue))) finalColor = vec4(0.0, 0.0, 0.0, 1.0); + else + { + // Do blue texture lookup + float blue = texture(texture0, tcBlue).b; + + // Do green lookup (no scaling) + vec2 tcGreen = LensCenter + Scale*theta1; + float green = texture(texture0, tcGreen).g; + + // Do red scale and lookup + vec2 thetaRed = theta1*(ChromaAbParam.x + ChromaAbParam.y*rSq); + vec2 tcRed = LensCenter + Scale*thetaRed; + float red = texture(texture0, tcRed).r; + + finalColor = vec4(red, green, blue, 1.0); + } +} + diff --git a/examples/shaders/resources/shaders/glsl330/dream_vision.fs b/examples/shaders/resources/shaders/glsl330/dream_vision.fs new file mode 100644 index 0000000..0311586 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/dream_vision.fs @@ -0,0 +1,34 @@ +#version 330 + +in vec2 fragTexCoord; + +out vec4 fragColor; + +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +void main() +{ + vec4 color = texture(texture0, fragTexCoord); + + color += texture(texture0, fragTexCoord + 0.001); + color += texture(texture0, fragTexCoord + 0.003); + color += texture(texture0, fragTexCoord + 0.005); + color += texture(texture0, fragTexCoord + 0.007); + color += texture(texture0, fragTexCoord + 0.009); + color += texture(texture0, fragTexCoord + 0.011); + + color += texture(texture0, fragTexCoord - 0.001); + color += texture(texture0, fragTexCoord - 0.003); + color += texture(texture0, fragTexCoord - 0.005); + color += texture(texture0, fragTexCoord - 0.007); + color += texture(texture0, fragTexCoord - 0.009); + color += texture(texture0, fragTexCoord - 0.011); + + color.rgb = vec3((color.r + color.g + color.b)/3.0); + color = color/9.5; + + fragColor = color; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/eratosthenes.fs b/examples/shaders/resources/shaders/glsl330/eratosthenes.fs new file mode 100644 index 0000000..a6390b7 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/eratosthenes.fs @@ -0,0 +1,59 @@ +#version 330 + +/************************************************************************************* + + The Sieve of Eratosthenes -- a simple shader by ProfJski + An early prime number sieve: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes + + The screen is divided into a square grid of boxes, each representing an integer value. + Each integer is tested to see if it is a prime number. Primes are colored white. + Non-primes are colored with a color that indicates the smallest factor which evenly divdes our integer. + + You can change the scale variable to make a larger or smaller grid. + Total number of integers displayed = scale squared, so scale = 100 tests the first 10,000 integers. + + WARNING: If you make scale too large, your GPU may bog down! + +***************************************************************************************/ + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Output fragment color +out vec4 finalColor; + +// Make a nice spectrum of colors based on counter and maxSize +vec4 Colorizer(float counter, float maxSize) +{ + float red = 0.0, green = 0.0, blue = 0.0; + float normsize = counter/maxSize; + + red = smoothstep(0.3, 0.7, normsize); + green = sin(3.14159*normsize); + blue = 1.0 - smoothstep(0.0, 0.4, normsize); + + return vec4(0.8*red, 0.8*green, 0.8*blue, 1.0); +} + +void main() +{ + vec4 color = vec4(1.0); + float scale = 1000.0; // Makes 100x100 square grid. Change this variable to make a smaller or larger grid. + int value = int(scale*floor(fragTexCoord.y*scale)+floor(fragTexCoord.x*scale)); // Group pixels into boxes representing integer values + + if ((value == 0) || (value == 1) || (value == 2)) finalColor = vec4(1.0); + else + { + for (int i = 2; (i < max(2, sqrt(value) + 1)); i++) + { + if ((value - i*floor(value/i)) == 0) + { + color = Colorizer(float(i), scale); + //break; // Uncomment to color by the largest factor instead + } + } + + finalColor = color; + } +} diff --git a/examples/shaders/resources/shaders/glsl330/fisheye.fs b/examples/shaders/resources/shaders/glsl330/fisheye.fs new file mode 100644 index 0000000..e85d7c9 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/fisheye.fs @@ -0,0 +1,40 @@ +#version 330 + +in vec2 fragTexCoord; + +out vec4 fragColor; + +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// NOTE: Add here your custom variables + +const float PI = 3.1415926535; + +void main() +{ + float aperture = 178.0; + float apertureHalf = 0.5 * aperture * (PI / 180.0); + float maxFactor = sin(apertureHalf); + + vec2 uv = vec2(0); + vec2 xy = 2.0 * fragTexCoord.xy - 1.0; + float d = length(xy); + + if (d < (2.0 - maxFactor)) + { + d = length(xy * maxFactor); + float z = sqrt(1.0 - d * d); + float r = atan(d, z) / PI; + float phi = atan(xy.y, xy.x); + + uv.x = r * cos(phi) + 0.5; + uv.y = r * sin(phi) + 0.5; + } + else + { + uv = fragTexCoord.xy; + } + + fragColor = texture(texture0, uv); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/grayscale.fs b/examples/shaders/resources/shaders/glsl330/grayscale.fs new file mode 100644 index 0000000..5b3e11b --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/grayscale.fs @@ -0,0 +1,26 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord)*colDiffuse*fragColor; + + // Convert texel color to grayscale using NTSC conversion weights + float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114)); + + // Calculate final fragment color + finalColor = vec4(gray, gray, gray, texelColor.a); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/julia_set.fs b/examples/shaders/resources/shaders/glsl330/julia_set.fs new file mode 100644 index 0000000..f68367e --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/julia_set.fs @@ -0,0 +1,81 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Output fragment color +out vec4 finalColor; + +uniform vec2 screenDims; // Dimensions of the screen +uniform vec2 c; // c.x = real, c.y = imaginary component. Equation done is z^2 + c +uniform vec2 offset; // Offset of the scale. +uniform float zoom; // Zoom of the scale. + +const int MAX_ITERATIONS = 255; // Max iterations to do. + +// Square a complex number +vec2 ComplexSquare(vec2 z) +{ + return vec2( + z.x * z.x - z.y * z.y, + z.x * z.y * 2.0 + ); +} + +// Convert Hue Saturation Value (HSV) color into RGB +vec3 Hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void main() +{ + /********************************************************************************************** + Julia sets use a function z^2 + c, where c is a constant. + This function is iterated until the nature of the point is determined. + + If the magnitude of the number becomes greater than 2, then from that point onward + the number will get bigger and bigger, and will never get smaller (tends towards infinity). + 2^2 = 4, 4^2 = 8 and so on. + So at 2 we stop iterating. + + If the number is below 2, we keep iterating. + But when do we stop iterating if the number is always below 2 (it converges)? + That is what MAX_ITERATIONS is for. + Then we can divide the iterations by the MAX_ITERATIONS value to get a normalized value that we can + then map to a color. + + We use dot product (z.x * z.x + z.y * z.y) to determine the magnitude (length) squared. + And once the magnitude squared is > 4, then magnitude > 2 is also true (saves computational power). + *************************************************************************************************/ + + // The pixel coordinates are scaled so they are on the mandelbrot scale + // NOTE: fragTexCoord already comes as normalized screen coordinates but offset must be normalized before scaling and zoom + vec2 z = vec2((fragTexCoord.x + offset.x/screenDims.x)*2.5/zoom, (fragTexCoord.y + offset.y/screenDims.y)*1.5/zoom); + + int iterations = 0; + for (iterations = 0; iterations < MAX_ITERATIONS; iterations++) + { + z = ComplexSquare(z) + c; // Iterate function + + if (dot(z, z) > 4.0) break; + } + + // Another few iterations decreases errors in the smoothing calculation. + // See http://linas.org/art-gallery/escape/escape.html for more information. + z = ComplexSquare(z) + c; + z = ComplexSquare(z) + c; + + // This last part smooths the color (again see link above). + float smoothVal = float(iterations) + 1.0 - (log(log(length(z)))/log(2.0)); + + // Normalize the value so it is between 0 and 1. + float norm = smoothVal/float(MAX_ITERATIONS); + + // If in set, color black. 0.999 allows for some float accuracy error. + if (norm > 0.999) finalColor = vec4(0.0, 0.0, 0.0, 1.0); + else finalColor = vec4(Hsv2rgb(vec3(norm, 1.0, 1.0)), 1.0); +} diff --git a/examples/shaders/resources/shaders/glsl330/overdraw.fs b/examples/shaders/resources/shaders/glsl330/overdraw.fs new file mode 100644 index 0000000..435217c --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/overdraw.fs @@ -0,0 +1,26 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +void main() +{ + // To show overdraw, we just render all the fragments + // with a solid color and some transparency + + // NOTE: This is not a postpro render, + // it will only render all screen texture in a plain color + + finalColor = vec4(1.0, 0.0, 0.0, 0.2); +} + diff --git a/examples/shaders/resources/shaders/glsl330/palette_switch.fs b/examples/shaders/resources/shaders/glsl330/palette_switch.fs new file mode 100644 index 0000000..7c8a488 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/palette_switch.fs @@ -0,0 +1,30 @@ +#version 330 + +const int colors = 8; + +// Input fragment attributes (from fragment shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform ivec3 palette[colors]; + +// Output fragment color +out vec4 finalColor; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord)*fragColor; + + // Convert the (normalized) texel color RED component (GB would work, too) + // to the palette index by scaling up from [0, 1] to [0, 255]. + int index = int(texelColor.r*255.0); + ivec3 color = palette[index]; + + // Calculate final fragment color. Note that the palette color components + // are defined in the range [0, 255] and need to be normalized to [0, 1] + // for OpenGL to work. + finalColor = vec4(color/255.0, texelColor.a); +} diff --git a/examples/shaders/resources/shaders/glsl330/pixelizer.fs b/examples/shaders/resources/shaders/glsl330/pixelizer.fs new file mode 100644 index 0000000..cf8aec4 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/pixelizer.fs @@ -0,0 +1,33 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800; +const float renderHeight = 450; + +uniform float pixelWidth = 5.0; +uniform float pixelHeight = 5.0; + +void main() +{ + float dx = pixelWidth*(1.0/renderWidth); + float dy = pixelHeight*(1.0/renderHeight); + + vec2 coord = vec2(dx*floor(fragTexCoord.x/dx), dy*floor(fragTexCoord.y/dy)); + + vec3 tc = texture(texture0, coord).rgb; + + finalColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/posterization.fs b/examples/shaders/resources/shaders/glsl330/posterization.fs new file mode 100644 index 0000000..be2b5dd --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/posterization.fs @@ -0,0 +1,31 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +float gamma = 0.6; +float numColors = 8.0; + +void main() +{ + // Texel color fetching from texture sampler + vec3 texelColor = texture(texture0, fragTexCoord.xy).rgb; + + texelColor = pow(texelColor, vec3(gamma, gamma, gamma)); + texelColor = texelColor*numColors; + texelColor = floor(texelColor); + texelColor = texelColor/numColors; + texelColor = pow(texelColor, vec3(1.0/gamma)); + + finalColor = vec4(texelColor, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/predator.fs b/examples/shaders/resources/shaders/glsl330/predator.fs new file mode 100644 index 0000000..6a55c76 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/predator.fs @@ -0,0 +1,32 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +void main() +{ + // Texel color fetching from texture sampler + vec3 texelColor = texture(texture0, fragTexCoord).rgb; + vec3 colors[3]; + colors[0] = vec3(0.0, 0.0, 1.0); + colors[1] = vec3(1.0, 1.0, 0.0); + colors[2] = vec3(1.0, 0.0, 0.0); + + float lum = (texelColor.r + texelColor.g + texelColor.b)/3.0; + + int ix = (lum < 0.5)? 0:1; + + vec3 tc = mix(colors[ix], colors[ix + 1], (lum - float(ix)*0.5)/0.5); + + finalColor = vec4(tc, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/raymarching.fs b/examples/shaders/resources/shaders/glsl330/raymarching.fs new file mode 100644 index 0000000..7c9fbcb --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/raymarching.fs @@ -0,0 +1,432 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Output fragment color +out vec4 finalColor; + +uniform vec3 viewEye; +uniform vec3 viewCenter; +uniform vec3 viewUp; +uniform float deltaTime; +uniform float runTime; +uniform vec2 resolution; + +// The MIT License +// Copyright © 2013 Inigo Quilez +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// A list of useful distance function to simple primitives, and an example on how to +// do some interesting boolean operations, repetition and displacement. +// +// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm + +#define AA 1 // make this 1 is your machine is too slow + +//------------------------------------------------------------------ + +float sdPlane( vec3 p ) +{ + return p.y; +} + +float sdSphere( vec3 p, float s ) +{ + return length(p)-s; +} + +float sdBox( vec3 p, vec3 b ) +{ + vec3 d = abs(p) - b; + return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0)); +} + +float sdEllipsoid( in vec3 p, in vec3 r ) +{ + return (length( p/r ) - 1.0) * min(min(r.x,r.y),r.z); +} + +float udRoundBox( vec3 p, vec3 b, float r ) +{ + return length(max(abs(p)-b,0.0))-r; +} + +float sdTorus( vec3 p, vec2 t ) +{ + return length( vec2(length(p.xz)-t.x,p.y) )-t.y; +} + +float sdHexPrism( vec3 p, vec2 h ) +{ + vec3 q = abs(p); +#if 0 + return max(q.z-h.y,max((q.x*0.866025+q.y*0.5),q.y)-h.x); +#else + float d1 = q.z-h.y; + float d2 = max((q.x*0.866025+q.y*0.5),q.y)-h.x; + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +#endif +} + +float sdCapsule( vec3 p, vec3 a, vec3 b, float r ) +{ + vec3 pa = p-a, ba = b-a; + float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 ); + return length( pa - ba*h ) - r; +} + +float sdEquilateralTriangle( in vec2 p ) +{ + const float k = sqrt(3.0); + p.x = abs(p.x) - 1.0; + p.y = p.y + 1.0/k; + if( p.x + k*p.y > 0.0 ) p = vec2( p.x - k*p.y, -k*p.x - p.y )/2.0; + p.x += 2.0 - 2.0*clamp( (p.x+2.0)/2.0, 0.0, 1.0 ); + return -length(p)*sign(p.y); +} + +float sdTriPrism( vec3 p, vec2 h ) +{ + vec3 q = abs(p); + float d1 = q.z-h.y; +#if 1 + // distance bound + float d2 = max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5; +#else + // correct distance + h.x *= 0.866025; + float d2 = sdEquilateralTriangle(p.xy/h.x)*h.x; +#endif + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdCylinder( vec3 p, vec2 h ) +{ + vec2 d = abs(vec2(length(p.xz),p.y)) - h; + return min(max(d.x,d.y),0.0) + length(max(d,0.0)); +} + +float sdCone( in vec3 p, in vec3 c ) +{ + vec2 q = vec2( length(p.xz), p.y ); + float d1 = -q.y-c.z; + float d2 = max( dot(q,c.xy), q.y); + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdConeSection( in vec3 p, in float h, in float r1, in float r2 ) +{ + float d1 = -p.y - h; + float q = p.y - h; + float si = 0.5*(r1-r2)/h; + float d2 = max( sqrt( dot(p.xz,p.xz)*(1.0-si*si)) + q*si - r2, q ); + return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); +} + +float sdPryamid4(vec3 p, vec3 h ) // h = { cos a, sin a, height } +{ + // Tetrahedron = Octahedron - Cube + float box = sdBox( p - vec3(0,-2.0*h.z,0), vec3(2.0*h.z) ); + + float d = 0.0; + d = max( d, abs( dot(p, vec3( -h.x, h.y, 0 )) )); + d = max( d, abs( dot(p, vec3( h.x, h.y, 0 )) )); + d = max( d, abs( dot(p, vec3( 0, h.y, h.x )) )); + d = max( d, abs( dot(p, vec3( 0, h.y,-h.x )) )); + float octa = d - h.z; + return max(-box,octa); // Subtraction + } + +float length2( vec2 p ) +{ + return sqrt( p.x*p.x + p.y*p.y ); +} + +float length6( vec2 p ) +{ + p = p*p*p; p = p*p; + return pow( p.x + p.y, 1.0/6.0 ); +} + +float length8( vec2 p ) +{ + p = p*p; p = p*p; p = p*p; + return pow( p.x + p.y, 1.0/8.0 ); +} + +float sdTorus82( vec3 p, vec2 t ) +{ + vec2 q = vec2(length2(p.xz)-t.x,p.y); + return length8(q)-t.y; +} + +float sdTorus88( vec3 p, vec2 t ) +{ + vec2 q = vec2(length8(p.xz)-t.x,p.y); + return length8(q)-t.y; +} + +float sdCylinder6( vec3 p, vec2 h ) +{ + return max( length6(p.xz)-h.x, abs(p.y)-h.y ); +} + +//------------------------------------------------------------------ + +float opS( float d1, float d2 ) +{ + return max(-d2,d1); +} + +vec2 opU( vec2 d1, vec2 d2 ) +{ + return (d1.x0.0 ) tmax = min( tmax, tp1 ); + float tp2 = (1.6-ro.y)/rd.y; if( tp2>0.0 ) { if( ro.y>1.6 ) tmin = max( tmin, tp2 ); + else tmax = min( tmax, tp2 ); } +#endif + + float t = tmin; + float m = -1.0; + for( int i=0; i<64; i++ ) + { + float precis = 0.0005*t; + vec2 res = map( ro+rd*t ); + if( res.xtmax ) break; + t += res.x; + m = res.y; + } + + if( t>tmax ) m=-1.0; + return vec2( t, m ); +} + + +float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax ) +{ + float res = 1.0; + float t = mint; + for( int i=0; i<16; i++ ) + { + float h = map( ro + rd*t ).x; + res = min( res, 8.0*h/t ); + t += clamp( h, 0.02, 0.10 ); + if( h<0.001 || t>tmax ) break; + } + return clamp( res, 0.0, 1.0 ); +} + +vec3 calcNormal( in vec3 pos ) +{ + vec2 e = vec2(1.0,-1.0)*0.5773*0.0005; + return normalize( e.xyy*map( pos + e.xyy ).x + + e.yyx*map( pos + e.yyx ).x + + e.yxy*map( pos + e.yxy ).x + + e.xxx*map( pos + e.xxx ).x ); + /* + vec3 eps = vec3( 0.0005, 0.0, 0.0 ); + vec3 nor = vec3( + map(pos+eps.xyy).x - map(pos-eps.xyy).x, + map(pos+eps.yxy).x - map(pos-eps.yxy).x, + map(pos+eps.yyx).x - map(pos-eps.yyx).x ); + return normalize(nor); + */ +} + +float calcAO( in vec3 pos, in vec3 nor ) +{ + float occ = 0.0; + float sca = 1.0; + for( int i=0; i<5; i++ ) + { + float hr = 0.01 + 0.12*float(i)/4.0; + vec3 aopos = nor * hr + pos; + float dd = map( aopos ).x; + occ += -(dd-hr)*sca; + sca *= 0.95; + } + return clamp( 1.0 - 3.0*occ, 0.0, 1.0 ); +} + +// http://iquilezles.org/www/articles/checkerfiltering/checkerfiltering.htm +float checkersGradBox( in vec2 p ) +{ + // filter kernel + vec2 w = fwidth(p) + 0.001; + // analytical integral (box filter) + vec2 i = 2.0*(abs(fract((p-0.5*w)*0.5)-0.5)-abs(fract((p+0.5*w)*0.5)-0.5))/w; + // xor pattern + return 0.5 - 0.5*i.x*i.y; +} + +vec3 render( in vec3 ro, in vec3 rd ) +{ + vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8; + vec2 res = castRay(ro,rd); + float t = res.x; + float m = res.y; + if( m>-0.5 ) + { + vec3 pos = ro + t*rd; + vec3 nor = calcNormal( pos ); + vec3 ref = reflect( rd, nor ); + + // material + col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) ); + if( m<1.5 ) + { + + float f = checkersGradBox( 5.0*pos.xz ); + col = 0.3 + f*vec3(0.1); + } + + // lighting + float occ = calcAO( pos, nor ); + vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) ); + vec3 hal = normalize( lig-rd ); + float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 ); + float dif = clamp( dot( nor, lig ), 0.0, 1.0 ); + float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0); + float dom = smoothstep( -0.1, 0.1, ref.y ); + float fre = pow( clamp(1.0+dot(nor,rd),0.0,1.0), 2.0 ); + + dif *= calcSoftshadow( pos, lig, 0.02, 2.5 ); + dom *= calcSoftshadow( pos, ref, 0.02, 2.5 ); + + float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)* + dif * + (0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 )); + + vec3 lin = vec3(0.0); + lin += 1.30*dif*vec3(1.00,0.80,0.55); + lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ; + lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ; + lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ; + lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ; + col = col*lin; + col += 10.00*spe*vec3(1.00,0.90,0.70); + + col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) ); + } + + return vec3( clamp(col,0.0,1.0) ); +} + +mat3 setCamera( in vec3 ro, in vec3 ta, float cr ) +{ + vec3 cw = normalize(ta-ro); + vec3 cp = vec3(sin(cr), cos(cr),0.0); + vec3 cu = normalize( cross(cw,cp) ); + vec3 cv = normalize( cross(cu,cw) ); + return mat3( cu, cv, cw ); +} + +void main() +{ + vec3 tot = vec3(0.0); +#if AA>1 + for( int m=0; m1 + } + tot /= float(AA*AA); +#endif + + finalColor = vec4( tot, 1.0 ); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/scanlines.fs b/examples/shaders/resources/shaders/glsl330/scanlines.fs new file mode 100644 index 0000000..22dc9cd --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/scanlines.fs @@ -0,0 +1,49 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +// NOTE: Render size values must be passed from code +const float renderWidth = 800; +const float renderHeight = 450; +float offset = 0.0; + +uniform float time; + +void main() +{ + float frequency = renderHeight/3.0; +/* + // Scanlines method 1 + float tval = 0; //time + vec2 uv = 0.5 + (fragTexCoord - 0.5)*(0.9 + 0.01*sin(0.5*tval)); + + vec4 color = texture(texture0, fragTexCoord); + + color = clamp(color*0.5 + 0.5*color*color*1.2, 0.0, 1.0); + color *= 0.5 + 0.5*16.0*uv.x*uv.y*(1.0 - uv.x)*(1.0 - uv.y); + color *= vec4(0.8, 1.0, 0.7, 1); + color *= 0.9 + 0.1*sin(10.0*tval + uv.y*1000.0); + color *= 0.97 + 0.03*sin(110.0*tval); + + fragColor = color; +*/ + // Scanlines method 2 + float globalPos = (fragTexCoord.y + offset) * frequency; + float wavePos = cos((fract(globalPos) - 0.5)*3.14); + + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord); + + finalColor = mix(vec4(0.0, 0.3, 0.0, 0.0), texelColor, wavePos); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/sobel.fs b/examples/shaders/resources/shaders/glsl330/sobel.fs new file mode 100644 index 0000000..a1430cd --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/sobel.fs @@ -0,0 +1,41 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables +uniform vec2 resolution = vec2(800, 450); + +void main() +{ + float x = 1.0/resolution.x; + float y = 1.0/resolution.y; + + vec4 horizEdge = vec4(0.0); + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y ))*2.0; + horizEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y ))*2.0; + horizEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec4 vertEdge = vec4(0.0); + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y - y))*1.0; + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y - y))*2.0; + vertEdge -= texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y - y))*1.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x - x, fragTexCoord.y + y))*1.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x , fragTexCoord.y + y))*2.0; + vertEdge += texture2D(texture0, vec2(fragTexCoord.x + x, fragTexCoord.y + y))*1.0; + + vec3 edge = sqrt((horizEdge.rgb*horizEdge.rgb) + (vertEdge.rgb*vertEdge.rgb)); + + finalColor = vec4(edge, texture2D(texture0, fragTexCoord).a); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/swirl.fs b/examples/shaders/resources/shaders/glsl330/swirl.fs new file mode 100644 index 0000000..4741e59 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/swirl.fs @@ -0,0 +1,47 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +// NOTE: Add here your custom variables + +// NOTE: Render size values should be passed from code +const float renderWidth = 800; +const float renderHeight = 450; + +float radius = 250.0; +float angle = 0.8; + +uniform vec2 center = vec2(200.0, 200.0); + +void main() +{ + vec2 texSize = vec2(renderWidth, renderHeight); + vec2 tc = fragTexCoord*texSize; + tc -= center; + + float dist = length(tc); + + if (dist < radius) + { + float percent = (radius - dist)/radius; + float theta = percent*percent*angle*8.0; + float s = sin(theta); + float c = cos(theta); + + tc = vec2(dot(tc, vec2(c, -s)), dot(tc, vec2(s, c))); + } + + tc += center; + vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;; + + finalColor = vec4(color.rgb, 1.0);; +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/wave.fs b/examples/shaders/resources/shaders/glsl330/wave.fs new file mode 100644 index 0000000..f139f39 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/wave.fs @@ -0,0 +1,37 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; + +// Output fragment color +out vec4 finalColor; + +uniform float secondes; + +uniform vec2 size; + +uniform float freqX; +uniform float freqY; +uniform float ampX; +uniform float ampY; +uniform float speedX; +uniform float speedY; + +void main() { + float pixelWidth = 1.0 / size.x; + float pixelHeight = 1.0 / size.y; + float aspect = pixelHeight / pixelWidth; + float boxLeft = 0.0; + float boxTop = 0.0; + + vec2 p = fragTexCoord; + p.x += cos((fragTexCoord.y - boxTop) * freqX / ( pixelWidth * 750.0) + (secondes * speedX)) * ampX * pixelWidth; + p.y += sin((fragTexCoord.x - boxLeft) * freqY * aspect / ( pixelHeight * 750.0) + (secondes * speedY)) * ampY * pixelHeight; + + finalColor = texture(texture0, p)*colDiffuse*fragColor; +} diff --git a/examples/shaders/resources/space.png b/examples/shaders/resources/space.png new file mode 100644 index 0000000000000000000000000000000000000000..411297390816ef838f219a7cea994b6dc88ec2c3 GIT binary patch literal 22517 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

2JKMK z)u$MKyPd-Bq9{}A4QJ#x#w*iywLO$!N&A{GRBI6kH(;l``XvVu7H$}amq{(^<|_m{ z2GUooDxukY*T)72D{M9z*9NW+R+Qb%0PfG%fy|E%cpqXHdf9(e-L%H+mwZMD-IbcX zEsgNAQAX#fQir4r9k&yL@~5?rpk*Z3WSDbR8rG8cQ!n)Y3?vai z8u;FzT{C34qq~xo$Y2Btej#enpFFRW_dw=`FuBZw4mqc>yKacid|w(Gj@Z4W#vcP# zt7obMQbV$RG^esJxLtOBG_Z&Tu_46S{CJQvw~|=u$AAaTiebC^xrXm&1it&V@dX_2 zG(oEW;EUVD=#P)@)%?Is-^5@Gw3z1x-kgfsRp8GmPr0~4xKmn_&jhQ`reoGKLO%OR zl5XOtwh6(5-9|ywb*n-d@CPj|N1{Q}hwC2GnhfT%rCK?(?@ekEex97EkDJmnJ$m#} z{Otu3aWWV6dn=uh=4bn?+k}u1rNuz?K$LlK-SYLE%+lM^k0J>QkA09LPFgn@Zau=x zHt}e_S(P7tT%^W-vmM<$5*{Be>ior(ZUhFrj}G{VIY64>5_PalZ8}YmZvpqc=7Uc3 zau#QA^dn7W{p{i4ZnwqI`)*@y`wk61+#SdEC#JmR0)zLY_r3Rm7cYOxv$)i6L2Nap zWpj>QF#6|fF^WfJ{yG+#jGOD<5 z=E@}~6I!%!7!~#>m4Ar#{n`3}d7bkaY78uvl*s^bawn9Q@Lc_x`aqR>7#ebUI1Ocz zcX5fIf}`JB7fxw!X%OY_DTKx~H$N!5#c_FMN}l-9f+cx{DJ`VIhW>GSjN(Pi4FgSU zrI)VsXKZ6R-{<2|pzMCxmt3zO=f;1Pad_r>o%n2-9%S`J$DB2ZUAZ~@$JyE1=E$wh#8Nj?>-W8iKcvt+*i? zHr1<vdBU_3gt|kNa7Pd82JW`NGy6{JK4NG*$cd5~M`;qXk7TclVka zh>B`^heF_fl_hKP;r_7>#-5uuS_^g<5>P7=aVx&_eXsLU&-1E}>25i;{~&k6NonJR zSSTOu(_mM~Gil5^m?n`U4{9e*Ab_VlPD8H?f3c>cUXA{zmA?iBJ5-BNg#)NCP{SSq6y zgPl6+Y&3JI_G_scPUxX?i=?^i55>w2`u-c0v(IBJ zDNjtSvr8-a3`neoQWj!+1K5bvuPC29jSL3Pa3bPS_0RNB9Id7`$rZHf_69?{jb_!h zl?(1Ocl+=05QKM{Xy^HIM45C!~Xct>1lUC zf!vC}A{`j(v=Kkk^3#dQh9!G_a?X#^-uFCpjEzSs48I2)Z|547$R_Ahi4*yvRZ*NP zz9mm+)Rw)mBzWp3v=}yrPUH}#|xXhZE!u|05AVaSYBA_jW z+sB7k0+#DGH$KZ;eU@KK=3A}_<4U08=FN@M3uE^|1t>QolGfrZ*}DpuZ(yPFkp-NZ zNUnkg@in-pl}p0J|t_ch*3>`dOr)lBTPqG}W-O1Us#PN&a5ff$|2iI!3~QHmL| zs4h-nU{q~&u}$zv^kQ?%@25{TqnIsmiyTb_B^$fh283)uFu6w5EmI!*%T_L(JAB3f zmJxD0gGG!Q9B4pTq-C7CIY1XxV1+t0ST{Zi`2MHB_yL2M^y|YzTE| z&>qIXpYrZT8%OYI_uA)~BGCv+5zs-`&iLd!cGj+oH7yn{0q?(Q70-b*S09LB6nu@_FT!UtD7biW}n8$;cd7j9%YEMl2t- zEvC*I67;&MZxQ*UWw4