BsGLHardwareBufferManager.cpp 3.0 KB

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