BsGLHardwareBufferManager.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 numIndices, GpuBufferUsage usage)
  20. {
  21. SPtr<GLIndexBufferCore> ret = bs_shared_ptr_new<GLIndexBufferCore>(itype, numIndices, 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, GpuBufferFormat format, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  34. {
  35. GLGpuBufferCore* buffer = new (bs_alloc<GLGpuBufferCore>()) GLGpuBufferCore(elementCount, elementSize, type, format,
  36. usage, randomGpuWrite, useCounter);
  37. SPtr<GpuBufferCore> bufferPtr = bs_shared_ptr<GLGpuBufferCore>(buffer);
  38. bufferPtr->_setThisPtr(bufferPtr);
  39. return bufferPtr;
  40. }
  41. GLenum GLHardwareBufferCoreManager::getGLUsage(GpuBufferUsage usage)
  42. {
  43. switch(usage)
  44. {
  45. case GBU_STATIC:
  46. return GL_STATIC_DRAW;
  47. case GBU_DYNAMIC:
  48. return GL_DYNAMIC_DRAW;
  49. default:
  50. return GL_DYNAMIC_DRAW;
  51. };
  52. }
  53. GLenum GLHardwareBufferCoreManager::getGLType(VertexElementType type)
  54. {
  55. switch(type)
  56. {
  57. case VET_FLOAT1:
  58. case VET_FLOAT2:
  59. case VET_FLOAT3:
  60. case VET_FLOAT4:
  61. return GL_FLOAT;
  62. case VET_SHORT1:
  63. case VET_SHORT2:
  64. case VET_SHORT4:
  65. return GL_SHORT;
  66. case VET_USHORT1:
  67. case VET_USHORT2:
  68. case VET_USHORT4:
  69. return GL_UNSIGNED_SHORT;
  70. case VET_INT1:
  71. case VET_INT2:
  72. case VET_INT3:
  73. case VET_INT4:
  74. return GL_INT;
  75. case VET_UINT1:
  76. case VET_UINT2:
  77. case VET_UINT3:
  78. case VET_UINT4:
  79. return GL_UNSIGNED_INT;
  80. case VET_COLOR:
  81. case VET_COLOR_ABGR:
  82. case VET_COLOR_ARGB:
  83. case VET_UBYTE4:
  84. case VET_UBYTE4_NORM:
  85. return GL_UNSIGNED_BYTE;
  86. default:
  87. return 0;
  88. };
  89. }
  90. }