BsGLHardwareBufferManager.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "BsGLHardwareBufferManager.h"
  2. #include "BsGLVertexBuffer.h"
  3. #include "BsGLIndexBuffer.h"
  4. #include "BsGLGpuBuffer.h"
  5. #include "BsHardwareBuffer.h"
  6. #include "BsGLGpuParamBlockBuffer.h"
  7. #include "BsRenderAPI.h"
  8. #include "BsRenderAPICapabilities.h"
  9. namespace BansheeEngine
  10. {
  11. SPtr<VertexBufferCore> GLHardwareBufferCoreManager::createVertexBufferInternal(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut)
  12. {
  13. SPtr<GLVertexBufferCore> ret = bs_shared_ptr<GLVertexBufferCore>(vertexSize, numVerts, usage, streamOut);
  14. ret->_setThisPtr(ret);
  15. return ret;
  16. }
  17. SPtr<IndexBufferCore> GLHardwareBufferCoreManager::createIndexBufferInternal(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage)
  18. {
  19. SPtr<GLIndexBufferCore> ret = bs_shared_ptr<GLIndexBufferCore>(itype, numIndexes, usage);
  20. ret->_setThisPtr(ret);
  21. return ret;
  22. }
  23. SPtr<GpuParamBlockBufferCore> GLHardwareBufferCoreManager::createGpuParamBlockBufferInternal(UINT32 size, GpuParamBlockUsage usage)
  24. {
  25. GLGpuParamBlockBufferCore* paramBlockBuffer = new (bs_alloc<GLGpuParamBlockBufferCore, GenAlloc>()) GLGpuParamBlockBufferCore(size, usage);
  26. SPtr<GpuParamBlockBufferCore> paramBlockBufferPtr = bs_shared_ptr<GLGpuParamBlockBufferCore, GenAlloc>(paramBlockBuffer);
  27. paramBlockBufferPtr->_setThisPtr(paramBlockBufferPtr);
  28. return paramBlockBufferPtr;
  29. }
  30. SPtr<GpuBufferCore> GLHardwareBufferCoreManager::createGpuBufferInternal(UINT32 elementCount, UINT32 elementSize,
  31. GpuBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  32. {
  33. GLGpuBufferCore* buffer = new (bs_alloc<GLGpuBufferCore, GenAlloc>()) GLGpuBufferCore(elementCount, elementSize, type, usage, randomGpuWrite, useCounter);
  34. SPtr<GpuBufferCore> bufferPtr = bs_shared_ptr<GLGpuBufferCore, GenAlloc>(buffer);
  35. bufferPtr->_setThisPtr(bufferPtr);
  36. return bufferPtr;
  37. }
  38. GLenum GLHardwareBufferCoreManager::getGLUsage(GpuBufferUsage usage)
  39. {
  40. switch(usage)
  41. {
  42. case GBU_STATIC:
  43. return GL_STATIC_DRAW;
  44. case GBU_DYNAMIC:
  45. return GL_DYNAMIC_DRAW;
  46. default:
  47. return GL_DYNAMIC_DRAW;
  48. };
  49. }
  50. GLenum GLHardwareBufferCoreManager::getGLType(VertexElementType type)
  51. {
  52. switch(type)
  53. {
  54. case VET_FLOAT1:
  55. case VET_FLOAT2:
  56. case VET_FLOAT3:
  57. case VET_FLOAT4:
  58. return GL_FLOAT;
  59. case VET_SHORT1:
  60. case VET_SHORT2:
  61. case VET_SHORT3:
  62. case VET_SHORT4:
  63. return GL_SHORT;
  64. case VET_COLOR:
  65. case VET_COLOR_ABGR:
  66. case VET_COLOR_ARGB:
  67. case VET_UBYTE4:
  68. return GL_UNSIGNED_BYTE;
  69. default:
  70. return 0;
  71. };
  72. }
  73. }