BsGLVertexBuffer.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsGLPrerequisites.h"
  5. #include "BsVertexBuffer.h"
  6. #include "BsGLVertexArrayObjectManager.h"
  7. namespace BansheeEngine
  8. {
  9. /**
  10. * @brief OpenGL implementation of a vertex buffer.
  11. */
  12. class BS_RSGL_EXPORT GLVertexBufferCore : public VertexBufferCore
  13. {
  14. public:
  15. GLVertexBufferCore(UINT32 vertexSize, UINT32 numVertices, GpuBufferUsage usage, bool streamOut);
  16. ~GLVertexBufferCore();
  17. /**
  18. * @copydoc VertexBufferCore::readData
  19. */
  20. void readData(UINT32 offset, UINT32 length, void* pDest);
  21. /**
  22. * @copydoc VertexBufferCore::writeData
  23. */
  24. void writeData(UINT32 offset, UINT32 length, const void* pSource, BufferWriteType writeFlags = BufferWriteType::Normal);
  25. /**
  26. * @brief Returns internal OpenGL buffer ID.
  27. */
  28. GLuint getGLBufferId() const { return mBufferId; }
  29. /**
  30. * @brief Registers a new VertexArrayObject that uses this vertex buffer.
  31. */
  32. void registerVAO(const GLVertexArrayObject& vao);
  33. /**
  34. * @brief Unregisters a VAO from this vertex buffer. Does not destroy it.
  35. */
  36. void unregisterVAO(const GLVertexArrayObject& vao);
  37. protected:
  38. /**
  39. * @copydoc VertexBufferCore::initialize
  40. */
  41. void initialize();
  42. /**
  43. * @copydoc VertexBufferCore::lockImpl
  44. */
  45. void* lockImpl(UINT32 offset, UINT32 length, GpuLockOptions options);
  46. /**
  47. * @copydoc VertexBufferCore::unlockImpl
  48. */
  49. void unlockImpl();
  50. private:
  51. GLuint mBufferId;
  52. bool mZeroLocked;
  53. Vector<GLVertexArrayObject> mVAObjects;
  54. };
  55. }