mirror of
https://github.com/jenshemprich/MacGLide.git
synced 2024-06-03 01:29:32 +00:00
Saving memory bandwidth
This commit is contained in:
parent
931a3484ba
commit
1c7ed63cb7
|
@ -89,6 +89,12 @@ void RenderInitialize(void)
|
||||||
OGLRender.TColor2 = NULL;
|
OGLRender.TColor2 = NULL;
|
||||||
}
|
}
|
||||||
OGLRender.TTexture = (TTextureStruct*) AllocBuffer(triangles, sizeof(TTextureStruct));
|
OGLRender.TTexture = (TTextureStruct*) AllocBuffer(triangles, sizeof(TTextureStruct));
|
||||||
|
// Preinit static data and save a few cycles in RenderAddXXX()
|
||||||
|
for(int i = 0; i < OGLRender.FrameBufferStartIndex; i++)
|
||||||
|
{
|
||||||
|
TTextureStruct* pTS = &OGLRender.TTexture[i];
|
||||||
|
pTS->aq = pTS->bq = pTS->cq = 0.0f;
|
||||||
|
}
|
||||||
OGLRender.TVertex = (TVertexStruct*) AllocBuffer(triangles, sizeof(TVertexStruct));
|
OGLRender.TVertex = (TVertexStruct*) AllocBuffer(triangles, sizeof(TVertexStruct));
|
||||||
OGLRender.TFog = (TFogStruct*) AllocBuffer(OGLRender.FrameBufferStartIndex, sizeof(TFogStruct));
|
OGLRender.TFog = (TFogStruct*) AllocBuffer(OGLRender.FrameBufferStartIndex, sizeof(TFogStruct));
|
||||||
// Initialise compiled vertex arrays
|
// Initialise compiled vertex arrays
|
||||||
|
@ -481,20 +487,19 @@ void RenderDrawTriangles_impl( void )
|
||||||
glReportError();
|
glReportError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Provide dummy coordinates when fog is turned off but
|
||||||
|
// the texture unit is on because of color/alpha inversion
|
||||||
if (OGLRender.UseEnvCombineFog && OpenGL.Fog == false)
|
if (OGLRender.UseEnvCombineFog && OpenGL.Fog == false)
|
||||||
{
|
{
|
||||||
// Provide dummy coordinates when fog is turned off but
|
|
||||||
// the texture unit is on because of color/alpha inversion
|
|
||||||
int buffer_end = OGLRender.BufferStart + OGLRender.NumberOfTriangles;
|
int buffer_end = OGLRender.BufferStart + OGLRender.NumberOfTriangles;
|
||||||
|
TFogStruct* pF = OGLRender.TFog;
|
||||||
for (int index = OGLRender.BufferStart; index < buffer_end; index++)
|
for (int index = OGLRender.BufferStart; index < buffer_end; index++)
|
||||||
{
|
{
|
||||||
OGLRender.TFog[index].af = 0.0f;
|
pF[index].af =
|
||||||
OGLRender.TFog[index].bf = 0.0f;
|
pF[index].bf =
|
||||||
OGLRender.TFog[index].cf = 0.0f;
|
pF[index].cf = 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render the triangles
|
// Render the triangles
|
||||||
const bool use_compiled_vertex_arrays = InternalConfig.EXT_compiled_vertex_array
|
const bool use_compiled_vertex_arrays = InternalConfig.EXT_compiled_vertex_array
|
||||||
// && OGLRender.NumberOfTriangles > 1 // Might be more optimal
|
// && OGLRender.NumberOfTriangles > 1 // Might be more optimal
|
||||||
|
@ -513,35 +518,12 @@ void RenderDrawTriangles_impl( void )
|
||||||
}
|
}
|
||||||
glLockArraysEXT(OGLRender.BufferLockedStart * 3, OGLRender.NumberOfTriangles * 3);
|
glLockArraysEXT(OGLRender.BufferLockedStart * 3, OGLRender.NumberOfTriangles * 3);
|
||||||
OGLRender.BufferLocked = true;
|
OGLRender.BufferLocked = true;
|
||||||
|
glDrawArrays(GL_TRIANGLES, OGLRender.BufferLockedStart * 3, OGLRender.NumberOfTriangles * 3);
|
||||||
GLint primitive;
|
|
||||||
// Test code to track down the parameters of rendered triangles
|
|
||||||
/*
|
|
||||||
if (true)
|
|
||||||
{
|
|
||||||
// Dust clouds in Carma (when breaking)
|
|
||||||
//if (OpenGL.ChromaKey && OpenGL.Blend)
|
|
||||||
// Sunglasses in Deux Ex
|
|
||||||
if (Glide.State.ColorCombineInvert)
|
|
||||||
{
|
|
||||||
primitive = GL_LINE_LOOP;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
primitive = GL_TRIANGLES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else */
|
|
||||||
{
|
|
||||||
primitive = GL_TRIANGLES;
|
|
||||||
}
|
|
||||||
glDrawArrays(primitive, OGLRender.BufferLockedStart * 3, OGLRender.NumberOfTriangles * 3);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RenderDrawTriangles_ImmediateMode(use_two_tex);
|
RenderDrawTriangles_ImmediateMode(use_two_tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fill gaps?
|
// Fill gaps?
|
||||||
if ((InternalConfig.GapFix & OpenGLideGapFixFlag_Enabled) && !OpenGL.Blend)
|
if ((InternalConfig.GapFix & OpenGLideGapFixFlag_Enabled) && !OpenGL.Blend)
|
||||||
{
|
{
|
||||||
|
@ -593,7 +575,6 @@ void RenderDrawTriangles_impl( void )
|
||||||
glReportError();
|
glReportError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( use_two_tex )
|
if ( use_two_tex )
|
||||||
{
|
{
|
||||||
glActiveTextureARB(OpenGL.ColorAlphaUnit1 + 1);
|
glActiveTextureARB(OpenGL.ColorAlphaUnit1 + 1);
|
||||||
|
@ -637,7 +618,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
// Peek to avoid updating the render state twice
|
// Peek to avoid updating the render state twice
|
||||||
if (OGLRender.NumberOfTriangles)
|
if (OGLRender.NumberOfTriangles)
|
||||||
{
|
{
|
||||||
RenderDrawTriangles();
|
RenderDrawTriangles_impl();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -652,6 +633,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
|
|
||||||
TColorStruct* pC = &OGLRender.TColor[OGLRender.RenderBufferSize];
|
TColorStruct* pC = &OGLRender.TColor[OGLRender.RenderBufferSize];
|
||||||
TColorStruct* pC2;
|
TColorStruct* pC2;
|
||||||
|
const GlideState glidestate = Glide.State;
|
||||||
if (OpenGL.ColorAlphaUnit2)
|
if (OpenGL.ColorAlphaUnit2)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -664,7 +646,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
pC->bb = b->b * D1OVER255;
|
pC->bb = b->b * D1OVER255;
|
||||||
}
|
}
|
||||||
// Alpha
|
// Alpha
|
||||||
if (Glide.State.AlphaLocal == GR_COMBINE_LOCAL_DEPTH)
|
if (glidestate.AlphaLocal == GR_COMBINE_LOCAL_DEPTH)
|
||||||
{
|
{
|
||||||
// @todo: find out whether z has to be divided by 255 or by 65535
|
// @todo: find out whether z has to be divided by 255 or by 65535
|
||||||
pC->aa = a->z * D1OVER255;
|
pC->aa = a->z * D1OVER255;
|
||||||
|
@ -683,7 +665,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
// Color Stuff, need to optimize it
|
// Color Stuff, need to optimize it
|
||||||
if ( Glide.ALocal )
|
if ( Glide.ALocal )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.AlphaLocal )
|
switch (glidestate.AlphaLocal)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_LOCAL_ITERATED:
|
case GR_COMBINE_LOCAL_ITERATED:
|
||||||
Local.aa = a->a * D1OVER255;
|
Local.aa = a->a * D1OVER255;
|
||||||
|
@ -703,7 +685,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
|
|
||||||
if ( Glide.AOther )
|
if ( Glide.AOther )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.AlphaOther )
|
switch (glidestate.AlphaOther)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_OTHER_ITERATED:
|
case GR_COMBINE_OTHER_ITERATED:
|
||||||
Other.aa = a->a * D1OVER255;
|
Other.aa = a->a * D1OVER255;
|
||||||
|
@ -722,7 +704,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
|
|
||||||
if ( Glide.CLocal )
|
if ( Glide.CLocal )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.ColorCombineLocal )
|
switch (glidestate.ColorCombineLocal)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_LOCAL_ITERATED:
|
case GR_COMBINE_LOCAL_ITERATED:
|
||||||
Local.ar = a->r * D1OVER255;
|
Local.ar = a->r * D1OVER255;
|
||||||
|
@ -736,7 +718,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
case GR_COMBINE_LOCAL_CONSTANT:
|
case GR_COMBINE_LOCAL_CONSTANT:
|
||||||
{
|
{
|
||||||
GLfloat* color;
|
GLfloat* color;
|
||||||
if (Glide.State.Delta0Mode)
|
if (glidestate.Delta0Mode)
|
||||||
{
|
{
|
||||||
color = &OpenGL.Delta0Color[0];
|
color = &OpenGL.Delta0Color[0];
|
||||||
}
|
}
|
||||||
|
@ -754,7 +736,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
|
|
||||||
if ( Glide.COther )
|
if ( Glide.COther )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.ColorCombineOther )
|
switch (glidestate.ColorCombineOther)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_OTHER_ITERATED:
|
case GR_COMBINE_OTHER_ITERATED:
|
||||||
Other.ar = a->r * D1OVER255;
|
Other.ar = a->r * D1OVER255;
|
||||||
|
@ -768,7 +750,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
case GR_COMBINE_OTHER_CONSTANT:
|
case GR_COMBINE_OTHER_CONSTANT:
|
||||||
{
|
{
|
||||||
GLfloat* color;
|
GLfloat* color;
|
||||||
if (Glide.State.Delta0Mode)
|
if (glidestate.Delta0Mode)
|
||||||
{
|
{
|
||||||
color = &OpenGL.Delta0Color[0];
|
color = &OpenGL.Delta0Color[0];
|
||||||
}
|
}
|
||||||
|
@ -789,7 +771,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( Glide.State.ColorCombineFunction )
|
switch (glidestate.ColorCombineFunction)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_FUNCTION_ZERO:
|
case GR_COMBINE_FUNCTION_ZERO:
|
||||||
pC->ar = pC->ag = pC->ab = 0.0f;
|
pC->ar = pC->ag = pC->ab = 0.0f;
|
||||||
|
@ -859,9 +841,9 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
|
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
|
||||||
if ((( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA ) ||
|
if (((glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA) ||
|
||||||
( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB )) &&
|
(glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB)) &&
|
||||||
( Glide.State.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE ) )
|
(glidestate.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE))
|
||||||
{
|
{
|
||||||
pC->ar = Local.ar;
|
pC->ar = Local.ar;
|
||||||
pC->ag = Local.ag;
|
pC->ag = Local.ag;
|
||||||
|
@ -889,9 +871,9 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
|
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
|
||||||
if ((( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA ) ||
|
if (((glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA) ||
|
||||||
( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB )) &&
|
(glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB)) &&
|
||||||
( Glide.State.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE ) )
|
(glidestate.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE))
|
||||||
{
|
{
|
||||||
pC->ar = pC->ag = pC->ab = Local.aa;
|
pC->ar = pC->ag = pC->ab = Local.aa;
|
||||||
pC->br = pC->bg = pC->bb = Local.ba;
|
pC->br = pC->bg = pC->bb = Local.ba;
|
||||||
|
@ -939,7 +921,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( Glide.State.AlphaFunction )
|
switch (glidestate.AlphaFunction)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_FUNCTION_ZERO:
|
case GR_COMBINE_FUNCTION_ZERO:
|
||||||
pC->aa = pC->ba = 0.0f;
|
pC->aa = pC->ba = 0.0f;
|
||||||
|
@ -986,7 +968,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
|
|
||||||
if (OpenGL.FogTextureUnit == 0)
|
if (OpenGL.FogTextureUnit == 0)
|
||||||
{
|
{
|
||||||
if ( Glide.State.ColorCombineInvert )
|
if (glidestate.ColorCombineInvert)
|
||||||
{
|
{
|
||||||
pC->ar = 1.0f - pC->ar - pC2->ar;
|
pC->ar = 1.0f - pC->ar - pC2->ar;
|
||||||
pC->ag = 1.0f - pC->ag - pC2->ag;
|
pC->ag = 1.0f - pC->ag - pC2->ag;
|
||||||
|
@ -998,7 +980,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
pC2->br = pC2->bg = pC2->bb = 0.0f;
|
pC2->br = pC2->bg = pC2->bb = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Glide.State.AlphaInvert )
|
if (glidestate.AlphaInvert)
|
||||||
{
|
{
|
||||||
pC->aa = 1.0f - pC->aa - pC2->aa;
|
pC->aa = 1.0f - pC->aa - pC2->aa;
|
||||||
pC->ba = 1.0f - pC->ba - pC2->ba;
|
pC->ba = 1.0f - pC->ba - pC2->ba;
|
||||||
|
@ -1009,8 +991,8 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
|
|
||||||
TVertexStruct* pV = &OGLRender.TVertex[OGLRender.RenderBufferSize];
|
TVertexStruct* pV = &OGLRender.TVertex[OGLRender.RenderBufferSize];
|
||||||
// Z-Buffering
|
// Z-Buffering
|
||||||
if ( ( Glide.State.DepthBufferMode == GR_DEPTHBUFFER_DISABLE ) ||
|
if ((glidestate.DepthBufferMode == GR_DEPTHBUFFER_DISABLE) ||
|
||||||
( Glide.State.DepthBufferMode == GR_CMP_ALWAYS ) )
|
(glidestate.DepthBufferMode == GR_CMP_ALWAYS))
|
||||||
{
|
{
|
||||||
pV->az = 0.0f;
|
pV->az = 0.0f;
|
||||||
pV->bz = 0.0f;
|
pV->bz = 0.0f;
|
||||||
|
@ -1063,7 +1045,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
}
|
}
|
||||||
|
|
||||||
TTextureStruct* pTS = &OGLRender.TTexture[OGLRender.RenderBufferSize];
|
TTextureStruct* pTS = &OGLRender.TTexture[OGLRender.RenderBufferSize];
|
||||||
if ( OpenGL.Texture )
|
if (OpenGL.Texture)
|
||||||
{
|
{
|
||||||
const float hAspect = Textures->GetHAspect();
|
const float hAspect = Textures->GetHAspect();
|
||||||
const float wAspect = Textures->GetWAspect();
|
const float wAspect = Textures->GetWAspect();
|
||||||
|
@ -1071,11 +1053,9 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
pTS->at = a->tmuvtx[0].tow * hAspect;
|
pTS->at = a->tmuvtx[0].tow * hAspect;
|
||||||
pTS->bs = b->tmuvtx[0].sow * wAspect;
|
pTS->bs = b->tmuvtx[0].sow * wAspect;
|
||||||
pTS->bt = b->tmuvtx[0].tow * hAspect;
|
pTS->bt = b->tmuvtx[0].tow * hAspect;
|
||||||
pTS->aq = 0.0f;
|
|
||||||
pTS->bq = 0.0f;
|
|
||||||
float atmuoow;
|
float atmuoow;
|
||||||
float btmuoow;
|
float btmuoow;
|
||||||
if ( ( Glide.State.STWHint & GR_STWHINT_W_DIFF_TMU0 ) == 0 )
|
if ((glidestate.STWHint & GR_STWHINT_W_DIFF_TMU0) == 0)
|
||||||
{
|
{
|
||||||
atmuoow = a->oow;
|
atmuoow = a->oow;
|
||||||
btmuoow = b->oow;
|
btmuoow = b->oow;
|
||||||
|
@ -1093,60 +1073,41 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
GlideMsg(b, btmuoow);
|
GlideMsg(b, btmuoow);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#ifdef OGL_DEBUG_GLIDE_COORDS
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// @todo: only for complex color alpha model (or at all?)
|
|
||||||
// Does a dummy texture target need texture coords
|
|
||||||
// if env combine doesn't select a texture source?
|
|
||||||
// (See also fog code below)
|
|
||||||
pTS->as = 0.0f;
|
|
||||||
pTS->at = 0.0f;
|
|
||||||
pTS->bs = 0.0f;
|
|
||||||
pTS->bt = 0.0f;
|
|
||||||
pTS->aq = 0.0f;
|
|
||||||
pTS->bq = 0.0f;
|
|
||||||
pTS->aoow = 1.0;
|
|
||||||
pTS->boow = 1.0;
|
|
||||||
|
|
||||||
#ifdef OGL_DEBUG_GLIDE_COORDS
|
|
||||||
GlideMsg(a, 1.0f);
|
GlideMsg(a, 1.0f);
|
||||||
GlideMsg(b, 1.0f);
|
GlideMsg(b, 1.0f);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
TFogStruct* pF = &OGLRender.TFog[OGLRender.RenderBufferSize];
|
TFogStruct* pF = &OGLRender.TFog[OGLRender.RenderBufferSize];
|
||||||
if (Glide.State.FogMode)
|
if (glidestate.FogMode)
|
||||||
{
|
{
|
||||||
float af, bf;
|
if (glidestate.FogMode & GR_FOG_WITH_TABLE)
|
||||||
if (Glide.State.FogMode & GR_FOG_WITH_TABLE)
|
|
||||||
{
|
{
|
||||||
af = (float)OpenGL.FogTable[ (FxU16)(1.0f / a->oow) ] * D1OVER255;
|
pF->af = (float)OpenGL.FogTable[ (FxU16)(1.0f / a->oow) ] * D1OVER255;
|
||||||
bf = (float)OpenGL.FogTable[ (FxU16)(1.0f / b->oow) ] * D1OVER255;
|
pF->bf = (float)OpenGL.FogTable[ (FxU16)(1.0f / b->oow) ] * D1OVER255;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
af = a->a * D1OVER255;
|
pF->af = a->a * D1OVER255;
|
||||||
bf = b->a * D1OVER255;
|
pF->bf = b->a * D1OVER255;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
if ( Glide.State.FogMode & GR_FOG_ADD2 )
|
if ( glidestate.FogMode & GR_FOG_ADD2 )
|
||||||
{
|
{
|
||||||
pF->af = 1.0f - af;
|
pF->af = 1.0f - pF->af;
|
||||||
pF->bf = 1.0f - bf;
|
pF->bf = 1.0f - pF->bf;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
*/
|
*/
|
||||||
{
|
|
||||||
pF->af = af;
|
|
||||||
pF->bf = bf;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OGL_DEBUG
|
#ifdef OGL_DEBUG
|
||||||
DEBUG_MIN_MAX( pF->af, OGLRender.MaxF, OGLRender.MinF );
|
DEBUG_MIN_MAX( pF->af, OGLRender.MaxF, OGLRender.MinF );
|
||||||
DEBUG_MIN_MAX( pF->bf, OGLRender.MaxF, OGLRender.MinF );
|
DEBUG_MIN_MAX( pF->bf, OGLRender.MaxF, OGLRender.MinF );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (OGLRender.UseEnvCombineFog)
|
else /* if (OGLRender.UseEnvCombineFog) */ // env combine fog is the default
|
||||||
{
|
{
|
||||||
// Must provide dummy coords if fog is turned off but
|
// Must provide dummy coords if fog is turned off but
|
||||||
// the texture unit is active because of inveting color/alpha
|
// the texture unit is active because of inveting color/alpha
|
||||||
|
@ -1209,7 +1170,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
glMultiTexCoord4fvARB( OpenGL.ColorAlphaUnit2, &pTS->as );
|
glMultiTexCoord4fvARB( OpenGL.ColorAlphaUnit2, &pTS->as );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Glide.State.FogMode)
|
if (glidestate.FogMode)
|
||||||
{
|
{
|
||||||
if (OGLRender.UseEnvCombineFog)
|
if (OGLRender.UseEnvCombineFog)
|
||||||
{
|
{
|
||||||
|
@ -1237,7 +1198,7 @@ void RenderAddLine( const GrVertex *a, const GrVertex *b, bool unsnap )
|
||||||
glMultiTexCoord4fvARB( OpenGL.ColorAlphaUnit2, &pTS->bs );
|
glMultiTexCoord4fvARB( OpenGL.ColorAlphaUnit2, &pTS->bs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Glide.State.FogMode)
|
if (glidestate.FogMode)
|
||||||
{
|
{
|
||||||
if (OGLRender.UseEnvCombineFog)
|
if (OGLRender.UseEnvCombineFog)
|
||||||
{
|
{
|
||||||
|
@ -1266,7 +1227,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
OGLRender.OverallTriangles++;
|
OGLRender.OverallTriangles++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const int TriangleIndex = OGLRender.BufferStart + OGLRender.NumberOfTriangles ;
|
const int TriangleIndex = OGLRender.BufferStart + OGLRender.NumberOfTriangles;
|
||||||
|
|
||||||
#ifdef OGL_ALL
|
#ifdef OGL_ALL
|
||||||
GlideMsg( "RenderAddTriangle(%d)\n", TriangleIndex);
|
GlideMsg( "RenderAddTriangle(%d)\n", TriangleIndex);
|
||||||
|
@ -1274,6 +1235,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
|
|
||||||
TColorStruct* pC = &OGLRender.TColor[TriangleIndex];
|
TColorStruct* pC = &OGLRender.TColor[TriangleIndex];
|
||||||
TColorStruct* pC2;
|
TColorStruct* pC2;
|
||||||
|
const GlideState glidestate = Glide.State;
|
||||||
if (OpenGL.ColorAlphaUnit2)
|
if (OpenGL.ColorAlphaUnit2)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -1289,7 +1251,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
pC->cb = c->b * D1OVER255;
|
pC->cb = c->b * D1OVER255;
|
||||||
}
|
}
|
||||||
// Alpha
|
// Alpha
|
||||||
if (Glide.State.AlphaLocal == GR_COMBINE_LOCAL_DEPTH)
|
if (glidestate.AlphaLocal == GR_COMBINE_LOCAL_DEPTH)
|
||||||
{
|
{
|
||||||
// @todo: find out whether z has to be divided by 255 or by 65535
|
// @todo: find out whether z has to be divided by 255 or by 65535
|
||||||
pC->aa = a->z * D1OVER255;
|
pC->aa = a->z * D1OVER255;
|
||||||
|
@ -1309,7 +1271,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
memset( pC2, 0, sizeof( TColorStruct ) );
|
memset( pC2, 0, sizeof( TColorStruct ) );
|
||||||
if ( Glide.ALocal )
|
if ( Glide.ALocal )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.AlphaLocal )
|
switch (glidestate.AlphaLocal)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_LOCAL_ITERATED:
|
case GR_COMBINE_LOCAL_ITERATED:
|
||||||
Local.aa = a->a * D1OVER255;
|
Local.aa = a->a * D1OVER255;
|
||||||
|
@ -1331,7 +1293,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
|
|
||||||
if ( Glide.AOther )
|
if ( Glide.AOther )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.AlphaOther )
|
switch (glidestate.AlphaOther)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_OTHER_ITERATED:
|
case GR_COMBINE_OTHER_ITERATED:
|
||||||
Other.aa = a->a * D1OVER255;
|
Other.aa = a->a * D1OVER255;
|
||||||
|
@ -1358,7 +1320,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
|
|
||||||
if ( Glide.CLocal )
|
if ( Glide.CLocal )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.ColorCombineLocal )
|
switch (glidestate.ColorCombineLocal)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_LOCAL_ITERATED:
|
case GR_COMBINE_LOCAL_ITERATED:
|
||||||
Local.ar = a->r * D1OVER255;
|
Local.ar = a->r * D1OVER255;
|
||||||
|
@ -1375,7 +1337,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
case GR_COMBINE_LOCAL_CONSTANT:
|
case GR_COMBINE_LOCAL_CONSTANT:
|
||||||
{
|
{
|
||||||
GLfloat* color;
|
GLfloat* color;
|
||||||
if (Glide.State.Delta0Mode)
|
if (glidestate.Delta0Mode)
|
||||||
{
|
{
|
||||||
color = &OpenGL.Delta0Color[0];
|
color = &OpenGL.Delta0Color[0];
|
||||||
}
|
}
|
||||||
|
@ -1393,7 +1355,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
|
|
||||||
if ( Glide.COther )
|
if ( Glide.COther )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.ColorCombineOther )
|
switch ( glidestate.ColorCombineOther )
|
||||||
{
|
{
|
||||||
case GR_COMBINE_OTHER_ITERATED:
|
case GR_COMBINE_OTHER_ITERATED:
|
||||||
Other.ar = a->r * D1OVER255;
|
Other.ar = a->r * D1OVER255;
|
||||||
|
@ -1410,7 +1372,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
case GR_COMBINE_OTHER_CONSTANT:
|
case GR_COMBINE_OTHER_CONSTANT:
|
||||||
{
|
{
|
||||||
GLfloat* color;
|
GLfloat* color;
|
||||||
if (Glide.State.Delta0Mode)
|
if (glidestate.Delta0Mode)
|
||||||
{
|
{
|
||||||
color = &OpenGL.Delta0Color[0];
|
color = &OpenGL.Delta0Color[0];
|
||||||
}
|
}
|
||||||
|
@ -1443,7 +1405,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
|
|
||||||
ColorFunctionFunc( pC, pC2, &Local, &Other );
|
ColorFunctionFunc( pC, pC2, &Local, &Other );
|
||||||
|
|
||||||
switch ( Glide.State.AlphaFunction )
|
switch (glidestate.AlphaFunction)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_FUNCTION_ZERO:
|
case GR_COMBINE_FUNCTION_ZERO:
|
||||||
pC->aa = pC->ba = pC->ca = 0.0f;
|
pC->aa = pC->ba = pC->ca = 0.0f;
|
||||||
|
@ -1498,7 +1460,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
|
|
||||||
if (OpenGL.FogTextureUnit == 0)
|
if (OpenGL.FogTextureUnit == 0)
|
||||||
{
|
{
|
||||||
if ( Glide.State.ColorCombineInvert )
|
if (glidestate.ColorCombineInvert)
|
||||||
{
|
{
|
||||||
pC->ar = 1.0f - pC->ar - pC2->ar;
|
pC->ar = 1.0f - pC->ar - pC2->ar;
|
||||||
pC->ag = 1.0f - pC->ag - pC2->ag;
|
pC->ag = 1.0f - pC->ag - pC2->ag;
|
||||||
|
@ -1514,7 +1476,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
pC2->cr = pC2->cg = pC2->cb = 0.0f;
|
pC2->cr = pC2->cg = pC2->cb = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Glide.State.AlphaInvert )
|
if (glidestate.AlphaInvert)
|
||||||
{
|
{
|
||||||
pC->aa = 1.0f - pC->aa - pC2->aa;
|
pC->aa = 1.0f - pC->aa - pC2->aa;
|
||||||
pC->ba = 1.0f - pC->ba - pC2->ba;
|
pC->ba = 1.0f - pC->ba - pC2->ba;
|
||||||
|
@ -1526,8 +1488,9 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
|
|
||||||
TVertexStruct* pV = &OGLRender.TVertex[ TriangleIndex ];
|
TVertexStruct* pV = &OGLRender.TVertex[ TriangleIndex ];
|
||||||
// Z-Buffering
|
// Z-Buffering
|
||||||
if ( ( Glide.State.DepthBufferMode == GR_DEPTHBUFFER_DISABLE ) ||
|
// @todo: check why this has been added , since it look s unnecessary
|
||||||
( Glide.State.DepthFunction == GR_CMP_ALWAYS ) )
|
if ((glidestate.DepthBufferMode == GR_DEPTHBUFFER_DISABLE) ||
|
||||||
|
(glidestate.DepthFunction == GR_CMP_ALWAYS))
|
||||||
{
|
{
|
||||||
pV->az = 0.0f;
|
pV->az = 0.0f;
|
||||||
pV->bz = 0.0f;
|
pV->bz = 0.0f;
|
||||||
|
@ -1587,14 +1550,13 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
pV->cy = c->y;
|
pV->cy = c->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
TTextureStruct* pTS = &OGLRender.TTexture[TriangleIndex];
|
bool generate_subtextures = OpenGL.Texture;
|
||||||
bool generate_subtextures;
|
|
||||||
if (OpenGL.Texture)
|
if (OpenGL.Texture)
|
||||||
{
|
{
|
||||||
float atmuoow;
|
float atmuoow;
|
||||||
float btmuoow;
|
float btmuoow;
|
||||||
float ctmuoow;
|
float ctmuoow;
|
||||||
if ( ( Glide.State.STWHint & GR_STWHINT_W_DIFF_TMU0 ) == 0 )
|
if ((glidestate.STWHint & GR_STWHINT_W_DIFF_TMU0) == 0)
|
||||||
{
|
{
|
||||||
atmuoow = a->oow;
|
atmuoow = a->oow;
|
||||||
btmuoow = b->oow;
|
btmuoow = b->oow;
|
||||||
|
@ -1610,6 +1572,7 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
generate_subtextures = InternalConfig.GenerateSubTextures &&
|
generate_subtextures = InternalConfig.GenerateSubTextures &&
|
||||||
OpenGL.SClampMode != GL_REPEAT &&
|
OpenGL.SClampMode != GL_REPEAT &&
|
||||||
OpenGL.TClampMode != GL_REPEAT;
|
OpenGL.TClampMode != GL_REPEAT;
|
||||||
|
TTextureStruct* pTS = &OGLRender.TTexture[TriangleIndex];
|
||||||
if (generate_subtextures)
|
if (generate_subtextures)
|
||||||
{
|
{
|
||||||
pTS->as = a->tmuvtx[ 0 ].sow / atmuoow;
|
pTS->as = a->tmuvtx[ 0 ].sow / atmuoow;
|
||||||
|
@ -1630,7 +1593,6 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
pTS->cs = c->tmuvtx[ 0 ].sow * wAspect * maxoow;
|
pTS->cs = c->tmuvtx[ 0 ].sow * wAspect * maxoow;
|
||||||
pTS->ct = c->tmuvtx[ 0 ].tow * hAspect * maxoow;
|
pTS->ct = c->tmuvtx[ 0 ].tow * hAspect * maxoow;
|
||||||
}
|
}
|
||||||
pTS->aq = pTS->bq = pTS->cq = 0.0f;
|
|
||||||
pTS->aoow = atmuoow * maxoow;
|
pTS->aoow = atmuoow * maxoow;
|
||||||
pTS->boow = btmuoow * maxoow;
|
pTS->boow = btmuoow * maxoow;
|
||||||
pTS->coow = ctmuoow * maxoow;
|
pTS->coow = ctmuoow * maxoow;
|
||||||
|
@ -1641,63 +1603,38 @@ void RenderAddTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c,
|
||||||
GlideMsg(c, maxoow);
|
GlideMsg(c, maxoow);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#ifdef OGL_DEBUG_GLIDE_COORDS
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// @todo: only for complex color alpha model (or at all?)
|
|
||||||
// Does a dummy texture target need texture coords
|
|
||||||
// if env combine doesn't select a texture source?
|
|
||||||
// (See also fog code below)
|
|
||||||
pTS->as = 0.0f;
|
|
||||||
pTS->at = 0.0f;
|
|
||||||
pTS->bs = 0.0f;
|
|
||||||
pTS->bt = 0.0f;
|
|
||||||
pTS->cs = 0.0f;
|
|
||||||
pTS->ct = 0.0f;
|
|
||||||
pTS->aq = 0.0f;
|
|
||||||
pTS->bq = 0.0f;
|
|
||||||
pTS->cq = 0.0f;
|
|
||||||
pTS->aoow = 1.0;
|
|
||||||
pTS->boow = 1.0;
|
|
||||||
pTS->coow = 1.0;
|
|
||||||
generate_subtextures = false;
|
|
||||||
|
|
||||||
#ifdef OGL_DEBUG_GLIDE_COORDS
|
|
||||||
GlideMsg(a, 1.0f);
|
GlideMsg(a, 1.0f);
|
||||||
GlideMsg(b, 1.0f);
|
GlideMsg(b, 1.0f);
|
||||||
GlideMsg(c, 1.0f);
|
GlideMsg(c, 1.0f);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
TFogStruct* pF = &OGLRender.TFog[TriangleIndex];
|
TFogStruct* pF = &OGLRender.TFog[TriangleIndex];
|
||||||
if(Glide.State.FogMode)
|
if(glidestate.FogMode)
|
||||||
{
|
{
|
||||||
float af, bf, cf;
|
if (glidestate.FogMode & GR_FOG_WITH_TABLE)
|
||||||
if (Glide.State.FogMode & GR_FOG_WITH_TABLE)
|
|
||||||
{
|
{
|
||||||
af = (float)OpenGL.FogTable[ (FxU16)(1.0f / a->oow) ] * D1OVER255;
|
pF->af = (float) OpenGL.FogTable[(FxU16)(1.0f / a->oow) ] * D1OVER255;
|
||||||
bf = (float)OpenGL.FogTable[ (FxU16)(1.0f / b->oow) ] * D1OVER255;
|
pF->bf = (float) OpenGL.FogTable[(FxU16)(1.0f / b->oow) ] * D1OVER255;
|
||||||
cf = (float)OpenGL.FogTable[ (FxU16)(1.0f / c->oow) ] * D1OVER255;
|
pF->cf = (float) OpenGL.FogTable[(FxU16)(1.0f / c->oow) ] * D1OVER255;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
af = a->a * D1OVER255;
|
pF->af = a->a * D1OVER255;
|
||||||
bf = b->a * D1OVER255;
|
pF->bf = b->a * D1OVER255;
|
||||||
cf = c->a * D1OVER255;
|
pF->cf = c->a * D1OVER255;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
if ( Glide.State.FogMode & GR_FOG_ADD2 )
|
if ( glidestate.FogMode & GR_FOG_ADD2 )
|
||||||
{
|
{
|
||||||
pF->af = 1.0f - af;
|
pF->af = 1.0f - pF->af;
|
||||||
pF->bf = 1.0f - bf;
|
pF->bf = 1.0f - pF->bf;
|
||||||
pF->cf = 1.0f - cf;
|
pF->cf = 1.0f - pF->cf;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
*/
|
*/
|
||||||
{
|
|
||||||
pF->af = af;
|
|
||||||
pF->bf = bf;
|
|
||||||
pF->cf = cf;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OGL_DEBUG
|
#ifdef OGL_DEBUG
|
||||||
DEBUG_MIN_MAX( pF->af, OGLRender.MaxF, OGLRender.MinF );
|
DEBUG_MIN_MAX( pF->af, OGLRender.MaxF, OGLRender.MinF );
|
||||||
|
@ -1791,7 +1728,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
// Peek to avoid updating the render state twice
|
// Peek to avoid updating the render state twice
|
||||||
if (OGLRender.NumberOfTriangles)
|
if (OGLRender.NumberOfTriangles)
|
||||||
{
|
{
|
||||||
RenderDrawTriangles();
|
RenderDrawTriangles_impl();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1806,6 +1743,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
|
|
||||||
TColorStruct* pC = &OGLRender.TColor[OGLRender.RenderBufferSize];
|
TColorStruct* pC = &OGLRender.TColor[OGLRender.RenderBufferSize];
|
||||||
TColorStruct* pC2;
|
TColorStruct* pC2;
|
||||||
|
const GlideState glidestate = Glide.State;
|
||||||
if (OpenGL.ColorAlphaUnit2)
|
if (OpenGL.ColorAlphaUnit2)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -1815,7 +1753,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
pC->ab = a->b * D1OVER255;
|
pC->ab = a->b * D1OVER255;
|
||||||
}
|
}
|
||||||
// Alpha
|
// Alpha
|
||||||
if (Glide.State.AlphaLocal == GR_COMBINE_LOCAL_DEPTH)
|
if (glidestate.AlphaLocal == GR_COMBINE_LOCAL_DEPTH)
|
||||||
{
|
{
|
||||||
// @todo: find out whether z has to be divided by 255 or by 65535
|
// @todo: find out whether z has to be divided by 255 or by 65535
|
||||||
pC->aa = a->z * D1OVER255;
|
pC->aa = a->z * D1OVER255;
|
||||||
|
@ -1832,7 +1770,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
// Color Stuff, need to optimize it
|
// Color Stuff, need to optimize it
|
||||||
if ( Glide.ALocal )
|
if ( Glide.ALocal )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.AlphaLocal )
|
switch (glidestate.AlphaLocal)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_LOCAL_ITERATED:
|
case GR_COMBINE_LOCAL_ITERATED:
|
||||||
Local.aa = a->a * D1OVER255;
|
Local.aa = a->a * D1OVER255;
|
||||||
|
@ -1850,7 +1788,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
|
|
||||||
if ( Glide.AOther )
|
if ( Glide.AOther )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.AlphaOther )
|
switch (glidestate.AlphaOther)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_OTHER_ITERATED:
|
case GR_COMBINE_OTHER_ITERATED:
|
||||||
Other.aa = a->a * D1OVER255;
|
Other.aa = a->a * D1OVER255;
|
||||||
|
@ -1868,7 +1806,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
|
|
||||||
if ( Glide.CLocal )
|
if ( Glide.CLocal )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.ColorCombineLocal )
|
switch (glidestate.ColorCombineLocal)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_LOCAL_ITERATED:
|
case GR_COMBINE_LOCAL_ITERATED:
|
||||||
Local.ar = a->r * D1OVER255;
|
Local.ar = a->r * D1OVER255;
|
||||||
|
@ -1879,7 +1817,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
case GR_COMBINE_LOCAL_CONSTANT:
|
case GR_COMBINE_LOCAL_CONSTANT:
|
||||||
{
|
{
|
||||||
GLfloat* color;
|
GLfloat* color;
|
||||||
if (Glide.State.Delta0Mode)
|
if (glidestate.Delta0Mode)
|
||||||
{
|
{
|
||||||
color = &OpenGL.Delta0Color[0];
|
color = &OpenGL.Delta0Color[0];
|
||||||
}
|
}
|
||||||
|
@ -1897,7 +1835,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
|
|
||||||
if ( Glide.COther )
|
if ( Glide.COther )
|
||||||
{
|
{
|
||||||
switch ( Glide.State.ColorCombineOther )
|
switch (glidestate.ColorCombineOther)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_OTHER_ITERATED:
|
case GR_COMBINE_OTHER_ITERATED:
|
||||||
Other.ar = a->r * D1OVER255;
|
Other.ar = a->r * D1OVER255;
|
||||||
|
@ -1908,7 +1846,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
case GR_COMBINE_OTHER_CONSTANT:
|
case GR_COMBINE_OTHER_CONSTANT:
|
||||||
{
|
{
|
||||||
GLfloat* color;
|
GLfloat* color;
|
||||||
if (Glide.State.Delta0Mode)
|
if (glidestate.Delta0Mode)
|
||||||
{
|
{
|
||||||
color = &OpenGL.Delta0Color[0];
|
color = &OpenGL.Delta0Color[0];
|
||||||
}
|
}
|
||||||
|
@ -1928,7 +1866,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( Glide.State.ColorCombineFunction )
|
switch (glidestate.ColorCombineFunction)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_FUNCTION_ZERO:
|
case GR_COMBINE_FUNCTION_ZERO:
|
||||||
pC->ar = pC->ag = pC->ab = 0.0f;
|
pC->ar = pC->ag = pC->ab = 0.0f;
|
||||||
|
@ -1977,9 +1915,9 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
|
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL:
|
||||||
if ((( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA ) ||
|
if ((( glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA ) ||
|
||||||
( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB )) &&
|
( glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB )) &&
|
||||||
( Glide.State.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE ) )
|
( glidestate.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE ) )
|
||||||
{
|
{
|
||||||
pC->ar = Local.ar;
|
pC->ar = Local.ar;
|
||||||
pC->ag = Local.ag;
|
pC->ag = Local.ag;
|
||||||
|
@ -1998,9 +1936,9 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
|
case GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA:
|
||||||
if ((( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA ) ||
|
if (((glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA) ||
|
||||||
( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB )) &&
|
(glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB)) &&
|
||||||
( Glide.State.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE ) )
|
(glidestate.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE))
|
||||||
{
|
{
|
||||||
pC->ar = pC->ag = pC->ab = Local.aa;
|
pC->ar = pC->ag = pC->ab = Local.aa;
|
||||||
}
|
}
|
||||||
|
@ -2033,7 +1971,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( Glide.State.AlphaFunction )
|
switch (glidestate.AlphaFunction)
|
||||||
{
|
{
|
||||||
case GR_COMBINE_FUNCTION_ZERO:
|
case GR_COMBINE_FUNCTION_ZERO:
|
||||||
pC->aa = 0.0f;
|
pC->aa = 0.0f;
|
||||||
|
@ -2072,7 +2010,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
|
|
||||||
if (OpenGL.FogTextureUnit == 0)
|
if (OpenGL.FogTextureUnit == 0)
|
||||||
{
|
{
|
||||||
if ( Glide.State.ColorCombineInvert )
|
if (glidestate.ColorCombineInvert)
|
||||||
{
|
{
|
||||||
pC->ar = 1.0f - pC->ar - pC2->ar;
|
pC->ar = 1.0f - pC->ar - pC2->ar;
|
||||||
pC->ag = 1.0f - pC->ag - pC2->ag;
|
pC->ag = 1.0f - pC->ag - pC2->ag;
|
||||||
|
@ -2080,7 +2018,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
pC2->ar = pC2->ag = pC2->ab = 0.0f;
|
pC2->ar = pC2->ag = pC2->ab = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Glide.State.AlphaInvert )
|
if (glidestate.AlphaInvert)
|
||||||
{
|
{
|
||||||
pC->aa = 1.0f - pC->aa - pC2->aa;
|
pC->aa = 1.0f - pC->aa - pC2->aa;
|
||||||
pC2->aa = 0.0f;
|
pC2->aa = 0.0f;
|
||||||
|
@ -2090,8 +2028,8 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
|
|
||||||
TVertexStruct* pV = &OGLRender.TVertex[OGLRender.RenderBufferSize];
|
TVertexStruct* pV = &OGLRender.TVertex[OGLRender.RenderBufferSize];
|
||||||
// Z-Buffering
|
// Z-Buffering
|
||||||
if ( ( Glide.State.DepthBufferMode == GR_DEPTHBUFFER_DISABLE ) ||
|
if ((glidestate.DepthBufferMode == GR_DEPTHBUFFER_DISABLE) ||
|
||||||
( Glide.State.DepthBufferMode == GR_CMP_ALWAYS ) )
|
(glidestate.DepthBufferMode == GR_CMP_ALWAYS))
|
||||||
{
|
{
|
||||||
pV->az = 0.0f;
|
pV->az = 0.0f;
|
||||||
}
|
}
|
||||||
|
@ -2140,57 +2078,41 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
{
|
{
|
||||||
pTS->as = a->tmuvtx[0].sow * Textures->GetWAspect();
|
pTS->as = a->tmuvtx[0].sow * Textures->GetWAspect();
|
||||||
pTS->at = a->tmuvtx[0].tow * Textures->GetHAspect();
|
pTS->at = a->tmuvtx[0].tow * Textures->GetHAspect();
|
||||||
pTS->aq = 0.0f;
|
|
||||||
pTS->aoow = a->oow;
|
pTS->aoow = a->oow;
|
||||||
|
|
||||||
#ifdef OGL_DEBUG_GLIDE_COORDS
|
#ifdef OGL_DEBUG_GLIDE_COORDS
|
||||||
GlideMsg(a, a->oow);
|
GlideMsg(a, a->oow);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// @todo: only for complex color alpha model (or at all?)
|
|
||||||
// Does a dummy texture target need texture coords
|
|
||||||
// if env combine doesn't select a texture source?
|
|
||||||
// (See also fog code below)
|
|
||||||
pTS->as = 0.0f;
|
|
||||||
pTS->at = 0.0f;
|
|
||||||
pTS->aq = 0.0f;
|
|
||||||
pTS->aoow = 1.0;
|
|
||||||
|
|
||||||
#ifdef OGL_DEBUG_GLIDE_COORDS
|
#ifdef OGL_DEBUG_GLIDE_COORDS
|
||||||
GlideMsg(a, 1.0f);
|
else
|
||||||
#endif
|
{
|
||||||
|
GlideMsg(a, 1.0f);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TFogStruct* pF = &OGLRender.TFog[OGLRender.RenderBufferSize];
|
TFogStruct* pF = &OGLRender.TFog[OGLRender.RenderBufferSize];
|
||||||
if(Glide.State.FogMode)
|
if(glidestate.FogMode)
|
||||||
{
|
{
|
||||||
float af;
|
if (glidestate.FogMode & GR_FOG_WITH_TABLE)
|
||||||
if (Glide.State.FogMode & GR_FOG_WITH_TABLE)
|
|
||||||
{
|
{
|
||||||
af = (float)OpenGL.FogTable[ (FxU16)(1.0f / a->oow) ] * D1OVER255;
|
pF->af = (float) OpenGL.FogTable[(FxU16)(1.0f / a->oow)] * D1OVER255;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
af = a->a * D1OVER255;
|
pF->af = a->a * D1OVER255;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
if ( Glide.State.FogMode & GR_FOG_ADD2 )
|
if ( glidestate.FogMode & GR_FOG_ADD2 )
|
||||||
{
|
{
|
||||||
pF->af = 1.0f - af;
|
pF->af = 1.0f - pF->af;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
*/
|
*/
|
||||||
{
|
|
||||||
pF->af = af;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OGL_DEBUG
|
#ifdef OGL_DEBUG
|
||||||
DEBUG_MIN_MAX( pF->af, OGLRender.MaxF, OGLRender.MinF );
|
DEBUG_MIN_MAX( pF->af, OGLRender.MaxF, OGLRender.MinF );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (OGLRender.UseEnvCombineFog)
|
else /* if (OGLRender.UseEnvCombineFog) */ // env combine fog is the default
|
||||||
{
|
{
|
||||||
// Must provide dummy coords if fog is turned off but
|
// Must provide dummy coords if fog is turned off but
|
||||||
// the texture unit is active because of inveting color/alpha
|
// the texture unit is active because of inveting color/alpha
|
||||||
|
@ -2244,7 +2166,7 @@ void RenderAddPoint( const GrVertex *a, bool unsnap )
|
||||||
glMultiTexCoord4fvARB( OpenGL.ColorAlphaUnit2, &pTS->as );
|
glMultiTexCoord4fvARB( OpenGL.ColorAlphaUnit2, &pTS->as );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Glide.State.FogMode)
|
if (glidestate.FogMode)
|
||||||
{
|
{
|
||||||
if (OGLRender.UseEnvCombineFog)
|
if (OGLRender.UseEnvCombineFog)
|
||||||
{
|
{
|
||||||
|
@ -2467,9 +2389,10 @@ void ColorFunctionScaleOtherMinusLocal( TColorStruct * pC, TColorStruct * pC2, c
|
||||||
|
|
||||||
void ColorFunctionScaleOtherMinusLocalAddLocal( TColorStruct * pC, TColorStruct * pC2, const TColorStruct * Local, const TColorStruct * Other )
|
void ColorFunctionScaleOtherMinusLocalAddLocal( TColorStruct * pC, TColorStruct * pC2, const TColorStruct * Local, const TColorStruct * Other )
|
||||||
{
|
{
|
||||||
if ((( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA ) ||
|
const GlideState glidestate = Glide.State;
|
||||||
( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB )) &&
|
if (((glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA) ||
|
||||||
( Glide.State.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE ) )
|
(glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB)) &&
|
||||||
|
(glidestate.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE))
|
||||||
{
|
{
|
||||||
pC->ar = Local->ar;
|
pC->ar = Local->ar;
|
||||||
pC->ag = Local->ag;
|
pC->ag = Local->ag;
|
||||||
|
@ -2507,9 +2430,10 @@ void ColorFunctionScaleOtherMinusLocalAddLocal( TColorStruct * pC, TColorStruct
|
||||||
|
|
||||||
void ColorFunctionScaleOtherMinusLocalAddLocalAlpha( TColorStruct * pC, TColorStruct * pC2, const TColorStruct * Local, const TColorStruct * Other )
|
void ColorFunctionScaleOtherMinusLocalAddLocalAlpha( TColorStruct * pC, TColorStruct * pC2, const TColorStruct * Local, const TColorStruct * Other )
|
||||||
{
|
{
|
||||||
if ((( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA ) ||
|
const GlideState glidestate = Glide.State;
|
||||||
( Glide.State.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB )) &&
|
if (((glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_ALPHA) ||
|
||||||
( Glide.State.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE ) )
|
(glidestate.ColorCombineFactor == GR_COMBINE_FACTOR_TEXTURE_RGB)) &&
|
||||||
|
(glidestate.ColorCombineOther == GR_COMBINE_OTHER_TEXTURE))
|
||||||
{
|
{
|
||||||
pC->ar = pC->ag = pC->ab = Local->aa;
|
pC->ar = pC->ag = pC->ab = Local->aa;
|
||||||
pC->br = pC->bg = pC->bb = Local->ba;
|
pC->br = pC->bg = pC->bb = Local->ba;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user