smaa move mask fixes

master
Lee Salzman 2013-02-19 05:56:28 +02:00
parent 8c691841d7
commit f011016d94
6 changed files with 54 additions and 33 deletions

View File

@ -218,6 +218,10 @@ shader 0 [SMAABlendingWeightCalculation@smaapreset@smaaopts] [
// We will use these offsets for the searches later on (see PSEUDO_GATHER4):
gl_TexCoord[1] = gl_MultiTexCoord0.xyxy + vec4(-0.25, -0.125, 1.25, -0.125);
gl_TexCoord[2] = gl_MultiTexCoord0.xyxy + vec4(-0.125, -0.25, -0.125, 1.25);
@(if (smaaopt "m") [result [
gl_TexCoord[3].xy = gl_MultiTexCoord1.xy;
]])
}
] [
#extension GL_ARB_texture_rectangle : enable
@ -448,9 +452,9 @@ shader 0 [SMAABlendingWeightCalculation@smaapreset@smaaopts] [
vec2 e = texture2DRect(tex0, gl_TexCoord[0].xy).rg;
@(if (smaaopt "m") [result [
float mask = step(texture2DRect(tex3, gl_TexCoord[0].xy).r, 0.75); // inverted mask, 0 means moving, 1 means static
float mask = step(texture2DRect(tex3, gl_TexCoord[3].xy).r, 0.25); // inverted mask, 0 means moving, 1 means static
]] [result [
#define mask 0.0
#define mask 1.0
]])
if (e.g > 0.0) { // Edge at north

View File

@ -684,7 +684,7 @@ void dosmaa(GLuint outfbo = 0, bool split = false)
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tqaamasktex);
}
glActiveTexture_(GL_TEXTURE0_ARB);
screenquad(vieww, viewh);
screenquadoffset(0, 0, vieww, viewh, -0.5f/(1<<tqaamovemaskreduce), -0.5f/(1<<tqaamovemaskreduce), vieww>>tqaamovemaskreduce, viewh>>tqaamovemaskreduce);
if(smaadepthmask)
{
glDisable(GL_DEPTH_TEST);

View File

@ -148,6 +148,8 @@ extern int pushscissor(float sx1, float sy1, float sx2, float sy2);
extern void popscissor();
extern void screenquad(float sw, float sh);
extern void screenquad(float sw, float sh, float sw2, float sh2);
extern void screenquadoffset(float x, float y, float w, float h);
extern void screenquadoffset(float x, float y, float w, float h, float x2, float y2, float w2, float h2);
extern void recomputecamera();
extern void findorientation();
extern float calcfrustumboundsphere(float nearplane, float farplane, const vec &pos, const vec &view, vec &center);

View File

@ -1579,6 +1579,26 @@ void screenquad(float sw, float sh, float sw2, float sh2)
glEnd();
}
void screenquadoffset(float x, float y, float w, float h)
{
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(x + w, y); glVertex2f(1, -1);
glTexCoord2f(x, y); glVertex2f(-1, -1);
glTexCoord2f(x + w, y + h); glVertex2f(1, 1);
glTexCoord2f(x, y + h); glVertex2f(-1, 1);
glEnd();
}
void screenquadoffset(float x, float y, float w, float h, float x2, float y2, float w2, float h2)
{
glBegin(GL_TRIANGLE_STRIP);
glMultiTexCoord2f_(GL_TEXTURE0_ARB, x+w, y); glMultiTexCoord2f_(GL_TEXTURE1_ARB, x2+w2, y2); glVertex2f(1, -1);
glMultiTexCoord2f_(GL_TEXTURE0_ARB, x, y); glMultiTexCoord2f_(GL_TEXTURE1_ARB, x2, y2); glVertex2f(-1, -1);
glMultiTexCoord2f_(GL_TEXTURE0_ARB, x+w, y+h); glMultiTexCoord2f_(GL_TEXTURE1_ARB, x2+w2, y2+h2); glVertex2f(1, 1);
glMultiTexCoord2f_(GL_TEXTURE0_ARB, x, y+h); glMultiTexCoord2f_(GL_TEXTURE1_ARB, x2, y2+h2); glVertex2f(-1, 1);
glEnd();
}
VARR(fog, 16, 4000, 1000024);
bvec fogcolor(0x80, 0x99, 0xB3);
HVARFR(fogcolour, 0, 0x8099B3, 0xFFFFFF,

View File

@ -243,10 +243,10 @@ void viewao()
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[2] ? aotex[2] : aotex[0]);
int tw = aotex[2] ? gw : aow, th = aotex[2] ? gh : aoh;
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0, th); glVertex2i(0, 0);
glTexCoord2f(tw, th); glVertex2i(w, 0);
glTexCoord2f(0, 0); glVertex2i(0, h);
glTexCoord2f(tw, 0); glVertex2i(w, h);
glTexCoord2f(0, th); glVertex2f(0, 0);
glTexCoord2f(tw, th); glVertex2f(w, 0);
glTexCoord2f(0, 0); glVertex2f(0, h);
glTexCoord2f(tw, 0); glVertex2f(w, h);
glEnd();
notextureshader->set();
}
@ -1261,10 +1261,10 @@ void viewdepth()
glColor3f(1, 1, 1);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, gdepthtex);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0, gh); glVertex2i(0, 0);
glTexCoord2f(gw, gh); glVertex2i(w, 0);
glTexCoord2f(0, 0); glVertex2i(0, h);
glTexCoord2f(gw, 0); glVertex2i(w, h);
glTexCoord2f(0, gh); glVertex2f(0, 0);
glTexCoord2f(gw, gh); glVertex2f(w, 0);
glTexCoord2f(0, 0); glVertex2f(0, h);
glTexCoord2f(gw, 0); glVertex2f(w, h);
glEnd();
notextureshader->set();
}
@ -1278,10 +1278,10 @@ void viewrefract()
glColor3f(1, 1, 1);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, refracttex);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0, gh); glVertex2i(0, 0);
glTexCoord2f(gw, gh); glVertex2i(w, 0);
glTexCoord2f(0, 0); glVertex2i(0, h);
glTexCoord2f(gw, 0); glVertex2i(w, h);
glTexCoord2f(0, gh); glVertex2f(0, 0);
glTexCoord2f(gw, gh); glVertex2f(w, 0);
glTexCoord2f(0, 0); glVertex2f(0, h);
glTexCoord2f(gw, 0); glVertex2f(w, h);
glEnd();
notextureshader->set();
}
@ -1418,10 +1418,10 @@ void viewrsm()
glColor3f(1, 1, 1);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, debugrsm == 2 ? rsmnormaltex : rsmcolortex);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0, 0); glVertex2i(screen->w-w, screen->h-h);
glTexCoord2f(rsmsize, 0); glVertex2i(screen->w, screen->h-h);
glTexCoord2f(0, rsmsize); glVertex2i(screen->w-w, screen->h);
glTexCoord2f(rsmsize, rsmsize); glVertex2i(screen->w, screen->h);
glTexCoord2f(0, 0); glVertex2f(screen->w-w, screen->h-h);
glTexCoord2f(rsmsize, 0); glVertex2f(screen->w, screen->h-h);
glTexCoord2f(0, rsmsize); glVertex2f(screen->w-w, screen->h);
glTexCoord2f(rsmsize, rsmsize); glVertex2f(screen->w, screen->h);
glEnd();
notextureshader->set();
}
@ -1435,10 +1435,10 @@ void viewrh()
glBindTexture(GL_TEXTURE_3D, rhtex[1]);
float z = (debugrh-1+0.5f)/float((rhgrid+2*rhborder)*rhsplits);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord3f(0, 0, z); glVertex2i(screen->w-w, screen->h-h);
glTexCoord3f(1, 0, z); glVertex2i(screen->w, screen->h-h);
glTexCoord3f(0, 1, z); glVertex2i(screen->w-w, screen->h);
glTexCoord3f(1, 1, z); glVertex2i(screen->w, screen->h);
glTexCoord3f(0, 0, z); glVertex2f(screen->w-w, screen->h-h);
glTexCoord3f(1, 0, z); glVertex2f(screen->w, screen->h-h);
glTexCoord3f(0, 1, z); glVertex2f(screen->w-w, screen->h);
glTexCoord3f(1, 1, z); glVertex2f(screen->w, screen->h);
glEnd();
notextureshader->set();
}
@ -1566,10 +1566,10 @@ void viewshadowatlas()
glBindTexture(shadowatlastarget, shadowatlastex);
if(usesmcomparemode()) setsmnoncomparemode();
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0, 0); glVertex2i(screen->w-w, screen->h-h);
glTexCoord2f(tw, 0); glVertex2i(screen->w, screen->h-h);
glTexCoord2f(0, th); glVertex2i(screen->w-w, screen->h);
glTexCoord2f(tw, th); glVertex2i(screen->w, screen->h);
glTexCoord2f(0, 0); glVertex2f(screen->w-w, screen->h-h);
glTexCoord2f(tw, 0); glVertex2f(screen->w, screen->h-h);
glTexCoord2f(0, th); glVertex2f(screen->w-w, screen->h);
glTexCoord2f(tw, th); glVertex2f(screen->w, screen->h);
glEnd();
if(usesmcomparemode()) setsmcomparemode();
notextureshader->set();

View File

@ -1210,12 +1210,7 @@ void renderpostfx(GLuint outfbo)
++tmu;
}
if(tmu) glActiveTexture_(GL_TEXTURE0_ARB);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0, 0); glVertex2f(-1, -1);
glTexCoord2f(tw, 0); glVertex2f( 1, -1);
glTexCoord2f(0, th); glVertex2f(-1, 1);
glTexCoord2f(tw, th); glVertex2f( 1, 1);
glEnd();
screenquad(tw, th);
loopj(NUMPOSTFXBINDS) if(p.freeinputs&(1<<j) && postfxbinds[j] >= 0)
{