diff options
author | Norbert Preining <norbert@preining.info> | 2019-10-21 03:00:45 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-10-21 03:00:45 +0000 |
commit | 7da4243862494d1fc7478956362f4da6d80f4f7e (patch) | |
tree | 30922972d98c2056ecbed0a1c43b3b3a3758bf58 /graphics/asymptote/webgl/vertex.glsl | |
parent | 8fa38617045e3aa88b163fdc2fd683d72559b6d5 (diff) |
CTAN sync 201910210300
Diffstat (limited to 'graphics/asymptote/webgl/vertex.glsl')
-rw-r--r-- | graphics/asymptote/webgl/vertex.glsl | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/graphics/asymptote/webgl/vertex.glsl b/graphics/asymptote/webgl/vertex.glsl new file mode 100644 index 0000000000..250c0b7b4a --- /dev/null +++ b/graphics/asymptote/webgl/vertex.glsl @@ -0,0 +1,84 @@ +attribute vec3 position; +#ifdef WIDTH +attribute float width; +#endif +#ifdef NORMAL +attribute vec3 normal; +#endif +attribute float materialIndex; +#ifdef COLOR +attribute vec4 color; +#endif + +uniform mat3 normMat; +uniform mat4 viewMat; +uniform mat4 projViewMat; + +#ifdef NORMAL +#ifndef ORTHOGRAPHIC +varying vec3 ViewPosition; +#endif +varying vec3 Normal; +#endif +varying vec4 diffuse; +varying vec3 specular; +varying float roughness,metallic,fresnel0; +varying vec4 emissive; + +struct Material { + vec4 diffuse,emissive,specular; + vec4 parameters; +}; + +uniform Material Materials[Nmaterials]; + +void main(void) +{ + vec4 v=vec4(position,1.0); + gl_Position=projViewMat*v; +#ifdef NORMAL +#ifndef ORTHOGRAPHIC + ViewPosition=(viewMat*v).xyz; +#endif + Normal=normal*normMat; + + Material m; +#ifdef TRANSPARENT + m=Materials[int(abs(materialIndex))-1]; + if(materialIndex >= 0.0) { + diffuse=m.diffuse; + emissive=m.emissive; + } else { + diffuse=color; +#if nlights > 0 + emissive=vec4(0.0); +#else + emissive=color; +#endif + } +#else + m=Materials[int(materialIndex)]; +#ifdef COLOR + diffuse=color; +#if nlights > 0 + emissive=vec4(0.0); +#else + emissive=color; +#endif +#else + diffuse=m.diffuse; + emissive=m.emissive; +#endif +#endif + specular=m.specular.rgb; + vec4 parameters=m.parameters; + roughness=1.0-parameters[0]; + metallic=parameters[1]; + fresnel0=parameters[2]; +#else + emissive=Materials[int(materialIndex)].emissive; +#endif +#ifdef WIDTH + gl_PointSize=width; +#endif +} |