BsGLVertexBuffer.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 syncMask = 0x00000001) override;
  21. /** @copydoc VertexBufferCore::writeData */
  22. void writeData(UINT32 offset, UINT32 length, const void* source,
  23. BufferWriteType writeFlags = BWT_NORMAL, UINT32 syncMask = 0x00000001) 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 syncMask) override;
  35. /** @copydoc VertexBufferCore::unmap */
  36. void unmap() override;
  37. private:
  38. GLBuffer mBuffer;
  39. Vector<GLVertexArrayObject> mVAObjects;
  40. };
  41. /** @} */
  42. }