Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 5 additions & 10 deletions src/engine/renderer/gl_shader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2446,10 +2446,8 @@ GLShader_generic::GLShader_generic() :
u_AlphaThreshold( this ),
u_ModelMatrix( this ),
u_ModelViewProjectionMatrix( this ),
u_ColorModulateColorGen_Float( this ),
u_ColorModulateColorGen_Uint( this ),
u_Color_Float( this ),
u_Color_Uint( this ),
u_ColorModulateColorGen_Dispatch( this ),
u_Color_Dispatch( this ),
u_Bones( this ),
u_VertexInterpolation( this ),
u_DepthScale( this ),
Expand Down Expand Up @@ -2510,10 +2508,8 @@ GLShader_lightMapping::GLShader_lightMapping() :
u_LightTiles( this ),
u_TextureMatrix( this ),
u_SpecularExponent( this ),
u_ColorModulateColorGen_Float( this ),
u_ColorModulateColorGen_Uint( this ),
u_Color_Float( this ),
u_Color_Uint( this ),
u_ColorModulateColorGen_Dispatch( this ),
u_Color_Dispatch( this ),
u_AlphaThreshold( this ),
u_ViewOrigin( this ),
u_ModelMatrix( this ),
Expand Down Expand Up @@ -2695,8 +2691,7 @@ GLShader_fog::GLShader_fog() :
u_DepthMap( this ),
u_ModelViewProjectionMatrix( this ),
u_UnprojectMatrix( this ),
u_Color_Float( this ),
u_Color_Uint( this ),
u_Color_Dispatch( this ),
u_ViewOrigin( this ),
u_FogGradient( this ),
GLCompileMacro_OUTSIDE_FOG( this )
Expand Down
102 changes: 36 additions & 66 deletions src/engine/renderer/gl_shader.h
Original file line number Diff line number Diff line change
Expand Up @@ -1968,57 +1968,26 @@ class u_Color_Uint :
}
};

template<typename Shader> void SetUniform_Color( Shader* shader, const Color::Color& color )
{
if( glConfig.gpuShader4Available )
{
shader->SetUniform_Color_Uint( color );
}
else
{
shader->SetUniform_Color_Float( color );
}
}

class u_ColorGlobal_Float :
GLUniform4f
class u_Color_Dispatch :
u_Color_Uint, u_Color_Float
{
public:
u_ColorGlobal_Float( GLShader *shader ) :
GLUniform4f( shader, "u_ColorGlobal", LEGACY )
{
}
u_Color_Dispatch( GLShader *shader ) :
u_Color_Uint( shader ), u_Color_Float( shader ) {}

void SetUniform_ColorGlobal_Float( const Color::Color& color )
void SetUniform_Color( const Color::Color &color )
{
this->SetValue( color.ToArray() );
}
};

class u_ColorGlobal_Uint :
GLUniform1ui {
public:
u_ColorGlobal_Uint( GLShader* shader ) :
GLUniform1ui( shader, "u_ColorGlobal", PUSH ) {
}

void SetUniform_ColorGlobal_Uint( const Color::Color& color ) {
this->SetValue( packUnorm4x8( color.ToArray() ) );
if ( glConfig.gpuShader4Available )
{
SetUniform_Color_Uint( color );
}
else
{
SetUniform_Color_Float( color );
}
}
};

template<typename Shader> void SetUniform_ColorGlobal( Shader* shader, const Color::Color& color )
{
if( glConfig.gpuShader4Available )
{
shader->SetUniform_ColorGlobal_Uint( color );
}
else
{
shader->SetUniform_ColorGlobal_Float( color );
}
}

class u_Frame :
GLUniform1ui {
public:
Expand Down Expand Up @@ -2660,21 +2629,27 @@ class u_ColorModulateColorGen_Uint :
}
};

