diff options
Diffstat (limited to 'code/renderer')
| -rw-r--r-- | code/renderer/tr_bsp.c | 3 | ||||
| -rw-r--r-- | code/renderer/tr_local.h | 10 | ||||
| -rw-r--r-- | code/renderer/tr_shader.c | 7 | 
3 files changed, 14 insertions, 6 deletions
| diff --git a/code/renderer/tr_bsp.c b/code/renderer/tr_bsp.c index c340e13..72e88f3 100644 --- a/code/renderer/tr_bsp.c +++ b/code/renderer/tr_bsp.c @@ -1321,6 +1321,9 @@ static	void R_LoadSubmodels( lump_t *l ) {  		model = R_AllocModel();  		assert( model != NULL );			// this should never happen +		if ( model == NULL ) { +			ri.Error(ERR_DROP, "R_LoadSubmodels: R_AllocModel() failed"); +		}  		model->type = MOD_BRUSH;  		model->bmodel = out; diff --git a/code/renderer/tr_local.h b/code/renderer/tr_local.h index 52a9e37..0da894e 100644 --- a/code/renderer/tr_local.h +++ b/code/renderer/tr_local.h @@ -322,10 +322,12 @@ typedef struct {  struct shaderCommands_s; -#define LIGHTMAP_2D			-4		// shader is for 2D rendering -#define LIGHTMAP_BY_VERTEX	-3		// pre-lit triangle models -#define LIGHTMAP_WHITEIMAGE	-2 -#define	LIGHTMAP_NONE		-1 +// any change in the LIGHTMAP_* defines here MUST be reflected in +// R_FindShader() in tr_bsp.c +#define LIGHTMAP_2D         -4	// shader is for 2D rendering +#define LIGHTMAP_BY_VERTEX  -3	// pre-lit triangle models +#define LIGHTMAP_WHITEIMAGE -2 +#define LIGHTMAP_NONE       -1  typedef enum {  	CT_FRONT_SIDED, diff --git a/code/renderer/tr_shader.c b/code/renderer/tr_shader.c index a714873..7a44d35 100644 --- a/code/renderer/tr_shader.c +++ b/code/renderer/tr_shader.c @@ -1432,7 +1432,6 @@ static qboolean ParseShader( char **text )  		// stage definition  		else if ( token[0] == '{' )  		{ -			// 20051019 misantropia -- fix buffer overrun.  			if ( s >= MAX_SHADER_STAGES ) {  				ri.Printf( PRINT_WARNING, "WARNING: too many stages in shader %s\n", shader.name );  				return qfalse; @@ -2447,6 +2446,10 @@ shader_t *R_FindShader( const char *name, int lightmapIndex, qboolean mipRawImag  	// lightmaps  	if ( lightmapIndex >= 0 && lightmapIndex >= tr.numLightmaps ) {  		lightmapIndex = LIGHTMAP_BY_VERTEX; +	} else if ( lightmapIndex < LIGHTMAP_2D ) { +		// negative lightmap indexes cause stray pointers (think tr.lightmaps[lightmapIndex]) +		ri.Printf( PRINT_WARNING, "WARNING: shader '%s' has invalid lightmap index of %d\n", name, lightmapIndex  ); +		lightmapIndex = LIGHTMAP_BY_VERTEX;  	}  	COM_StripExtension(name, strippedName, sizeof(strippedName)); @@ -2581,7 +2584,7 @@ qhandle_t RE_RegisterShaderFromImage(const char *name, int lightmapIndex, image_  	hash = generateHashValue(name, FILE_HASH_SIZE); -	// 20051020 misantropia -- probably not necessary since this function +	// probably not necessary since this function  	// only gets called from tr_font.c with lightmapIndex == LIGHTMAP_2D  	// but better safe than sorry.  	if ( lightmapIndex >= tr.numLightmaps ) { | 
