BsGLVertexBuffer.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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 "BsGLBuffer.h"
  7. #include "BsGLVertexArrayObjectManager.h"
  8. namespace BansheeEngine
  9. {
  10. /** @addtogroup GL
  11. * @{
  12. */
  13. /** OpenGL implementation of a vertex buffer. */
  14. class BS_RSGL_EXPORT GLVertexBufferCore : public VertexBufferCore
  15. {
  16. public:
  17. GLVertexBufferCore(const VERTEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask);
  18. ~GLVertexBufferCore();
  19. /** @copydoc VertexBufferCore::readData */
  20. void readData(UINT32 offset, UINT32 length, void* dest, UINT32 deviceIdx = 0, UINT32 queueIdx = 0) override;
  21. /** @copydoc VertexBufferCore::writeData */
  22. void writeData(UINT32 offset, UINT32 length, const void* source,
  23. BufferWriteType writeFlags = BWT_NORMAL, UINT32 queueIdx = 0) override;
  24. /** Returns internal OpenGL buffer ID. */
  25. GLuint getGLBufferId() const { return mBuffer.getGLBufferId(); }
  26. /** Registers a new VertexArrayObject that uses this vertex buffer. */
  27. void registerVAO(const GLVertexArrayObject& vao);
  28. /** Unregisters a VAO from this vertex buffer. Does not destroy it. */
  29. void unregisterVAO(const GLVertexArrayObject& vao);
  30. protected:
  31. /** @copydoc VertexBufferCore::initialize */
  32. void initialize() override;
  33. /** @copydoc VertexBufferCore::map */
  34. void* map(UINT32 offset, UINT32 length, GpuLockOptions options, UINT32 deviceIdx, UINT32 queueIdx) override;
  35. /** @copydoc VertexBufferCore::unmap */
  36. void unmap() override;
  37. private:
  38. GLBuffer mBuffer;
  39. GpuBufferUsage mUsage;
  40. Vector<GLVertexArrayObject> mVAObjects;
  41. };
  42. /** @} */
  43. }