System info & network
This commit is contained in:
79
code/render/object.cpp
Normal file
79
code/render/object.cpp
Normal file
@@ -0,0 +1,79 @@
|
||||
#include "object.h"
|
||||
#include "../lib/math.h"
|
||||
#include "../lib/geometry.h"
|
||||
#include "../platform.h"
|
||||
#include "string.h"
|
||||
#include "state.h"
|
||||
#include "2d.h"
|
||||
|
||||
|
||||
r_object r_object_create(u64 count, r_mesh **meshes, r_material **materials, v3 position, v3 rotation, v3 scale)
|
||||
{
|
||||
r_object object;
|
||||
|
||||
object.meshes = (r_mesh**)p_alloc(count * sizeof(r_mesh*));
|
||||
object.mesh_material = (r_material**)p_alloc(count * sizeof(r_material*));
|
||||
object.mesh_local_transform = (m4*)p_alloc(count * sizeof(m4));
|
||||
|
||||
memcpy(object.meshes, meshes, count * sizeof(r_mesh*));
|
||||
memcpy(object.mesh_material, materials, count * sizeof(r_material*));
|
||||
for(u64 i = 0; i < count; i++)
|
||||
object.mesh_local_transform[i] = m4_identity;
|
||||
|
||||
object.count = count;
|
||||
|
||||
object.position = position;
|
||||
object.rotation = rotation;
|
||||
object.scale = scale;
|
||||
|
||||
object.has_shadow = true;
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
r_object r_object_allocate(u64 count)
|
||||
{
|
||||
r_object object;
|
||||
|
||||
object.meshes = (r_mesh**)p_alloc(count * sizeof(r_mesh*));
|
||||
object.mesh_material = (r_material**)p_alloc(count * sizeof(r_material*));
|
||||
object.mesh_local_transform = (m4*)p_alloc(count * sizeof(m4));
|
||||
|
||||
for(u64 i = 0; i < count; i++)
|
||||
object.mesh_local_transform[i] = m4_identity;
|
||||
|
||||
object.count = count;
|
||||
|
||||
object.position = v3{0,0,0};
|
||||
object.rotation = v3{0,0,0};
|
||||
object.scale = v3{1,1,1};
|
||||
|
||||
object.has_shadow = true;
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
void r_object_destroy(r_object *object)
|
||||
{
|
||||
p_free(object->mesh_material);
|
||||
p_free(object->meshes);
|
||||
p_free(object->mesh_local_transform);
|
||||
object->mesh_material = NULL;
|
||||
object->meshes = NULL;
|
||||
object->mesh_local_transform = NULL;
|
||||
object->count = 0;
|
||||
}
|
||||
|
||||
m4 r_object_transform_matrix(r_object *object)
|
||||
{
|
||||
// @Performance: replace with rototranslation matrix
|
||||
return translation_v3(object->position) * rotation_v3(object->rotation) * scale_v3(object->scale);
|
||||
}
|
||||
|
||||
m4 r_object_mesh_transform_matrix(r_object *object, u64 mesh_i)
|
||||
{
|
||||
// @Performance: replace with rototranslation matrix
|
||||
if(object->mesh_local_transform)
|
||||
return r_object_transform_matrix(object) * object->mesh_local_transform[mesh_i];
|
||||
return r_object_transform_matrix(object);
|
||||
}
|
||||
Reference in New Issue
Block a user