CCMShader *CM_GetShaderInfo( const char *name ) { CCMShader *out; const char *def; out = cmShaderTable[name]; if(out) { return(out); } // Create a new CCMShader class out = (CCMShader *)Hunk_Alloc( sizeof( CCMShader ), h_high ); // Set defaults Q_strncpyz(out->shader, name, MAX_QPATH); out->contentFlags = CONTENTS_SOLID | CONTENTS_OPAQUE; // Parse in any text if it exists def = CM_GetShaderText(name); if(def) { CM_ParseShader(out, &def); } cmShaderTable.insert(out); return(out); }
void CM_SetupShaderProperties(void) { int i; const char *def; CCMShader *shader; // Add all basic shaders to the cmShaderTable for(i = 0; i < cmg.numShaders; i++) { cmShaderTable.insert(CM_GetShaderInfo(i)); } // Go through and parse evaluate shader names to shadernums for(i = 0; i < cmg.numShaders; i++) { shader = CM_GetShaderInfo(i); def = CM_GetShaderText(shader->shader); if(def) { CM_ParseShader(shader, &def); } } }
/* ==================== CM_CreateShaderTextHash ===================== */ void CM_CreateShaderTextHash(void) { const char *p; qboolean hasNewLines; char *token; CCMShaderText *shader; p = shaderText; // look for label while (p) { p = SkipWhitespace(p, &hasNewLines); token = COM_ParseExt( &p, qtrue ); if ( !token[0] ) { break; } shader = new CCMShaderText(token, p); shaderTextTable.insert(shader); SkipBracedSection(&p); } }