template<typename Shader> void SetUniform_ColorModulateColorGen(
Shader* shader,
const colorGen_t colorGen,
const alphaGen_t alphaGen,
const bool useMapLightFactor = false )
class u_ColorModulateColorGen_Dispatch :
u_ColorModulateColorGen_Uint, u_ColorModulateColorGen_Float
{
if( glConfig.gpuShader4Available )
{
shader->SetUniform_ColorModulateColorGen_Uint( colorGen, alphaGen, useMapLightFactor );
}
else
public:
u_ColorModulateColorGen_Dispatch( GLShader *shader ) :
u_ColorModulateColorGen_Uint( shader ), u_ColorModulateColorGen_Float( shader ) {}

void SetUniform_ColorModulateColorGen(
colorGen_t colorGen, alphaGen_t alphaGen, bool useMapLightFactor = false )
{
shader->SetUniform_ColorModulateColorGen_Float( colorGen, alphaGen, useMapLightFactor );
if ( glConfig.gpuShader4Available )
{
SetUniform_ColorModulateColorGen_Uint( colorGen, alphaGen, useMapLightFactor );
}
else
{
SetUniform_ColorModulateColorGen_Float( colorGen, alphaGen, useMapLightFactor );
}
}
}
};


class u_DeformEnable :
GLUniform1f {
Expand Down Expand Up @@ -2939,10 +2914,8 @@ class GLShader_generic :
public u_AlphaThreshold,
public u_ModelMatrix,
public u_ModelViewProjectionMatrix,
public u_ColorModulateColorGen_Float,
public u_ColorModulateColorGen_Uint,
public u_Color_Float,
public u_Color_Uint,
public u_ColorModulateColorGen_Dispatch,
public u_Color_Dispatch,
public u_Bones,
public u_VertexInterpolation,
public u_DepthScale,
Expand Down Expand Up @@ -3000,10 +2973,8 @@ class GLShader_lightMapping :
public u_LightTiles,
public u_TextureMatrix,
public u_SpecularExponent,
public u_ColorModulateColorGen_Float,
public u_ColorModulateColorGen_Uint,
public u_Color_Float,
public u_Color_Uint,
public u_ColorModulateColorGen_Dispatch,
public u_Color_Dispatch,
public u_AlphaThreshold,
public u_ViewOrigin,
public u_ModelMatrix,
Expand Down Expand Up @@ -3165,8 +3136,7 @@ class GLShader_fog :
public u_DepthMap,
public u_ModelViewProjectionMatrix,
public u_UnprojectMatrix,
public u_Color_Float,
public u_Color_Uint,
public u_Color_Dispatch,
public u_ViewOrigin,
public u_FogGradient,
public GLCompileMacro_OUTSIDE_FOG
Expand Down
46 changes: 23 additions & 23 deletions src/engine/renderer/tr_backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1229,9 +1229,9 @@ void RB_RunVisTests( )
gl_genericShader->BindProgram();

gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE );
SetUniform_Color( gl_genericShader, Color::White );
gl_genericShader->SetUniform_Color( Color::White );

SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_CONST, alphaGen_t::AGEN_CONST );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_CONST, alphaGen_t::AGEN_CONST );
gl_genericShader->SetUniform_ModelMatrix( backEnd.orientation.transformMatrix );
gl_genericShader->SetUniform_ModelViewProjectionMatrix( glState.modelViewProjectionMatrix[ glState.stackIndex ] );

Expand Down Expand Up @@ -1785,8 +1785,8 @@ static void RB_RenderDebugUtils()

// set uniforms
gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE );
SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
SetUniform_Color( gl_genericShader, Color::Color(0, 0, 0, 0) );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
gl_genericShader->SetUniform_Color( Color::Color(0, 0, 0, 0) );

// bind u_ColorMap
gl_genericShader->SetUniform_ColorMapBindless(
Expand Down Expand Up @@ -1858,8 +1858,8 @@ static void RB_RenderDebugUtils()

// set uniforms
gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE );
SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
SetUniform_Color( gl_genericShader, Color::Black );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
gl_genericShader->SetUniform_Color( Color::Black );

