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,
|
sprite_vertex_buffer: gpu.Buffer,
|
||||||
particle_buffers: [2]gpu.Buffer,
|
particle_buffers: [2]gpu.Buffer,
|
||||||
particle_bind_groups: [2]gpu.BindGroup,
|
particle_bind_groups: [2]gpu.BindGroup,
|
||||||
|
sim_param_buffer: gpu.Buffer,
|
||||||
frame_counter: usize,
|
frame_counter: usize,
|
||||||
};
|
};
|
||||||
const App = mach.App(*FrameParams, .{});
|
const App = mach.App(*FrameParams, .{});
|
||||||
|
|
||||||
const num_particle = 1500;
|
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 {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
var allocator = gpa.allocator();
|
var allocator = gpa.allocator();
|
||||||
|
|
@ -108,16 +119,6 @@ pub fn main() !void {
|
||||||
});
|
});
|
||||||
app.device.getQueue().writeBuffer(sprite_vertex_buffer, 0, f32, &vert_buffer_data);
|
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{
|
const sim_param_buffer = app.device.createBuffer(&gpu.Buffer.Descriptor{
|
||||||
.usage = .{.uniform = true, .copy_dst = true},
|
.usage = .{.uniform = true, .copy_dst = true},
|
||||||
.size = sim_params.len * @sizeOf(f32),
|
.size = sim_params.len * @sizeOf(f32),
|
||||||
|
|
@ -164,6 +165,7 @@ pub fn main() !void {
|
||||||
.sprite_vertex_buffer = sprite_vertex_buffer,
|
.sprite_vertex_buffer = sprite_vertex_buffer,
|
||||||
.particle_buffers = particle_buffers,
|
.particle_buffers = particle_buffers,
|
||||||
.particle_bind_groups = particle_bind_groups,
|
.particle_bind_groups = particle_bind_groups,
|
||||||
|
.sim_param_buffer = sim_param_buffer,
|
||||||
.frame_counter = 0,
|
.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 command_encoder = app.device.createCommandEncoder(null);
|
||||||
{
|
{
|
||||||
const pass_encoder = command_encoder.beginComputePass(null);
|
const pass_encoder = command_encoder.beginComputePass(null);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue