gKit2 light
deferred_decal.glsl
1 
2 #version 330
3 
4 #ifdef VERTEX_SHADER
5 layout(location= 0) in vec3 position;
6 
7 uniform mat4 mvpMatrix;
8 
9 void main( )
10 {
11  gl_Position= mvpMatrix * vec4(position, 1);
12 }
13 #endif
14 
15 #ifdef FRAGMENT_SHADER
16 out vec4 fragment_color;
17 
18 uniform mat4 invMatrix;
19 
20 uniform sampler2D decal_texture;
21 uniform sampler2D color_texture;
22 uniform sampler2D depth_texture;
23 
24 void main( )
25 {
26  // couleur de l'objet deja dessine, pour la modifier en fonction du decal
27  vec3 color= texelFetch(color_texture, ivec2(gl_FragCoord.xy), 0).rgb;
28 
29  // retrouve la position du fragment deja dessine dans le monde
30  float z= texelFetch(depth_texture, ivec2(gl_FragCoord.xy), 0).r;
31  vec4 position= vec4(gl_FragCoord.xy, z, 1);
32 
33  // passage dans le repere du decal
34  vec4 decal_position= invMatrix * position;
35 
36  vec3 decal_color= textureProj(decal_texture, decal_position).rgb;
37 
38  // test d'inclusion
39  vec3 texcoord= decal_position.xyz / decal_position.w;
40  //~ if(texcoord.x < 0 || texcoord.x > decal_position.w)
41  if(texcoord.x < 0 || texcoord.x > 1)
42  discard;
43  //~ color.g= 1;
44  //~ color= vec3(1);
45  //~ if(texcoord.y < 0 || texcoord.y > decal_position.w)
46  if(texcoord.y < 0 || texcoord.y > 1)
47  discard;
48  //~ color.r= 1;
49  //~ color= vec3(1);
50  //~ if(texcoord.z < 0 || texcoord.z > decal_position.w)
51  if(texcoord.z < 0 || texcoord.z > 1)
52  discard;
53  //~ color.b= 1;
54  //~ color= vec3(1);
55 
56  color= color * decal_color;
57  fragment_color= vec4(color, 1);
58 }
59 #endif
vecteur generique, utilitaire.
Definition: vec.h:146
vecteur generique 4d, ou 3d homogene, utilitaire.
Definition: vec.h:168