Example #1
0
/**
* 頂点プログラムをコンパイル
*/
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;
}
Example #2
0
/**
* ピクセルプログラムをコンパイル
*/
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;
}
Example #3
0
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;
}