Procházet zdrojové kódy

neercs: do not pass the texture coordinates from the application to

the GL server; instead, simply deduce them from the vertex coordinates
and interpolate them in the fragment shader.
master
Sam Hocevar před 12 roky
rodič
revize
804e386ca4
12 změnil soubory, kde provedl 71 přidání a 39 odebrání
  1. +6
    -2
      neercs/video/blurh.lolfx
  2. +6
    -2
      neercs/video/blurv.lolfx
  3. +2
    -3
      neercs/video/color.lolfx
  4. +7
    -3
      neercs/video/copper.lolfx
  5. +8
    -2
      neercs/video/glow.lolfx
  6. +7
    -3
      neercs/video/mirror.lolfx
  7. +4
    -5
      neercs/video/noise.lolfx
  8. +2
    -3
      neercs/video/postfx.lolfx
  9. +7
    -3
      neercs/video/radial.lolfx
  10. +7
    -3
      neercs/video/remanence.lolfx
  11. +9
    -8
      neercs/video/render.cpp
  12. +6
    -2
      neercs/video/simple.lolfx

+ 6
- 2
neercs/video/blurh.lolfx Zobrazit soubor

@@ -2,23 +2,27 @@


#version 120 #version 120


varying vec2 pass_TexCoord;

void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy;
} }


[frag.glsl] [frag.glsl]


#version 120 #version 120


varying vec2 pass_TexCoord;

uniform sampler2D texture; uniform sampler2D texture;
uniform vec2 radius; uniform vec2 radius;


void main(void) void main(void)
{ {
vec4 total = vec4(0.0); vec4 total = vec4(0.0);
vec2 p = gl_TexCoord[0].xy;
vec2 p = pass_TexCoord;
float mask = 2.0-p.x*(6.0-p.x*6.0)*p.y*(6.0-p.y*6.0); float mask = 2.0-p.x*(6.0-p.x*6.0)*p.y*(6.0-p.y*6.0);
float b = radius.x+radius.y*mask; float b = radius.x+radius.y*mask;
total += texture2D(texture,vec2(p.x-b*4.0,p.y))*0.04; total += texture2D(texture,vec2(p.x-b*4.0,p.y))*0.04;


+ 6
- 2
neercs/video/blurv.lolfx Zobrazit soubor

@@ -2,23 +2,27 @@


#version 120 #version 120


varying vec2 pass_TexCoord;

void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy;
} }


[frag.glsl] [frag.glsl]


#version 120 #version 120


varying vec2 pass_TexCoord;

uniform sampler2D texture; uniform sampler2D texture;
uniform vec2 radius; uniform vec2 radius;


void main(void) void main(void)
{ {
vec4 total = vec4(0.0); vec4 total = vec4(0.0);
vec2 p = gl_TexCoord[0].xy;
vec2 p = pass_TexCoord;
float mask = 2.0-p.x*(6.0-p.x*6.0)*p.y*(6.0-p.y*6.0); float mask = 2.0-p.x*(6.0-p.x*6.0)*p.y*(6.0-p.y*6.0);
float b = radius.x+radius.y*mask; float b = radius.x+radius.y*mask;
total += texture2D(texture,vec2(p.x,p.y-b*4.0))*0.04; total += texture2D(texture,vec2(p.x,p.y-b*4.0))*0.04;


+ 2
- 3
neercs/video/color.lolfx Zobrazit soubor

@@ -5,7 +5,6 @@
void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
} }


[frag.glsl] [frag.glsl]
@@ -20,7 +19,7 @@ uniform float flash;


void main(void) void main(void)
{ {
vec2 p = gl_FragCoord.xy/screen_size.xy;
vec2 p = gl_FragCoord.xy / screen_size.xy;
vec3 c = texture2D(texture,p).xyz; vec3 c = texture2D(texture,p).xyz;


float a = (c.x + c.y + c.z) / 3.0; float a = (c.x + c.y + c.z) / 3.0;
@@ -32,4 +31,4 @@ void main(void)
c += flash; // flash c += flash; // flash


gl_FragColor = vec4(c, 1.0); gl_FragColor = vec4(c, 1.0);
}
}

+ 7
- 3
neercs/video/copper.lolfx Zobrazit soubor

@@ -2,16 +2,20 @@


#version 120 #version 120


varying vec2 pass_TexCoord;

void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy;
} }


[frag.glsl] [frag.glsl]


#version 120 #version 120


varying vec2 pass_TexCoord;

uniform sampler2D texture; uniform sampler2D texture;
uniform vec2 screen_size; uniform vec2 screen_size;
uniform float time; uniform float time;
@@ -20,7 +24,7 @@ uniform vec3 mask_color;


