Files
inferno-hart/src/scene/mesh.cpp
2022-11-02 12:09:55 +00:00

102 lines
2.0 KiB
C++

#include <scene/mesh.hpp>
#include <spdlog/spdlog.h>
#include <scene/objloader.hpp>
using namespace inferno;
Mesh::Mesh()
{
}
Mesh::~Mesh()
{
delete mObjLoader;
}
void Mesh::loadOBJ(std::filesystem::path file)
{
mObjLoader = new ObjLoader();
mObjLoader->load(file);
int vertCount = mObjLoader->getVertCount();
for (int i = 0; i < vertCount; i += 3)
{
Vert vert;
vert.Position = {
mObjLoader->getPositions()[i],
mObjLoader->getPositions()[i+1],
mObjLoader->getPositions()[i+2],
};
vert.Normal = {
mObjLoader->getNormals()[i],
mObjLoader->getNormals()[i+1],
mObjLoader->getNormals()[i+2],
};
mVerticies.push_back(vert);
}
}
void Mesh::ready()
{
// TODO: ready check
glGenVertexArrays(1, &mVAO);
glGenBuffers(1, &mVBO);
glGenBuffers(1, &mEBO);
glBindVertexArray(mVAO);
// load data into vertex buffers
glBindBuffer(GL_ARRAY_BUFFER, mVBO);
glBufferData(GL_ARRAY_BUFFER, mVerticies.size() * sizeof(Vert), &mVerticies[0], GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mEBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, mObjLoader->getIndexCount() * sizeof(unsigned int), &mObjLoader->getFaces()[0], GL_STATIC_DRAW);
// set the vertex attribute pointers
// vertex Positions
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vert), (void*)0);
// vertex normals
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vert), (void*)offsetof(Vert, Normal));
glBindVertexArray(0);
spdlog::debug("MESH READY");
}
GLuint Mesh::getVAO()
{
return mVAO;
}
GLuint Mesh::getVBO()
{
return mVBO;
}
GLuint Mesh::getEBO()
{
return mEBO;
}
int Mesh::getIndexCount()
{
return mObjLoader->getIndexCount();
}
void Mesh::setMaterial(Material* mat)
{
mMaterial = mat;
}
Material* Mesh::getMaterial()
{
return mMaterial;
}