@@ -134,51 +134,35 @@ void R_RemapShader( const char *shaderName, const char *newShaderName, const cha
134
134
{
135
135
char strippedName[ MAX_QPATH ];
136
136
int hash;
137
- shader_t *sh, *sh2;
138
- qhandle_t h;
139
-
140
- sh = R_FindShaderByName ( shaderName );
141
-
142
- if ( sh == nullptr || sh == tr.defaultShader )
143
- {
144
- h = RE_RegisterShader ( shaderName, RSF_DEFAULT );
145
- sh = R_GetShaderByHandle ( h );
146
- }
147
-
148
- if ( sh == nullptr || sh == tr.defaultShader )
149
- {
150
- Log::Warn (" R_RemapShader: shader %s not found" , shaderName );
151
- return ;
152
- }
153
-
154
- sh2 = R_FindShaderByName ( newShaderName );
155
-
156
- if ( sh2 == nullptr || sh2 == tr.defaultShader )
157
- {
158
- h = RE_RegisterShader ( newShaderName, RSF_DEFAULT );
159
- sh2 = R_GetShaderByHandle ( h );
160
- }
161
-
162
- if ( sh2 == nullptr || sh2 == tr.defaultShader )
163
- {
164
- Log::Warn (" R_RemapShader: new shader %s not found" , newShaderName );
165
- return ;
166
- }
167
-
168
- if ( sh->autoSpriteMode != sh2->autoSpriteMode ) {
169
- Log::Warn (" R_RemapShader: shaders %s and %s have different autoSprite modes" , shaderName, newShaderName );
170
- return ;
171
- }
172
137
173
138
// remap all the shaders with the given name
174
139
// even tho they might have different lightmaps
175
140
COM_StripExtension3 ( shaderName, strippedName, sizeof ( strippedName ) );
176
141
hash = generateHashValue ( strippedName, FILE_HASH_SIZE );
142
+ bool found = false ;
177
143
178
- for ( sh = shaderHashTable[ hash ]; sh; sh = sh->next )
144
+ for ( shader_t * sh = shaderHashTable[ hash ]; sh; sh = sh->next )
179
145
{
180
146
if ( Q_stricmp ( sh->name , strippedName ) == 0 )
181
147
{
148
+ found = true ;
149
+ shader_t *sh2 = R_FindShader ( newShaderName, sh->registerFlags );
150
+
151
+ if ( sh2->defaultShader )
152
+ {
153
+ if ( !sh2->shaderRemapWarned )
154
+ {
155
+ Log::Warn ( " R_RemapShader: new shader %s not found" , newShaderName );
156
+ sh2->shaderRemapWarned = true ;
157
+ }
158
+ return ;
159
+ }
160
+
161
+ if ( sh->autoSpriteMode != sh2->autoSpriteMode ) {
162
+ Log::Warn ( " R_RemapShader: shaders %s and %s have different autoSprite modes" , shaderName, newShaderName );
163
+ return ;
164
+ }
165
+
182
166
if ( sh != sh2 )
183
167
{
184
168
sh->remappedShader = sh2;
@@ -189,6 +173,17 @@ void R_RemapShader( const char *shaderName, const char *newShaderName, const cha
189
173
}
190
174
}
191
175
}
176
+
177
+ if ( !found )
178
+ {
179
+ // try registering it to detect typos
180
+ shader_t *test = R_FindShader ( shaderName, RSF_DEFAULT );
181
+
182
+ if ( test->defaultShader )
183
+ {
184
+ Log::Warn ( " R_RemapShader: shader %s not found" , shaderName );
185
+ }
186
+ }
192
187
}
193
188
194
189
/*
@@ -5987,43 +5982,6 @@ static const char *FindShaderInShaderText( const char *shaderName )
5987
5982
return nullptr ;
5988
5983
}
5989
5984
5990
- /*
5991
- ==================
5992
- R_FindShaderByName
5993
-
5994
- Will always return a valid shader, but it might be the
5995
- default shader if the real one can't be found.
5996
- ==================
5997
- */
5998
- shader_t *R_FindShaderByName ( const char *name )
5999
- {
6000
- char strippedName[ MAX_QPATH ];
6001
- int hash;
6002
- shader_t *sh;
6003
-
6004
- if ( ( name == nullptr ) || ( name[ 0 ] == 0 ) )
6005
- {
6006
- // bk001205
6007
- return tr.defaultShader ;
6008
- }
6009
-
6010
- COM_StripExtension3 ( name, strippedName, sizeof ( strippedName ) );
6011
-
6012
- hash = generateHashValue ( strippedName, FILE_HASH_SIZE );
6013
-
6014
- // see if the shader is already loaded
6015
- for ( sh = shaderHashTable[ hash ]; sh; sh = sh->next )
6016
- {
6017
- if ( Q_stricmp ( sh->name , strippedName ) == 0 )
6018
- {
6019
- // match found
6020
- return sh;
6021
- }
6022
- }
6023
-
6024
- return tr.defaultShader ;
6025
- }
6026
-
6027
5985
static void ClearGlobalShader ()
6028
5986
{
6029
5987
ResetStruct ( shader );
0 commit comments