summaryrefslogtreecommitdiff
path: root/src/3d/renderer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/3d/renderer.cc')
-rw-r--r--src/3d/renderer.cc63
1 files changed, 42 insertions, 21 deletions
diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc
index c37ea79..e08a0d0 100644
--- a/src/3d/renderer.cc
+++ b/src/3d/renderer.cc
@@ -117,10 +117,12 @@ void Renderer3D::create_default_resources() {
WGPUBufferUsage_Storage | WGPUBufferUsage_CopyDst,
nullptr)
.buffer;
- bvh_storage_buffer_ = gpu_create_buffer(
- device_, sizeof(BVHNode) * kMaxObjects * 2, // Capacity for a full tree
- WGPUBufferUsage_Storage | WGPUBufferUsage_CopyDst, nullptr)
- .buffer;
+ bvh_storage_buffer_ =
+ gpu_create_buffer(
+ device_,
+ sizeof(BVHNode) * kMaxObjects * 2, // Capacity for a full tree
+ WGPUBufferUsage_Storage | WGPUBufferUsage_CopyDst, nullptr)
+ .buffer;
}
void Renderer3D::set_noise_texture(WGPUTextureView noise_view) {
@@ -165,15 +167,30 @@ void Renderer3D::update_uniforms(const Scene& scene, const Camera& camera,
data.color = obj.color;
float type_id = 0.0f;
switch (obj.type) {
- case ObjectType::SPHERE: type_id = 1.0f; break;
- case ObjectType::BOX: type_id = 2.0f; break;
- case ObjectType::CUBE: type_id = 2.0f; break; // CUBE is same as BOX for shader
- case ObjectType::TORUS: type_id = 3.0f; break;
- case ObjectType::PLANE: type_id = 4.0f; break;
- case ObjectType::MESH: type_id = 5.0f; break;
- default: type_id = 0.0f; break;
+ case ObjectType::SPHERE:
+ type_id = 1.0f;
+ break;
+ case ObjectType::BOX:
+ type_id = 2.0f;
+ break;
+ case ObjectType::CUBE:
+ type_id = 2.0f;
+ break; // CUBE is same as BOX for shader
+ case ObjectType::TORUS:
+ type_id = 3.0f;
+ break;
+ case ObjectType::PLANE:
+ type_id = 4.0f;
+ break;
+ case ObjectType::MESH:
+ type_id = 5.0f;
+ break;
+ default:
+ type_id = 0.0f;
+ break;
}
- data.params = vec4(type_id, obj.local_extent.x, obj.local_extent.y, obj.local_extent.z);
+ data.params = vec4(type_id, obj.local_extent.x, obj.local_extent.y,
+ obj.local_extent.z);
obj_data.push_back(data);
if (obj_data.size() >= kMaxObjects)
break;
@@ -243,8 +260,7 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene,
{
WGPUBindGroupEntry e = {};
e.binding = 5;
- e.textureView =
- sky_texture_view_ ? sky_texture_view_ : noise_texture_view_;
+ e.textureView = sky_texture_view_ ? sky_texture_view_ : noise_texture_view_;
bg_entries.push_back(e);
}
@@ -284,13 +300,15 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene,
for (uint32_t i = 0; i < instance_count; ++i) {
const auto& obj = scene.objects[i];
if (obj.type == ObjectType::MESH) {
- const MeshGpuData* mesh = temp_mesh_override_ ? temp_mesh_override_ : get_or_create_mesh(obj.mesh_asset_id);
+ const MeshGpuData* mesh = temp_mesh_override_
+ ? temp_mesh_override_
+ : get_or_create_mesh(obj.mesh_asset_id);
if (mesh) {
- wgpuRenderPassEncoderSetVertexBuffer(pass, 0, mesh->vertex_buffer, 0,
- WGPU_WHOLE_SIZE);
- wgpuRenderPassEncoderSetIndexBuffer(
- pass, mesh->index_buffer, WGPUIndexFormat_Uint32, 0,
- WGPU_WHOLE_SIZE);
+ wgpuRenderPassEncoderSetVertexBuffer(pass, 0, mesh->vertex_buffer,
+ 0, WGPU_WHOLE_SIZE);
+ wgpuRenderPassEncoderSetIndexBuffer(pass, mesh->index_buffer,
+ WGPUIndexFormat_Uint32, 0,
+ WGPU_WHOLE_SIZE);
wgpuRenderPassEncoderDrawIndexed(pass, mesh->num_indices, 1, 0, 0,
i);
}
@@ -308,7 +326,10 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene,
} else if (obj.type == ObjectType::MESH) {
MeshAsset mesh = GetMeshAsset(obj.mesh_asset_id);
if (mesh.num_indices > 0) {
- visual_debug_.add_mesh_wireframe(obj.get_model_matrix(), mesh.num_vertices, mesh.vertices, mesh.num_indices, mesh.indices, vec3(0.0f, 1.0f, 1.0f)); // Cyan wireframe
+ visual_debug_.add_mesh_wireframe(
+ obj.get_model_matrix(), mesh.num_vertices, mesh.vertices,
+ mesh.num_indices, mesh.indices,
+ vec3(0.0f, 1.0f, 1.0f)); // Cyan wireframe
}
} else {
extent = vec3(1.0f, 1.0f, 1.0f);