bevy_render/texture/
mod.rs1mod 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, render_asset::RenderAssetPlugin,
17 renderer::RenderDevice, Render, RenderApp, RenderSystems,
18};
19use bevy_app::{App, Plugin};
20use bevy_asset::AssetApp;
21use bevy_ecs::prelude::*;
22use tracing::warn;
23
24#[derive(Default)]
25pub struct TexturePlugin;
26
27impl Plugin for TexturePlugin {
28 fn build(&self, app: &mut App) {
29 app.add_plugins((
30 RenderAssetPlugin::<GpuImage>::default(),
31 ExtractResourcePlugin::<ManualTextureViews>::default(),
32 ))
33 .init_resource::<ManualTextureViews>();
34 if let Some(render_app) = app.get_sub_app_mut(RenderApp) {
35 render_app.init_resource::<TextureCache>().add_systems(
36 Render,
37 update_texture_cache_system.in_set(RenderSystems::Cleanup),
38 );
39 }
40 }
41
42 fn finish(&self, app: &mut App) {
43 if !ImageLoader::SUPPORTED_FORMATS.is_empty() {
44 let supported_compressed_formats = if let Some(resource) =
45 app.world().get_resource::<CompressedImageFormatSupport>()
46 {
47 resource.0
48 } else {
49 warn!("CompressedImageFormatSupport resource not found. It should either be initialized in finish() of \
50 RenderPlugin, or manually if not using the RenderPlugin or the WGPU backend.");
51 CompressedImageFormats::NONE
52 };
53
54 app.register_asset_loader(ImageLoader::new(supported_compressed_formats));
55 }
56 let default_sampler = app.get_added_plugins::<ImagePlugin>()[0]
57 .default_sampler
58 .clone();
59
60 if let Some(render_app) = app.get_sub_app_mut(RenderApp) {
61 let default_sampler = {
62 let device = render_app.world().resource::<RenderDevice>();
63 device.create_sampler(&default_sampler.as_wgpu())
64 };
65 render_app
66 .insert_resource(DefaultImageSampler(default_sampler))
67 .init_resource::<FallbackImage>()
68 .init_resource::<FallbackImageZero>()
69 .init_resource::<FallbackImageCubemap>()
70 .init_resource::<FallbackImageFormatMsaaCache>();
71 }
72 }
73}