diff options
Diffstat (limited to 'model.cpp')
-rw-r--r-- | model.cpp | 29 |
1 files changed, 10 insertions, 19 deletions
@@ -24,10 +24,7 @@ struct Mat_Cbuffer { float metalness; float roughness; float ao; - int light_count; - char pad2[4]; - float camera_pos[3]; - char pad[20]; + char pad[40]; }; void Material::use( @@ -137,6 +134,7 @@ Asset* Model_Loader::load( mesh.mat_binding = shader->descriptor_binding("material"); mesh.light_binding = shader->descriptor_binding("lights"); mesh.casters_binding = shader->descriptor_binding("casters"); + mesh.globals_binding = shader->descriptor_binding("globals"); mesh.shadowmaps_binding = shader->descriptor_binding("shadowmaps"); mesh.env_cube_binding = shader->descriptor_binding("env_cube"); mesh.mesh_binding = shader->binding_index("mesh"); @@ -147,6 +145,7 @@ Asset* Model_Loader::load( assert(mesh.mat_binding >= 0); assert(mesh.light_binding >= 0); assert(mesh.casters_binding >= 0); + assert(mesh.globals_binding >= 0); assert(mesh.shadowmaps_binding >= 0); assert(mesh.mesh_binding >= 0); assert(mesh.env_cube_binding >= 0); @@ -311,11 +310,7 @@ void Model_Instance::update() { } } -void Model_Instance::update_cbuffers( - Device* dev, - const Lighting& lighting, - const Camera& cam -) { +void Model_Instance::update_cbuffers(Device* dev) { int i, c = m->mesh_count; Mesh* meshes = m->get_meshes(); Model_Cbuffer* mcbs = (Model_Cbuffer*)dev->map_buffer( @@ -338,10 +333,6 @@ void Model_Instance::update_cbuffers( mat.metalness = sm.metalness; mat.roughness = sm.roughness; mat.ao = sm.ao; - mat.light_count = lighting.light_count; - mat.camera_pos[0] = cam.position.x; - mat.camera_pos[1] = cam.position.y; - mat.camera_pos[2] = cam.position.z; } dev->unmap_buffer(mcb); dev->unmap_buffer(mat); @@ -421,6 +412,10 @@ void Model_Instance::render( res.sampler ); } + pb.cbuffer( + mesh.globals_binding, + res.globals + ); pb.cull(Cull_Mode::back); pb.vertex_format(shader.vf); if (res.overrider) @@ -470,18 +465,14 @@ void Model_Scene::uninstantiate( count = last; } -void Model_Scene::update( - const Camera& cam, - const Lighting& lighting, - Device* dev -) { +void Model_Scene::update(Device* dev) { int i; Model_Instance* instance = instances; bound.min = v3f( INFINITY); bound.max = v3f(-INFINITY); for (i = 0; i < count; i++, instance++) { instance->update(); - instance->update_cbuffers(dev, lighting, cam); + instance->update_cbuffers(dev); bound.encompass(instance->bound); } } |