#include "GeoVertexBuffer.h" using namespace Geometry; //--------------------------------------------------------------------------- // Destroyer. //--------------------------------------------------------------------------- VertexBuffer::~VertexBuffer() { delete [] mPosition; delete [] mNormal; delete [] mTexCoords; } //--------------------------------------------------------------------------- // Save to a serializer. //--------------------------------------------------------------------------- void VertexBuffer::Save(Serializer &s) { s.WriteArray(&mVertexInfo, 1); s.WriteArray(&mVertexCount, 1); if (mVertexInfo & VERTEX_POSITION) { s.WriteArray(mPosition, mVertexCount); } if (mVertexInfo & VERTEX_NORMAL) { s.WriteArray(mNormal, mVertexCount); } if (mVertexInfo & VERTEX_TEXCOORDS) { s.WriteArray(mTexCoords, mVertexCount); } } //--------------------------------------------------------------------------- // Loads from a serializer. //--------------------------------------------------------------------------- void VertexBuffer::Load(Serializer &s) { // Clear data. delete [] mPosition; mPosition = 0; delete [] mNormal; mNormal = 0; delete [] mTexCoords; mTexCoords = 0; s.ReadArray(&mVertexInfo,1); s.ReadArray(&mVertexCount,1); if (mVertexInfo & VERTEX_POSITION) { mPosition = new Vector3[mVertexCount]; s.ReadArray(mPosition, mVertexCount); } if (mVertexInfo & VERTEX_NORMAL) { mNormal = new Vector3[mVertexCount]; s.ReadArray(mNormal, mVertexCount); } if (mVertexInfo & VERTEX_TEXCOORDS) { mTexCoords = new Vector2[mVertexCount]; s.ReadArray(mTexCoords, mVertexCount); } } //--------------------------------------------------------------------------- // Copy contents of vertex buffer to another. //--------------------------------------------------------------------------- VertexBuffer *VertexBuffer::Clone() const { VertexBuffer *vnew = new VertexBuffer(); vnew->mVertexInfo = mVertexInfo; vnew->mVertexCount = mVertexCount; vnew->mPosition = new Vector3[mVertexCount]; vnew->mNormal = new Vector3[mVertexCount]; vnew->mTexCoords = new Vector2[mVertexCount]; memcpy(vnew->mPosition, mPosition, mVertexCount*sizeof(Vector3)); memcpy(vnew->mNormal, mNormal, mVertexCount*sizeof(Vector3)); memcpy(vnew->mTexCoords, mTexCoords, mVertexCount*sizeof(Vector2)); return vnew; }