PortalGame/src/gfx/vertex_array.hpp
2025-08-09 18:01:53 +02:00

61 lines
1.2 KiB
C++

#pragma once
#include <cstdint>
#include <cassert>
#include <memory>
#include "gl.hpp"
#include "utils.hpp"
#include "buffer_object.hpp"
namespace gfx
{
// Vycet jednotlivych atributu vrcholu
enum VertexAttr
{
VA_POSITION = 1 << 0,
VA_NORMAL = 1 << 1,
VA_COLOR = 1 << 2,
VA_UV = 1 << 3,
VA_LIGHTMAP_UV = 1 << 4,
};
// Informace pro vytvoreni VertexArraye
enum VertexArrayFlags
{
VF_CREATE_EBO = 1 << 0,
VF_DYNAMIC = 1 << 1,
};
// VertexArray - trida pro praci s modely
class VertexArray : public NonCopyableNonMovable
{
GLuint m_vao;// , m_vbo, m_ebo;
std::unique_ptr<BufferObject> m_vbo;
std::unique_ptr<BufferObject> m_ebo;
size_t m_num_indices;
GLenum m_usage;
public:
VertexArray(int attrs, int flags);
~VertexArray();
// Nastavi data do VBO
void SetVBOData(const void* data, size_t size);
// Nastavi indexy do EBO
void SetIndices(const GLuint* data, size_t size);
GLuint GetVAOId() const { return m_vao; }
GLuint GetVBOId() const { return m_vbo->GetId(); }
GLuint GetEBOId() const {
assert(m_ebo && "GetEBOId() ale !ebo");
return m_ebo->GetId();
}
//size_t GetVBOSize() const { return m_vbo->; }
size_t GetNumIndices() const { return m_num_indices; }
};
}