diff --git a/.gitignore b/.gitignore index 588e0c070f..a448c52cfc 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,4 @@ bin/ wasm-pack.log www/.bin/create-wasm-app.js third_person_camera.cap - +*.dll \ No newline at end of file diff --git a/crates/renderer/src/renderer.rs b/crates/renderer/src/renderer.rs index 22ae089b53..7411a215d8 100644 --- a/crates/renderer/src/renderer.rs +++ b/crates/renderer/src/renderer.rs @@ -260,6 +260,7 @@ impl Renderer { renderer_resources: renderer_resources.clone(), fs_main: FSMain::Forward, render_opaque: false, + settings, }, ), solids_frame: RenderTarget::new( diff --git a/crates/renderer/src/transparent_renderer.rs b/crates/renderer/src/transparent_renderer.rs index 886c67d167..5d665401cb 100644 --- a/crates/renderer/src/transparent_renderer.rs +++ b/crates/renderer/src/transparent_renderer.rs @@ -9,6 +9,7 @@ use ambient_gpu::{ typed_buffer::TypedBuffer, }; use ambient_native_std::asset_cache::AssetCache; +use ambient_settings::RenderSettings; use glam::{Mat4, UVec4, Vec3}; use itertools::Itertools; use ordered_float::OrderedFloat; @@ -29,6 +30,7 @@ pub struct TransparentRendererConfig { pub renderer_resources: RendererResources, pub fs_main: FSMain, pub render_opaque: bool, + pub settings: RenderSettings, } pub struct TransparentRenderer { @@ -230,7 +232,11 @@ impl TransparentRenderer { render_pass.draw_indexed( metadata.index_offset..(metadata.index_offset + metadata.index_count), - 0, + if self.config.settings.is_win32_web { + metadata.base_offset as i32 + } else { + 0 + }, (i as u32)..((i + 1) as u32), ); } diff --git a/crates/settings/src/lib.rs b/crates/settings/src/lib.rs index 44bab47e95..37d1c168ba 100644 --- a/crates/settings/src/lib.rs +++ b/crates/settings/src/lib.rs @@ -127,18 +127,24 @@ impl SyncAssetKey for SettingsKey { .unwrap(); tracing::info!("Detected platform: {platform}"); - let render_mode = if platform == "Windows" { - RenderMode::Direct + if platform == "Windows" { + Settings { + render: RenderSettings { + render_mode: Some(RenderMode::Direct), + is_win32_web: true, + ..Default::default() + }, + ..Default::default() + } } else { - RenderMode::Indirect - }; + Settings { + render: RenderSettings { + render_mode: Some(RenderMode::Indirect), + ..Default::default() + }, - Settings { - render: RenderSettings { - render_mode: Some(render_mode), ..Default::default() - }, - ..Default::default() + } } } #[cfg(not(target_os = "unknown"))] diff --git a/crates/settings/src/render.rs b/crates/settings/src/render.rs index 0afaf13859..1aa545c0e4 100644 --- a/crates/settings/src/render.rs +++ b/crates/settings/src/render.rs @@ -11,6 +11,8 @@ pub struct RenderSettings { pub render_mode: Option, #[serde(default)] pub software_culling: bool, + #[serde(default)] + pub is_win32_web: bool, } impl RenderSettings { pub fn resolution(&self) -> (u32, u32) {