Skip to content

Commit 19d078c

Browse files
authored
don't crash without features bevy_pbr, ktx2, zstd (#14020)
# Objective - Fixes #13728 ## Solution - add a new feature `smaa_luts`. if enables, it also enables `ktx2` and `zstd`. if not, it doesn't load the files but use placeholders instead - adds all the resources needed in the same places that system that uses them are added.
1 parent 8308ad0 commit 19d078c

File tree

10 files changed

+50
-16
lines changed

10 files changed

+50
-16
lines changed

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ default = [
7777
"bevy_gizmos",
7878
"android_shared_stdcxx",
7979
"tonemapping_luts",
80+
"smaa_luts",
8081
"default_font",
8182
"webgl2",
8283
"sysinfo_plugin",
@@ -286,6 +287,9 @@ detailed_trace = ["bevy_internal/detailed_trace"]
286287
# Include tonemapping Look Up Tables KTX2 files. If everything is pink, you need to enable this feature or change the `Tonemapping` method on your `Camera2dBundle` or `Camera3dBundle`.
287288
tonemapping_luts = ["bevy_internal/tonemapping_luts", "ktx2", "zstd"]
288289

290+
# Include SMAA Look Up Tables KTX2 Files
291+
smaa_luts = ["bevy_internal/smaa_luts"]
292+
289293
# Enable AccessKit on Unix backends (currently only works with experimental screen readers and forks.)
290294
accesskit_unix = ["bevy_internal/accesskit_unix"]
291295

crates/bevy_core_pipeline/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ trace = []
1818
webgl = []
1919
webgpu = []
2020
tonemapping_luts = ["bevy_render/ktx2", "bevy_render/zstd"]
21+
smaa_luts = ["bevy_render/ktx2", "bevy_render/zstd"]
2122

2223
[dependencies]
2324
# bevy

crates/bevy_core_pipeline/src/core_3d/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,14 @@ impl Plugin for Core3dPlugin {
136136
.init_resource::<DrawFunctions<AlphaMask3dPrepass>>()
137137
.init_resource::<DrawFunctions<Opaque3dDeferred>>()
138138
.init_resource::<DrawFunctions<AlphaMask3dDeferred>>()
139+
.init_resource::<ViewBinnedRenderPhases<Opaque3d>>()
140+
.init_resource::<ViewBinnedRenderPhases<AlphaMask3d>>()
141+
.init_resource::<ViewBinnedRenderPhases<Opaque3dPrepass>>()
142+
.init_resource::<ViewBinnedRenderPhases<AlphaMask3dPrepass>>()
143+
.init_resource::<ViewBinnedRenderPhases<Opaque3dDeferred>>()
144+
.init_resource::<ViewBinnedRenderPhases<AlphaMask3dDeferred>>()
145+
.init_resource::<ViewSortedRenderPhases<Transmissive3d>>()
146+
.init_resource::<ViewSortedRenderPhases<Transparent3d>>()
139147
.add_systems(ExtractSchedule, extract_core_3d_camera_phases)
140148
.add_systems(ExtractSchedule, extract_camera_prepass_phase)
141149
.add_systems(

crates/bevy_core_pipeline/src/skybox/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use bevy_render::{
2424
};
2525
use prepass::{SkyboxPrepassPipeline, SKYBOX_PREPASS_SHADER_HANDLE};
2626

27-
use crate::core_3d::CORE_3D_DEPTH_FORMAT;
27+
use crate::{core_3d::CORE_3D_DEPTH_FORMAT, prepass::PreviousViewUniforms};
2828

2929
const SKYBOX_SHADER_HANDLE: Handle<Shader> = Handle::weak_from_u128(55594763423201);
3030

@@ -53,6 +53,7 @@ impl Plugin for SkyboxPlugin {
5353
render_app
5454
.init_resource::<SpecializedRenderPipelines<SkyboxPipeline>>()
5555
.init_resource::<SpecializedRenderPipelines<SkyboxPrepassPipeline>>()
56+
.init_resource::<PreviousViewUniforms>()
5657
.add_systems(
5758
Render,
5859
(

crates/bevy_core_pipeline/src/smaa/mod.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131
//! [SMAA]: https://www.iryoku.com/smaa/
3232
3333
use bevy_app::{App, Plugin};
34-
use bevy_asset::{load_internal_asset, load_internal_binary_asset, Handle};
34+
#[cfg(feature = "smaa_luts")]
35+
use bevy_asset::load_internal_binary_asset;
36+
use bevy_asset::{load_internal_asset, Handle};
3537
use bevy_derive::{Deref, DerefMut};
3638
use bevy_ecs::{
3739
component::Component,
@@ -47,7 +49,7 @@ use bevy_reflect::{std_traits::ReflectDefault, Reflect};
4749
use bevy_render::{
4850
camera::ExtractedCamera,
4951
extract_component::{ExtractComponent, ExtractComponentPlugin},
50-
render_asset::{RenderAssetUsages, RenderAssets},
52+
render_asset::RenderAssets,
5153
render_graph::{
5254
NodeRunError, RenderGraphApp as _, RenderGraphContext, ViewNode, ViewNodeRunner,
5355
},
@@ -65,15 +67,19 @@ use bevy_render::{
6567
VertexState,
6668
},
6769
renderer::{RenderContext, RenderDevice, RenderQueue},
68-
texture::{
69-
BevyDefault, CachedTexture, CompressedImageFormats, GpuImage, Image, ImageFormat,
70-
ImageSampler, ImageType, TextureCache,
71-
},
70+
texture::{BevyDefault, CachedTexture, GpuImage, Image, TextureCache},
7271
view::{ExtractedView, ViewTarget},
7372
Render, RenderApp, RenderSet,
7473
};
74+
#[cfg(feature = "smaa_luts")]
75+
use bevy_render::{
76+
render_asset::RenderAssetUsages,
77+
texture::{CompressedImageFormats, ImageFormat, ImageSampler, ImageType},
78+
};
7579
use bevy_utils::prelude::default;
7680

81+
#[cfg(not(feature = "smaa_luts"))]
82+
use crate::tonemapping::lut_placeholder;
7783
use crate::{
7884
core_2d::graph::{Core2d, Node2d},
7985
core_3d::graph::{Core3d, Node3d},
@@ -287,6 +293,7 @@ impl Plugin for SmaaPlugin {
287293

288294
// Load the two lookup textures. These are compressed textures in KTX2
289295
// format.
296+
#[cfg(feature = "smaa_luts")]
290297
load_internal_binary_asset!(
291298
app,
292299
SMAA_AREA_LUT_TEXTURE_HANDLE,
@@ -304,6 +311,7 @@ impl Plugin for SmaaPlugin {
304311
.expect("Failed to load SMAA area LUT")
305312
);
306313

314+
#[cfg(feature = "smaa_luts")]
307315
load_internal_binary_asset!(
308316
app,
309317
SMAA_SEARCH_LUT_TEXTURE_HANDLE,
@@ -321,6 +329,16 @@ impl Plugin for SmaaPlugin {
321329
.expect("Failed to load SMAA search LUT")
322330
);
323331

332+
#[cfg(not(feature = "smaa_luts"))]
333+
app.world_mut()
334+
.resource_mut::<bevy_asset::Assets<Image>>()
335+
.insert(SMAA_AREA_LUT_TEXTURE_HANDLE.id(), lut_placeholder());
336+
337+
#[cfg(not(feature = "smaa_luts"))]
338+
app.world_mut()
339+
.resource_mut::<bevy_asset::Assets<Image>>()
340+
.insert(SMAA_SEARCH_LUT_TEXTURE_HANDLE.id(), lut_placeholder());
341+
324342
app.add_plugins(ExtractComponentPlugin::<SmaaSettings>::default())
325343
.register_type::<SmaaSettings>();
326344

crates/bevy_internal/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ zstd = ["bevy_render/zstd"]
4848
# Include tonemapping LUT KTX2 files.
4949
tonemapping_luts = ["bevy_core_pipeline/tonemapping_luts"]
5050

51+
# Include SMAA LUT KTX2 Files
52+
smaa_luts = ["bevy_core_pipeline/smaa_luts"]
53+
5154
# Audio format support (vorbis is enabled by default)
5255
flac = ["bevy_audio/flac"]
5356
mp3 = ["bevy_audio/mp3"]

crates/bevy_pbr/src/prepass/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,7 @@ where
102102
)
103103
.init_resource::<PrepassViewBindGroup>()
104104
.init_resource::<SpecializedMeshPipelines<PrepassPipeline<M>>>()
105-
.allow_ambiguous_resource::<SpecializedMeshPipelines<PrepassPipeline<M>>>()
106-
.init_resource::<PreviousViewUniforms>();
105+
.allow_ambiguous_resource::<SpecializedMeshPipelines<PrepassPipeline<M>>>();
107106
}
108107

109108
fn finish(&self, app: &mut App) {

crates/bevy_pbr/src/render/mesh.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,6 @@ impl Plugin for MeshRenderPlugin {
218218
);
219219
};
220220

221-
let indirect_parameters_buffer = IndirectParametersBuffer::new();
222-
223221
let render_device = render_app.world().resource::<RenderDevice>();
224222
if let Some(per_object_buffer_batch_size) =
225223
GpuArrayBuffer::<MeshUniform>::batch_size(render_device)
@@ -231,7 +229,6 @@ impl Plugin for MeshRenderPlugin {
231229
}
232230

233231
render_app
234-
.insert_resource(indirect_parameters_buffer)
235232
.init_resource::<MeshPipelineViewLayouts>()
236233
.init_resource::<MeshPipeline>();
237234
}

crates/bevy_render/src/batching/gpu_preprocessing.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,12 @@ impl Plugin for BatchingPlugin {
3838
return;
3939
};
4040

41-
render_app.add_systems(
42-
Render,
43-
write_indirect_parameters_buffer.in_set(RenderSet::PrepareResourcesFlush),
44-
);
41+
render_app
42+
.insert_resource(IndirectParametersBuffer::new())
43+
.add_systems(
44+
Render,
45+
write_indirect_parameters_buffer.in_set(RenderSet::PrepareResourcesFlush),
46+
);
4547
}
4648

4749
fn finish(&self, app: &mut App) {

docs/cargo_features.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ The default feature set enables most of the expected features of a game engine,
3535
|ktx2|KTX2 compressed texture support|
3636
|multi_threaded|Enables multithreaded parallelism in the engine. Disabling it forces all engine tasks to run on a single thread.|
3737
|png|PNG image format support|
38+
|smaa_luts|Include SMAA Look Up Tables KTX2 Files|
3839
|sysinfo_plugin|Enables system information diagnostic plugin|
3940
|tonemapping_luts|Include tonemapping Look Up Tables KTX2 files. If everything is pink, you need to enable this feature or change the `Tonemapping` method on your `Camera2dBundle` or `Camera3dBundle`.|
4041
|vorbis|OGG/VORBIS audio format support|

0 commit comments

Comments
 (0)