fix(web): add WgpuSettingsPriority::WebGL2 for Chromium shader compatibility
Build and Deploy / build-and-push (push) Failing after 43s
Build and Deploy / build-and-push (push) Failing after 43s
Without this setting, wgpu's naga SPIR-V→GLSL translator uses features unsupported by ANGLE (Chromium's WebGL2 implementation): storage buffers, tight inter-stage component limits, etc. ANGLE rejects these shaders with a fatal "Shader translation error" and a context-lost event. WgpuSettingsPriority::WebGL2 constrains naga to emit GLES 300es-compatible GLSL (same limits as WebGL2 spec: no storage buffers, max 31 inter-stage components, max 255-byte vertex stride). Firefox was already permissive enough to work without this; Chromium required it. Result: game renders correctly in both Chromium (ANGLE/SwiftShader) and Firefox (native WebGL2), with zero JS errors in both environments. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
|
||||
use bevy::asset::AssetMetaCheck;
|
||||
use bevy::prelude::*;
|
||||
use bevy::render::RenderPlugin;
|
||||
use bevy::render::settings::{RenderCreation, WgpuSettings, WgpuSettingsPriority};
|
||||
use bevy::window::{Window, WindowPlugin};
|
||||
use solitaire_data::LocalOnlyProvider;
|
||||
use solitaire_engine::CoreGamePlugin;
|
||||
@@ -42,6 +44,18 @@ pub fn start() {
|
||||
.set(AssetPlugin {
|
||||
meta_check: AssetMetaCheck::Never,
|
||||
..default()
|
||||
})
|
||||
// WebGL2 priority constrains naga (the shader translator) to emit
|
||||
// GLES 300es-compatible GLSL. Without this, Chromium's ANGLE driver
|
||||
// rejects certain shader constructs (storage buffers, tight component
|
||||
// limits) causing a fatal wgpu "Shader translation error". Firefox is
|
||||
// more lenient; this setting makes both browsers work identically.
|
||||
.set(RenderPlugin {
|
||||
render_creation: RenderCreation::Automatic(WgpuSettings {
|
||||
priority: WgpuSettingsPriority::WebGL2,
|
||||
..default()
|
||||
}),
|
||||
..default()
|
||||
}),
|
||||
)
|
||||
// LocalOnlyProvider disables cloud sync — correct for the web build
|
||||
|
||||
Reference in New Issue
Block a user