#include "BsHardwareBufferManager.h" #include "BsVertexData.h" #include "BsGpuBuffer.h" #include "BsVertexDeclaration.h" #include "BsGpuParamBlockBuffer.h" namespace BansheeEngine { HardwareBufferManager::HardwareBufferManager() { } HardwareBufferManager::~HardwareBufferManager() { } VertexDeclarationPtr HardwareBufferManager::createVertexDeclaration(const List& elements) { VertexDeclaration* decl = new (bs_alloc()) VertexDeclaration(elements); VertexDeclarationPtr declPtr = bs_core_ptr(decl); declPtr->_setThisPtr(declPtr); declPtr->initialize(); return declPtr; } VertexBufferPtr HardwareBufferManager::createVertexBuffer(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut) { assert (numVerts > 0); VertexBufferPtr vbuf = bs_core_ptr(new (bs_alloc()) VertexBuffer(vertexSize, numVerts, usage, streamOut)); vbuf->_setThisPtr(vbuf); vbuf->initialize(); return vbuf; } IndexBufferPtr HardwareBufferManager::createIndexBuffer(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage) { assert (numIndexes > 0); IndexBufferPtr ibuf = bs_core_ptr(new (bs_alloc()) IndexBuffer(itype, numIndexes, usage)); ibuf->_setThisPtr(ibuf); ibuf->initialize(); return ibuf; } GpuParamBlockBufferPtr HardwareBufferManager::createGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage) { GpuParamBlockBufferPtr paramBlockPtr = bs_core_ptr(new (bs_alloc()) GpuParamBlockBuffer(size, usage)); paramBlockPtr->_setThisPtr(paramBlockPtr); paramBlockPtr->initialize(); return paramBlockPtr; } GpuBufferPtr HardwareBufferManager::createGpuBuffer(UINT32 elementCount, UINT32 elementSize, GpuBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter) { GpuBufferPtr gbuf = bs_core_ptr(new (bs_alloc()) GpuBuffer(elementCount, elementSize, type, usage, randomGpuWrite, useCounter)); gbuf->_setThisPtr(gbuf); gbuf->initialize(); return gbuf; } SPtr HardwareBufferCoreManager::createIndexBuffer(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage) { assert(numIndexes > 0); SPtr ibuf = createIndexBufferInternal(itype, numIndexes, usage); ibuf->initialize(); return ibuf; } SPtr HardwareBufferCoreManager::createVertexBuffer(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut) { assert(numVerts > 0); SPtr vbuf = createVertexBufferInternal(vertexSize, numVerts, usage, streamOut); vbuf->initialize(); return vbuf; } SPtr HardwareBufferCoreManager::createVertexDeclaration(const List& elements) { SPtr declPtr = createVertexDeclarationInternal(elements); declPtr->initialize(); return declPtr; } SPtr HardwareBufferCoreManager::createGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage) { SPtr paramBlockPtr = createGpuParamBlockBufferInternal(size, usage); paramBlockPtr->initialize(); return paramBlockPtr; } SPtr HardwareBufferCoreManager::createGpuBuffer(UINT32 elementCount, UINT32 elementSize, GpuBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter) { SPtr gbuf = createGpuBufferInternal(elementCount, elementSize, type, usage, randomGpuWrite, useCounter); gbuf->initialize(); return gbuf; } SPtr HardwareBufferCoreManager::createVertexDeclarationInternal(const List& elements) { VertexDeclarationCore* decl = new (bs_alloc()) VertexDeclarationCore(elements); SPtr ret = bs_shared_ptr(decl); ret->_setThisPtr(ret); return ret; } }