examples: boids: make boids calculation framerate independent
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
305c446aa2
commit
6f3864c1f9
1 changed files with 16 additions and 11 deletions
|
|
@ -11,12 +11,23 @@ const FrameParams = struct {
|
|||
sprite_vertex_buffer: gpu.Buffer,
|
||||
particle_buffers: [2]gpu.Buffer,
|
||||
particle_bind_groups: [2]gpu.BindGroup,
|
||||
sim_param_buffer: gpu.Buffer,
|
||||
frame_counter: usize,
|
||||
};
|
||||
const App = mach.App(*FrameParams, .{});
|
||||
|
||||
const num_particle = 1500;
|
||||
|
||||
var sim_params = [_]f32 {
|
||||
0.04, // .delta_T
|
||||
0.1, // .rule_1_distance
|
||||
0.025, // .rule_2_distance
|
||||
0.025, // .rule_3_distance
|
||||
0.02, // .rule_1_scale
|
||||
0.05, // .rule_2_scale
|
||||
0.005, // .rule_3_scale
|
||||
};
|
||||
|
||||
pub fn main() !void {
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
var allocator = gpa.allocator();
|
||||
|
|
@ -108,16 +119,6 @@ pub fn main() !void {
|
|||
});
|
||||
app.device.getQueue().writeBuffer(sprite_vertex_buffer, 0, f32, &vert_buffer_data);
|
||||
|
||||
const sim_params = [_]f32 {
|
||||
0.04, // .delta_T
|
||||
0.1, // .rule_1_distance
|
||||
0.025, // .rule_2_distance
|
||||
0.025, // .rule_3_distance
|
||||
0.02, // .rule_1_scale
|
||||
0.05, // .rule_2_scale
|
||||
0.005, // .rule_3_scale
|
||||
};
|
||||
|
||||
const sim_param_buffer = app.device.createBuffer(&gpu.Buffer.Descriptor{
|
||||
.usage = .{.uniform = true, .copy_dst = true},
|
||||
.size = sim_params.len * @sizeOf(f32),
|
||||
|
|
@ -164,6 +165,7 @@ pub fn main() !void {
|
|||
.sprite_vertex_buffer = sprite_vertex_buffer,
|
||||
.particle_buffers = particle_buffers,
|
||||
.particle_bind_groups = particle_bind_groups,
|
||||
.sim_param_buffer = sim_param_buffer,
|
||||
.frame_counter = 0,
|
||||
};
|
||||
|
||||
|
|
@ -186,6 +188,9 @@ fn frame(app: *App, params: *FrameParams) !void {
|
|||
}
|
||||
};
|
||||
|
||||
sim_params[0] = @floatCast(f32, app.delta_time);
|
||||
app.device.getQueue().writeBuffer(params.sim_param_buffer, 0, f32, &sim_params);
|
||||
|
||||
const command_encoder = app.device.createCommandEncoder(null);
|
||||
{
|
||||
const pass_encoder = command_encoder.beginComputePass(null);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue