Elevate Engine 1
Loading...
Searching...
No Matches
OpenGLVertexArray.cpp
Go to the documentation of this file.
1#include "eepch.h"
2
3#include "OpenGLVertexArray.h"
4
6
12
14{
15#ifdef EE_SUPPORTS_DSA
16 GLCheck(glCreateVertexArrays(1, &m_RendererID));
17#else
18 GLCheck(glGenVertexArrays(1, &m_RendererID));
19#endif
20}
21
23{
25 {
26 GLCheck(glDeleteVertexArrays(1, &m_RendererID));
27 }
28}
29
31{
32 GLCheck(glBindVertexArray(m_RendererID));
33}
34
36{
37 GLCheck(glBindVertexArray(0));
38}
39
40void Elevate::OpenGLVertexArray::AddVertexBuffer(const std::shared_ptr<VertexBuffer>& vertexBuffer)
41{
42 VertexArray::AddVertexBuffer(vertexBuffer);
43
44 EE_CORE_ASSERT(vertexBuffer->GetLayout().GetElements().size(), "Vertex buffer layout is empty, assertion failed");
45
46 Bind(); // bind VAO
47 vertexBuffer->Bind(); // bind VBO
48
49 uint32_t index = 0;
50 const auto& layout = vertexBuffer->GetLayout();
51
52 EE_CORE_TRACE("Adding Vertex Buffer :");
53 for (const auto& element : layout)
54 {
55 // TODO REMOVES THE LOGS FROM HERE
56 EE_CORE_TRACE(" -> Attrib {} : {} | Count={} | Type={} | Stride={} | Offset={}",
57 element.Name.c_str(), index, element.Count, GetDataAPIType(element.Type), layout.GetStride(), element.Offset);
58
59 LinkAttribute(
60 index,
61 element.Count, GetDataAPIType(element.Type),
62 element.Normalized,
63 layout.GetStride(),
64 (const void*)(uintptr_t)element.Offset
65 );
66
67 index++;
68 }
69}
70
71void Elevate::OpenGLVertexArray::SetIndexBuffer(const std::shared_ptr<IndexBuffer>& indexBuffer)
72{
73 VertexArray::SetIndexBuffer(indexBuffer);
74 Bind();
75 indexBuffer->Bind();
76}
77
78void Elevate::OpenGLVertexArray::LinkAttribute(uint32_t layout, uint32_t size, uint32_t type, bool normalized, uint32_t stride, const void* offset) const
79{
80 GLCheck(glEnableVertexAttribArray(layout));
81 GLCheck(glVertexAttribPointer(layout, size, type, normalized ? GL_TRUE : GL_FALSE, stride, offset));
82}
#define GLCheck(x)
Definition GLDebug.h:11
virtual void AddVertexBuffer(const std::shared_ptr< VertexBuffer > &vertexBuffer) override
virtual void Unbind() const override
virtual void SetIndexBuffer(const std::shared_ptr< IndexBuffer > &indexBuffer) override
virtual void Bind() const override
void LinkAttribute(uint32_t layout, uint32_t size, uint32_t type, bool normalized, uint32_t stride, const void *offset) const
virtual void AddVertexBuffer(const std::shared_ptr< VertexBuffer > &vertexBuffer)
virtual void SetIndexBuffer(const std::shared_ptr< IndexBuffer > &indexBuffer)
uint32_t GetDataAPIType(EngineDataType type)
Definition Data.h:125