Disable fog on wasm

This commit is contained in:
Lauri Räsänen 2023-11-10 21:26:38 +02:00
parent fed16287c5
commit 857e32d994

View file

@ -34,6 +34,7 @@ pub struct State {
queue: wgpu::Queue, queue: wgpu::Queue,
config: wgpu::SurfaceConfiguration, config: wgpu::SurfaceConfiguration,
geometry_pass: RenderPass, geometry_pass: RenderPass,
#[cfg(not(target_arch = "wasm32"))]
fog_pass: RenderPass, fog_pass: RenderPass,
camera: Camera, camera: Camera,
camera_uniform: CameraUniform, camera_uniform: CameraUniform,
@ -42,10 +43,13 @@ pub struct State {
camera_controller: CameraController, camera_controller: CameraController,
geom_instances: Vec<Instance>, geom_instances: Vec<Instance>,
geom_instance_buffer: wgpu::Buffer, geom_instance_buffer: wgpu::Buffer,
#[cfg(not(target_arch = "wasm32"))]
fog_instances: Vec<Instance>, fog_instances: Vec<Instance>,
#[cfg(not(target_arch = "wasm32"))]
fog_instance_buffer: wgpu::Buffer, fog_instance_buffer: wgpu::Buffer,
geometry_depth_texture: Texture, geometry_depth_texture: Texture,
geom_model: Model, geom_model: Model,
#[cfg(not(target_arch = "wasm32"))]
fog_model: Model, fog_model: Model,
light_model: Model, light_model: Model,
light_uniform: LightUniform, light_uniform: LightUniform,
@ -368,6 +372,7 @@ impl State {
.await .await
.unwrap(); .unwrap();
#[cfg(not(target_arch = "wasm32"))]
let fog_model = resources::load_model_gltf( let fog_model = resources::load_model_gltf(
"models/Cube.glb", "models/Cube.glb",
&device, &device,
@ -399,12 +404,15 @@ impl State {
usage: wgpu::BufferUsages::VERTEX, usage: wgpu::BufferUsages::VERTEX,
}); });
#[cfg(not(target_arch = "wasm32"))]
let fog_instances = vec![Instance { let fog_instances = vec![Instance {
position: [0.0, 30.0, 0.0].into(), position: [0.0, 30.0, 0.0].into(),
rotation: cgmath::Quaternion::one(), rotation: cgmath::Quaternion::one(),
scale: [1360.0, 30.0, 600.0].into(), scale: [1360.0, 30.0, 600.0].into(),
}]; }];
#[cfg(not(target_arch = "wasm32"))]
let fog_instance_data = fog_instances.iter().map(Instance::to_raw).collect::<Vec<_>>(); let fog_instance_data = fog_instances.iter().map(Instance::to_raw).collect::<Vec<_>>();
#[cfg(not(target_arch = "wasm32"))]
let fog_instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { let fog_instance_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
label: Some("Fog Instance Buffer"), label: Some("Fog Instance Buffer"),
contents: bytemuck::cast_slice(&fog_instance_data), contents: bytemuck::cast_slice(&fog_instance_data),
@ -462,6 +470,7 @@ impl State {
Some(wgpu::Face::Back), Some(wgpu::Face::Back),
); );
#[cfg(not(target_arch = "wasm32"))]
let fog_pass = RenderPass::new( let fog_pass = RenderPass::new(
&device, &device,
&[ &[
@ -488,6 +497,7 @@ impl State {
queue, queue,
config, config,
geometry_pass, geometry_pass,
#[cfg(not(target_arch = "wasm32"))]
fog_pass, fog_pass,
camera, camera,
camera_uniform, camera_uniform,
@ -496,10 +506,13 @@ impl State {
camera_controller, camera_controller,
geom_instances, geom_instances,
geom_instance_buffer, geom_instance_buffer,
#[cfg(not(target_arch = "wasm32"))]
fog_instances, fog_instances,
#[cfg(not(target_arch = "wasm32"))]
fog_instance_buffer, fog_instance_buffer,
geometry_depth_texture, geometry_depth_texture,
geom_model, geom_model,
#[cfg(not(target_arch = "wasm32"))]
fog_model, fog_model,
light_model, light_model,
light_uniform, light_uniform,
@ -734,45 +747,48 @@ impl State {
self.queue.submit(std::iter::once(geometry_encoder.finish())); self.queue.submit(std::iter::once(geometry_encoder.finish()));
let mut fog_encoder = self #[cfg(not(target_arch = "wasm32"))]
.device
.create_command_encoder(&wgpu::CommandEncoderDescriptor {
label: Some("Fog Encoder"),
});
fog_encoder.push_debug_group("fog pass");
{ {
let mut fog_render_pass = fog_encoder.begin_render_pass(&wgpu::RenderPassDescriptor { let mut fog_encoder = self
label: Some("Fog Render Pass"), .device
color_attachments: &[Some(wgpu::RenderPassColorAttachment { .create_command_encoder(&wgpu::CommandEncoderDescriptor {
view: &surface_view, label: Some("Fog Encoder"),
resolve_target: None, });
ops: wgpu::Operations {
load: wgpu::LoadOp::Load,
store: wgpu::StoreOp::Store,
},
})],
depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment {
view: &self.geometry_depth_texture.view,
depth_ops: None,
stencil_ops: None,
}),
timestamp_writes: None,
occlusion_query_set: None,
});
fog_render_pass.set_vertex_buffer(1, self.fog_instance_buffer.slice(..)); fog_encoder.push_debug_group("fog pass");
fog_render_pass.set_pipeline(&self.fog_pass.pipeline); {
fog_render_pass.draw_model_instanced( let mut fog_render_pass = fog_encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
&self.fog_model, label: Some("Fog Render Pass"),
0..self.fog_instances.len() as u32, color_attachments: &[Some(wgpu::RenderPassColorAttachment {
[&self.global_bind_group, &self.light_depth_bind_group, &self.geometry_depth_bind_group].into(), view: &surface_view,
false, resolve_target: None,
); ops: wgpu::Operations {
load: wgpu::LoadOp::Load,
store: wgpu::StoreOp::Store,
},
})],
depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment {
view: &self.geometry_depth_texture.view,
depth_ops: None,
stencil_ops: None,
}),
timestamp_writes: None,
occlusion_query_set: None,
});
fog_render_pass.set_vertex_buffer(1, self.fog_instance_buffer.slice(..));
fog_render_pass.set_pipeline(&self.fog_pass.pipeline);
fog_render_pass.draw_model_instanced(
&self.fog_model,
0..self.fog_instances.len() as u32,
[&self.global_bind_group, &self.light_depth_bind_group, &self.geometry_depth_bind_group].into(),
false,
);
}
fog_encoder.pop_debug_group();
self.queue.submit(std::iter::once(fog_encoder.finish()));
} }
fog_encoder.pop_debug_group();
self.queue.submit(std::iter::once(fog_encoder.finish()));
surface_texture.present(); surface_texture.present();