// bind u_ColorMap
gl_genericShader->SetUniform_ColorMapBindless(
Expand Down Expand Up @@ -2140,8 +2140,8 @@ static void RB_RenderDebugUtils()

// set uniforms
gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE );
SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
SetUniform_Color( gl_genericShader, Color::Black );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
gl_genericShader->SetUniform_Color( Color::Black );

GL_State( GLS_DEFAULT );
GL_Cull( cullType_t::CT_TWO_SIDED );
Expand Down Expand Up @@ -2223,8 +2223,8 @@ static void RB_RenderDebugUtils()

// set uniforms
gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE );
SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_IDENTITY );
SetUniform_Color( gl_genericShader, Color::Black );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_IDENTITY );
gl_genericShader->SetUniform_Color( Color::Black );

GL_State( GLS_DEFAULT );
GL_Cull( cullType_t::CT_TWO_SIDED );
Expand Down Expand Up @@ -2329,7 +2329,7 @@ static void RB_RenderDebugUtils()

// set uniforms
gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE );
SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_CUSTOM_RGB, alphaGen_t::AGEN_CUSTOM );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_CUSTOM_RGB, alphaGen_t::AGEN_CUSTOM );

// bind u_ColorMap
gl_genericShader->SetUniform_ColorMapBindless(
Expand Down Expand Up @@ -2358,7 +2358,7 @@ static void RB_RenderDebugUtils()
GL_Cull( cullType_t::CT_TWO_SIDED );
GL_State( GLS_DEPTHTEST_DISABLE );

SetUniform_Color( gl_genericShader, Color::Black );
gl_genericShader->SetUniform_Color( Color::Black );

w = 300;
h = 300;
Expand Down Expand Up @@ -2419,8 +2419,8 @@ static void RB_RenderDebugUtils()
}

// set uniforms
SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
SetUniform_Color( gl_genericShader, Color::Black );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
gl_genericShader->SetUniform_Color( Color::Black );

GL_State( GLS_POLYMODE_LINE | GLS_DEPTHTEST_DISABLE );
GL_Cull( cullType_t::CT_TWO_SIDED );
Expand Down Expand Up @@ -2472,7 +2472,7 @@ static void RB_RenderDebugUtils()

Tess_End();

SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_CUSTOM_RGB, alphaGen_t::AGEN_CUSTOM );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_CUSTOM_RGB, alphaGen_t::AGEN_CUSTOM );
}
} // i == 1
else
Expand Down Expand Up @@ -2507,15 +2507,15 @@ static void RB_RenderDebugUtils()
}

//if(node->shrinkedAABB)
// SetUniform_Color( gl_genericShader,colorBlue);
// gl_genericShader->SetUniform_Color(colorBlue);
//else
if ( node->visCounts[ tr.visIndex ] == tr.visCounts[ tr.visIndex ] )
{
SetUniform_Color( gl_genericShader, Color::Green );
gl_genericShader->SetUniform_Color( Color::Green );
}
else
{
SetUniform_Color( gl_genericShader, Color::Red );
gl_genericShader->SetUniform_Color( Color::Red );
}
}
else
Expand All @@ -2527,11 +2527,11 @@ static void RB_RenderDebugUtils()

if ( node->visCounts[ tr.visIndex ] == tr.visCounts[ tr.visIndex ] )
{
SetUniform_Color( gl_genericShader, Color::Yellow );
gl_genericShader->SetUniform_Color( Color::Yellow );
}
else
{
SetUniform_Color( gl_genericShader, Color::Blue );
gl_genericShader->SetUniform_Color( Color::Blue );
}
}

Expand Down Expand Up @@ -2628,8 +2628,8 @@ void DebugDrawBegin( debugDrawMode_t mode, float size ) {

// set uniforms
gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE );
SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
SetUniform_Color( gl_genericShader, colorClear );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
gl_genericShader->SetUniform_Color( colorClear );

// bind u_ColorMap
gl_genericShader->SetUniform_ColorMapBindless(
Expand Down Expand Up @@ -3787,7 +3787,7 @@ void RB_ShowImages()

// set uniforms
gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE );
SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX );
gl_genericShader->SetUniform_TextureMatrix( matrixIdentity );

