feat(core): expose frame view and auto-render the scene
- AppHandler::render now receives the current &Frame; its default implementation renders the whole scene automatically via app.render_scene(frame.view()) (Option A). Users can simply not implement render for full auto-rendering. - Add Renderer::render_scene: batch-renders every scene entity in a single render pass. Factored per-mesh draw logic into a private draw_entity helper shared with Renderer::render. - Add App::render_scene(view) delegating to the Renderer. - Fill simple.rs with a real quad (mesh/material/entity) without importing wgpu; the scene now auto-renders via the trait default.
This commit is contained in:
+11
-6
@@ -17,18 +17,23 @@
|
||||
//! the engine "brick by brick" through direct Context/PipelineCache/Renderer manipulation if needed.
|
||||
|
||||
use crate::app::App;
|
||||
use crate::core::Frame;
|
||||
|
||||
/// Trait defining user-provided game logic injected into the render loop at two callback points.
|
||||
/// Users implement this trait to define what happens per-frame: update (pre-render logic) and
|
||||
/// render (draw call execution). Default implementations provide empty update for convenience.
|
||||
/// render (draw call execution). Default implementations provide empty update and automatic
|
||||
/// scene rendering for convenience.
|
||||
pub trait AppHandler {
|
||||
/// Called once per frame before rendering begins. Used for physics updates, input processing,
|
||||
/// entity management, and any other pre-render logic. Default implementation does nothing.
|
||||
/// Inputs: _app — mutable reference to the App facade providing access to all subsystems.
|
||||
fn update(&mut self, _app: &mut App) {}
|
||||
/// Called during each RedrawRequested event after frame acquisition. Used for executing draw calls
|
||||
/// by iterating Scene entities and calling app.renderer.render(view, mesh, material) per entity.
|
||||
/// Must be implemented — called every frame that needs rendering.
|
||||
/// Inputs: app — mutable reference to the App facade providing access to all subsystems.
|
||||
fn render(&mut self, app: &mut App);
|
||||
/// Called during each RedrawRequested event after frame acquisition, receiving the current frame.
|
||||
/// Used for custom draw call execution. Default implementation renders the whole scene
|
||||
/// automatically (`app.render_scene(frame.view())`), so most users don't need to override it.
|
||||
/// Advanced users override this method to control drawing manually.
|
||||
/// Inputs: app — mutable reference to the App facade; frame — the acquired frame exposing its view.
|
||||
fn render(&mut self, app: &mut App, frame: &Frame) {
|
||||
app.render_scene(frame.view());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user