//----------------------------------------------------------------------- CgProgram::~CgProgram() { freeCgArgs(); // have to call this here reather than in Resource destructor // since calling virtual methods in base destructors causes crash if (isLoaded()) { unload(); } else { unloadHighLevel(); } }
//----------------------------------------------------------------------- void CgProgram::buildArgs(void) { StringVector args; if (!mCompileArgs.empty()) args = StringUtil::split(mCompileArgs); StringVector::const_iterator i; if (mSelectedCgProfile == CG_PROFILE_VS_1_1) { // Need the 'dcls' argument whenever we use this profile // otherwise compilation of the assembler will fail bool dclsFound = false; for (i = args.begin(); i != args.end(); ++i) { if (*i == "dcls") { dclsFound = true; break; } } if (!dclsFound) { args.push_back("-profileopts"); args.push_back("dcls"); } } // Now split args into that god-awful char** that Cg insists on freeCgArgs(); mCgArguments = new char*[args.size() + 1]; int index = 0; for (i = args.begin(); i != args.end(); ++i, ++index) { mCgArguments[index] = new char[i->length() + 1]; strcpy(mCgArguments[index], i->c_str()); } // Null terminate list mCgArguments[index] = 0; }