11layout(std430, binding= 0) buffer fragments
19uniform mat4 mvpMatrix;
23out
vec3 vertex_position;
27 gl_Position= mvpMatrix *
vec4(position, 1);
28 vertex_position= position;
31 uint offset= atomicAdd(count, 1);
33 array[offset].x= position.x;
34 array[offset].y= position.y;
35 array[offset].z= position.z;
47layout(binding= 0, r32ui) coherent uniform uimage2D counters;
49in
vec3 vertex_position;
50out
vec4 fragment_color;
53layout(early_fragment_tests) in;
61 vec3 color= (normal + 1) / 2;
62 float g= 0.3*color.r + 0.7*color.g + 0.1*color.b;
64 uint n= imageAtomicAdd(counters, ivec2(gl_FragCoord.xy), 1) +1;
79 if(n < 10) color= g * colors[n] /
vec3(255);
80 else color= g * colors[9] /
vec3(255);
85 uint offset= atomicAdd(count, 1);
87 array[offset].x= vertex_position.x;
88 array[offset].y= vertex_position.y;
89 array[offset].z= vertex_position.z;
90 array[offset].r= color.r;
91 array[offset].g= color.g;
92 array[offset].b= color.b;
Vector normalize(const Vector &v)
renvoie un vecteur unitaire / longueur == 1.
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
vecteur generique, utilitaire.
vecteur generique 4d, ou 3d homogene, utilitaire.