blob: 91b15463f1b7b7fa37f0a4cd7c543296641d9e81 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#ifdef WEBGL2
#define IN in
#define OUT out
#else
#define IN attribute
#define OUT varying
#endif
IN vec3 position;
#ifdef WIDTH
IN float width;
#endif
#ifdef NORMAL
IN vec3 normal;
#endif
IN float materialIndex;
#ifdef WEBGL2
flat out int MaterialIndex;
#ifdef COLOR
OUT vec4 Color;
#endif
#else
OUT vec4 diffuse;
OUT vec3 specular;
OUT float roughness,metallic,fresnel0;
OUT vec4 emissive;
struct Material {
vec4 diffuse,emissive,specular;
vec4 parameters;
};
uniform Material Materials[Nmaterials];
#endif
#ifdef COLOR
IN vec4 color;
#endif
uniform mat3 normMat;
uniform mat4 viewMat;
uniform mat4 projViewMat;
#ifdef NORMAL
#ifndef ORTHOGRAPHIC
OUT vec3 ViewPosition;
#endif
OUT vec3 Normal;
#endif
void main(void)
{
vec4 v=vec4(position,1.0);
gl_Position=projViewMat*v;
#ifdef NORMAL
#ifndef ORTHOGRAPHIC
ViewPosition=(viewMat*v).xyz;
#endif
Normal=normalize(normal*normMat);
#endif
#ifdef WEBGL2
MaterialIndex=int(materialIndex);
#ifdef COLOR
Color=color;
#endif
#else
#ifdef NORMAL
Material m;
#ifdef TRANSPARENT
m=Materials[int(abs(materialIndex))-1];
emissive=m.emissive;
if(materialIndex >= 0.0)
diffuse=m.diffuse;
else {
diffuse=color;
#if nlights == 0
emissive += color;
#endif
}
#else
m=Materials[int(materialIndex)];
emissive=m.emissive;
#ifdef COLOR
diffuse=color;
#if nlights == 0
emissive += color;
#endif
#else
diffuse=m.diffuse;
#endif // COLOR
#endif // TRANSPARENT
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 // NORMAL
#endif // WEBGL2
#ifdef WIDTH
gl_PointSize=width;
#endif
}
|