Esempio n. 1
0
/**
* シェーダ解析
*/
BOOL CShaderConverter::Export(const SShaderConfig& sConfig)
{
    IZ_ASSERT(m_pCgEffect != NULL);

    VRETURN(m_Out.Open(sConfig.out));

    // ファイルヘッダ
    {
        FILL_ZERO(&m_ShdHeader, sizeof(m_ShdHeader));

        // TODO
        // magic
        // version

        m_ShdHeader.name.SetString(sConfig.name);
        m_ShdHeader.nameKey = m_ShdHeader.name.GetKeyValue();

        m_ShdHeader.sizeHeader = sizeof(m_ShdHeader);
    }

    // ファイルヘッダ分空ける
    VRETURN(m_Out.Seek(sizeof(m_ShdHeader), izanagi::E_IO_STREAM_SEEK_POS_START));

    ExportParameter(sConfig);
    ExportTexture();
    ExportSampler(sConfig);
    ExportTechnique();

    ExportPass(sConfig);

    ExportStringBuffer();

    // Export program chunk's header.
    _ExportChunkHeader(m_Out, izanagi::shader::SHD_CHUNK_MAGIC_NUMBER_PROG);

    // プログラム開始位置
    m_ShdHeader.posProgram = m_Out.GetCurPos();

    ExportProgram(sConfig);

    // Export chunk's terminater.
    //_ExportChunkHeader(m_Out, izanagi::SHD_PROGRAM_CHUNK_TERMINATER);

    // ファイルサイズ取得
    m_ShdHeader.sizeFile = m_Out.GetCurPos();

    // 先頭に戻る
    VRETURN(m_Out.Seek(0, izanagi::E_IO_STREAM_SEEK_POS_START));

    // ファイルヘッダ出力
    m_Out.Write(&m_ShdHeader, 0, sizeof(m_ShdHeader));

    m_Out.Finalize();

    return TRUE;
}
Esempio n. 2
0
/**
* シェーダ解析
*/
BOOL CPostEffectConverter::Export(LPCSTR lpszOutFile)
{
    IZ_ASSERT(m_pCgEffect != NULL);

    VRETURN(m_Out.Open(lpszOutFile));

    // ファイルヘッダ
    {
        FILL_ZERO(&m_PesHeader, sizeof(m_PesHeader));

        // TODO
        // magic
        // version

        m_PesHeader.sizeHeadaer = sizeof(m_PesHeader);
    }

    // ファイルヘッダ分空ける
    VRETURN(m_Out.Seek(sizeof(m_PesHeader), izanagi::E_IO_STREAM_SEEK_POS_START));

    ExportParameter();
    ExportTexture();
    ExportSampler();
    ExportTechnique();
    
    ExportPass();
    ExportUsedParamAndSamplerIdxByPass();

    ExportStringBuffer();

    // プログラム位置
    m_PesHeader.posProgram = m_Out.GetCurPos();

    ExportPSProgram();

    ExportVSProgram();

    // ファイルサイズ取得
    m_PesHeader.sizeFile = m_Out.GetCurPos();

    // 先頭に戻る
    VRETURN(m_Out.Seek(0, izanagi::E_IO_STREAM_SEEK_POS_START));

    // ファイルヘッダ出力
    m_Out.Write(&m_PesHeader, 0, sizeof(m_PesHeader));

    m_Out.Finalize();
    
    return TRUE;
}