summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/asymptote/shaders
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-04-03 22:33:45 +0000
committerKarl Berry <karl@freefriends.org>2019-04-03 22:33:45 +0000
commit072987993bdb3cf5495219b96ad4056509ccb7ab (patch)
tree7db7f28ff1713a570c4ef960d5e4c2dbabf0fdc1 /Master/texmf-dist/asymptote/shaders
parent0714966cf940fe8c3abb344bdffd6744f88eec4d (diff)
asymptote 2.49
git-svn-id: svn://tug.org/texlive/trunk@50744 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/asymptote/shaders')
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/fragment.glsl85
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/vertex.glsl34
2 files changed, 119 insertions, 0 deletions
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;
+}