Skip to content

Commit be6737b

Browse files
committed
[update] animations to not be frame dependent.
1 parent a9ecb6d commit be6737b

File tree

2 files changed

+15
-15
lines changed

2 files changed

+15
-15
lines changed

crates/lambda-rs/examples/push_constants.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,15 @@ pub fn push_constants_to_bytes(push_constants: &PushConstant) -> &[u32] {
108108

109109
// --------------------------------- COMPONENT ---------------------------------
110110

111+
const ROTATION_TURNS_PER_SECOND: f32 = 0.12;
112+
111113
pub struct PushConstantsExample {
112-
frame_number: u64,
114+
elapsed_seconds: f32,
113115
shader: Shader,
114116
fs: Shader,
115117
mesh: Option<Mesh>,
116118
render_pipeline: Option<ResourceId>,
117119
render_pass: Option<ResourceId>,
118-
last_frame: std::time::Duration,
119120
width: u32,
120121
height: u32,
121122
}
@@ -227,34 +228,33 @@ impl Component<ComponentResult, String> for PushConstantsExample {
227228
return Ok(ComponentResult::Success);
228229
}
229230

230-
/// Update the frame number every frame.
231+
/// Update elapsed time every frame.
231232
fn on_update(
232233
&mut self,
233234
last_frame: &std::time::Duration,
234235
) -> Result<ComponentResult, String> {
235-
self.last_frame = *last_frame;
236-
self.frame_number += 1;
236+
self.elapsed_seconds += last_frame.as_secs_f32();
237237
return Ok(ComponentResult::Success);
238238
}
239239

240240
fn on_render(
241241
&mut self,
242242
render_context: &mut lambda::render::RenderContext,
243243
) -> Vec<lambda::render::command::RenderCommand> {
244-
self.frame_number += 1;
245244
let camera = SimpleCamera {
246245
position: [0.0, 0.0, 3.0],
247246
field_of_view_in_turns: 0.25,
248247
near_clipping_plane: 0.1,
249248
far_clipping_plane: 100.0,
250249
};
250+
let angle_in_turns = ROTATION_TURNS_PER_SECOND * self.elapsed_seconds;
251251
let mesh_matrix = compute_model_view_projection_matrix_about_pivot(
252252
&camera,
253253
self.width.max(1),
254254
self.height.max(1),
255255
[0.0, -1.0 / 3.0, 0.0],
256256
[0.0, 1.0, 0.0],
257-
0.001 * self.frame_number as f32,
257+
angle_in_turns,
258258
0.5,
259259
[0.0, 1.0 / 3.0, 0.0],
260260
);
@@ -329,10 +329,9 @@ impl Default for PushConstantsExample {
329329
let fs = builder.build(triangle_fragment_shader);
330330

331331
return Self {
332-
frame_number: 0,
332+
elapsed_seconds: 0.0,
333333
shader,
334334
fs,
335-
last_frame: std::time::Duration::from_secs(0),
336335
mesh: None,
337336
render_pipeline: None,
338337
render_pass: None,

crates/lambda-rs/examples/uniform_buffer_triangle.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ pub struct GlobalsUniform {
102102
// --------------------------------- COMPONENT ---------------------------------
103103

104104
pub struct UniformBufferExample {
105-
frame_number: u64,
105+
elapsed_seconds: f32,
106106
shader: Shader,
107107
fragment_shader: Shader,
108108
mesh: Option<Mesh>,
@@ -273,17 +273,17 @@ impl Component<ComponentResult, String> for UniformBufferExample {
273273

274274
fn on_update(
275275
&mut self,
276-
_last_frame: &std::time::Duration,
276+
last_frame: &std::time::Duration,
277277
) -> Result<ComponentResult, String> {
278-
self.frame_number += 1;
278+
self.elapsed_seconds += last_frame.as_secs_f32();
279279
return Ok(ComponentResult::Success);
280280
}
281281

282282
fn on_render(
283283
&mut self,
284284
render_context: &mut lambda::render::RenderContext,
285285
) -> Vec<lambda::render::command::RenderCommand> {
286-
self.frame_number += 1;
286+
const ROTATION_TURNS_PER_SECOND: f32 = 0.12;
287287

288288
// Compute the model, view, projection matrix for this frame.
289289
let camera = SimpleCamera {
@@ -292,13 +292,14 @@ impl Component<ComponentResult, String> for UniformBufferExample {
292292
near_clipping_plane: 0.1,
293293
far_clipping_plane: 100.0,
294294
};
295+
let angle_in_turns = ROTATION_TURNS_PER_SECOND * self.elapsed_seconds;
295296
let render_matrix = compute_model_view_projection_matrix_about_pivot(
296297
&camera,
297298
self.width.max(1),
298299
self.height.max(1),
299300
[0.0, -1.0 / 3.0, 0.0],
300301
[0.0, 1.0, 0.0],
301-
0.001 * self.frame_number as f32,
302+
angle_in_turns,
302303
0.5,
303304
[0.0, 1.0 / 3.0, 0.0],
304305
);
@@ -378,7 +379,7 @@ impl Default for UniformBufferExample {
378379
let fragment_shader = builder.build(fragment_virtual_shader);
379380

380381
return Self {
381-
frame_number: 0,
382+
elapsed_seconds: 0.0,
382383
shader,
383384
fragment_shader,
384385
mesh: None,

0 commit comments

Comments
 (0)