mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-16 23:18:12 +08:00
59 lines
1.3 KiB
C++
59 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
#include "utils.h"
|
|
#include "logger.h"
|
|
|
|
class ElementBufferObject
|
|
{
|
|
public:
|
|
static ElementBufferObject empty() {
|
|
return ElementBufferObject();
|
|
}
|
|
|
|
private:
|
|
unsigned int _id = 0;
|
|
|
|
private:
|
|
ElementBufferObject();
|
|
|
|
public:
|
|
ElementBufferObject(const std::vector<unsigned int>& indices);
|
|
|
|
inline unsigned int id() const { return _id; }
|
|
|
|
inline void bind() const;
|
|
inline void unbind() const;
|
|
inline void dispose();
|
|
inline void ensureInitialized();
|
|
|
|
void setBuffer(const std::vector<unsigned int>& indices);
|
|
};
|
|
|
|
inline void ElementBufferObject::bind() const {
|
|
if (_id == 0) {
|
|
Logger::error("Binding an invalid ElementBufferObject");
|
|
return;
|
|
}
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _id);
|
|
}
|
|
|
|
inline void ElementBufferObject::unbind() const {
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
|
}
|
|
|
|
inline void ElementBufferObject::dispose() {
|
|
if (_id == 0) return;
|
|
OPENGL_EXTRA_FUNCTIONS->glDeleteBuffers(1, &_id);
|
|
_id = 0;
|
|
}
|
|
|
|
inline void ElementBufferObject::ensureInitialized() {
|
|
if (_id == 0) {
|
|
OPENGL_EXTRA_FUNCTIONS->glGenBuffers(1, &_id);
|
|
if (_id == 0) {
|
|
Logger::error("Failed to create ElementBufferObject");
|
|
}
|
|
}
|
|
} |