vint8 class_interpreter::process_command_file1(const char * simple_file_name) { // We require that the file is in the directory g_code_directory/commands // and we add the ".txt" extension to it. char * temp = vJoinPaths(g_code_directory, "commands"); char * temp2; if (vStringEndsIn(simple_file_name, ".txt")) { temp2 = vCopyString(simple_file_name); } else { temp2 = vMergeStrings2(simple_file_name, ".txt"); } char * file = vJoinPaths(temp, temp2); vdelete2(temp); vdelete2(temp2); vint8 result = process_command_file2(file); delete_pointer(file); return result; }
ProcessedMaterial::~ProcessedMaterial() { for_each( mPasses.begin(), mPasses.end(), delete_pointer() ); }
void TerrainCellMaterial::init( TerrainBlock *block, U64 activeMaterials, bool prePassMat, bool reflectMat, bool baseOnly ) { // This isn't allowed for now. AssertFatal( !( prePassMat && reflectMat ), "TerrainCellMaterial::init - We shouldn't get prepass and reflection in the same material!" ); mTerrain = block; mMaterials = activeMaterials; Vector<MaterialInfo*> materials; for ( U32 i = 0; i < 64; i++ ) { if ( !( mMaterials & ((U64)1 << i ) ) ) continue; TerrainMaterial *mat = block->getMaterial( i ); MaterialInfo *info = new MaterialInfo(); info->layerId = i; info->mat = mat; materials.push_back( info ); } mCurrPass = 0; mPasses.clear(); // Ok... loop till we successfully generate all // the shader passes for the materials. while ( materials.size() > 0 || baseOnly ) { mPasses.increment(); if ( !_createPass( &materials, &mPasses.last(), mPasses.size() == 1, prePassMat, reflectMat, baseOnly ) ) { Con::errorf( "TerrainCellMaterial::init - Failed to create pass!" ); // The pass failed to be generated... give up. mPasses.last().materials.clear(); mPasses.clear(); for_each( materials.begin(), materials.end(), delete_pointer() ); return; } if ( baseOnly ) break; } // Cleanup any remaining matinfo. for_each( materials.begin(), materials.end(), delete_pointer() ); // If we have attached mats then update them too. if ( mPrePassMat ) mPrePassMat->init( mTerrain, mMaterials, true, false, baseOnly ); if ( mReflectMat ) mReflectMat->init( mTerrain, mMaterials, false, true, baseOnly ); }