summaryrefslogtreecommitdiff
path: root/model.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'model.cpp')
-rw-r--r--model.cpp29
1 files changed, 10 insertions, 19 deletions
diff --git a/model.cpp b/model.cpp
index 765da15..f24c0eb 100644
--- a/model.cpp
+++ b/model.cpp
@@ -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);
}
}