//--------------------------------------------------------------------------
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);
	}
}
Exemple #5
0
//--------------------------------------------------------------------------
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);
		}
	}
}