the GL server; instead, simply deduce them from the vertex coordinates and interpolate them in the fragment shader.master
| @@ -2,23 +2,27 @@ | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| uniform sampler2D texture; | |||
| uniform vec2 radius; | |||
| void main(void) | |||
| { | |||
| 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 b = radius.x+radius.y*mask; | |||
| total += texture2D(texture,vec2(p.x-b*4.0,p.y))*0.04; | |||
| @@ -2,23 +2,27 @@ | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| uniform sampler2D texture; | |||
| uniform vec2 radius; | |||
| void main(void) | |||
| { | |||
| 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 b = radius.x+radius.y*mask; | |||
| total += texture2D(texture,vec2(p.x,p.y-b*4.0))*0.04; | |||
| @@ -5,7 +5,6 @@ | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| } | |||
| [frag.glsl] | |||
| @@ -20,7 +19,7 @@ uniform float flash; | |||
| 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; | |||
| float a = (c.x + c.y + c.z) / 3.0; | |||
| @@ -32,4 +31,4 @@ void main(void) | |||
| c += flash; // flash | |||
| gl_FragColor = vec4(c, 1.0); | |||
| } | |||
| } | |||
| @@ -2,16 +2,20 @@ | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| uniform sampler2D texture; | |||
| uniform vec2 screen_size; | |||
| uniform float time; | |||
| @@ -20,7 +24,7 @@ uniform vec3 mask_color; | |||
| void main(void) | |||
| { | |||
| vec2 p = gl_TexCoord[0].xy; | |||
| vec2 p = pass_TexCoord; | |||
| vec3 source = texture2D(texture, p).xyz; | |||
| vec3 color = vec3(0.5); | |||
| @@ -35,4 +39,4 @@ void main(void) | |||
| color.z = float(int(color.z * 8.0) * 32) / 256.0; | |||
| gl_FragColor = vec4((source == mask_color) ? color : source, 1.0); | |||
| } | |||
| } | |||
| @@ -2,21 +2,27 @@ | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| uniform sampler2D glow; | |||
| uniform sampler2D source; | |||
| uniform vec2 mix; | |||
| 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; | |||
| } | |||
| @@ -2,23 +2,27 @@ | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| uniform sampler2D texture; | |||
| uniform vec2 screen_size; | |||
| uniform vec4 mirror; | |||
| void main(void) | |||
| { | |||
| vec2 p = gl_TexCoord[0].xy; | |||
| vec2 p = pass_TexCoord; | |||
| vec3 s = texture2D(texture, p).xyz; | |||
| 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)); | |||
| gl_FragColor = vec4(s + c, 1.0); | |||
| } | |||
| } | |||
| @@ -4,8 +4,7 @@ | |||
| void main() | |||
| { | |||
| gl_Position=gl_Vertex; | |||
| gl_TexCoord[0]=gl_MultiTexCoord0; | |||
| gl_Position = gl_Vertex; | |||
| } | |||
| [frag.glsl] | |||
| @@ -19,9 +18,9 @@ uniform vec2 offset; | |||
| uniform float noise; | |||
| 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) | |||
| @@ -36,4 +35,4 @@ void main(void) | |||
| 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 | |||
| gl_FragColor=vec4(c,1.0); | |||
| } | |||
| } | |||
| @@ -4,8 +4,7 @@ | |||
| void main() | |||
| { | |||
| gl_Position=gl_Vertex; | |||
| gl_TexCoord[0]=gl_MultiTexCoord0; | |||
| gl_Position = gl_Vertex; | |||
| } | |||
| [frag.glsl] | |||
| @@ -104,4 +103,4 @@ void main(void) | |||
| c*=letterbox(z,corner.x+2.0,corner.y,corner.z); // corner | |||
| c+=(g3+g4)*glass.z; // glass | |||
| gl_FragColor=vec4(c,1.0); | |||
| } | |||
| } | |||
| @@ -2,16 +2,20 @@ | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| uniform sampler2D texture; | |||
| uniform vec2 screen_size; | |||
| uniform vec4 radial; | |||
| @@ -25,7 +29,7 @@ vec3 deform(in vec2 p) | |||
| void main(void) | |||
| { | |||
| vec2 p = -1.0+2.0*gl_TexCoord[0].xy; | |||
| vec2 p = -1.0 + 2.0 * pass_TexCoord; | |||
| vec2 s = p; | |||
| vec3 source=deform(s); | |||
| @@ -41,4 +45,4 @@ void main(void) | |||
| s += d; | |||
| } | |||
| gl_FragColor = vec4(source + color * radial.w, 1.0); | |||
| } | |||
| } | |||
| @@ -2,24 +2,28 @@ | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| uniform sampler2D source; | |||
| uniform sampler2D buffer; | |||
| uniform vec2 mix; | |||
| 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 */ | |||
| //gl_FragColor = new_color * mix.x + old_color * mix.y; | |||
| @@ -67,8 +67,13 @@ float main_angle = 0.0f; // main angle | |||
| float part_angle = 0.0f; // part angle | |||
| float fx_angle; // current angle | |||
| /* 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 */ | |||
| bool flash_flag = false; // flag | |||
| float flash_angle = 0; // angle | |||
| @@ -1471,7 +1476,7 @@ void Render::Draw2D() | |||
| glLoadMatrixf(&m[0][0]); | |||
| glMatrixMode(GL_MODELVIEW); | |||
| fx_angle=main_angle-part_angle; | |||
| fx_angle = main_angle - part_angle; | |||
| } | |||
| void Render::Draw3D() | |||
| @@ -1485,9 +1490,6 @@ void Render::Draw3D() | |||
| glEnableClientState(GL_VERTEX_ARRAY); | |||
| 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) | |||
| { | |||
| // shader copper | |||
| @@ -1723,11 +1725,10 @@ void Render::Draw3D() | |||
| ShaderSimple(fbo_front, 0); | |||
| glDisableClientState(GL_VERTEX_ARRAY); | |||
| glDisableClientState(GL_TEXTURE_COORD_ARRAY); | |||
| } | |||
| Render::~Render() | |||
| { | |||
| if (m_fps_debug) | |||
| Ticker::Unref(m_fps_debug); | |||
| } | |||
| } | |||
| @@ -2,20 +2,24 @@ | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| void main() | |||
| { | |||
| gl_Position = gl_Vertex; | |||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||
| pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; | |||
| } | |||
| [frag.glsl] | |||
| #version 120 | |||
| varying vec2 pass_TexCoord; | |||
| uniform sampler2D texture; | |||
| void main(void) | |||
| { | |||
| gl_FragColor = texture2D(texture, gl_TexCoord[0].xy); | |||
| gl_FragColor = texture2D(texture, pass_TexCoord); | |||
| } | |||