#include "CpuMesh.hpp" #include StandardCpuMesh::StandardCpuMesh() : mGpuMesh(new GpuMesh()) { mGpuMesh->vertFormat = gVformatStandard; mGpuMesh->vertBufBindings.SetBinding(0, new GpuVertexBuffer()); mGpuMesh->vertBufBindings.SetBinding(1, new GpuVertexBuffer()); mGpuMesh->indexBuf.Attach(new GpuIndexBuffer()); } StandardCpuMesh::~StandardCpuMesh() { delete mData; } void StandardCpuMesh::CreateCpuData() { if (!mData) { mData = new StandardCpuMeshData(); } } GpuVertexBuffer* StandardCpuMesh::GetPosBuffer() const { return mGpuMesh->vertBufBindings.bindings[0].Get(); } GpuVertexBuffer* StandardCpuMesh::GetExtraBuffer() const { return mGpuMesh->vertBufBindings.bindings[1].Get(); } bool StandardCpuMesh::UpdatePositions(glm::vec3* pos, size_t count, size_t startVertIndex) { if (mData) { std::memcpy(&mData->vertPositions[startVertIndex], pos, count * sizeof(glm::vec3)); } auto posBuf = GetPosBuffer(); glBindBuffer(GL_ARRAY_BUFFER, posBuf->handle); glBufferSubData(GL_ARRAY_BUFFER, startVertIndex * mGpuMesh->vertFormat->vertexSize, count * sizeof(glm::vec3), pos); return true; } bool StandardCpuMesh::UpdateColors(RgbaColor* color, size_t count, size_t starVertIndex) { if (!mData) return false; // TODO } bool StandardCpuMesh::UpdateNormals(glm::vec2* normals, size_t count, size_t startVertIndex) { if (!mData) return false; // TODO } bool StandardCpuMesh::UpdateIndices(uint32_t* indices, size_t count, size_t startVertIndex) { if (!mData) return false; // TODO }