mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-15 07:00:58 +00:00
Simplified renderparms
This commit is contained in:
parent
5483a186d3
commit
5ea900fd61
4 changed files with 43 additions and 73 deletions
|
@ -3679,7 +3679,7 @@ int idRenderBackend::DrawShaderPasses( const drawSurf_t* const* const drawSurfs,
|
|||
parm[1] = regs[ newStage->vertexParms[j][1] ];
|
||||
parm[2] = regs[ newStage->vertexParms[j][2] ];
|
||||
parm[3] = regs[ newStage->vertexParms[j][3] ];
|
||||
SetVertexParm( ( renderParm_t )( RENDERPARM_USER + j ), parm );
|
||||
SetVertexParm( ( renderParm_t )( RENDERPARM_USER0 + j ), parm );
|
||||
}
|
||||
|
||||
// set rpEnableSkinning if the shader has optional support for skinning
|
||||
|
|
|
@ -204,44 +204,7 @@ void idRenderProgManager::Init()
|
|||
r_useHalfLambertLighting.ClearModified();
|
||||
r_useHDR.ClearModified();
|
||||
|
||||
// special case handling for fastZ shaders
|
||||
/*
|
||||
switch( glConfig.driverType )
|
||||
{
|
||||
case GLDRV_OPENGL32_CORE_PROFILE:
|
||||
case GLDRV_OPENGL_ES2:
|
||||
case GLDRV_OPENGL_ES3:
|
||||
case GLDRV_OPENGL_MESA:
|
||||
{
|
||||
builtinShaders[BUILTIN_SHADOW] = FindVertexShader( "shadow.vp" );
|
||||
int shadowFragmentShaderIndex = FindFragmentShader( "shadow.fp" );
|
||||
FindGLSLProgram( "shadow.vp", builtinShaders[BUILTIN_SHADOW], shadowFragmentShaderIndex );
|
||||
|
||||
if( glConfig.gpuSkinningAvailable )
|
||||
{
|
||||
builtinShaders[BUILTIN_SHADOW_SKINNED] = FindVertexShader( "shadow_skinned.vp" );
|
||||
int shadowFragmentShaderIndex = FindFragmentShader( "shadow_skinned.fp" );
|
||||
FindGLSLProgram( "shadow_skinned.vp", builtinShaders[BUILTIN_SHADOW_SKINNED], shadowFragmentShaderIndex );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
// fast path on PC
|
||||
builtinShaders[BUILTIN_SHADOW] = FindVertexShader( "shadow.vp" );
|
||||
FindGLSLProgram( "shadow.vp", builtinShaders[BUILTIN_SHADOW], -1 );
|
||||
|
||||
if( glConfig.gpuSkinningAvailable )
|
||||
{
|
||||
builtinShaders[BUILTIN_SHADOW_SKINNED] = FindVertexShader( "shadow_skinned.vp" );
|
||||
FindGLSLProgram( "shadow_skinned.vp", builtinShaders[BUILTIN_SHADOW_SKINNED], -1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
glslUniforms.SetNum( RENDERPARM_USER + MAX_GLSL_USER_PARMS, vec4_zero );
|
||||
glslUniforms.SetNum( RENDERPARM_TOTAL, vec4_zero );
|
||||
|
||||
if( glConfig.gpuSkinningAvailable )
|
||||
{
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
Doom 3 BFG Edition GPL Source Code
|
||||
Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
|
||||
Copyright (C) 2013-2016 Robert Beckebans
|
||||
Copyright (C) 2013-2018 Robert Beckebans
|
||||
Copyright (C) 2016-2017 Dustin Land
|
||||
|
||||
This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
|
||||
|
||||
|
@ -190,18 +191,22 @@ enum renderParm_t
|
|||
RENDERPARM_SHADOW_MATRIX_5_Y,
|
||||
RENDERPARM_SHADOW_MATRIX_5_Z,
|
||||
RENDERPARM_SHADOW_MATRIX_5_W,
|
||||
|
||||
RENDERPARM_USER0,
|
||||
RENDERPARM_USER1,
|
||||
RENDERPARM_USER2,
|
||||
RENDERPARM_USER3,
|
||||
RENDERPARM_USER4,
|
||||
RENDERPARM_USER5,
|
||||
RENDERPARM_USER6,
|
||||
RENDERPARM_USER7,
|
||||
// RB end
|
||||
|
||||
RENDERPARM_TOTAL,
|
||||
RENDERPARM_USER = 128,
|
||||
};
|
||||
|
||||
|
||||
struct glslUniformLocation_t
|
||||
{
|
||||
int parmIndex;
|
||||
int uniformIndex;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -219,6 +224,10 @@ public:
|
|||
void Init();
|
||||
void Shutdown();
|
||||
|
||||
void StartFrame();
|
||||
|
||||
const idVec4& GetRenderParm( renderParm_t rp );
|
||||
|
||||
void SetRenderParm( renderParm_t rp, const float* value );
|
||||
void SetRenderParms( renderParm_t rp, const float* values, int numValues );
|
||||
|
||||
|
@ -727,6 +736,7 @@ protected:
|
|||
bool builtin; // RB: part of the core shaders built into the executable
|
||||
idList<int> uniforms;
|
||||
};
|
||||
|
||||
struct fragmentShader_t
|
||||
{
|
||||
fragmentShader_t() : progId( INVALID_PROGID ), shaderFeatures( 0 ), builtin( false ) {}
|
||||
|
@ -738,9 +748,9 @@ protected:
|
|||
idList<int> uniforms;
|
||||
};
|
||||
|
||||
struct glslProgram_t
|
||||
struct renderProg_t
|
||||
{
|
||||
glslProgram_t() : progId( INVALID_PROGID ),
|
||||
renderProg_t() : progId( INVALID_PROGID ),
|
||||
vertexShaderIndex( -1 ),
|
||||
fragmentShaderIndex( -1 ),
|
||||
vertexUniformArray( -1 ),
|
||||
|
@ -751,17 +761,17 @@ protected:
|
|||
int fragmentShaderIndex;
|
||||
uint vertexUniformArray;
|
||||
uint fragmentUniformArray;
|
||||
idList<glslUniformLocation_t> uniformLocations;
|
||||
};
|
||||
int currentRenderProgram;
|
||||
idList<glslProgram_t, TAG_RENDER> glslPrograms;
|
||||
idStaticList < idVec4, RENDERPARM_USER + MAX_GLSL_USER_PARMS > glslUniforms;
|
||||
|
||||
int currentRenderProgram;
|
||||
idList<renderProg_t, TAG_RENDER> glslPrograms;
|
||||
idStaticList < idVec4, RENDERPARM_TOTAL > glslUniforms;
|
||||
|
||||
|
||||
int currentVertexShader;
|
||||
int currentFragmentShader;
|
||||
idList<vertexShader_t, TAG_RENDER> vertexShaders;
|
||||
idList<fragmentShader_t, TAG_RENDER> fragmentShaders;
|
||||
int currentVertexShader;
|
||||
int currentFragmentShader;
|
||||
idList<vertexShader_t, TAG_RENDER> vertexShaders;
|
||||
idList<fragmentShader_t, TAG_RENDER> fragmentShaders;
|
||||
};
|
||||
|
||||
extern idRenderProgManager renderProgManager;
|
||||
|
|
|
@ -324,6 +324,15 @@ static const char* GLSLParmNames[RENDERPARM_TOTAL] =
|
|||
"rpShadowMatrix5Y",
|
||||
"rpShadowMatrix5Z",
|
||||
"rpShadowMatrix5W",
|
||||
|
||||
"rpUser0",
|
||||
"rpUser1",
|
||||
"rpUser2",
|
||||
"rpUser3",
|
||||
"rpUser4",
|
||||
"rpUser5",
|
||||
"rpUser6",
|
||||
"rpUser7"
|
||||
// RB end
|
||||
};
|
||||
|
||||
|
@ -1762,14 +1771,7 @@ GLuint idRenderProgManager::LoadGLSLShader( GLenum target, const char* name, con
|
|||
index = i;
|
||||
}
|
||||
}
|
||||
for( int i = 0; i < MAX_GLSL_USER_PARMS && index == -1; i++ )
|
||||
{
|
||||
const char* parmName = GetGLSLParmName( RENDERPARM_USER + i );
|
||||
if( token == parmName )
|
||||
{
|
||||
index = RENDERPARM_USER + i;
|
||||
}
|
||||
}
|
||||
|
||||
if( index == -1 )
|
||||
{
|
||||
idLib::Error( "couldn't find uniform %s for %s", token.c_str(), outFileGLSL.c_str() );
|
||||
|
@ -1858,7 +1860,7 @@ int idRenderProgManager::FindGLSLProgram( const char* name, int vIndex, int fIn
|
|||
}
|
||||
}
|
||||
|
||||
glslProgram_t program;
|
||||
renderProg_t program;
|
||||
program.name = name;
|
||||
int index = glslPrograms.Append( program );
|
||||
LoadGLSLProgram( index, vIndex, fIndex );
|
||||
|
@ -1872,11 +1874,6 @@ idRenderProgManager::GetGLSLParmName
|
|||
*/
|
||||
const char* idRenderProgManager::GetGLSLParmName( int rp ) const
|
||||
{
|
||||
if( rp >= RENDERPARM_USER )
|
||||
{
|
||||
int userParmIndex = rp - RENDERPARM_USER;
|
||||
return va( "rpUser%d", userParmIndex );
|
||||
}
|
||||
assert( rp < RENDERPARM_TOTAL );
|
||||
return GLSLParmNames[ rp ];
|
||||
}
|
||||
|
@ -1914,11 +1911,11 @@ void idRenderProgManager::CommitUniforms()
|
|||
{
|
||||
#if !defined(USE_VULKAN)
|
||||
const int progID = GetGLSLCurrentProgram();
|
||||
const glslProgram_t& prog = glslPrograms[progID];
|
||||
const renderProg_t& prog = glslPrograms[progID];
|
||||
|
||||
//GL_CheckErrors();
|
||||
|
||||
ALIGNTYPE16 idVec4 localVectors[RENDERPARM_USER + MAX_GLSL_USER_PARMS];
|
||||
ALIGNTYPE16 idVec4 localVectors[RENDERPARM_TOTAL];
|
||||
|
||||
if( prog.vertexShaderIndex >= 0 )
|
||||
{
|
||||
|
@ -1988,7 +1985,7 @@ idRenderProgManager::LoadGLSLProgram
|
|||
void idRenderProgManager::LoadGLSLProgram( const int programIndex, const int vertexShaderIndex, const int fragmentShaderIndex )
|
||||
{
|
||||
#if !defined(USE_VULKAN)
|
||||
glslProgram_t& prog = glslPrograms[programIndex];
|
||||
renderProg_t& prog = glslPrograms[programIndex];
|
||||
|
||||
if( prog.progId != INVALID_PROGID )
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue