A small OpenGL 3+ renderer and game engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
1.4 KiB

#include <cassert>
#include <glm/gtc/matrix_transform.hpp>
#include "dumbLog.h"
#include "entity.h"
#include "util.h"
// forward declarations
void initDefaults(entity& e);
// interface
bool
entInitModel(entity& e, const char* model_path)
{
initDefaults(e);
if (meLoadFromFile(e.meshes, model_path))
{
e.render_objs = roInitModel(e.meshes);
if (e.render_objs != nullptr)
return true;
}
entFree(e);
return false;
}
bool
entInitMesh(entity& e, simple_mesh* mesh, GLenum draw_mode)
{
initDefaults(e);
e.mesh = mesh;
e.render_objs = roInitSimpleMesh(*e.mesh, draw_mode);
if (e.render_objs == nullptr)
return false;
return true;
}
void
entFree(entity& e)
{
roFree(e.render_objs);
e.render_objs = nullptr;
meFreeMeshGroup(e.meshes);
meFreeSimpleMesh(e.mesh);
e.mesh = nullptr;
}
void
entSetWorldPosition(entity& e, glm::vec3 v)
{
e.world_transform[3][0] = v.x;
e.world_transform[3][1] = v.y;
e.world_transform[3][2] = v.z;
}
void
entTranslate(entity& e, glm::vec3 v)
{
e.world_transform = glm::translate(e.world_transform, v);
}
void
entScale(entity& e, glm::vec3 v)
{
e.world_transform = glm::scale(e.world_transform, v);
}
void
entRotate(entity& e, float angle, glm::vec3 axis)
{
e.world_transform = glm::rotate(e.world_transform, angle, axis);
}
// internal
void
initDefaults(entity& e)
{
e.world_transform = glm::mat4(1.0);
entScale(e, glm::vec3(1.0));
entSetWorldPosition(e, glm::vec3(0, 0, 0));
}