refactor: remove redundant runtime ownership

Amp-Thread-ID: https://ampcode.com/threads/T-019f9d91-77c1-7206-a60f-ed6554ce92ab

Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
This commit is contained in:
Amp
2026-07-29 02:58:55 +00:00
co-authored by heaust
parent 204cb744df
commit 092b319d75
5 changed files with 14 additions and 15 deletions
+2 -3
View File
@@ -1,7 +1,8 @@
#![cfg(target_arch = "wasm32")]
use ultraviolet::Mat4; use ultraviolet::Mat4;
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
#[cfg(target_arch = "wasm32")]
use renderer::app_setup::WebAppRuntime; use renderer::app_setup::WebAppRuntime;
use renderer::camera::Camera; use renderer::camera::Camera;
use renderer::render_data::{InstanceType, MeshCreateInfo, RenderData}; use renderer::render_data::{InstanceType, MeshCreateInfo, RenderData};
@@ -19,7 +20,6 @@ struct Vertex {
struct EditorScene { struct EditorScene {
uniform_buffers: [wgpu::Buffer; 2], uniform_buffers: [wgpu::Buffer; 2],
bind_groups: [wgpu::BindGroup; 2], bind_groups: [wgpu::BindGroup; 2],
bind_group_layouts: [wgpu::BindGroupLayout; 2],
frame_metadata: FrameMetadata, frame_metadata: FrameMetadata,
cam: Camera, cam: Camera,
} }
@@ -53,7 +53,6 @@ impl renderer::renderer::scene::Scene for EditorScene {
let mut scene = EditorScene { let mut scene = EditorScene {
uniform_buffers: [uniform_resource.buffer, camera_resource.buffer], uniform_buffers: [uniform_resource.buffer, camera_resource.buffer],
bind_groups: [uniform_resource.bind_group, camera_resource.bind_group], bind_groups: [uniform_resource.bind_group, camera_resource.bind_group],
bind_group_layouts,
frame_metadata, frame_metadata,
cam: camera, cam: camera,
}; };
+2 -8
View File
@@ -1,3 +1,5 @@
#![cfg(target_arch = "wasm32")]
use std::sync::mpsc::{self, Sender}; use std::sync::mpsc::{self, Sender};
use wasm_bindgen::closure::Closure; use wasm_bindgen::closure::Closure;
use wasm_bindgen::prelude::*; use wasm_bindgen::prelude::*;
@@ -5,16 +7,11 @@ use wasm_bindgen::JsCast;
use crate::command_ring::CommandRing; use crate::command_ring::CommandRing;
use crate::message::WindowEvent; use crate::message::WindowEvent;
#[cfg(target_arch = "wasm32")]
use crate::platform::web; use crate::platform::web;
#[cfg(target_arch = "wasm32")]
use crate::platform::web::worker::MainWorker; use crate::platform::web::worker::MainWorker;
#[cfg(target_arch = "wasm32")]
use wasm_bindgen_futures::spawn_local; use wasm_bindgen_futures::spawn_local;
#[cfg(target_arch = "wasm32")]
use web_sys::AddEventListenerOptions; use web_sys::AddEventListenerOptions;
#[cfg(target_arch = "wasm32")]
pub struct EventListeners { pub struct EventListeners {
_resize_listener: Closure<dyn FnMut()>, _resize_listener: Closure<dyn FnMut()>,
_pointer_listener: Closure<dyn FnMut(web_sys::PointerEvent)>, _pointer_listener: Closure<dyn FnMut(web_sys::PointerEvent)>,
@@ -24,7 +21,6 @@ pub struct EventListeners {
} }
/// Setup default window event listeners that forward events to the worker thread /// Setup default window event listeners that forward events to the worker thread
#[cfg(target_arch = "wasm32")]
pub fn setup_event_listeners( pub fn setup_event_listeners(
worker_chan: &Sender<WindowEvent>, worker_chan: &Sender<WindowEvent>,
canvas: &web_sys::HtmlCanvasElement, canvas: &web_sys::HtmlCanvasElement,
@@ -147,14 +143,12 @@ pub fn setup_event_listeners(
} }
/// Runtime resources required to keep a WASM application running. /// Runtime resources required to keep a WASM application running.
#[cfg(target_arch = "wasm32")]
pub struct WebAppRuntime { pub struct WebAppRuntime {
worker: MainWorker, worker: MainWorker,
_event_listeners: EventListeners, _event_listeners: EventListeners,
ring: Box<CommandRing>, ring: Box<CommandRing>,
} }
#[cfg(target_arch = "wasm32")]
impl WebAppRuntime { impl WebAppRuntime {
/// Initialize the web worker, canvas ownership, and event listeners. /// Initialize the web worker, canvas ownership, and event listeners.
pub fn new<T: crate::renderer::scene::Scene + 'static>( pub fn new<T: crate::renderer::scene::Scene + 'static>(
+5 -3
View File
@@ -5,11 +5,13 @@ use wasm_bindgen::{prelude::Closure, JsCast, JsValue};
use wasm_bindgen_futures::spawn_local; use wasm_bindgen_futures::spawn_local;
use web_sys::DedicatedWorkerGlobalScope; use web_sys::DedicatedWorkerGlobalScope;
#[cfg(target_arch = "wasm32")]
use crate::render_data::RenderDataConfig;
use crate::{ use crate::{
command_ring::CommandRing, command_ring::CommandRing,
gltf::{install_imported, ModelBounds}, gltf::{install_imported, ModelBounds},
message::{camera_drag, CameraDrag, DrainEventError, MouseMessage, ResizeMessage, WindowEvent}, message::{camera_drag, CameraDrag, DrainEventError, MouseMessage, ResizeMessage, WindowEvent},
render_data::{InstanceHandle, InstanceType, MeshHandle, RenderData, RenderDataConfig}, render_data::{InstanceHandle, InstanceType, MeshHandle, RenderData},
renderer::scene::Scene, renderer::scene::Scene,
}; };
@@ -26,6 +28,7 @@ pub use pipeline_library::PipelineLibrary;
const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float; const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float;
#[cfg(any(target_arch = "wasm32", test))]
#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[derive(Clone, Copy, Debug, PartialEq, Eq)]
struct DeviceFeaturePlan { struct DeviceFeaturePlan {
hard: wgpu::Features, hard: wgpu::Features,
@@ -33,6 +36,7 @@ struct DeviceFeaturePlan {
profiling_enabled: bool, profiling_enabled: bool,
} }
#[cfg(any(target_arch = "wasm32", test))]
fn device_feature_plan(profile: bool, supported: wgpu::Features) -> DeviceFeaturePlan { fn device_feature_plan(profile: bool, supported: wgpu::Features) -> DeviceFeaturePlan {
let hard = wgpu::Features::INDIRECT_FIRST_INSTANCE; let hard = wgpu::Features::INDIRECT_FIRST_INSTANCE;
let profiling = profiler::Profiler::requested_features(profile, supported); let profiling = profiler::Profiler::requested_features(profile, supported);
@@ -1290,7 +1294,6 @@ pub struct RendererContext {
} }
pub struct Renderer<T: scene::Scene> { pub struct Renderer<T: scene::Scene> {
canvas: web_sys::OffscreenCanvas,
events_chan: Receiver<WindowEvent>, events_chan: Receiver<WindowEvent>,
context: RendererContext, context: RendererContext,
resources: PipelineLibrary, resources: PipelineLibrary,
@@ -2416,7 +2419,6 @@ impl<T: Scene + 'static> Renderer<T> {
Self::ensure_gltf_pipelines(&mut resources, &context); Self::ensure_gltf_pipelines(&mut resources, &context);
Self { Self {
canvas,
events_chan, events_chan,
context, context,
scene, scene,
+5
View File
@@ -5,8 +5,11 @@ use std::{
use wasm_bindgen::JsValue; use wasm_bindgen::JsValue;
pub const MAX_PROFILE_PASSES: usize = crate::render_graph::MAX_EXECUTIONS; pub const MAX_PROFILE_PASSES: usize = crate::render_graph::MAX_EXECUTIONS;
#[cfg(any(target_arch = "wasm32", test))]
const SLOT_COUNT: usize = 4; const SLOT_COUNT: usize = 4;
#[cfg(any(target_arch = "wasm32", test))]
const QUERY_COUNT: u32 = (MAX_PROFILE_PASSES * 2) as u32; const QUERY_COUNT: u32 = (MAX_PROFILE_PASSES * 2) as u32;
#[cfg(any(target_arch = "wasm32", test))]
const RESOLVE_SIZE: u64 = QUERY_COUNT as u64 * 8; const RESOLVE_SIZE: u64 = QUERY_COUNT as u64 * 8;
#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[derive(Clone, Copy, Debug, PartialEq, Eq)]
@@ -78,6 +81,7 @@ pub(crate) struct Profiler {
} }
impl Profiler { impl Profiler {
#[cfg(any(target_arch = "wasm32", test))]
pub fn requested_features(requested: bool, supported: wgpu::Features) -> wgpu::Features { pub fn requested_features(requested: bool, supported: wgpu::Features) -> wgpu::Features {
if requested && supported.contains(wgpu::Features::TIMESTAMP_QUERY) { if requested && supported.contains(wgpu::Features::TIMESTAMP_QUERY) {
wgpu::Features::TIMESTAMP_QUERY wgpu::Features::TIMESTAMP_QUERY
@@ -85,6 +89,7 @@ impl Profiler {
wgpu::Features::empty() wgpu::Features::empty()
} }
} }
#[cfg(target_arch = "wasm32")]
pub async fn new(requested: bool, device: &wgpu::Device, queue: &wgpu::Queue) -> Self { pub async fn new(requested: bool, device: &wgpu::Device, queue: &wgpu::Queue) -> Self {
let available = requested && device.features().contains(wgpu::Features::TIMESTAMP_QUERY); let available = requested && device.features().contains(wgpu::Features::TIMESTAMP_QUERY);
let mut slots = Vec::new(); let mut slots = Vec::new();
-1
View File
@@ -24,7 +24,6 @@ const CONTROL_BYTES: u32 = 256;
const SLOT_BYTES: u32 = 64; const SLOT_BYTES: u32 = 64;
const SNAPSHOT_HEADER_BYTES: usize = 64; const SNAPSHOT_HEADER_BYTES: usize = 64;
const DATA_OFFSET: usize = 448; const DATA_OFFSET: usize = 448;
const DESCRIPTOR_BYTES: usize = 32;
const STREAMS: usize = 12; const STREAMS: usize = 12;
const SCHEMA_FLAGS: u32 = 3; // dense arrays | affine transforms const SCHEMA_FLAGS: u32 = 3; // dense arrays | affine transforms