void main(void) void main(void)
{ {
vec2 p = gl_TexCoord[0].xy;
vec2 p = pass_TexCoord;
vec3 source = texture2D(texture, p).xyz; vec3 source = texture2D(texture, p).xyz;


vec3 color = vec3(0.5); vec3 color = vec3(0.5);
@@ -35,4 +39,4 @@ void main(void)
color.z = float(int(color.z * 8.0) * 32) / 256.0; color.z = float(int(color.z * 8.0) * 32) / 256.0;


gl_FragColor = vec4((source == mask_color) ? color : source, 1.0); gl_FragColor = vec4((source == mask_color) ? color : source, 1.0);
}
}

+ 8
- 2
neercs/video/glow.lolfx Zobrazit soubor

@@ -2,21 +2,27 @@


#version 120 #version 120


varying vec2 pass_TexCoord;

void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy;
} }


[frag.glsl] [frag.glsl]


#version 120 #version 120


varying vec2 pass_TexCoord;

uniform sampler2D glow; uniform sampler2D glow;
uniform sampler2D source; uniform sampler2D source;
uniform vec2 mix; uniform vec2 mix;


void main(void) void main(void)
{ {
gl_FragColor = texture2D(source,gl_TexCoord[0].xy)*mix.x+texture2D(glow,gl_TexCoord[0].xy)*mix.y;
gl_FragColor = texture2D(source, pass_TexCoord) * mix.x
+ texture2D(glow, pass_TexCoord) * mix.y;
} }


+ 7
- 3
neercs/video/mirror.lolfx Zobrazit soubor

@@ -2,23 +2,27 @@


#version 120 #version 120


varying vec2 pass_TexCoord;

void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy;
} }


[frag.glsl] [frag.glsl]


#version 120 #version 120


varying vec2 pass_TexCoord;

uniform sampler2D texture; uniform sampler2D texture;
uniform vec2 screen_size; uniform vec2 screen_size;
uniform vec4 mirror; uniform vec4 mirror;


void main(void) void main(void)
{ {
vec2 p = gl_TexCoord[0].xy;
vec2 p = pass_TexCoord;
vec3 s = texture2D(texture, p).xyz; vec3 s = texture2D(texture, p).xyz;


vec3 c = vec3(0.0); vec3 c = vec3(0.0);
@@ -28,4 +32,4 @@ void main(void)
if(p.y > 1.0 - mirror.y) c += texture2D(texture, vec2(p.x * (0.8 + 2.0 * (1.0 - p.y)) + 0.1 - 1.0 * (1.0 - p.y), - mirror.y - (mirror.y + p.y) * mirror.w)).xyz * (mirror.z / mirror.y * (1.0 - p.y)); if(p.y > 1.0 - mirror.y) c += texture2D(texture, vec2(p.x * (0.8 + 2.0 * (1.0 - p.y)) + 0.1 - 1.0 * (1.0 - p.y), - mirror.y - (mirror.y + p.y) * mirror.w)).xyz * (mirror.z / mirror.y * (1.0 - p.y));


gl_FragColor = vec4(s + c, 1.0); gl_FragColor = vec4(s + c, 1.0);
}
}

+ 4
- 5
neercs/video/noise.lolfx Zobrazit soubor

@@ -4,8 +4,7 @@


void main() void main()
{ {
gl_Position=gl_Vertex;
gl_TexCoord[0]=gl_MultiTexCoord0;
gl_Position = gl_Vertex;
} }


[frag.glsl] [frag.glsl]
@@ -19,9 +18,9 @@ uniform vec2 offset;
uniform float noise; uniform float noise;
uniform vec3 retrace; uniform vec3 retrace;


float rand(in vec2 p,in float t,in float v)
float rand(in vec2 p, in float t, in float v)
{ {
return fract(sin(dot(p+mod(t,1.0),vec2(12.9898,78.2333)))*v);
return fract(sin(dot(p + mod(t, 1.0), vec2(12.9898, 78.2333))) * v);
} }


void main(void) void main(void)
@@ -36,4 +35,4 @@ void main(void)
c*=1.0+(noise-noise*2.0*r1); // noise c*=1.0+(noise-noise*2.0*r1); // noise
c-=retrace.x*0.01*mod(p.y*retrace.y+time*retrace.z,1.0); // retrace c-=retrace.x*0.01*mod(p.y*retrace.y+time*retrace.z,1.0); // retrace
gl_FragColor=vec4(c,1.0); gl_FragColor=vec4(c,1.0);
}
}

+ 2
- 3
neercs/video/postfx.lolfx Zobrazit soubor

@@ -4,8 +4,7 @@


void main() void main()
{ {
gl_Position=gl_Vertex;
gl_TexCoord[0]=gl_MultiTexCoord0;
gl_Position = gl_Vertex;
} }


[frag.glsl] [frag.glsl]
@@ -104,4 +103,4 @@ void main(void)
c*=letterbox(z,corner.x+2.0,corner.y,corner.z); // corner c*=letterbox(z,corner.x+2.0,corner.y,corner.z); // corner
c+=(g3+g4)*glass.z; // glass c+=(g3+g4)*glass.z; // glass
gl_FragColor=vec4(c,1.0); gl_FragColor=vec4(c,1.0);
}
}

