Skip to content

Commit 50600ff

Browse files
Fix not being able to change to cpu method
1 parent 2c6f9bd commit 50600ff

File tree

2 files changed

+6
-59
lines changed

2 files changed

+6
-59
lines changed

src/app.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::camera::Camera;
2-
use crate::custom_renderer::UnsafeParticleCallback;
2+
use crate::custom_renderer::ClonedParticleCallback;
33
use crate::renderer::ParticleRenderer;
44

55
use crate::simulation::compute::ComputeParticleSimulation;
@@ -542,10 +542,11 @@ impl eframe::App for ParticleApp {
542542
}
543543
}
544544

545-
let callback_obj = UnsafeParticleCallback {
546-
render_pipeline_ptr: &self.renderer.render_pipeline as *const _,
547-
camera_bind_group_ptr: &self.camera.bind_group as *const _,
548-
particle_buffer_ptr: self.simulation.get_particle_buffer() as *const _,
545+
let callback_obj = ClonedParticleCallback {
546+
render_pipeline: self.renderer.render_pipeline.clone(),
547+
camera_bind_group: self.camera.bind_group.clone(),
548+
particle_buffer: self.simulation.get_particle_buffer().clone(),
549+
num_particles: self.simulation.get_particle_count(),
549550
};
550551

551552
let callback = egui_wgpu::Callback::new_paint_callback(rect, callback_obj);

src/custom_renderer.rs

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,6 @@
11
use egui::PaintCallbackInfo;
22
use egui_wgpu::{CallbackResources, CallbackTrait};
33

4-
use crate::simulation::Particle;
5-
6-
pub struct UnsafeParticleCallback {
7-
pub render_pipeline_ptr: *const wgpu::RenderPipeline,
8-
pub camera_bind_group_ptr: *const wgpu::BindGroup,
9-
pub particle_buffer_ptr: *const wgpu::Buffer,
10-
}
11-
12-
// Safe because we ensure the pointers remain valid during the callback's lifetime
13-
// and we're only reading from them
14-
unsafe impl Send for UnsafeParticleCallback {}
15-
unsafe impl Sync for UnsafeParticleCallback {}
16-
17-
impl CallbackTrait for UnsafeParticleCallback {
18-
fn prepare(
19-
&self,
20-
_device: &wgpu::Device,
21-
_queue: &wgpu::Queue,
22-
_screen_descriptor: &egui_wgpu::ScreenDescriptor,
23-
_encoder: &mut wgpu::CommandEncoder,
24-
_callback_resources: &mut CallbackResources,
25-
) -> Vec<wgpu::CommandBuffer> {
26-
Vec::new()
27-
}
28-
29-
fn paint(
30-
&self,
31-
_info: PaintCallbackInfo,
32-
render_pass: &mut wgpu::RenderPass<'static>,
33-
_callback_resources: &CallbackResources,
34-
) {
35-
unsafe {
36-
// Dereference the pointers - safe because we ensure they remain valid
37-
let render_pipeline = &*self.render_pipeline_ptr;
38-
let camera_bind_group = &*self.camera_bind_group_ptr;
39-
let particle_buffer = &*self.particle_buffer_ptr;
40-
41-
let particle_struct_size = std::mem::size_of::<Particle>() as u64;
42-
// Ensure particle_struct_size is not zero to avoid division by zero
43-
let actual_drawable_particles = if particle_struct_size > 0 {
44-
particle_buffer.size() / particle_struct_size
45-
} else {
46-
0 // Or handle error appropriately
47-
};
48-
49-
render_pass.set_pipeline(render_pipeline);
50-
render_pass.set_bind_group(0, camera_bind_group, &[]);
51-
render_pass.set_vertex_buffer(0, particle_buffer.slice(..));
52-
render_pass.draw(0..1, 0..actual_drawable_particles as u32);
53-
}
54-
}
55-
}
56-
57-
// A callback for particle rendering using cloned resources
584
pub struct ClonedParticleCallback {
595
pub render_pipeline: wgpu::RenderPipeline,
606
pub camera_bind_group: wgpu::BindGroup,

0 commit comments

Comments
 (0)