aboutsummaryrefslogtreecommitdiff
path: root/raylib/examples/shaders/resources
diff options
context:
space:
mode:
Diffstat (limited to 'raylib/examples/shaders/resources')
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs32
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl100/lighting.fs6
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl100/swirl.fs2
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl100/tiling.fs21
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl120/lighting.fs6
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl330/deferred_shading.fs55
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl330/deferred_shading.vs11
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl330/gbuffer.fs22
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl330/gbuffer.vs24
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs34
-rw-r--r--raylib/examples/shaders/resources/shaders/glsl330/lighting.fs6
11 files changed, 169 insertions, 50 deletions
diff --git a/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs b/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs
index 44d0834..82d0a75 100644
--- a/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs
+++ b/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs
@@ -6,30 +6,30 @@ precision mediump float;
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.
// NOTE: Maximum number of shader for-loop iterations depend on GPU,
// for example, on RasperryPi for this examply only supports up to 60
-const int MAX_ITERATIONS = 48; // Max iterations to do
+const int maxIterations = 48; // Max iterations to do.
+const float colorCycles = 1.0f; // Number of times the color palette repeats.
// Square a complex number
vec2 ComplexSquare(vec2 z)
{
return vec2(
- z.x * z.x - z.y * z.y,
- z.x * z.y * 2.0
+ z.x*z.x - z.y*z.y,
+ z.x*z.y*2.0f
);
}
// 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);
+ vec4 K = vec4(1.0f, 2.0f/3.0f, 1.0f/3.0f, 3.0f);
+ vec3 p = abs(fract(c.xxx + K.xyz)*6.0f - K.www);
+ return c.z*mix(K.xxx, clamp(p - K.xxx, 0.0f, 1.0f), c.y);
}
void main()
@@ -45,8 +45,8 @@ void main()
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
+ That is what maxIterations is for.
+ Then we can divide the iterations by the maxIterations 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.
@@ -55,13 +55,15 @@ void main()
// 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);
+ vec2 z = vec2((fragTexCoord.x - 0.5f)*2.5f, (fragTexCoord.y - 0.5f)*1.5f)/zoom;
+ z.x += offset.x;
+ z.y += offset.y;
int iter = 0;
for (int iterations = 0; iterations < 60; iterations++)
{
z = ComplexSquare(z) + c; // Iterate function
- if (dot(z, z) > 4.0) break;
+ if (dot(z, z) > 4.0f) break;
iter = iterations;
}
@@ -72,12 +74,12 @@ void main()
z = ComplexSquare(z) + c;
// This last part smooths the color (again see link above).
- float smoothVal = float(iter) + 1.0 - (log(log(length(z)))/log(2.0));
+ float smoothVal = float(iter) + 1.0f - (log(log(length(z)))/log(2.0f));
// Normalize the value so it is between 0 and 1.
- float norm = smoothVal/float(MAX_ITERATIONS);
+ float norm = smoothVal/float(maxIterations);
// 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);
+ if (norm > 0.999f) gl_FragColor = vec4(0.0f, 0.0f, 0.0f, 1.0f);
+ else gl_FragColor = vec4(Hsv2rgb(vec3(norm*colorCycles, 1.0f, 1.0f)), 1.0f);
}
diff --git a/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs b/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs
index 7367161..73531a8 100644
--- a/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs
+++ b/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs
@@ -18,12 +18,6 @@ uniform vec4 colDiffuse;
#define LIGHT_DIRECTIONAL 0
#define LIGHT_POINT 1
-struct MaterialProperty {
- vec3 color;
- int useSampler;
- sampler2D sampler;
-};
-
struct Light {
int enabled;
int type;
diff --git a/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs b/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs
index ec6c664..7ff401a 100644
--- a/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs
+++ b/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs
@@ -42,5 +42,5 @@ void main()
tc += center;
vec4 color = texture2D(texture0, tc/texSize)*colDiffuse*fragColor;;
- gl_FragColor = vec4(color.rgb, 1.0);;
+ gl_FragColor = vec4(color.rgb, 1.0);
}
diff --git a/raylib/examples/shaders/resources/shaders/glsl100/tiling.fs b/raylib/examples/shaders/resources/shaders/glsl100/tiling.fs
new file mode 100644
index 0000000..392786a
--- /dev/null
+++ b/raylib/examples/shaders/resources/shaders/glsl100/tiling.fs
@@ -0,0 +1,21 @@
+#version 100
+
+precision mediump float;
+
+// Input vertex attributes (from vertex shader)
+varying vec2 fragTexCoord;
+varying vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D diffuseMap;
+uniform vec4 tiling;
+
+// NOTE: Add here your custom variables
+
+void main()
+{
+ vec2 texCoord = fragTexCoord*tiling;
+ fragColor = texture2D(diffuseMap, texCoord);
+
+ gl_FragColor = fragColor;
+}
diff --git a/raylib/examples/shaders/resources/shaders/glsl120/lighting.fs b/raylib/examples/shaders/resources/shaders/glsl120/lighting.fs
index d9cfb44..8dda5a5 100644
--- a/raylib/examples/shaders/resources/shaders/glsl120/lighting.fs
+++ b/raylib/examples/shaders/resources/shaders/glsl120/lighting.fs
@@ -16,12 +16,6 @@ uniform vec4 colDiffuse;
#define LIGHT_DIRECTIONAL 0
#define LIGHT_POINT 1
-struct MaterialProperty {
- vec3 color;
- int useSampler;
- sampler2D sampler;
-};
-
struct Light {
int enabled;
int type;
diff --git a/raylib/examples/shaders/resources/shaders/glsl330/deferred_shading.fs b/raylib/examples/shaders/resources/shaders/glsl330/deferred_shading.fs
new file mode 100644
index 0000000..c9c6a31
--- /dev/null
+++ b/raylib/examples/shaders/resources/shaders/glsl330/deferred_shading.fs
@@ -0,0 +1,55 @@
+#version 330 core
+out vec4 finalColor;
+
+in vec2 texCoord;
+in vec2 texCoord2;
+
+uniform sampler2D gPosition;
+uniform sampler2D gNormal;
+uniform sampler2D gAlbedoSpec;
+
+struct Light {
+ int enabled;
+ int type; // Unused in this demo.
+ vec3 position;
+ vec3 target; // Unused in this demo.
+ vec4 color;
+};
+
+const int NR_LIGHTS = 4;
+uniform Light lights[NR_LIGHTS];
+uniform vec3 viewPosition;
+
+const float QUADRATIC = 0.032;
+const float LINEAR = 0.09;
+
+void main() {
+ vec3 fragPosition = texture(gPosition, texCoord).rgb;
+ vec3 normal = texture(gNormal, texCoord).rgb;
+ vec3 albedo = texture(gAlbedoSpec, texCoord).rgb;
+ float specular = texture(gAlbedoSpec, texCoord).a;
+
+ vec3 ambient = albedo * vec3(0.1f);
+ vec3 viewDirection = normalize(viewPosition - fragPosition);
+
+ for(int i = 0; i < NR_LIGHTS; ++i)
+ {
+ if(lights[i].enabled == 0) continue;
+ vec3 lightDirection = lights[i].position - fragPosition;
+ vec3 diffuse = max(dot(normal, lightDirection), 0.0) * albedo * lights[i].color.xyz;
+
+ vec3 halfwayDirection = normalize(lightDirection + viewDirection);
+ float spec = pow(max(dot(normal, halfwayDirection), 0.0), 32.0);
+ vec3 specular = specular * spec * lights[i].color.xyz;
+
+ // Attenuation
+ float distance = length(lights[i].position - fragPosition);
+ float attenuation = 1.0 / (1.0 + LINEAR * distance + QUADRATIC * distance * distance);
+ diffuse *= attenuation;
+ specular *= attenuation;
+ ambient += diffuse + specular;
+ }
+
+ finalColor = vec4(ambient, 1.0);
+}
+
diff --git a/raylib/examples/shaders/resources/shaders/glsl330/deferred_shading.vs b/raylib/examples/shaders/resources/shaders/glsl330/deferred_shading.vs
new file mode 100644
index 0000000..f2b1bd7
--- /dev/null
+++ b/raylib/examples/shaders/resources/shaders/glsl330/deferred_shading.vs
@@ -0,0 +1,11 @@
+#version 330 core
+
+layout (location = 0) in vec3 vertexPosition;
+layout (location = 1) in vec2 vertexTexCoord;
+
+out vec2 texCoord;
+
+void main() {
+ gl_Position = vec4(vertexPosition, 1.0);
+ texCoord = vertexTexCoord;
+}
diff --git a/raylib/examples/shaders/resources/shaders/glsl330/gbuffer.fs b/raylib/examples/shaders/resources/shaders/glsl330/gbuffer.fs
new file mode 100644
index 0000000..c86e20a
--- /dev/null
+++ b/raylib/examples/shaders/resources/shaders/glsl330/gbuffer.fs
@@ -0,0 +1,22 @@
+#version 330 core
+layout (location = 0) out vec3 gPosition;
+layout (location = 1) out vec3 gNormal;
+layout (location = 2) out vec4 gAlbedoSpec;
+
+in vec3 fragPosition;
+in vec2 fragTexCoord;
+in vec3 fragNormal;
+
+uniform sampler2D diffuseTexture;
+uniform sampler2D specularTexture;
+
+void main() {
+ // store the fragment position vector in the first gbuffer texture
+ gPosition = fragPosition;
+ // also store the per-fragment normals into the gbuffer
+ gNormal = normalize(fragNormal);
+ // and the diffuse per-fragment color
+ gAlbedoSpec.rgb = texture(diffuseTexture, fragTexCoord).rgb;
+ // store specular intensity in gAlbedoSpec's alpha component
+ gAlbedoSpec.a = texture(specularTexture, fragTexCoord).r;
+}
diff --git a/raylib/examples/shaders/resources/shaders/glsl330/gbuffer.vs b/raylib/examples/shaders/resources/shaders/glsl330/gbuffer.vs
new file mode 100644
index 0000000..7d264ba
--- /dev/null
+++ b/raylib/examples/shaders/resources/shaders/glsl330/gbuffer.vs
@@ -0,0 +1,24 @@
+#version 330 core
+layout (location = 0) in vec3 vertexPosition;
+layout (location = 1) in vec2 vertexTexCoord;
+layout (location = 2) in vec3 vertexNormal;
+
+out vec3 fragPosition;
+out vec2 fragTexCoord;
+out vec3 fragNormal;
+
+uniform mat4 matModel;
+uniform mat4 matView;
+uniform mat4 matProjection;
+
+void main()
+{
+ vec4 worldPos = matModel * vec4(vertexPosition, 1.0);
+ fragPosition = worldPos.xyz;
+ fragTexCoord = vertexTexCoord;
+
+ mat3 normalMatrix = transpose(inverse(mat3(matModel)));
+ fragNormal = normalMatrix * vertexNormal;
+
+ gl_Position = matProjection * matView * worldPos;
+}
diff --git a/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs b/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs
index c5ee0da..7a6f069 100644
--- a/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs
+++ b/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs
@@ -7,28 +7,28 @@ 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.
+const int maxIterations = 255; // Max iterations to do.
+const float colorCycles = 2.0f; // Number of times the color palette repeats. Can show higher detail for higher iteration numbers.
// Square a complex number
vec2 ComplexSquare(vec2 z)
{
return vec2(
- z.x * z.x - z.y * z.y,
- z.x * z.y * 2.0
+ z.x*z.x - z.y*z.y,
+ z.x*z.y*2.0f
);
}
// 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);
+ vec4 K = vec4(1.0f, 2.0f/3.0f, 1.0f/3.0f, 3.0f);
+ vec3 p = abs(fract(c.xxx + K.xyz)*6.0f - K.www);
+ return c.z*mix(K.xxx, clamp(p - K.xxx, 0.0f, 1.0f), c.y);
}
void main()
@@ -44,8 +44,8 @@ void main()
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
+ That is what maxIterations is for.
+ Then we can divide the iterations by the maxIterations 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.
@@ -54,14 +54,16 @@ void main()
// 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);
+ vec2 z = vec2((fragTexCoord.x - 0.5f)*2.5f, (fragTexCoord.y - 0.5f)*1.5f)/zoom;
+ z.x += offset.x;
+ z.y += offset.y;
int iterations = 0;
- for (iterations = 0; iterations < MAX_ITERATIONS; iterations++)
+ for (iterations = 0; iterations < maxIterations; iterations++)
{
z = ComplexSquare(z) + c; // Iterate function
- if (dot(z, z) > 4.0) break;
+ if (dot(z, z) > 4.0f) break;
}
// Another few iterations decreases errors in the smoothing calculation.
@@ -70,12 +72,12 @@ void main()
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));
+ float smoothVal = float(iterations) + 1.0f - (log(log(length(z)))/log(2.0f));
// Normalize the value so it is between 0 and 1.
- float norm = smoothVal/float(MAX_ITERATIONS);
+ float norm = smoothVal/float(maxIterations);
// 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);
+ if (norm > 0.999f) finalColor = vec4(0.0f, 0.0f, 0.0f, 1.0f);
+ else finalColor = vec4(Hsv2rgb(vec3(norm*colorCycles, 1.0f, 1.0f)), 1.0f);
}
diff --git a/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs b/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs
index 58845c8..d1f3140 100644
--- a/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs
+++ b/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs
@@ -19,12 +19,6 @@ out vec4 finalColor;
#define LIGHT_DIRECTIONAL 0
#define LIGHT_POINT 1
-struct MaterialProperty {
- vec3 color;
- int useSampler;
- sampler2D sampler;
-};
-
struct Light {
int enabled;
int type;