/** * シェーダ解析 */ 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; }
/** * シェーダ解析 */ 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; }
void AWDExporter::ExportMaterial( AWD *awd, awd_ncache *ncache, Mtl* mtl, int mtlID, int subNo) { TimeValue t = GetStaticFrame(); int i; BOOL usediffusemap = FALSE; const char *name = mtl->GetName(); int namelen = strlen( name ); AWDMaterial *material = new AWDMaterial( AWD_MATTYPE_COLOR, name, namelen ); AWDTexture *tex; for (i=0; i<mtl->NumSubTexmaps(); i++) { Texmap* subTex = mtl->GetSubTexmap(i); float amt = 1.0f; if (subTex) { // If it is a standard material we can see if the map is enabled. if (mtl->ClassID() == Class_ID(DMTL_CLASS_ID, 0)) { if (!((StdMat*)mtl)->MapEnabled(i)) continue; amt = ((StdMat*)mtl)->GetTexmapAmt(i, 0); } tex = ExportTexture(awd, ncache, subTex, mtl->ClassID(), i, material ); if( tex && i == ID_DI ) { usediffusemap = true; } } } if (mtl->ClassID() == Class_ID(DMTL_CLASS_ID, 0)) { StdMat* std = (StdMat*)mtl; material->color = get_awd_color( std->GetDiffuse(t), 1.0f ); } else { material->color = get_awd_color( mtl->GetDiffuse(), 1.0f ); } AWD_mat_type mattype; if( usediffusemap ) mattype = AWD_MATTYPE_BITMAP; else mattype = AWD_MATTYPE_COLOR; material->set_type( mattype ); awd_ncache_add(ncache, (InterfaceServer*)mtl, material); awd->add_material( material ); if (mtl->NumSubMtls() > 0) { for (i=0; i<mtl->NumSubMtls(); i++) { Mtl* subMtl = mtl->GetSubMtl(i); if (subMtl && mtlList.GetMtlID( subMtl ) == -1 ) { ExportMaterial(awd, ncache, subMtl, 0, i); } } } }