Kaynağa Gözat

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 12 yıl önce
ebeveyn
işleme
804e386ca4
12 değiştirilmiş dosya ile 71 ekleme ve 39 silme
  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 Dosyayı Görüntüle

@@ -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;


+ 6
- 2
neercs/video/blurv.lolfx Dosyayı Görüntüle

@@ -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;


+ 2
- 3
neercs/video/color.lolfx Dosyayı Görüntüle

@@ -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);
}
}

+ 7
- 3
neercs/video/copper.lolfx Dosyayı Görüntüle

@@ -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);
}
}

+ 8
- 2
neercs/video/glow.lolfx Dosyayı Görüntüle

@@ -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;
}


+ 7
- 3
neercs/video/mirror.lolfx Dosyayı Görüntüle

@@ -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
- 5
neercs/video/noise.lolfx Dosyayı Görüntüle

@@ -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);
}
}

+ 2
- 3
neercs/video/postfx.lolfx Dosyayı Görüntüle

@@ -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);
}
}

+ 7
- 3
neercs/video/radial.lolfx Dosyayı Görüntüle

@@ -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);
}
}

+ 7
- 3
neercs/video/remanence.lolfx Dosyayı Görüntüle

@@ -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;


+ 9
- 8
neercs/video/render.cpp Dosyayı Görüntüle

@@ -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);
}
}

+ 6
- 2
neercs/video/simple.lolfx Dosyayı Görüntüle

@@ -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);
}


Yükleniyor…
İptal
Kaydet