//-------------------------------------------------------------------------- void VeMaterial::UpdatePlatform(VeBinaryIStream& kStream) { VeUInt32 u32Temp; kStream >> u32Temp; for(VeUInt32 i(0); i < u32Temp; ++i) { VeRenderObjectPtr spRenderObj; VE_ASSERT_EQ(g_pRenderer->CreateRenderObject(kStream, &spRenderObj), true); VE_ASSERT(spRenderObj); m_kRenderObjectArray.PushBack(spRenderObj); } kStream >> u32Temp; for(VeUInt32 i(0); i < u32Temp; ++i) { VeStringA kName; kStream.GetStringAligned4(kName); VeRenderNodeDataPtr spNodeData; VE_ASSERT_EQ(g_pRenderer->CreateRenderNodeData(kName, kStream, &spNodeData), true); VE_ASSERT(spNodeData); m_kRenderNodeDataArray.PushBack(spNodeData); } kStream >> u32Temp; for(VeUInt32 i(0); i < u32Temp; ++i) { VeStringA kName; VeStringA kData; VeStringA kParent; kStream.GetStringAligned4(kName); kStream.GetStringAligned4(kData); kStream.GetStringAligned4(kParent); m_kNodeArray.Resize(m_kNodeArray.Size()+1); m_kNodeArray.Back().m_kName = kName; m_kNodeArray.Back().m_kDataName = kData; m_kNodeArray.Back().m_kParentName = kParent; g_pMaterialManager->CreateRenderNode(kName, kData, kParent); } kStream >> u32Temp; for(VeUInt32 i(0); i < u32Temp; ++i) { m_kMaterialArray.Resize(m_kMaterialArray.Size()+1); Material& kMat = m_kMaterialArray.Back(); VeStringA kTemp; kStream.GetStringAligned4(kTemp); kMat.m_kName = kTemp; VeUInt32 u32Count; kStream >> u32Count; for(VeUInt32 j(0); j < u32Count; ++j) { kStream.GetStringAligned4(kTemp); kMat.m_kRenderNodeArray.PushBack( g_pMaterialManager->GetRenderNode(kTemp)); } g_pMaterialManager->AddMat(kMat.m_kName, &kMat); } }
//-------------------------------------------------------------------------- bool VeMaterial::Update(VeBinaryIStream& kStream) { Clear(); VeUInt32 u32Temp; kStream >> u32Temp; if(u32Temp != VE_MAKE_ID('V', 'M', 'A', 'T')) return false; VeUInt32 u32PlatformCount; kStream >> u32PlatformCount; for(VeUInt32 i(0); i < u32PlatformCount; ++i) { kStream >> u32Temp; bool bSupport = VE_MASK_HAS_ANY(u32Temp, VE_PLATFORM_MASK); kStream >> u32Temp; if(bSupport) { UpdatePlatform(kStream); } else { kStream.Skip(u32Temp); } } m_bNeedClear = true; return true; }
//-------------------------------------------------------------------------- void VeBinaryOStream::Transfer(VeBinaryIStream& kFrom, VeInt32 i32Length) { VE_ASSERT(i32Length > 0); void* pvBuffer = VeMalloc(i32Length); VE_ASSERT_EQ(kFrom.Read(pvBuffer, i32Length), i32Length); AddBlob(pvBuffer, i32Length); VeFree(pvBuffer); }
//-------------------------------------------------------------------------- void VeBinaryOStream::Transfer(VeBinaryIStream& kFrom, VeSizeT stLength) noexcept { if (stLength) { void* pvBuffer = VeStackMalloc(stLength); VE_ASSERT_EQ(kFrom.Read(pvBuffer, stLength), stLength); AddBlob(pvBuffer, stLength); VeStackFree(pvBuffer); } }
//-------------------------------------------------------------------------- void VeAudioSampleData::ParseWave(VeBinaryIStream& kInput) { VeWaveFileHeader kHeader; VE_ASSERT_EQ(kInput.Read(&kHeader, 12), 12); VE_ASSERT((!VeStrnicmp(kHeader.m_ac8Riff, "RIFF", 4)) && (!VeStrnicmp(kHeader.m_ac8Wave, "WAVE", 4))); VeRiffChunk kChunk; while(kInput.Read(&kChunk, 8) == 8) { if(!VeStrnicmp(kChunk.m_ac8ChunkName, "fmt ", 4)) { VeWaveFormat kFormat; VE_ASSERT_EQ(kInput.Read(&kFormat, kChunk.m_u32ChunkSize), VeInt32(kChunk.m_u32ChunkSize)); VE_ASSERT(kFormat.m_u16FormatTag == 1); m_u32ChannelNum = kFormat.m_u16Channels; m_u32SampleRate = kFormat.m_u32SamplesPerSec; m_u32BitsPerSample = kFormat.m_u16BitsPerSample; } else if(!VeStrnicmp(kChunk.m_ac8ChunkName, "data", 4)) { m_spData = VE_NEW VeBlob(kChunk.m_u32ChunkSize); VE_ASSERT_EQ(kInput.Read(*m_spData, kChunk.m_u32ChunkSize), VeInt32(kChunk.m_u32ChunkSize)); } else { kInput.Skip(kChunk.m_u32ChunkSize); } if (kChunk.m_u32ChunkSize & 1) { kInput.Skip(1); } } }