+ 7
- 3
neercs/video/radial.lolfx Zobrazit soubor

@@ -2,16 +2,20 @@


#version 120 #version 120


varying vec2 pass_TexCoord;

void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy;
} }


[frag.glsl] [frag.glsl]


#version 120 #version 120


varying vec2 pass_TexCoord;

uniform sampler2D texture; uniform sampler2D texture;
uniform vec2 screen_size; uniform vec2 screen_size;
uniform vec4 radial; uniform vec4 radial;
@@ -25,7 +29,7 @@ vec3 deform(in vec2 p)


void main(void) void main(void)
{ {
vec2 p = -1.0+2.0*gl_TexCoord[0].xy;
vec2 p = -1.0 + 2.0 * pass_TexCoord;
vec2 s = p; vec2 s = p;
vec3 source=deform(s); vec3 source=deform(s);


@@ -41,4 +45,4 @@ void main(void)
s += d; s += d;
} }
gl_FragColor = vec4(source + color * radial.w, 1.0); gl_FragColor = vec4(source + color * radial.w, 1.0);
}
}

+ 7
- 3
neercs/video/remanence.lolfx Zobrazit soubor

@@ -2,24 +2,28 @@


#version 120 #version 120


varying vec2 pass_TexCoord;

void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy;
} }


[frag.glsl] [frag.glsl]


#version 120 #version 120


varying vec2 pass_TexCoord;

uniform sampler2D source; uniform sampler2D source;
uniform sampler2D buffer; uniform sampler2D buffer;
uniform vec2 mix; uniform vec2 mix;


void main(void) void main(void)
{ {
vec4 old_color = texture2D(buffer, gl_TexCoord[0].xy);
vec4 new_color = texture2D(source, gl_TexCoord[0].xy);
vec4 old_color = texture2D(buffer, pass_TexCoord);
vec4 new_color = texture2D(source, pass_TexCoord);


/* The old way */ /* The old way */
//gl_FragColor = new_color * mix.x + old_color * mix.y; //gl_FragColor = new_color * mix.x + old_color * mix.y;


+ 9
- 8
neercs/video/render.cpp Zobrazit soubor

@@ -67,8 +67,13 @@ float main_angle = 0.0f; // main angle
float part_angle = 0.0f; // part angle float part_angle = 0.0f; // part angle
float fx_angle; // current angle float fx_angle; // current angle
/* fs_quad variable */ /* fs_quad variable */
float fs_quad_vtx[] = {-1.0f, 1.0f, 0, 1.0f, -1.0f, -1.0f, 0, 1.0f, 1.0f, -1.0f, 0, 1.0f, 1.0f, 1.0f, 0, 1.0f};
float fs_quad_tex[] = {0, 1.0f, 0, 0, 1.0f, 0, 1.0f, 1.0f};
float fs_quad_vtx[] =
{
-1.0f, 1.0f, 0, 1.0f,
-1.0f, -1.0f, 0, 1.0f,
1.0f, -1.0f, 0, 1.0f,
1.0f, 1.0f, 0, 1.0f
};
/* flash variable */ /* flash variable */
bool flash_flag = false; // flag bool flash_flag = false; // flag
float flash_angle = 0; // angle float flash_angle = 0; // angle
@@ -1471,7 +1476,7 @@ void Render::Draw2D()
glLoadMatrixf(&m[0][0]); glLoadMatrixf(&m[0][0]);
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);


fx_angle=main_angle-part_angle;
fx_angle = main_angle - part_angle;
} }


void Render::Draw3D() void Render::Draw3D()
@@ -1485,9 +1490,6 @@ void Render::Draw3D()
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(4, GL_FLOAT, 0, fs_quad_vtx); glVertexPointer(4, GL_FLOAT, 0, fs_quad_vtx);


glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, fs_quad_tex);

if (m_shader_copper) if (m_shader_copper)
{ {
// shader copper // shader copper
@@ -1723,11 +1725,10 @@ void Render::Draw3D()
ShaderSimple(fbo_front, 0); ShaderSimple(fbo_front, 0);


glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }


Render::~Render() Render::~Render()
{ {
if (m_fps_debug) if (m_fps_debug)
Ticker::Unref(m_fps_debug); Ticker::Unref(m_fps_debug);
}
}

+ 6
- 2
neercs/video/simple.lolfx Zobrazit soubor

@@ -2,20 +2,24 @@


#version 120 #version 120


varying vec2 pass_TexCoord;

void main() void main()
{ {
gl_Position = gl_Vertex; gl_Position = gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy;
} }


[frag.glsl] [frag.glsl]


#version 120 #version 120


varying vec2 pass_TexCoord;

uniform sampler2D texture; uniform sampler2D texture;


void main(void) void main(void)
{ {
gl_FragColor = texture2D(texture, gl_TexCoord[0].xy);
gl_FragColor = texture2D(texture, pass_TexCoord);
} }



Načítá se…
Zrušit
Uložit