From aba25e9ba379cdf2e68b65f55dd08ab4e0d713d8 Mon Sep 17 00:00:00 2001 From: Ray Date: Mon, 15 May 2017 22:48:04 +0200 Subject: [PATCH] Move shaders to examples --- .../shaders/resources/shaders/glsl100/base.fs | 1 + .../resources/shaders}/glsl100/blur.fs | 0 .../shaders}/glsl100/cross_hatching.fs | 0 .../shaders}/glsl100/cross_stitching.fs | 0 .../shaders}/glsl100/dream_vision.fs | 0 .../resources/shaders}/glsl100/fisheye.fs | 0 .../resources/shaders}/glsl100/pixel.fs | 0 .../shaders}/glsl100/posterization.fs | 0 .../resources/shaders}/glsl100/predator.fs | 0 .../resources/shaders}/glsl100/scanlines.fs | 0 .../resources/shaders/glsl100/sobel.fs | 41 +++++ .../resources/shaders/glsl100/swirl.fs | 5 +- .../shaders/resources/shaders/glsl330/base.fs | 1 + .../resources/shaders}/glsl330/blur.fs | 0 .../shaders}/glsl330/cross_hatching.fs | 0 .../shaders}/glsl330/cross_stitching.fs | 0 .../resources/shaders/glsl330/depth.fs | 2 +- .../shaders}/glsl330/dream_vision.fs | 0 .../resources/shaders}/glsl330/fisheye.fs | 0 .../resources/shaders/glsl330/overdraw.fs | 26 +++ .../resources/shaders/glsl330/pixelizer.fs | 0 .../shaders}/glsl330/posterization.fs | 0 .../resources/shaders}/glsl330/predator.fs | 0 .../resources/shaders}/glsl330/scanlines.fs | 0 .../resources/shaders/glsl330/sobel.fs | 41 +++++ .../resources/shaders/glsl330/swirl.fs | 5 +- shaders/glsl100/base.vs | 26 --- shaders/glsl100/bloom.fs | 39 ----- shaders/glsl100/grayscale.fs | 25 --- shaders/glsl100/standard.fs | 150 ------------------ shaders/glsl100/standard.vs | 23 --- shaders/glsl100/swirl.fs | 46 ------ shaders/glsl330/base.vs | 26 --- shaders/glsl330/bloom.fs | 40 ----- shaders/glsl330/depth.fs | 27 ---- shaders/glsl330/grayscale.fs | 26 --- shaders/glsl330/standard.fs | 150 ------------------ shaders/glsl330/standard.vs | 23 --- shaders/glsl330/swirl.fs | 47 ------ 39 files changed, 117 insertions(+), 653 deletions(-) rename shaders/glsl100/template.fs => examples/shaders/resources/shaders/glsl100/base.fs (91%) rename {shaders => examples/shaders/resources/shaders}/glsl100/blur.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl100/cross_hatching.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl100/cross_stitching.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl100/dream_vision.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl100/fisheye.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl100/pixel.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl100/posterization.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl100/predator.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl100/scanlines.fs (100%) create mode 100644 examples/shaders/resources/shaders/glsl100/sobel.fs rename shaders/glsl330/template.fs => examples/shaders/resources/shaders/glsl330/base.fs (99%) rename {shaders => examples/shaders/resources/shaders}/glsl330/blur.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl330/cross_hatching.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl330/cross_stitching.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl330/dream_vision.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl330/fisheye.fs (100%) create mode 100644 examples/shaders/resources/shaders/glsl330/overdraw.fs rename shaders/glsl330/pixel.fs => examples/shaders/resources/shaders/glsl330/pixelizer.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl330/posterization.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl330/predator.fs (100%) rename {shaders => examples/shaders/resources/shaders}/glsl330/scanlines.fs (100%) create mode 100644 examples/shaders/resources/shaders/glsl330/sobel.fs delete mode 100644 shaders/glsl100/base.vs delete mode 100644 shaders/glsl100/bloom.fs delete mode 100644 shaders/glsl100/grayscale.fs delete mode 100644 shaders/glsl100/standard.fs delete mode 100644 shaders/glsl100/standard.vs delete mode 100644 shaders/glsl100/swirl.fs delete mode 100644 shaders/glsl330/base.vs delete mode 100644 shaders/glsl330/bloom.fs delete mode 100644 shaders/glsl330/depth.fs delete mode 100644 shaders/glsl330/grayscale.fs delete mode 100644 shaders/glsl330/standard.fs delete mode 100644 shaders/glsl330/standard.vs delete mode 100644 shaders/glsl330/swirl.fs diff --git a/shaders/glsl100/template.fs b/examples/shaders/resources/shaders/glsl100/base.fs similarity index 91% rename from shaders/glsl100/template.fs rename to examples/shaders/resources/shaders/glsl100/base.fs index c1126423..b004ba0b 100644 --- a/shaders/glsl100/template.fs +++ b/examples/shaders/resources/shaders/glsl100/base.fs @@ -11,6 +11,7 @@ uniform sampler2D texture0; uniform vec4 colDiffuse; // NOTE: Add here your custom variables +uniform vec2 resolution = vec2(800, 450); void main() { diff --git a/shaders/glsl100/blur.fs b/examples/shaders/resources/shaders/glsl100/blur.fs similarity index 100% rename from shaders/glsl100/blur.fs rename to examples/shaders/resources/shaders/glsl100/blur.fs diff --git a/shaders/glsl100/cross_hatching.fs b/examples/shaders/resources/shaders/glsl100/cross_hatching.fs similarity index 100% rename from shaders/glsl100/cross_hatching.fs rename to examples/shaders/resources/shaders/glsl100/cross_hatching.fs diff --git a/shaders/glsl100/cross_stitching.fs b/examples/shaders/resources/shaders/glsl100/cross_stitching.fs similarity index 100% rename from shaders/glsl100/cross_stitching.fs rename to examples/shaders/resources/shaders/glsl100/cross_stitching.fs diff --git a/shaders/glsl100/dream_vision.fs b/examples/shaders/resources/shaders/glsl100/dream_vision.fs similarity index 100% rename from shaders/glsl100/dream_vision.fs rename to examples/shaders/resources/shaders/glsl100/dream_vision.fs diff --git a/shaders/glsl100/fisheye.fs b/examples/shaders/resources/shaders/glsl100/fisheye.fs similarity index 100% rename from shaders/glsl100/fisheye.fs rename to examples/shaders/resources/shaders/glsl100/fisheye.fs diff --git a/shaders/glsl100/pixel.fs b/examples/shaders/resources/shaders/glsl100/pixel.fs similarity index 100% rename from shaders/glsl100/pixel.fs rename to examples/shaders/resources/shaders/glsl100/pixel.fs diff --git a/shaders/glsl100/posterization.fs b/examples/shaders/resources/shaders/glsl100/posterization.fs similarity index 100% rename from shaders/glsl100/posterization.fs rename to examples/shaders/resources/shaders/glsl100/posterization.fs diff --git a/shaders/glsl100/predator.fs b/examples/shaders/resources/shaders/glsl100/predator.fs similarity index 100% rename from shaders/glsl100/predator.fs rename to examples/shaders/resources/shaders/glsl100/predator.fs diff --git a/shaders/glsl100/scanlines.fs b/examples/shaders/resources/shaders/glsl100/scanlines.fs similarity index 100% rename from shaders/glsl100/scanlines.fs rename to examples/shaders/resources/shaders/glsl100/scanlines.fs diff --git a/examples/shaders/resources/shaders/glsl100/sobel.fs b/examples/shaders/resources/shaders/glsl100/sobel.fs new file mode 100644 index 00000000..9617592e --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/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)); + + 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 index ca7668b2..b969aab7 100644 --- a/examples/shaders/resources/shaders/glsl100/swirl.fs +++ b/examples/shaders/resources/shaders/glsl100/swirl.fs @@ -12,8 +12,9 @@ uniform vec4 colDiffuse; // NOTE: Add here your custom variables -const float renderWidth = 800.0; // HARDCODED for example! -const float renderHeight = 480.0; // Use uniforms instead... +// 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; diff --git a/shaders/glsl330/template.fs b/examples/shaders/resources/shaders/glsl330/base.fs similarity index 99% rename from shaders/glsl330/template.fs rename to examples/shaders/resources/shaders/glsl330/base.fs index 2e73de14..f1418df1 100644 --- a/shaders/glsl330/template.fs +++ b/examples/shaders/resources/shaders/glsl330/base.fs @@ -22,3 +22,4 @@ void main() finalColor = texelColor*colDiffuse; } + diff --git a/shaders/glsl330/blur.fs b/examples/shaders/resources/shaders/glsl330/blur.fs similarity index 100% rename from shaders/glsl330/blur.fs rename to examples/shaders/resources/shaders/glsl330/blur.fs diff --git a/shaders/glsl330/cross_hatching.fs b/examples/shaders/resources/shaders/glsl330/cross_hatching.fs similarity index 100% rename from shaders/glsl330/cross_hatching.fs rename to examples/shaders/resources/shaders/glsl330/cross_hatching.fs diff --git a/shaders/glsl330/cross_stitching.fs b/examples/shaders/resources/shaders/glsl330/cross_stitching.fs similarity index 100% rename from shaders/glsl330/cross_stitching.fs rename to examples/shaders/resources/shaders/glsl330/cross_stitching.fs diff --git a/examples/shaders/resources/shaders/glsl330/depth.fs b/examples/shaders/resources/shaders/glsl330/depth.fs index 06d399f9..2422f390 100644 --- a/examples/shaders/resources/shaders/glsl330/depth.fs +++ b/examples/shaders/resources/shaders/glsl330/depth.fs @@ -6,7 +6,7 @@ in vec4 fragColor; // Input uniform values uniform sampler2D texture0; // Depth texture -uniform vec4 fragTintColor; +uniform vec4 colDiffuse; // Output fragment color out vec4 finalColor; diff --git a/shaders/glsl330/dream_vision.fs b/examples/shaders/resources/shaders/glsl330/dream_vision.fs similarity index 100% rename from shaders/glsl330/dream_vision.fs rename to examples/shaders/resources/shaders/glsl330/dream_vision.fs diff --git a/shaders/glsl330/fisheye.fs b/examples/shaders/resources/shaders/glsl330/fisheye.fs similarity index 100% rename from shaders/glsl330/fisheye.fs rename to examples/shaders/resources/shaders/glsl330/fisheye.fs diff --git a/examples/shaders/resources/shaders/glsl330/overdraw.fs b/examples/shaders/resources/shaders/glsl330/overdraw.fs new file mode 100644 index 00000000..435217c3 --- /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/shaders/glsl330/pixel.fs b/examples/shaders/resources/shaders/glsl330/pixelizer.fs similarity index 100% rename from shaders/glsl330/pixel.fs rename to examples/shaders/resources/shaders/glsl330/pixelizer.fs diff --git a/shaders/glsl330/posterization.fs b/examples/shaders/resources/shaders/glsl330/posterization.fs similarity index 100% rename from shaders/glsl330/posterization.fs rename to examples/shaders/resources/shaders/glsl330/posterization.fs diff --git a/shaders/glsl330/predator.fs b/examples/shaders/resources/shaders/glsl330/predator.fs similarity index 100% rename from shaders/glsl330/predator.fs rename to examples/shaders/resources/shaders/glsl330/predator.fs diff --git a/shaders/glsl330/scanlines.fs b/examples/shaders/resources/shaders/glsl330/scanlines.fs similarity index 100% rename from shaders/glsl330/scanlines.fs rename to examples/shaders/resources/shaders/glsl330/scanlines.fs diff --git a/examples/shaders/resources/shaders/glsl330/sobel.fs b/examples/shaders/resources/shaders/glsl330/sobel.fs new file mode 100644 index 00000000..a1430cdd --- /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 index 5d238ac9..4741e597 100644 --- a/examples/shaders/resources/shaders/glsl330/swirl.fs +++ b/examples/shaders/resources/shaders/glsl330/swirl.fs @@ -13,8 +13,9 @@ out vec4 finalColor; // NOTE: Add here your custom variables -const float renderWidth = 800.0; // HARDCODED for example! -const float renderHeight = 480.0; // Use uniforms instead... +// 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; diff --git a/shaders/glsl100/base.vs b/shaders/glsl100/base.vs deleted file mode 100644 index e9386939..00000000 --- a/shaders/glsl100/base.vs +++ /dev/null @@ -1,26 +0,0 @@ -#version 100 - -// Input vertex attributes -attribute vec3 vertexPosition; -attribute vec2 vertexTexCoord; -attribute vec3 vertexNormal; -attribute vec4 vertexColor; - -// Input uniform values -uniform mat4 mvpMatrix; - -// 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 = mvpMatrix*vec4(vertexPosition, 1.0); -} \ No newline at end of file diff --git a/shaders/glsl100/bloom.fs b/shaders/glsl100/bloom.fs deleted file mode 100644 index a8e1d20f..00000000 --- a/shaders/glsl100/bloom.fs +++ /dev/null @@ -1,39 +0,0 @@ -#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/shaders/glsl100/grayscale.fs b/shaders/glsl100/grayscale.fs deleted file mode 100644 index 15174ea5..00000000 --- a/shaders/glsl100/grayscale.fs +++ /dev/null @@ -1,25 +0,0 @@ -#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/shaders/glsl100/standard.fs b/shaders/glsl100/standard.fs deleted file mode 100644 index 3e78022d..00000000 --- a/shaders/glsl100/standard.fs +++ /dev/null @@ -1,150 +0,0 @@ -#version 100 - -precision mediump float; - -varying vec3 fragPosition; -varying vec2 fragTexCoord; -varying vec4 fragColor; -varying vec3 fragNormal; - -uniform sampler2D texture0; -uniform sampler2D texture1; -uniform sampler2D texture2; - -uniform vec4 colAmbient; -uniform vec4 colDiffuse; -uniform vec4 colSpecular; -uniform float glossiness; - -uniform int useNormal; -uniform int useSpecular; - -uniform mat4 modelMatrix; -uniform vec3 viewDir; - -struct Light { - int enabled; - int type; - vec3 position; - vec3 direction; - vec4 diffuse; - float intensity; - float radius; - float coneAngle; -}; - -const int maxLights = 8; -uniform Light lights[maxLights]; - -vec3 CalcPointLight(Light l, vec3 n, vec3 v, float s) -{ - vec3 surfacePos = vec3(modelMatrix*vec4(fragPosition, 1)); - vec3 surfaceToLight = l.position - surfacePos; - - // Diffuse shading - float brightness = clamp(dot(n, surfaceToLight)/(length(surfaceToLight)*length(n)), 0, 1); - float diff = 1.0/dot(surfaceToLight/l.radius, surfaceToLight/l.radius)*brightness*l.intensity; - - // Specular shading - float spec = 0.0; - if (diff > 0.0) - { - vec3 h = normalize(-l.direction + v); - spec = pow(dot(n, h), 3 + glossiness)*s; - } - - return (diff*l.diffuse.rgb + spec*colSpecular.rgb); -} - -vec3 CalcDirectionalLight(Light l, vec3 n, vec3 v, float s) -{ - vec3 lightDir = normalize(-l.direction); - - // Diffuse shading - float diff = clamp(dot(n, lightDir), 0.0, 1.0)*l.intensity; - - // Specular shading - float spec = 0.0; - if (diff > 0.0) - { - vec3 h = normalize(lightDir + v); - spec = pow(dot(n, h), 3 + glossiness)*s; - } - - // Combine results - return (diff*l.intensity*l.diffuse.rgb + spec*colSpecular.rgb); -} - -vec3 CalcSpotLight(Light l, vec3 n, vec3 v, float s) -{ - vec3 surfacePos = vec3(modelMatrix*vec4(fragPosition, 1)); - vec3 lightToSurface = normalize(surfacePos - l.position); - vec3 lightDir = normalize(-l.direction); - - // Diffuse shading - float diff = clamp(dot(n, lightDir), 0.0, 1.0)*l.intensity; - - // Spot attenuation - float attenuation = clamp(dot(n, lightToSurface), 0.0, 1.0); - attenuation = dot(lightToSurface, -lightDir); - - float lightToSurfaceAngle = degrees(acos(attenuation)); - if (lightToSurfaceAngle > l.coneAngle) attenuation = 0.0; - - float falloff = (l.coneAngle - lightToSurfaceAngle)/l.coneAngle; - - // Combine diffuse and attenuation - float diffAttenuation = diff*attenuation; - - // Specular shading - float spec = 0.0; - if (diffAttenuation > 0.0) - { - vec3 h = normalize(lightDir + v); - spec = pow(dot(n, h), 3 + glossiness)*s; - } - - return (falloff*(diffAttenuation*l.diffuse.rgb + spec*colSpecular.rgb)); -} - -void main() -{ - // Calculate fragment normal in screen space - // NOTE: important to multiply model matrix by fragment normal to apply model transformation (rotation and scale) - mat3 normalMatrix = transpose(inverse(mat3(modelMatrix))); - vec3 normal = normalize(normalMatrix*fragNormal); - - // Normalize normal and view direction vectors - vec3 n = normalize(normal); - vec3 v = normalize(viewDir); - - // Calculate diffuse texture color fetching - vec4 texelColor = texture2D(texture0, fragTexCoord); - vec3 lighting = colAmbient.rgb; - - // Calculate normal texture color fetching or set to maximum normal value by default - if (useNormal == 1) - { - n *= texture2D(texture1, fragTexCoord).rgb; - n = normalize(n); - } - - // Calculate specular texture color fetching or set to maximum specular value by default - float spec = 1.0; - if (useSpecular == 1) spec *= normalize(texture2D(texture2, fragTexCoord).r); - - for (int i = 0; i < maxLights; i++) - { - // Check if light is enabled - if (lights[i].enabled == 1) - { - // Calculate lighting based on light type - if(lights[i].type == 0) lighting += CalcPointLight(lights[i], n, v, spec); - else if(lights[i].type == 1) lighting += CalcDirectionalLight(lights[i], n, v, spec); - else if(lights[i].type == 2) lighting += CalcSpotLight(lights[i], n, v, spec); - } - } - - // Calculate final fragment color - gl_FragColor = vec4(texelColor.rgb*lighting*colDiffuse.rgb, texelColor.a*colDiffuse.a); -} diff --git a/shaders/glsl100/standard.vs b/shaders/glsl100/standard.vs deleted file mode 100644 index 49c5a3eb..00000000 --- a/shaders/glsl100/standard.vs +++ /dev/null @@ -1,23 +0,0 @@ -#version 100 - -attribute vec3 vertexPosition; -attribute vec3 vertexNormal; -attribute vec2 vertexTexCoord; -attribute vec4 vertexColor; - -varying vec3 fragPosition; -varying vec2 fragTexCoord; -varying vec4 fragColor; -varying vec3 fragNormal; - -uniform mat4 mvpMatrix; - -void main() -{ - fragPosition = vertexPosition; - fragTexCoord = vertexTexCoord; - fragColor = vertexColor; - fragNormal = vertexNormal; - - gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); -} \ No newline at end of file diff --git a/shaders/glsl100/swirl.fs b/shaders/glsl100/swirl.fs deleted file mode 100644 index 6b17874c..00000000 --- a/shaders/glsl100/swirl.fs +++ /dev/null @@ -1,46 +0,0 @@ -#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; -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; - vec3 color = texture2D(texture0, tc/texSize).rgb; - - gl_FragColor = vec4(color, 1.0);; -} \ No newline at end of file diff --git a/shaders/glsl330/base.vs b/shaders/glsl330/base.vs deleted file mode 100644 index 638cb8ae..00000000 --- a/shaders/glsl330/base.vs +++ /dev/null @@ -1,26 +0,0 @@ -#version 330 - -// Input vertex attributes -in vec3 vertexPosition; -in vec2 vertexTexCoord; -in vec3 vertexNormal; -in vec4 vertexColor; - -// Input uniform values -uniform mat4 mvpMatrix; - -// 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 = mvpMatrix*vec4(vertexPosition, 1.0); -} \ No newline at end of file diff --git a/shaders/glsl330/bloom.fs b/shaders/glsl330/bloom.fs deleted file mode 100644 index 333d5b05..00000000 --- a/shaders/glsl330/bloom.fs +++ /dev/null @@ -1,40 +0,0 @@ -#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/shaders/glsl330/depth.fs b/shaders/glsl330/depth.fs deleted file mode 100644 index 2422f390..00000000 --- a/shaders/glsl330/depth.fs +++ /dev/null @@ -1,27 +0,0 @@ -#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/shaders/glsl330/grayscale.fs b/shaders/glsl330/grayscale.fs deleted file mode 100644 index 5b3e11be..00000000 --- a/shaders/glsl330/grayscale.fs +++ /dev/null @@ -1,26 +0,0 @@ -#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/shaders/glsl330/standard.fs b/shaders/glsl330/standard.fs deleted file mode 100644 index f728be81..00000000 --- a/shaders/glsl330/standard.fs +++ /dev/null @@ -1,150 +0,0 @@ -#version 330 - -in vec3 fragPosition; -in vec2 fragTexCoord; -in vec4 fragColor; -in vec3 fragNormal; - -out vec4 finalColor; - -uniform sampler2D texture0; -uniform sampler2D texture1; -uniform sampler2D texture2; - -uniform vec4 colAmbient; -uniform vec4 colDiffuse; -uniform vec4 colSpecular; -uniform float glossiness; - -uniform int useNormal; -uniform int useSpecular; - -uniform mat4 modelMatrix; -uniform vec3 viewDir; - -struct Light { - int enabled; - int type; - vec3 position; - vec3 direction; - vec4 diffuse; - float intensity; - float radius; - float coneAngle; -}; - -const int maxLights = 8; -uniform Light lights[maxLights]; - -vec3 CalcPointLight(Light l, vec3 n, vec3 v, float s) -{ - vec3 surfacePos = vec3(modelMatrix*vec4(fragPosition, 1)); - vec3 surfaceToLight = l.position - surfacePos; - - // Diffuse shading - float brightness = clamp(dot(n, surfaceToLight)/(length(surfaceToLight)*length(n)), 0, 1); - float diff = 1.0/dot(surfaceToLight/l.radius, surfaceToLight/l.radius)*brightness*l.intensity; - - // Specular shading - float spec = 0.0; - if (diff > 0.0) - { - vec3 h = normalize(-l.direction + v); - spec = pow(dot(n, h), 3 + glossiness)*s; - } - - return (diff*l.diffuse.rgb + spec*colSpecular.rgb); -} - -vec3 CalcDirectionalLight(Light l, vec3 n, vec3 v, float s) -{ - vec3 lightDir = normalize(-l.direction); - - // Diffuse shading - float diff = clamp(dot(n, lightDir), 0.0, 1.0)*l.intensity; - - // Specular shading - float spec = 0.0; - if (diff > 0.0) - { - vec3 h = normalize(lightDir + v); - spec = pow(dot(n, h), 3 + glossiness)*s; - } - - // Combine results - return (diff*l.intensity*l.diffuse.rgb + spec*colSpecular.rgb); -} - -vec3 CalcSpotLight(Light l, vec3 n, vec3 v, float s) -{ - vec3 surfacePos = vec3(modelMatrix*vec4(fragPosition, 1)); - vec3 lightToSurface = normalize(surfacePos - l.position); - vec3 lightDir = normalize(-l.direction); - - // Diffuse shading - float diff = clamp(dot(n, lightDir), 0.0, 1.0)*l.intensity; - - // Spot attenuation - float attenuation = clamp(dot(n, lightToSurface), 0.0, 1.0); - attenuation = dot(lightToSurface, -lightDir); - - float lightToSurfaceAngle = degrees(acos(attenuation)); - if (lightToSurfaceAngle > l.coneAngle) attenuation = 0.0; - - float falloff = (l.coneAngle - lightToSurfaceAngle)/l.coneAngle; - - // Combine diffuse and attenuation - float diffAttenuation = diff*attenuation; - - // Specular shading - float spec = 0.0; - if (diffAttenuation > 0.0) - { - vec3 h = normalize(lightDir + v); - spec = pow(dot(n, h), 3 + glossiness)*s; - } - - return (falloff*(diffAttenuation*l.diffuse.rgb + spec*colSpecular.rgb)); -} - -void main() -{ - // Calculate fragment normal in screen space - // NOTE: important to multiply model matrix by fragment normal to apply model transformation (rotation and scale) - mat3 normalMatrix = transpose(inverse(mat3(modelMatrix))); - vec3 normal = normalize(normalMatrix*fragNormal); - - // Normalize normal and view direction vectors - vec3 n = normalize(normal); - vec3 v = normalize(viewDir); - - // Calculate diffuse texture color fetching - vec4 texelColor = texture(texture0, fragTexCoord); - vec3 lighting = colAmbient.rgb; - - // Calculate normal texture color fetching or set to maximum normal value by default - if (useNormal == 1) - { - n *= texture(texture1, fragTexCoord).rgb; - n = normalize(n); - } - - // Calculate specular texture color fetching or set to maximum specular value by default - float spec = 1.0; - if (useSpecular == 1) spec *= normalize(texture(texture2, fragTexCoord).r); - - for (int i = 0; i < maxLights; i++) - { - // Check if light is enabled - if (lights[i].enabled == 1) - { - // Calculate lighting based on light type - if(lights[i].type == 0) lighting += CalcPointLight(lights[i], n, v, spec); - else if(lights[i].type == 1) lighting += CalcDirectionalLight(lights[i], n, v, spec); - else if(lights[i].type == 2) lighting += CalcSpotLight(lights[i], n, v, spec); - } - } - - // Calculate final fragment color - finalColor = vec4(texelColor.rgb*lighting*colDiffuse.rgb, texelColor.a*colDiffuse.a); -} diff --git a/shaders/glsl330/standard.vs b/shaders/glsl330/standard.vs deleted file mode 100644 index fc0a5ff4..00000000 --- a/shaders/glsl330/standard.vs +++ /dev/null @@ -1,23 +0,0 @@ -#version 330 - -in vec3 vertexPosition; -in vec3 vertexNormal; -in vec2 vertexTexCoord; -in vec4 vertexColor; - -out vec3 fragPosition; -out vec2 fragTexCoord; -out vec4 fragColor; -out vec3 fragNormal; - -uniform mat4 mvpMatrix; - -void main() -{ - fragPosition = vertexPosition; - fragTexCoord = vertexTexCoord; - fragColor = vertexColor; - fragNormal = vertexNormal; - - gl_Position = mvpMatrix*vec4(vertexPosition, 1.0); -} \ No newline at end of file diff --git a/shaders/glsl330/swirl.fs b/shaders/glsl330/swirl.fs deleted file mode 100644 index c4b66768..00000000 --- a/shaders/glsl330/swirl.fs +++ /dev/null @@ -1,47 +0,0 @@ -#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 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; - vec3 color = texture(texture0, tc/texSize).rgb; - - finalColor = vec4(color, 1.0);; -} \ No newline at end of file