Make checkerror and removed the path specific check errors (may not be optimal in all cases...)

This commit is contained in:
cholleme 2003-07-31 19:44:07 +00:00
parent 689bb11d67
commit f2fbd65a87
3 changed files with 190 additions and 190 deletions

View file

@ -673,7 +673,7 @@ static GLuint fragment_programs[MAX_F_PROGRAM];
//#define ARBDEBUG
#if defined(ARBDEBUG) && defined(_WIN32)
static void checkerror()
static void Arb_checkerror()
{
GLuint error = glGetError();
if ( error != GL_NO_ERROR )
@ -688,7 +688,7 @@ static void checkerror()
}
#else
#define checkerror() do { } while(0)
#define Arb_checkerror() do { } while(0)
#endif
@ -770,38 +770,38 @@ void ARB_CreateShaders()
#endif /* !__APPLE__ && !MACOSX */
glEnable(GL_VERTEX_PROGRAM_ARB);
checkerror();
Arb_checkerror();
qglGenProgramsARB(MAX_V_PROGRAM, &vertex_programs[0]);
checkerror();
Arb_checkerror();
for ( i = 0; i < MAX_V_PROGRAM; i++ )
{
qglBindProgramARB(GL_VERTEX_PROGRAM_ARB, vertex_programs[i]);
checkerror();
Arb_checkerror();
qglProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
strlen(vertex_progs[i]), vertex_progs[i]);
checkerror();
Arb_checkerror();
}
glDisable(GL_VERTEX_PROGRAM_ARB);
checkerror();
Arb_checkerror();
glEnable(GL_FRAGMENT_PROGRAM_ARB);
checkerror();
Arb_checkerror();
qglGenProgramsARB(MAX_F_PROGRAM, &fragment_programs[0]);
checkerror();
Arb_checkerror();
for ( i = 0; i < MAX_F_PROGRAM; i++ )
{
qglBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, fragment_programs[i]);
checkerror();
Arb_checkerror();
qglProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
strlen(fragment_progs[i]), fragment_progs[i]);
checkerror();
Arb_checkerror();
}
glDisable(GL_FRAGMENT_PROGRAM_ARB);
checkerror();
Arb_checkerror();
}
void ARB_DisableBumpShader(shader_t* shader)
@ -875,9 +875,9 @@ void ARB_EnableBumpShader(const transform_t *tr, vec3_t lightOrig,
glGetError();
glEnable(GL_VERTEX_PROGRAM_ARB);
checkerror();
Arb_checkerror();
glEnable(GL_FRAGMENT_PROGRAM_ARB);
checkerror();
Arb_checkerror();
if (currentshadowlight->filtercube)
{
@ -891,7 +891,7 @@ void ARB_EnableBumpShader(const transform_t *tr, vec3_t lightOrig,
GL_SetupCubeMapMatrix(tr);
qglBindProgramARB( GL_VERTEX_PROGRAM_ARB, vertex_programs[V_BUMP_PROGRAM2] );
checkerror();
Arb_checkerror();
if ( shader->glossstages[0].type == STAGE_GLOSS )
{
qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, fragment_programs[F_BUMP_PROGRAM2_COLOR] );
@ -903,12 +903,12 @@ void ARB_EnableBumpShader(const transform_t *tr, vec3_t lightOrig,
{
qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, fragment_programs[F_BUMP_PROGRAM2] );
}
checkerror();
Arb_checkerror();
}
else
{
qglBindProgramARB( GL_VERTEX_PROGRAM_ARB, vertex_programs[V_BUMP_PROGRAM] );
checkerror();
Arb_checkerror();
if ( shader->glossstages[0].type == STAGE_GLOSS )
{
qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, fragment_programs[F_BUMP_PROGRAM_COLOR] );
@ -920,27 +920,27 @@ void ARB_EnableBumpShader(const transform_t *tr, vec3_t lightOrig,
{
qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, fragment_programs[F_BUMP_PROGRAM] );
}
checkerror();
Arb_checkerror();
}
GL_SelectTexture(GL_TEXTURE0_ARB);
qglProgramEnvParameter4fARB( GL_VERTEX_PROGRAM_ARB, 0, currentshadowlight->origin[0],
currentshadowlight->origin[1], currentshadowlight->origin[2], 0.0);
checkerror();
Arb_checkerror();
qglProgramEnvParameter4fARB( GL_VERTEX_PROGRAM_ARB, 1, r_refdef.vieworg[0],
r_refdef.vieworg[1], r_refdef.vieworg[2], 0.0);
checkerror();
Arb_checkerror();
}
void ARB_EnableDeluxShader(shader_t* shader)
{
glEnable(GL_VERTEX_PROGRAM_ARB);
checkerror();
Arb_checkerror();
glEnable(GL_FRAGMENT_PROGRAM_ARB);
checkerror();
Arb_checkerror();
qglBindProgramARB( GL_VERTEX_PROGRAM_ARB, vertex_programs[V_DELUX_PROGRAM] );
checkerror();
Arb_checkerror();
if ( shader->glossstages[0].type == STAGE_GLOSS )
{
qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, fragment_programs[F_DELUX_PROGRAM_COLOR] );
@ -952,11 +952,11 @@ void ARB_EnableDeluxShader(shader_t* shader)
{
qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, fragment_programs[F_DELUX_PROGRAM] );
}
checkerror();
Arb_checkerror();
qglProgramEnvParameter4fARB( GL_FRAGMENT_PROGRAM_ARB, 0,
r_refdef.vieworg[0], r_refdef.vieworg[1],
r_refdef.vieworg[2], 0.0);
checkerror();
Arb_checkerror();
}
void ARB_DisableDeluxShader(shader_t* shader)

