#include "BsGLHardwareBufferManager.h" #include "BsGLVertexBuffer.h" #include "BsGLIndexBuffer.h" #include "BsGLGpuBuffer.h" #include "BsHardwareBuffer.h" #include "BsGLGpuParamBlockBuffer.h" #include "BsRenderAPI.h" #include "BsRenderAPICapabilities.h" namespace BansheeEngine { SPtr GLHardwareBufferCoreManager::createVertexBufferInternal(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut) { SPtr ret = bs_shared_ptr_new(vertexSize, numVerts, usage, streamOut); ret->_setThisPtr(ret); return ret; } SPtr GLHardwareBufferCoreManager::createIndexBufferInternal(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage) { SPtr ret = bs_shared_ptr_new(itype, numIndexes, usage); ret->_setThisPtr(ret); return ret; } SPtr GLHardwareBufferCoreManager::createGpuParamBlockBufferInternal(UINT32 size, GpuParamBlockUsage usage) { GLGpuParamBlockBufferCore* paramBlockBuffer = new (bs_alloc()) GLGpuParamBlockBufferCore(size, usage); SPtr paramBlockBufferPtr = bs_shared_ptr(paramBlockBuffer); paramBlockBufferPtr->_setThisPtr(paramBlockBufferPtr); return paramBlockBufferPtr; } SPtr GLHardwareBufferCoreManager::createGpuBufferInternal(UINT32 elementCount, UINT32 elementSize, GpuBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter) { GLGpuBufferCore* buffer = new (bs_alloc()) GLGpuBufferCore(elementCount, elementSize, type, usage, randomGpuWrite, useCounter); SPtr bufferPtr = bs_shared_ptr(buffer); bufferPtr->_setThisPtr(bufferPtr); return bufferPtr; } GLenum GLHardwareBufferCoreManager::getGLUsage(GpuBufferUsage usage) { switch(usage) { case GBU_STATIC: return GL_STATIC_DRAW; case GBU_DYNAMIC: return GL_DYNAMIC_DRAW; default: return GL_DYNAMIC_DRAW; }; } GLenum GLHardwareBufferCoreManager::getGLType(VertexElementType type) { switch(type) { case VET_FLOAT1: case VET_FLOAT2: case VET_FLOAT3: case VET_FLOAT4: return GL_FLOAT; case VET_SHORT1: case VET_SHORT2: case VET_SHORT3: case VET_SHORT4: return GL_SHORT; case VET_COLOR: case VET_COLOR_ABGR: case VET_COLOR_ARGB: case VET_UBYTE4: return GL_UNSIGNED_BYTE; default: return 0; }; } }