diff options
Diffstat (limited to 'v_windows/v/old/examples/sokol/02_cubes_glsl/cube_glsl.glsl')
-rw-r--r-- | v_windows/v/old/examples/sokol/02_cubes_glsl/cube_glsl.glsl | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/v_windows/v/old/examples/sokol/02_cubes_glsl/cube_glsl.glsl b/v_windows/v/old/examples/sokol/02_cubes_glsl/cube_glsl.glsl new file mode 100644 index 0000000..e19e936 --- /dev/null +++ b/v_windows/v/old/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 |