Skip to main content

bevy_render/texture/
mod.rs

1mod fallback_image;
2mod gpu_image;
3mod manual_texture_view;
4mod texture_attachment;
5mod texture_cache;
6
7pub use crate::render_resource::DefaultImageSampler;
8use bevy_image::{CompressedImageFormatSupport, CompressedImageFormats, ImageLoader, ImagePlugin};
9pub use fallback_image::*;
10pub use gpu_image::*;
11pub use manual_texture_view::*;
12pub use texture_attachment::*;
13pub use texture_cache::*;
14
15use crate::{
16    extract_resource::ExtractResourcePlugin, init_gpu_resource, render_asset::RenderAssetPlugin,
17    render_resource::DefaultImageSamplerDescriptor, GpuResourceAppExt, Render, RenderApp,
18    RenderStartup, RenderSystems,
19};
20use bevy_app::{App, Plugin};
21use bevy_asset::AssetApp;
22use bevy_ecs::prelude::*;
23use bevy_log::warn;
24
25#[derive(#[automatically_derived]
impl ::core::default::Default for TexturePlugin {
    #[inline]
    fn default() -> TexturePlugin { TexturePlugin {} }
}Default)]
26pub struct TexturePlugin;
27
28impl Plugin for TexturePlugin {
29    fn build(&self, app: &mut App) {
30        app.add_plugins((
31            RenderAssetPlugin::<GpuImage>::default(),
32            ExtractResourcePlugin::<ManualTextureViews>::default(),
33        ))
34        .init_resource::<ManualTextureViews>();
35        if let Some(render_app) = app.get_sub_app_mut(RenderApp) {
36            render_app
37                .init_resource::<ManualTextureViews>()
38                .init_gpu_resource::<TextureCache>()
39                .allow_ambiguous_resource::<TextureCache>()
40                .add_systems(
41                    Render,
42                    update_texture_cache_system.in_set(RenderSystems::Cleanup),
43                );
44        }
45    }
46
47    fn finish(&self, app: &mut App) {
48        if !ImageLoader::SUPPORTED_FORMATS.is_empty() {
49            let supported_compressed_formats = if let Some(resource) =
50                app.world().get_resource::<CompressedImageFormatSupport>()
51            {
52                resource.0
53            } else {
54                {
    use ::tracing::__macro_support::Callsite as _;
    static __CALLSITE: ::tracing::callsite::DefaultCallsite =
        {
            static META: ::tracing::Metadata<'static> =
                {
                    ::tracing_core::metadata::Metadata::new("event src/texture/mod.rs:54",
                        "bevy_render::texture", ::tracing::Level::WARN,
                        ::tracing_core::__macro_support::Option::Some("src/texture/mod.rs"),
                        ::tracing_core::__macro_support::Option::Some(54u32),
                        ::tracing_core::__macro_support::Option::Some("bevy_render::texture"),
                        ::tracing_core::field::FieldSet::new(&["message"],
                            ::tracing_core::callsite::Identifier(&__CALLSITE)),
                        ::tracing::metadata::Kind::EVENT)
                };
            ::tracing::callsite::DefaultCallsite::new(&META)
        };
    let enabled =
        ::tracing::Level::WARN <= ::tracing::level_filters::STATIC_MAX_LEVEL
                &&
                ::tracing::Level::WARN <=
                    ::tracing::level_filters::LevelFilter::current() &&
            {
                let interest = __CALLSITE.interest();
                !interest.is_never() &&
                    ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                        interest)
            };
    if enabled {
        (|value_set: ::tracing::field::ValueSet|
                    {
                        let meta = __CALLSITE.metadata();
                        ::tracing::Event::dispatch(meta, &value_set);
                        ;
                    })({
                #[allow(unused_imports)]
                use ::tracing::field::{debug, display, Value};
                __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("CompressedImageFormatSupport resource not found. It should either be initialized in finish() of RenderPlugin, or manually if not using the RenderPlugin or the WGPU backend.")
                                            as &dyn ::tracing::field::Value))])
            });
    } else { ; }
};warn!("CompressedImageFormatSupport resource not found. It should either be initialized in finish() of \
55                       RenderPlugin, or manually if not using the RenderPlugin or the WGPU backend.");
56                CompressedImageFormats::NONE
57            };
58
59            app.register_asset_loader(ImageLoader::new(supported_compressed_formats));
60        }
61        let default_sampler = app.get_added_plugins::<ImagePlugin>()[0]
62            .default_sampler
63            .clone();
64
65        if let Some(render_app) = app.get_sub_app_mut(RenderApp) {
66            render_app.insert_resource(DefaultImageSamplerDescriptor(default_sampler.clone()));
67            render_app.add_systems(
68                RenderStartup,
69                (
70                    init_gpu_resource::<DefaultImageSampler>,
71                    init_gpu_resource::<FallbackImage>,
72                    init_gpu_resource::<FallbackImageZero>,
73                    init_gpu_resource::<FallbackImageCubemap>,
74                    init_gpu_resource::<FallbackImageFormatMsaaCache>,
75                )
76                    .chain()
77                    .ambiguous_with_all(),
78            );
79        }
80    }
81}