2
0

BsGLHardwareBufferManager.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 "RenderAPI/BsHardwareBuffer.h"
  8. #include "BsGLGpuParamBlockBuffer.h"
  9. #include "RenderAPI/BsRenderAPI.h"
  10. #include "RenderAPI/BsRenderAPICapabilities.h"
  11. namespace bs { namespace ct
  12. {
  13. SPtr<VertexBuffer> GLHardwareBufferManager::createVertexBufferInternal(const VERTEX_BUFFER_DESC& desc,
  14. GpuDeviceFlags deviceMask)
  15. {
  16. SPtr<GLVertexBuffer> ret = bs_shared_ptr_new<GLVertexBuffer>(desc, deviceMask);
  17. ret->_setThisPtr(ret);
  18. return ret;
  19. }
  20. SPtr<IndexBuffer> GLHardwareBufferManager::createIndexBufferInternal(const INDEX_BUFFER_DESC& desc,
  21. GpuDeviceFlags deviceMask)
  22. {
  23. SPtr<GLIndexBuffer> ret = bs_shared_ptr_new<GLIndexBuffer>(desc, deviceMask);
  24. ret->_setThisPtr(ret);
  25. return ret;
  26. }
  27. SPtr<GpuParamBlockBuffer> GLHardwareBufferManager::createGpuParamBlockBufferInternal(UINT32 size,
  28. GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
  29. {
  30. GLGpuParamBlockBuffer* paramBlockBuffer =
  31. new (bs_alloc<GLGpuParamBlockBuffer>()) GLGpuParamBlockBuffer(size, usage, deviceMask);
  32. SPtr<GpuParamBlockBuffer> paramBlockBufferPtr = bs_shared_ptr<GLGpuParamBlockBuffer>(paramBlockBuffer);
  33. paramBlockBufferPtr->_setThisPtr(paramBlockBufferPtr);
  34. return paramBlockBufferPtr;
  35. }
  36. SPtr<GpuBuffer> GLHardwareBufferManager::createGpuBufferInternal(const GPU_BUFFER_DESC& desc,
  37. GpuDeviceFlags deviceMask)
  38. {
  39. GLGpuBuffer* buffer = new (bs_alloc<GLGpuBuffer>()) GLGpuBuffer(desc, deviceMask);
  40. SPtr<GpuBuffer> bufferPtr = bs_shared_ptr<GLGpuBuffer>(buffer);
  41. bufferPtr->_setThisPtr(bufferPtr);
  42. return bufferPtr;
  43. }
  44. GLenum GLHardwareBufferManager::getGLUsage(GpuBufferUsage usage)
  45. {
  46. if(usage & GBU_STATIC)
  47. return GL_STATIC_DRAW;
  48. if(usage & GBU_DYNAMIC)
  49. return GL_DYNAMIC_DRAW;
  50. return GL_DYNAMIC_DRAW;
  51. }
  52. GLenum GLHardwareBufferManager::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_SHORT4:
  64. return GL_SHORT;
  65. case VET_USHORT1:
  66. case VET_USHORT2:
  67. case VET_USHORT4:
  68. return GL_UNSIGNED_SHORT;
  69. case VET_INT1:
  70. case VET_INT2:
  71. case VET_INT3:
  72. case VET_INT4:
  73. return GL_INT;
  74. case VET_UINT1:
  75. case VET_UINT2:
  76. case VET_UINT3:
  77. case VET_UINT4:
  78. return GL_UNSIGNED_INT;
  79. case VET_COLOR:
  80. case VET_COLOR_ABGR:
  81. case VET_COLOR_ARGB:
  82. case VET_UBYTE4:
  83. case VET_UBYTE4_NORM:
  84. return GL_UNSIGNED_BYTE;
  85. default:
  86. return 0;
  87. };
  88. }
  89. }}