summaryrefslogtreecommitdiff
path: root/src/renderergl1/tr_shader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderergl1/tr_shader.c')
-rw-r--r--src/renderergl1/tr_shader.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/renderergl1/tr_shader.c b/src/renderergl1/tr_shader.c
index 1d7aeee3..76ac27ca 100644
--- a/src/renderergl1/tr_shader.c
+++ b/src/renderergl1/tr_shader.c
@@ -2383,7 +2383,7 @@ static char *FindShaderInShaderText( const char *shadername ) {
}
else {
// skip the definition
- SkipBracedSection( &p );
+ SkipBracedSection( &p, 0 );
}
}
@@ -2917,6 +2917,8 @@ static void ScanAndLoadShaderFiles( void )
int i;
char *oldp, *token, *hashMem, *textEnd;
int shaderTextHashTableSizes[MAX_SHADERTEXT_HASH], hash, size;
+ char shaderName[MAX_QPATH];
+ int shaderLine;
long sum = 0, summand;
// scan for shader files
@@ -2946,15 +2948,17 @@ static void ScanAndLoadShaderFiles( void )
// Do a simple check on the shader structure in that file to make sure one bad shader file cannot fuck up all other shaders.
p = buffers[i];
+ COM_BeginParseSession(filename);
while(1)
{
token = COM_ParseExt(&p, qtrue);
if(!*token)
break;
-
- oldp = p;
-
+
+ Q_strncpyz(shaderName, token, sizeof(shaderName));
+ shaderLine = COM_GetCurrentParseLine();
+
token = COM_ParseExt(&p, qtrue);
if(token[0] != '{' || token[1] != '\0')
{
@@ -2964,8 +2968,14 @@ static void ScanAndLoadShaderFiles( void )
break;
}
- SkipBracedSection(&oldp);
- p = oldp;
+ if(!SkipBracedSection(&p, 1))
+ {
+ ri.Printf(PRINT_WARNING, "WARNING: Ignoring shader file %s. Shader \"%s\" on line %d missing closing brace.\n",
+ filename, shaderName, shaderLine);
+ ri.FS_FreeFile(buffers[i]);
+ buffers[i] = NULL;
+ break;
+ }
}
@@ -3009,7 +3019,7 @@ static void ScanAndLoadShaderFiles( void )
hash = generateHashValue(token, MAX_SHADERTEXT_HASH);
shaderTextHashTableSizes[hash]++;
size++;
- SkipBracedSection(&p);
+ SkipBracedSection(&p, 0);
}
size += MAX_SHADERTEXT_HASH;
@@ -3035,7 +3045,7 @@ static void ScanAndLoadShaderFiles( void )
hash = generateHashValue(token, MAX_SHADERTEXT_HASH);
shaderTextHashTable[hash][shaderTextHashTableSizes[hash]++] = oldp;
- SkipBracedSection(&p);
+ SkipBracedSection(&p, 0);
}
return;