GL_SelectTexture( 0 );
Expand Down
20 changes: 10 additions & 10 deletions src/engine/renderer/tr_shade.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -673,22 +673,22 @@ static void DrawTris()

if ( r_showBatches->integer )
{
SetUniform_Color( gl_genericShader, Color::Color::Indexed( backEnd.pc.c_batches % 8 ) );
gl_genericShader->SetUniform_Color( Color::Color::Indexed( backEnd.pc.c_batches % 8 ) );
}
else if ( glState.currentVBO == tess.vbo )
{
SetUniform_Color( gl_genericShader, Color::Red );
gl_genericShader->SetUniform_Color( Color::Red );
}
else if ( glState.currentVBO )
{
SetUniform_Color( gl_genericShader, Color::Blue );
gl_genericShader->SetUniform_Color( Color::Blue );
}
else
{
SetUniform_Color( gl_genericShader, Color::White );
gl_genericShader->SetUniform_Color( Color::White );
}

SetUniform_ColorModulateColorGen( gl_genericShader, colorGen_t::CGEN_CONST, alphaGen_t::AGEN_CONST );
gl_genericShader->SetUniform_ColorModulateColorGen( colorGen_t::CGEN_CONST, alphaGen_t::AGEN_CONST );
gl_genericShader->SetUniform_ModelMatrix( backEnd.orientation.transformMatrix );
gl_genericShader->SetUniform_ModelViewProjectionMatrix( glState.modelViewProjectionMatrix[ glState.stackIndex ] );

Expand Down Expand Up @@ -926,10 +926,10 @@ void Render_generic3D( shaderStage_t *pStage )
alphaGen_t alphaGen = SetAlphaGen( pStage );

const bool styleLightMap = pStage->type == stageType_t::ST_STYLELIGHTMAP || pStage->type == stageType_t::ST_STYLECOLORMAP;
SetUniform_ColorModulateColorGen( gl_genericShader, rgbGen, alphaGen, styleLightMap );
gl_genericShader->SetUniform_ColorModulateColorGen( rgbGen, alphaGen, styleLightMap );

// u_Color
SetUniform_Color( gl_genericShader, tess.svars.color );
gl_genericShader->SetUniform_Color( tess.svars.color );

gl_genericShader->SetUniform_ModelMatrix( backEnd.orientation.transformMatrix );
gl_genericShader->SetUniform_ModelViewProjectionMatrix( glState.modelViewProjectionMatrix[ glState.stackIndex ] );
Expand Down Expand Up @@ -1099,10 +1099,10 @@ void Render_lightMapping( shaderStage_t *pStage )
gl_lightMappingShader->SetUniform_Time( backEnd.refdef.floatTime - backEnd.currentEntity->e.shaderTime );

// u_ColorModulate
SetUniform_ColorModulateColorGen( gl_lightMappingShader, rgbGen, alphaGen, lightMode != lightMode_t::FULLBRIGHT );
gl_lightMappingShader->SetUniform_ColorModulateColorGen( rgbGen, alphaGen, lightMode != lightMode_t::FULLBRIGHT );

// u_Color
SetUniform_Color( gl_lightMappingShader, tess.svars.color );
gl_lightMappingShader->SetUniform_Color( tess.svars.color );

// u_AlphaThreshold
gl_lightMappingShader->SetUniform_AlphaTest( pStage->stateBits );
Expand Down Expand Up @@ -1634,7 +1634,7 @@ void Render_fog( shaderStage_t *stage )
gl_fogShader->SetUniform_FogGradient(
1.0f / stage->shader->fogParms.depthForOpaque, stage->shader->fogParms.falloffExp );
gl_fogShader->SetUniform_ViewOrigin( backEnd.viewParms.orientation.origin );
SetUniform_Color( gl_fogShader, stage->shader->fogParms.color );
gl_fogShader->SetUniform_Color( stage->shader->fogParms.color );

switch ( stage->type )
{
Expand Down
Loading