65 lines
1.3 KiB
C
65 lines
1.3 KiB
C
#ifndef _PIUMA_RENDER_OBJECT_H_
|
|
#define _PIUMA_RENDER_OBJECT_H_
|
|
|
|
#include "primitives.h"
|
|
#include "shader.h"
|
|
|
|
struct r_material
|
|
{
|
|
// @Feature: PBR materials
|
|
r_shader *shader;
|
|
|
|
r_texture *albedo_texture;
|
|
v4 albedo_factor;
|
|
|
|
r_texture *metallic_texture;
|
|
f32 metallic_factor;
|
|
|
|
r_texture *roughness_texture;
|
|
f32 roughness_factor;
|
|
|
|
r_texture *normal_texture;
|
|
|
|
r_texture *emissive_texture;
|
|
v4 emissive_factor;
|
|
/*
|
|
albedo |
|
|
metallic | --> Disney + UE4 paper
|
|
roughness / specular |
|
|
cavity |
|
|
subsurface |
|
|
anisotropy | --> Disney paper
|
|
clearcoat |
|
|
sheen |
|
|
ambient occlusion | --> Valve Source2, same as cavity?
|
|
emission
|
|
normals
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
struct r_object
|
|
{
|
|
// @Feature: actually support multiple meshes/materials in the implementation code
|
|
r_mesh **meshes;
|
|
r_material **mesh_material;
|
|
m4 *mesh_local_transform;
|
|
u64 count;
|
|
|
|
v3 scale;
|
|
v3 position;
|
|
v3 rotation;
|
|
|
|
bool has_shadow;
|
|
};
|
|
|
|
r_object r_object_create(u64 count, r_mesh **meshes, r_material **materials, v3 position = {0,0,0}, v3 rotation = {0,0,0}, v3 scale = {1,1,1});
|
|
r_object r_object_allocate(u64 count);
|
|
void r_object_destroy(r_object *object);
|
|
m4 r_object_transform_matrix(r_object *object);
|
|
m4 r_object_mesh_transform_matrix(r_object *object, u64 mesh_i);
|
|
|
|
|
|
#endif
|