/** * 頂点プログラムをコンパイル */ BOOL CPostEffectConverter::CompileVertexProgram( BOOL bIsAsm, LPCSTR lpszCompileCommand, LPCSTR lpszShaderFile, LPCSTR lpszObjDir) { CCompileCmdCreator::GetInstance().SetIsVS(TRUE); IZ_UINT nPassCnt = 0; CGtechnique tech = ::cgGetFirstTechnique(m_pCgEffect); while (tech != NULL) { CGpass pass = ::cgGetFirstPass(tech); while (pass != NULL) { SVSInfo sVSInfo; // 出力ファイル名を作成 _MakeOutFile( sVSInfo.file, nPassCnt, lpszShaderFile, lpszObjDir); CGprogram progVS = CPassUtil::GetVSProgram(pass); IZ_PCSTR pszEntryPoint = ::cgGetProgramString(progVS, CG_PROGRAM_ENTRY); IZ_PCSTR pszProfile = ::cgGetProgramString(progVS, CG_PROGRAM_PROFILE); CGprofile profile = ::cgGetProfile(pszProfile); // コンパイル if (!_CompileShader( sVSInfo.file, bIsAsm, lpszCompileCommand, lpszShaderFile, pszEntryPoint, profile)) { IZ_ASSERT(FALSE); // TODO return FALSE; } sVSInfo.type = CPostEffectConvUtil::GetVtxShaderType(pszEntryPoint); m_CompiledVSList.push_back(sVSInfo); nPassCnt++; pass = ::cgGetNextPass(pass); } tech = ::cgGetNextTechnique(tech); } return TRUE; }
/** * ピクセルプログラムをコンパイル */ BOOL CPostEffectConverter::CompilePixelProgram( BOOL bIsAsm, LPCSTR lpszCompileCommand, LPCSTR lpszShaderFile, LPCSTR lpszObjDir) { CCompileCmdCreator::GetInstance().SetIsVS(FALSE); IZ_UINT nPassCnt = 0; CGtechnique tech = ::cgGetFirstTechnique(m_pCgEffect); while (tech != NULL) { CGpass pass = ::cgGetFirstPass(tech); while (pass != NULL) { // 出力ファイル名を作成 izanagi::tool::CString strOut; _MakeOutFile( strOut, nPassCnt, lpszShaderFile, lpszObjDir); CGprogram progPS = CPassUtil::GetPSProgram(pass); IZ_PCSTR pszEntryPoint = ::cgGetProgramString(progPS, CG_PROGRAM_ENTRY); IZ_PCSTR pszProfile = ::cgGetProgramString(progPS, CG_PROGRAM_PROFILE); CGprofile profile = ::cgGetProfile(pszProfile); // コンパイル if (!_CompileShader( strOut, bIsAsm, lpszCompileCommand, lpszShaderFile, pszEntryPoint, profile)) { IZ_ASSERT(FALSE); // TODO return FALSE; } m_CompiledPSList.push_back(strOut); nPassCnt++; pass = ::cgGetNextPass(pass); } tech = ::cgGetNextTechnique(tech); } return TRUE; }
BOOL CShaderConverter::CompileProgram( BOOL bIsVS, const SShaderConfig& config, LPCSTR lpszObjDir) { CCompileCmdCreator::GetInstance(config.type).SetIsVS(FALSE); IZ_UINT nPassCnt = 0; CGtechnique tech = ::cgGetFirstTechnique(m_pCgEffect); while (tech != NULL) { CGpass pass = ::cgGetFirstPass(tech); while (pass != NULL) { // 出力ファイル名を作成 izanagi::tool::CString strOut; _MakeOutFile( strOut, nPassCnt, config.shader, lpszObjDir); CCompileCmdCreator::GetInstance(config.type).SetIsVS(bIsVS); CGprogram program = (bIsVS ? CPassUtil::GetVSProgram(pass) : CPassUtil::GetPSProgram(pass)); IZ_PCSTR entry = ::cgGetProgramString(program, CG_PROGRAM_ENTRY); IZ_PCSTR pszProfile = ::cgGetProgramString(program, CG_PROGRAM_PROFILE); CGprofile profile = ::cgGetProfile(pszProfile); // コンパイル if (!_CompileShader( strOut, config, entry, profile)) { IZ_ASSERT(FALSE); // TODO return FALSE; } if (bIsVS) { m_CompiledVSList.push_back(strOut); } else { m_CompiledPSList.push_back(strOut); } nPassCnt++; pass = ::cgGetNextPass(pass); } tech = ::cgGetNextTechnique(tech); } return TRUE; }