From 072987993bdb3cf5495219b96ad4056509ccb7ab Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 3 Apr 2019 22:33:45 +0000 Subject: asymptote 2.49 git-svn-id: svn://tug.org/texlive/trunk@50744 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/asymptote/shaders/fragment.glsl | 85 +++++++++++++++++++++++ Master/texmf-dist/asymptote/shaders/vertex.glsl | 34 +++++++++ 2 files changed, 119 insertions(+) create mode 100755 Master/texmf-dist/asymptote/shaders/fragment.glsl create mode 100755 Master/texmf-dist/asymptote/shaders/vertex.glsl (limited to 'Master/texmf-dist/asymptote/shaders') diff --git a/Master/texmf-dist/asymptote/shaders/fragment.glsl b/Master/texmf-dist/asymptote/shaders/fragment.glsl new file mode 100755 index 00000000000..b6a85597451 --- /dev/null +++ b/Master/texmf-dist/asymptote/shaders/fragment.glsl @@ -0,0 +1,85 @@ +struct Material +{ + vec4 diffuse,ambient,emissive,specular; + float shininess; +}; + +struct Light +{ + vec4 direction; + vec4 diffuse,ambient,specular; +}; + +uniform int nlights; + +uniform Light lights[Nlights]; + +uniform MaterialBuffer { + Material Materials[Nmaterials]; +}; + +in vec3 Normal; + +#ifdef EXPLICIT_COLOR +in vec4 Color; +#endif +flat in int materialIndex; + +out vec4 outColor; + +void main() +{ + vec4 Diffuse; + vec4 Ambient; + vec4 Emissive; + vec4 Specular; + float Shininess; + +#ifdef EXPLICIT_COLOR + if(materialIndex < 0) { + int index=-materialIndex-1; + Material m=Materials[index]; + Diffuse=Color; + Ambient=Color; + Emissive=vec4(0.0,0.0,0.0,1.0); + Specular=m.specular; + Shininess=m.shininess; + } else { + Material m=Materials[materialIndex]; + Diffuse=m.diffuse; + Ambient=m.ambient; + Emissive=m.emissive; + Specular=m.specular; + Shininess=m.shininess; + } +#else + Material m=Materials[materialIndex]; + Diffuse=m.diffuse; + Ambient=m.ambient; + Emissive=m.emissive; + Specular=m.specular; + Shininess=m.shininess; +#endif + // Phong-Blinn model + if(nlights > 0) { + vec3 diffuse=vec3(0,0,0); + vec3 specular=vec3(0,0,0); + vec3 ambient=vec3(0,0,0); + vec3 Z=vec3(0,0,1); + + for(int i=0; i < nlights; ++i) { + vec3 L=normalize(lights[i].direction.xyz); + diffuse += lights[i].diffuse.rgb*abs(dot(Normal,L)); + ambient += lights[i].ambient.rgb; + specular += pow(abs(dot(Normal,normalize(L+Z))),Shininess)* + lights[i].specular.rgb; + } + + vec3 color=diffuse*Diffuse.rgb+ + ambient*Ambient.rgb+ + specular*Specular.rgb+ + Emissive.rgb; + outColor=vec4(color,Diffuse[3]); + } else + outColor=Diffuse; +} diff --git a/Master/texmf-dist/asymptote/shaders/vertex.glsl b/Master/texmf-dist/asymptote/shaders/vertex.glsl new file mode 100755 index 00000000000..9e3feda6988 --- /dev/null +++ b/Master/texmf-dist/asymptote/shaders/vertex.glsl @@ -0,0 +1,34 @@ +in vec3 position; +in vec3 normal; + +#ifdef EXPLICIT_COLOR +in uint color; +#endif + +in int material; + +uniform mat4 projViewMat; +uniform mat4 viewMat; +uniform mat4 normMat; + +out vec3 ViewPosition; +out vec3 Normal; + +#ifdef EXPLICIT_COLOR +out vec4 Color; +#endif + +flat out int materialIndex; + +void main() +{ + gl_Position=projViewMat*vec4(position,1.0); + ViewPosition=(viewMat*vec4(position,1.0)).xyz; + Normal=normalize((normMat*vec4(normal,0)).xyz); + +#ifdef EXPLICIT_COLOR + Color=unpackUnorm4x8(color); +#endif + + materialIndex=material; +} -- cgit v1.2.3