mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-17 15:38:11 +08:00
107 lines
3.6 KiB
C++
107 lines
3.6 KiB
C++
#pragma once
|
|
|
|
#include <qopengl.h>
|
|
|
|
#include "vao.h"
|
|
#include "utils.h"
|
|
#include "logger.h"
|
|
|
|
VertexArrayObject::VertexArrayObject() {
|
|
OPENGL_EXTRA_FUNCTIONS->glGenVertexArrays(1, &_id);
|
|
}
|
|
|
|
VertexArrayObject::VertexArrayObject(const VertexBufferObject& vbo) :
|
|
_vbo(vbo) {
|
|
OPENGL_EXTRA_FUNCTIONS->glGenVertexArrays(1, &_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ARRAY_BUFFER, _vbo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
VertexArrayObject::VertexArrayObject(VertexBufferObject&& vbo) :
|
|
_vbo(std::move(vbo)) {
|
|
OPENGL_EXTRA_FUNCTIONS->glGenVertexArrays(1, &_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ARRAY_BUFFER, _vbo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
VertexArrayObject::VertexArrayObject(const VertexBufferObject& vbo, const ElementBufferObject& ebo) :
|
|
_vbo(vbo), _ebo(ebo) {
|
|
OPENGL_EXTRA_FUNCTIONS->glGenVertexArrays(1, &_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ARRAY_BUFFER, _vbo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _ebo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
VertexArrayObject::VertexArrayObject(VertexBufferObject&& vbo, ElementBufferObject&& ebo) :
|
|
_vbo(std::move(vbo)), _ebo(std::move(ebo)) {
|
|
OPENGL_EXTRA_FUNCTIONS->glGenVertexArrays(1, &_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ARRAY_BUFFER, _vbo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _ebo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
inline void VertexArrayObject::setActive() const {
|
|
// Check is id is valid
|
|
if (_id == -1) {
|
|
Logger::error("Binding an invalid VertexArrayObject");
|
|
return;
|
|
}
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
}
|
|
|
|
inline void VertexArrayObject::setInactive() const {
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
inline void VertexArrayObject::bindVertexBufferObject(const VertexBufferObject& vbo) {
|
|
_vbo = vbo;
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ARRAY_BUFFER, _vbo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
inline void VertexArrayObject::bindVertexBufferObject(VertexBufferObject&& vbo) {
|
|
_vbo = std::move(vbo);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ARRAY_BUFFER, _vbo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
inline void VertexArrayObject::bindElementBufferObject(const ElementBufferObject& ebo) {
|
|
_ebo = ebo;
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _ebo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
inline void VertexArrayObject::bindElementBufferObject(ElementBufferObject&& ebo) {
|
|
_ebo = std::move(ebo);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _ebo.id());
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
}
|
|
|
|
inline void VertexArrayObject::setVertexAttributePointer(
|
|
unsigned int index,
|
|
int size,
|
|
unsigned int type,
|
|
bool normalized,
|
|
unsigned int stride,
|
|
const void* pointer
|
|
) const {
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(_id);
|
|
OPENGL_EXTRA_FUNCTIONS->glVertexAttribPointer(
|
|
index,
|
|
size,
|
|
type,
|
|
normalized,
|
|
stride,
|
|
pointer
|
|
);
|
|
OPENGL_EXTRA_FUNCTIONS->glEnableVertexAttribArray(index);
|
|
OPENGL_EXTRA_FUNCTIONS->glBindVertexArray(0);
|
|
} |