View file

@ -44,7 +44,7 @@ static GLuint lightPos, eyePos; // vertex shader constants
//#define PARHELIADEBUG
#if defined(PARHELIADEBUG) && defined(_WIN32)
#define checkerror() checkrealerror(__LINE__)
#define Parhelia_checkerror() checkrealerror(__LINE__)
static void checkrealerror(int line)
{
GLuint error = glGetError();
@ -57,7 +57,7 @@ static void checkrealerror(int line)
}
#else
#define checkerror() do { } while(0)
#define Parhelia_checkerror() do { } while(0)
#endif
@ -712,7 +712,7 @@ void Parhelia_CreateShaders()
// Con_Printf("Specular 2 Status: %s\n",gluErrorString(glGetError()));
glDisable(GL_FRAGMENT_SHADER_MTX);
// checkerror();
// Parhelia_checkerror();
// Con_Printf("----Vertex Shaders----\n");
// Generate vertex shader
glEnable(GL_VERTEX_SHADER_EXT);
@ -757,9 +757,9 @@ void Parhelia_CreateShaders()
texcoord2 = qglBindTextureUnitParameterEXT( GL_TEXTURE2_ARB, GL_CURRENT_TEXTURE_COORDS );
texcoord3 = qglBindTextureUnitParameterEXT( GL_TEXTURE3_ARB, GL_CURRENT_TEXTURE_COORDS );
fogstart = qglBindParameterEXT( GL_FOG_START );
checkerror();
Parhelia_checkerror();
fogend = qglBindParameterEXT( GL_FOG_END );
checkerror();
Parhelia_checkerror();
disttemp = qglGenSymbolsEXT(GL_SCALAR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
@ -828,9 +828,9 @@ void Parhelia_CreateShaders()
texcoord2 = qglBindTextureUnitParameterEXT( GL_TEXTURE2_ARB, GL_CURRENT_TEXTURE_COORDS );
texcoord3 = qglBindTextureUnitParameterEXT( GL_TEXTURE3_ARB, GL_CURRENT_TEXTURE_COORDS );
fogstart = qglBindParameterEXT( GL_FOG_START );
checkerror();
Parhelia_checkerror();
fogend = qglBindParameterEXT( GL_FOG_END );
checkerror();
Parhelia_checkerror();
disttemp = qglGenSymbolsEXT(GL_SCALAR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
@ -892,7 +892,7 @@ void Parhelia_CreateShaders()
glDisable(GL_VERTEX_SHADER_EXT);
// checkerror();
// Parhelia_checkerror();
}
@ -911,7 +911,7 @@ void Parhelia_EnableDiffuseShader(const transform_t *tr, vec3_t lightOrig)
glEnable(GL_VERTEX_SHADER_EXT);
qglBindVertexShaderEXT( vertex_shaders );
checkerror();
Parhelia_checkerror();
glEnable(GL_FRAGMENT_SHADER_MTX );
@ -933,7 +933,7 @@ void Parhelia_EnableDiffuseShader(const transform_t *tr, vec3_t lightOrig)
GL_SetupCubeMapMatrix(tr);
qglBindFragShaderMTX( fragment_shaders + 1 );
checkerror();
Parhelia_checkerror();
}
else
@ -949,7 +949,7 @@ void Parhelia_EnableDiffuseShader(const transform_t *tr, vec3_t lightOrig)
glTranslatef(-lightOrig[0], -lightOrig[1], -lightOrig[2]);
qglBindFragShaderMTX( fragment_shaders );
checkerror();
Parhelia_checkerror();
}
GL_SelectTexture(GL_TEXTURE0_ARB);
@ -993,7 +993,7 @@ void Parhelia_EnableSpecularShader(const transform_t *tr, vec3_t lightOrig,
vec3_t scaler = {0.5f, 0.5f, 0.5f};
glEnable(GL_VERTEX_SHADER_EXT);
qglBindVertexShaderEXT( vertex_shaders+1 );
checkerror();
Parhelia_checkerror();
glEnable(GL_FRAGMENT_SHADER_MTX );
@ -1021,7 +1021,7 @@ void Parhelia_EnableSpecularShader(const transform_t *tr, vec3_t lightOrig,
GL_SetupCubeMapMatrix(tr);
qglBindFragShaderMTX( fragment_shaders + 3 );
checkerror();
Parhelia_checkerror();
}
else
{
@ -1036,7 +1036,7 @@ void Parhelia_EnableSpecularShader(const transform_t *tr, vec3_t lightOrig,
glTranslatef(-lightOrig[0], -lightOrig[1], -lightOrig[2]);
qglBindFragShaderMTX( fragment_shaders + 2 );
checkerror();
Parhelia_checkerror();
}
GL_SelectTexture(GL_TEXTURE0_ARB);

View file

@ -104,7 +104,7 @@ static GLuint lightPos, eyePos; // vertex shader constants
//#define RADEONDEBUG
#ifdef RADEONDEBUG
void checkerror()
void Radeon_checkerror()
{
GLuint error = glGetError();
if ( error != GL_NO_ERROR )
@ -114,7 +114,7 @@ void checkerror()
}
#else
#define checkerror() do { } while(0)
#define Radeon_checkerror() do { } while(0)
#endif
@ -334,28 +334,28 @@ void Radeon_CreateShaders()
// combined diffuse & specular shader w/ vertex color
qglBindFragmentShaderATI(fragment_shaders);
checkerror();
Radeon_checkerror();
qglBeginFragmentShaderATI();
checkerror();
Radeon_checkerror();
qglSetFragmentShaderConstantATI(GL_CON_0_ATI, &scaler[0]);
checkerror();
Radeon_checkerror();
// texld r0, t0
qglSampleMapATI (GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r1, t1
qglSampleMapATI (GL_REG_1_ATI, GL_TEXTURE1_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r2, t2
qglSampleMapATI (GL_REG_2_ATI, GL_TEXTURE2_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r3, t3
qglSampleMapATI (GL_REG_3_ATI, GL_TEXTURE3_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r4, t4
qglSampleMapATI (GL_REG_4_ATI, GL_TEXTURE4_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// gloss * atten * light color * specular +
// dot * color * atten * light color * self shadow =
@ -367,20 +367,20 @@ void Radeon_CreateShaders()
GL_REG_2_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_SATURATE_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI,
GL_REG_2_ATI, GL_NONE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI);
checkerror();
Radeon_checkerror();
// +mov_x8_sat r2.a, r1_bx2.b // self shadow term
qglAlphaFragmentOp1ATI(GL_MOV_ATI,
GL_REG_2_ATI, GL_8X_BIT_ATI|GL_SATURATE_BIT_ATI,
GL_REG_1_ATI, GL_BLUE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI);
checkerror();
Radeon_checkerror();
// dp3_sat r1.rgb, r0_bx2.rgb, r1_bx2.rgb // diffuse
qglColorFragmentOp2ATI(GL_DOT3_ATI,
GL_REG_1_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_SATURATE_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI,
GL_REG_1_ATI, GL_NONE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI);
checkerror();
Radeon_checkerror();
// +mad_x2_sat r1.a, r2.b, r2.b, -c0.b // specular exponent
qglAlphaFragmentOp3ATI(GL_MAD_ATI,
@ -388,95 +388,95 @@ void Radeon_CreateShaders()
GL_REG_2_ATI, GL_BLUE, GL_NONE,
GL_REG_2_ATI, GL_BLUE, GL_NONE,
GL_CON_0_ATI, GL_BLUE, GL_NEGATE_BIT_ATI);
checkerror();
Radeon_checkerror();
// mul r1.rgb, r1.rgb, r3.rgb // diffuse color * diffuse bump
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_1_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_3_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// +mul r1.a, r1.a, r1.a // raise exponent
qglAlphaFragmentOp2ATI(GL_MUL_ATI,
GL_REG_1_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// mul r4.rgb, r4.rgb, v0.rgb // atten * light color
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_4_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_NONE,
GL_REG_4_ATI, GL_NONE, GL_NONE,
GL_PRIMARY_COLOR_ARB, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// +mul r1.a, r1.a, r1.a // raise exponent
qglAlphaFragmentOp2ATI(GL_MUL_ATI,
GL_REG_1_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// mul r1.rgb, r1.rgb, r2.a // self shadow * diffuse
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_1_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_2_ATI, GL_ALPHA, GL_NONE);
checkerror();
Radeon_checkerror();
// +mul r0.a, r1.a, r0.a // specular * gloss map
qglAlphaFragmentOp2ATI(GL_MUL_ATI,
GL_REG_0_ATI, GL_SATURATE_BIT_ATI,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_0_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// add r0.rgb, r1.rgb, r0.a // diffuse + specular
qglColorFragmentOp2ATI(GL_ADD_ATI,
GL_REG_0_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_0_ATI, GL_ALPHA, GL_NONE);
checkerror();
Radeon_checkerror();
// mul_sat r0.rgb, r0.rgb, r4.rgb // (diffuse + specular)*atten*color
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_0_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_NONE,
GL_REG_4_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
qglEndFragmentShaderATI();
checkerror();
Radeon_checkerror();
// Second shader with cube filter
qglBindFragmentShaderATI(fragment_shaders+1);
checkerror();
Radeon_checkerror();
qglBeginFragmentShaderATI();
checkerror();
Radeon_checkerror();
qglSetFragmentShaderConstantATI(GL_CON_0_ATI, &scaler[0]);
checkerror();
Radeon_checkerror();
// texld r0, t0
qglSampleMapATI (GL_REG_0_ATI, GL_TEXTURE0_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r1, t1
qglSampleMapATI (GL_REG_1_ATI, GL_TEXTURE1_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r2, t2
qglSampleMapATI (GL_REG_2_ATI, GL_TEXTURE2_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r3, t3
qglSampleMapATI (GL_REG_3_ATI, GL_TEXTURE3_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r4, t4
qglSampleMapATI (GL_REG_4_ATI, GL_TEXTURE4_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// texld r5, t5
qglSampleMapATI (GL_REG_5_ATI, GL_TEXTURE5_ARB, GL_SWIZZLE_STR_ATI);
checkerror();
Radeon_checkerror();
// gloss * atten * light color * specular +
// dot * color * atten * light color * self shadow =
@ -488,20 +488,20 @@ void Radeon_CreateShaders()
GL_REG_2_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_SATURATE_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI,
GL_REG_2_ATI, GL_NONE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI);
checkerror();
Radeon_checkerror();
// +mov_x8_sat r2.a, r1_bx2.b // self shadow term
qglAlphaFragmentOp1ATI(GL_MOV_ATI,
GL_REG_2_ATI, GL_8X_BIT_ATI|GL_SATURATE_BIT_ATI,
GL_REG_1_ATI, GL_BLUE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI);
checkerror();
Radeon_checkerror();
// dp3_sat r1.rgb, r0_bx2.rgb, r1_bx2.rgb // diffuse
qglColorFragmentOp2ATI(GL_DOT3_ATI,
GL_REG_1_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_SATURATE_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI,
GL_REG_1_ATI, GL_NONE, GL_2X_BIT_ATI|GL_BIAS_BIT_ATI);
checkerror();
Radeon_checkerror();
// +mad_x2_sat r1.a, r2.b, r2.b, -c0.b // specular exponent
qglAlphaFragmentOp3ATI(GL_MAD_ATI,
@ -509,74 +509,74 @@ void Radeon_CreateShaders()
GL_REG_2_ATI, GL_BLUE, GL_NONE,
GL_REG_2_ATI, GL_BLUE, GL_NONE,
GL_CON_0_ATI, GL_BLUE, GL_NEGATE_BIT_ATI);
checkerror();
Radeon_checkerror();
// mul r1.rgb, r1.rgb, r3.rgb // diffuse color * diffuse bump
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_1_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_3_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// +mul r1.a, r1.a, r1.a // raise exponent
qglAlphaFragmentOp2ATI(GL_MUL_ATI,
GL_REG_1_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// mul r4.rgb, r4.rgb, v0.rgb // atten * light color
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_4_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_NONE,
GL_REG_4_ATI, GL_NONE, GL_NONE,
GL_PRIMARY_COLOR_ARB, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// +mul r1.a, r1.a, r1.a // raise exponent
qglAlphaFragmentOp2ATI(GL_MUL_ATI,
GL_REG_1_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// mul r1.rgb, r1.rgb, r2.a // self shadow * diffuse
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_1_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_2_ATI, GL_ALPHA, GL_NONE);
checkerror();
Radeon_checkerror();
// +mul r0.a, r1.a, r0.a // specular * gloss map
qglAlphaFragmentOp2ATI(GL_MUL_ATI,
GL_REG_0_ATI, GL_SATURATE_BIT_ATI,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_0_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// add r0.rgb, r0.rgb, r0.a // diffuse + specular
qglColorFragmentOp2ATI(GL_ADD_ATI,
GL_REG_0_ATI, GL_RED_BIT_ATI|GL_GREEN_BIT_ATI|GL_BLUE_BIT_ATI, GL_NONE,
GL_REG_1_ATI, GL_NONE, GL_NONE,
GL_REG_0_ATI, GL_ALPHA, GL_NONE);
checkerror();
Radeon_checkerror();
// mul r0.rgb, r0.rgb, r4.rgb // (diffuse + specular)*atten*color
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_0_ATI, GL_NONE, GL_NONE,
GL_REG_0_ATI, GL_NONE, GL_NONE,
GL_REG_4_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
// mul_sat r0.rgb, r0.rgb, r5.rgb // (diffuse + specular)*atten*color*filter
qglColorFragmentOp2ATI(GL_MUL_ATI,
GL_REG_0_ATI, GL_NONE, GL_SATURATE_BIT_ATI,
GL_REG_0_ATI, GL_NONE, GL_NONE,
GL_REG_5_ATI, GL_NONE, GL_NONE);
checkerror();
Radeon_checkerror();
qglEndFragmentShaderATI();
checkerror();
Radeon_checkerror();
glDisable(GL_FRAGMENT_SHADER_ATI);
@ -584,7 +584,7 @@ void Radeon_CreateShaders()
glEnable(GL_VERTEX_SHADER_EXT);
vertex_shaders = qglGenVertexShadersEXT(2);
checkerror();
Radeon_checkerror();
lightPos = qglGenSymbolsEXT(GL_VECTOR_EXT, GL_INVARIANT_EXT,
GL_FULL_RANGE_EXT, 1);
eyePos = qglGenSymbolsEXT(GL_VECTOR_EXT, GL_INVARIANT_EXT,
@ -592,253 +592,253 @@ void Radeon_CreateShaders()
qglBindVertexShaderEXT(vertex_shaders);
checkerror();
Radeon_checkerror();
qglBeginVertexShaderEXT();
checkerror();
Radeon_checkerror();
// Generates a necessary input for the diffuse bumpmapping registers
mvp = qglBindParameterEXT( GL_MVP_MATRIX_EXT );
checkerror();
Radeon_checkerror();
modelview = qglBindParameterEXT( GL_MODELVIEW_MATRIX );
checkerror();
Radeon_checkerror();
vertex = qglBindParameterEXT( GL_CURRENT_VERTEX_EXT );
checkerror();
Radeon_checkerror();
color = qglBindParameterEXT( GL_CURRENT_COLOR );
checkerror();
Radeon_checkerror();
texturematrix = qglBindTextureUnitParameterEXT( GL_TEXTURE4_ARB, GL_TEXTURE_MATRIX );
checkerror();
Radeon_checkerror();
texcoord0 = qglBindTextureUnitParameterEXT( GL_TEXTURE0_ARB, GL_CURRENT_TEXTURE_COORDS );
checkerror();
Radeon_checkerror();
texcoord1 = qglBindTextureUnitParameterEXT( GL_TEXTURE1_ARB, GL_CURRENT_TEXTURE_COORDS );
checkerror();
Radeon_checkerror();
texcoord2 = qglBindTextureUnitParameterEXT( GL_TEXTURE2_ARB, GL_CURRENT_TEXTURE_COORDS );
checkerror();
Radeon_checkerror();
texcoord3 = qglBindTextureUnitParameterEXT( GL_TEXTURE3_ARB, GL_CURRENT_TEXTURE_COORDS );
checkerror();
Radeon_checkerror();
disttemp = qglGenSymbolsEXT(GL_SCALAR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
checkerror();
Radeon_checkerror();
disttemp2 = qglGenSymbolsEXT(GL_SCALAR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
checkerror();
Radeon_checkerror();
zcomp = qglGenSymbolsEXT(GL_VECTOR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
checkerror();
Radeon_checkerror();
tempvec = qglGenSymbolsEXT(GL_VECTOR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
checkerror();
Radeon_checkerror();
fogstart = qglBindParameterEXT( GL_FOG_START );
checkerror();
Radeon_checkerror();
fogend = qglBindParameterEXT( GL_FOG_END );
checkerror();
Radeon_checkerror();
// Transform vertex to view-space
qglShaderOp2EXT( GL_OP_MULTIPLY_MATRIX_EXT, GL_OUTPUT_VERTEX_EXT, mvp, vertex );
checkerror();
Radeon_checkerror();
// Transform vertex by texture matrix and copy to output
qglShaderOp2EXT( GL_OP_MULTIPLY_MATRIX_EXT, GL_OUTPUT_TEXTURE_COORD4_EXT, texturematrix, vertex );
checkerror();
Radeon_checkerror();
// copy tex coords of unit 0 to unit 3
qglShaderOp1EXT( GL_OP_MOV_EXT, GL_OUTPUT_TEXTURE_COORD0_EXT, texcoord0);
checkerror();
Radeon_checkerror();
qglShaderOp1EXT( GL_OP_MOV_EXT, GL_OUTPUT_TEXTURE_COORD3_EXT, texcoord0);
checkerror();
Radeon_checkerror();
qglShaderOp1EXT( GL_OP_MOV_EXT, GL_OUTPUT_COLOR0_EXT, color);
checkerror();
Radeon_checkerror();
// Transform vertex and take z for fog
qglExtractComponentEXT( zcomp, modelview, 2);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, zcomp, vertex );
checkerror();
Radeon_checkerror();
// calculate fog values end - z and end - start
qglShaderOp2EXT( GL_OP_SUB_EXT, disttemp, fogend, disttemp);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_SUB_EXT, disttemp2, fogend, fogstart);
checkerror();
Radeon_checkerror();
// divide end - z by end - start, that's it
qglShaderOp1EXT( GL_OP_RECIP_EXT, disttemp2, disttemp2);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_MUL_EXT, GL_OUTPUT_FOG_EXT, disttemp, disttemp2);
checkerror();
Radeon_checkerror();
// calculate light position
qglShaderOp2EXT( GL_OP_SUB_EXT, tempvec, lightPos, vertex);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT3_EXT, disttemp, tempvec, tempvec);
checkerror();
Radeon_checkerror();
qglShaderOp1EXT( GL_OP_RECIP_SQRT_EXT, disttemp, disttemp);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_MUL_EXT, tempvec, tempvec, disttemp);
checkerror();
Radeon_checkerror();
// Normalized light vec now in tempvec, transform to tex1
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord1);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD1_EXT, disttemp, 0);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord2);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD1_EXT, disttemp, 1);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord3);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD1_EXT, disttemp, 2);
checkerror();
Radeon_checkerror();
// Now, calculate halfvec
qglShaderOp2EXT( GL_OP_SUB_EXT, zcomp, eyePos, vertex);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_ADD_EXT, tempvec, tempvec, zcomp);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT3_EXT, disttemp, tempvec, tempvec);
checkerror();
Radeon_checkerror();
qglShaderOp1EXT( GL_OP_RECIP_SQRT_EXT, disttemp, disttemp);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_MUL_EXT, tempvec, tempvec, disttemp);
checkerror();
Radeon_checkerror();
// Normalized half vec now in tempvec, transform to tex1
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord1);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD2_EXT, disttemp, 0);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord2);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD2_EXT, disttemp, 1);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord3);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD2_EXT, disttemp, 2);
qglEndVertexShaderEXT();
checkerror();
Radeon_checkerror();
// And the same with two transformed textures
qglBindVertexShaderEXT(vertex_shaders+1);
checkerror();
Radeon_checkerror();
qglBeginVertexShaderEXT();
checkerror();
Radeon_checkerror();
// Generates a necessary input for the diffuse bumpmapping registers
mvp = qglBindParameterEXT( GL_MVP_MATRIX_EXT );
checkerror();
Radeon_checkerror();
modelview = qglBindParameterEXT( GL_MODELVIEW_MATRIX );
checkerror();
Radeon_checkerror();
vertex = qglBindParameterEXT( GL_CURRENT_VERTEX_EXT );
checkerror();
Radeon_checkerror();
color = qglBindParameterEXT( GL_CURRENT_COLOR );
checkerror();
Radeon_checkerror();
texturematrix = qglBindTextureUnitParameterEXT( GL_TEXTURE4_ARB, GL_TEXTURE_MATRIX );
checkerror();
Radeon_checkerror();
texturematrix2 = qglBindTextureUnitParameterEXT( GL_TEXTURE5_ARB, GL_TEXTURE_MATRIX );
checkerror();
Radeon_checkerror();
texcoord0 = qglBindTextureUnitParameterEXT( GL_TEXTURE0_ARB, GL_CURRENT_TEXTURE_COORDS );
checkerror();
Radeon_checkerror();
texcoord1 = qglBindTextureUnitParameterEXT( GL_TEXTURE1_ARB, GL_CURRENT_TEXTURE_COORDS );
checkerror();
Radeon_checkerror();
texcoord2 = qglBindTextureUnitParameterEXT( GL_TEXTURE2_ARB, GL_CURRENT_TEXTURE_COORDS );
checkerror();
Radeon_checkerror();
texcoord3 = qglBindTextureUnitParameterEXT( GL_TEXTURE3_ARB, GL_CURRENT_TEXTURE_COORDS );
checkerror();
Radeon_checkerror();
disttemp = qglGenSymbolsEXT(GL_SCALAR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
checkerror();
Radeon_checkerror();
disttemp2 = qglGenSymbolsEXT(GL_SCALAR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
checkerror();
Radeon_checkerror();
zcomp = qglGenSymbolsEXT(GL_VECTOR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
checkerror();
Radeon_checkerror();
tempvec = qglGenSymbolsEXT(GL_VECTOR_EXT, GL_LOCAL_EXT, GL_FULL_RANGE_EXT, 1);
checkerror();
Radeon_checkerror();
fogstart = qglBindParameterEXT( GL_FOG_START );
checkerror();
Radeon_checkerror();
fogend = qglBindParameterEXT( GL_FOG_END );
checkerror();
Radeon_checkerror();
// Transform vertex to view-space
qglShaderOp2EXT( GL_OP_MULTIPLY_MATRIX_EXT, GL_OUTPUT_VERTEX_EXT, mvp, vertex );
checkerror();
Radeon_checkerror();
// Transform vertex by texture matrix and copy to output
qglShaderOp2EXT( GL_OP_MULTIPLY_MATRIX_EXT, GL_OUTPUT_TEXTURE_COORD4_EXT, texturematrix, vertex );
checkerror();
Radeon_checkerror();
// Transform vertex by texture matrix and copy to output
qglShaderOp2EXT( GL_OP_MULTIPLY_MATRIX_EXT, GL_OUTPUT_TEXTURE_COORD5_EXT, texturematrix2, vertex );
checkerror();
Radeon_checkerror();
// copy tex coords of unit 0 to unit 3
qglShaderOp1EXT( GL_OP_MOV_EXT, GL_OUTPUT_TEXTURE_COORD0_EXT, texcoord0);
checkerror();
Radeon_checkerror();
qglShaderOp1EXT( GL_OP_MOV_EXT, GL_OUTPUT_TEXTURE_COORD3_EXT, texcoord0);
checkerror();
Radeon_checkerror();
qglShaderOp1EXT( GL_OP_MOV_EXT, GL_OUTPUT_COLOR0_EXT, color);
checkerror();
Radeon_checkerror();
// Transform vertex and take z for fog
qglExtractComponentEXT( zcomp, modelview, 2);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, zcomp, vertex );
checkerror();
Radeon_checkerror();
// calculate fog values end - z and end - start
qglShaderOp2EXT( GL_OP_SUB_EXT, disttemp, fogend, disttemp);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_SUB_EXT, disttemp2, fogend, fogstart);
checkerror();
Radeon_checkerror();
// divide end - z by end - start, that's it
qglShaderOp1EXT( GL_OP_RECIP_EXT, disttemp2, disttemp2);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_MUL_EXT, GL_OUTPUT_FOG_EXT, disttemp, disttemp2);
checkerror();
Radeon_checkerror();
// calculate light position
qglShaderOp2EXT( GL_OP_SUB_EXT, tempvec, lightPos, vertex);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT3_EXT, disttemp, tempvec, tempvec);
checkerror();
Radeon_checkerror();
qglShaderOp1EXT( GL_OP_RECIP_SQRT_EXT, disttemp, disttemp);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_MUL_EXT, tempvec, tempvec, disttemp);
checkerror();
Radeon_checkerror();
// Normalized light vec now in tempvec, transform to tex1
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord1);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD1_EXT, disttemp, 0);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord2);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD1_EXT, disttemp, 1);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord3);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD1_EXT, disttemp, 2);
checkerror();
Radeon_checkerror();
// Now, calculate halfvec
qglShaderOp2EXT( GL_OP_SUB_EXT, zcomp, eyePos, vertex);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_ADD_EXT, tempvec, tempvec, zcomp);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT3_EXT, disttemp, tempvec, tempvec);
checkerror();
Radeon_checkerror();
qglShaderOp1EXT( GL_OP_RECIP_SQRT_EXT, disttemp, disttemp);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_MUL_EXT, tempvec, tempvec, disttemp);
checkerror();
Radeon_checkerror();
// Normalized half vec now in tempvec, transform to tex1
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord1);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD2_EXT, disttemp, 0);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord2);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD2_EXT, disttemp, 1);
checkerror();
Radeon_checkerror();
qglShaderOp2EXT( GL_OP_DOT4_EXT, disttemp, tempvec, texcoord3);
checkerror();
Radeon_checkerror();
qglInsertComponentEXT( GL_OUTPUT_TEXTURE_COORD2_EXT, disttemp, 2);
qglEndVertexShaderEXT();
checkerror();
Radeon_checkerror();
glDisable(GL_VERTEX_SHADER_EXT);
}
@ -912,9 +912,9 @@ void Radeon_EnableBumpShader(const transform_t *tr, vec3_t lightOrig,
{
glGetError();
qglBindFragmentShaderATI( fragment_shaders + 1 );
checkerror();
Radeon_checkerror();
qglBindVertexShaderEXT( vertex_shaders + 1);
checkerror();
Radeon_checkerror();
glEnable(GL_TEXTURE_CUBE_MAP_ARB);
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, currentshadowlight->filtercube);
@ -929,9 +929,9 @@ void Radeon_EnableBumpShader(const transform_t *tr, vec3_t lightOrig,
{
glGetError();
qglBindFragmentShaderATI( fragment_shaders );
checkerror();
Radeon_checkerror();
qglBindVertexShaderEXT( vertex_shaders );
checkerror();
Radeon_checkerror();
}
glEnable(GL_TEXTURE_3D);