aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/examples/sokol/02_cubes_glsl/cube_glsl.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/examples/sokol/02_cubes_glsl/cube_glsl.glsl')
-rw-r--r--v_windows/v/examples/sokol/02_cubes_glsl/cube_glsl.glsl95
1 files changed, 95 insertions, 0 deletions
diff --git a/v_windows/v/examples/sokol/02_cubes_glsl/cube_glsl.glsl b/v_windows/v/examples/sokol/02_cubes_glsl/cube_glsl.glsl
new file mode 100644
index 0000000..e19e936
--- /dev/null
+++ b/v_windows/v/examples/sokol/02_cubes_glsl/cube_glsl.glsl
@@ -0,0 +1,95 @@
+//------------------------------------------------------------------------------
+// Shader code for texcube-sapp sample.
+//
+// NOTE: This source file also uses the '#pragma sokol' form of the
+// custom tags.
+//------------------------------------------------------------------------------
+//#pragma sokol @ctype mat4 my_mat4
+
+#pragma sokol @vs vs
+uniform vs_params {
+ mat4 mvp;
+};
+
+in vec4 pos;
+in vec4 color0;
+in vec2 texcoord0;
+
+out vec4 color;
+out vec2 uv;
+
+void main() {
+ gl_Position = mvp * pos;
+ color = color0;
+ uv = texcoord0;
+}
+#pragma sokol @end
+
+#pragma sokol @fs fs
+uniform sampler2D tex;
+uniform fs_params {
+ vec2 text_res;
+ float iTime;
+};
+
+in vec4 color;
+in vec2 uv;
+out vec4 frag_color;
+
+//*********************************************************
+// RAY TRACE
+// original code from: https://www.shadertoy.com/view/ldS3DW
+//*********************************************************
+float sphere(vec3 ray, vec3 dir, vec3 center, float radius)
+{
+ vec3 rc = ray-center;
+ float c = dot(rc, rc) - (radius*radius);
+ float b = dot(dir, rc);
+ float d = b*b - c;
+ float t = -b - sqrt(abs(d));
+ float st = step(0.0, min(t,d));
+ return mix(-1.0, t, st);
+}
+
+vec3 background(float t, vec3 rd)
+{
+ vec3 light = normalize(vec3(sin(t), 0.6, cos(t)));
+ float sun = max(0.0, dot(rd, light));
+ float sky = max(0.0, dot(rd, vec3(0.0, 1.0, 0.0)));
+ float ground = max(0.0, -dot(rd, vec3(0.0, 1.0, 0.0)));
+ return (pow(sun, 256.0)+0.2*pow(sun, 2.0))*vec3(2.0, 1.6, 1.0) +
+ pow(ground, 0.5)*vec3(0.4, 0.3, 0.2) +
+ pow(sky, 1.0)*vec3(0.5, 0.6, 0.7);
+}
+
+vec4 mainImage(vec2 fragCoord)
+{
+ vec2 uv = (fragCoord-vec2(0.4,0.4))*2.0;
+
+ //vec2 uv = (-1.0 + 2.0*fc.xy / text_res.xy) * vec2(text_res.x/text_res.y, 1.0);
+ vec3 ro = vec3(0.0, 0.0, -3.0);
+ vec3 rd = normalize(vec3(uv, 1.0));
+ vec3 p = vec3(0.0, 0.0, 0.0);
+ float t = sphere(ro, rd, p, 1.0);
+ vec3 nml = normalize(p - (ro+rd*t));
+ vec3 bgCol = background(iTime, rd);
+ rd = reflect(rd, nml);
+ vec3 col = background(iTime, rd) * vec3(0.9, 0.8, 1.0);
+ vec4 fragColor = vec4( mix(bgCol, col, step(0.0, t)), 1.0 );
+ return fragColor;
+}
+//*********************************************************
+//*********************************************************
+
+void main() {
+ vec4 c = color;
+ vec4 txt = texture(tex, uv/4.0);
+ c = txt * c;
+ vec4 col_ray = mainImage(uv);
+ float txt_mix = mod(iTime,5);
+ frag_color = c*txt_mix*0.1 + col_ray ;
+}
+
+#pragma sokol @end
+
+#pragma sokol @program cube vs fs