#pragma once namespace MobileGL { namespace MG_State { namespace GLState { constexpr const auto GlobalBufferTargets = ToArray( BufferTarget::Vertex, BufferTarget::Uniform, BufferTarget::CopyRead, BufferTarget::CopyWrite, BufferTarget::PixelPack, BufferTarget::PixelUnpack, BufferTarget::Query, BufferTarget::Texture, BufferTarget::TransformFeedback, BufferTarget::AtomicCounter, BufferTarget::DispatchIndirect, BufferTarget::DrawIndirect, BufferTarget::ShaderStorage); class BufferState { public: BufferState(); SharedPtr GetBufferObject(Uint index); Vector GenerateNames(Uint number); SharedPtr CreateBufferObject(Uint index); BindingSlot& GetBindingSlot(BufferTarget target); void MarkBufferObjectForDeletion(Uint index); bool ValidateName(Uint index) const; bool ValidateBufferObject(Uint index) const; private: UnorderedMap> m_bufferObjects; IndexGenerator m_indexGenerator; Array, GlobalBufferTargets.size()> m_bindingSlots; }; } } }