Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_render/src/texture/mod.rs
6596 views
1
mod fallback_image;
2
mod gpu_image;
3
mod manual_texture_view;
4
mod texture_attachment;
5
mod texture_cache;
6
7
pub use crate::render_resource::DefaultImageSampler;
8
use bevy_image::{CompressedImageFormatSupport, CompressedImageFormats, ImageLoader, ImagePlugin};
9
pub use fallback_image::*;
10
pub use gpu_image::*;
11
pub use manual_texture_view::*;
12
pub use texture_attachment::*;
13
pub use texture_cache::*;
14
15
use crate::{
16
extract_resource::ExtractResourcePlugin, render_asset::RenderAssetPlugin,
17
renderer::RenderDevice, Render, RenderApp, RenderSystems,
18
};
19
use bevy_app::{App, Plugin};
20
use bevy_asset::AssetApp;
21
use bevy_ecs::prelude::*;
22
use tracing::warn;
23
24
#[derive(Default)]
25
pub struct TexturePlugin;
26
27
impl 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
}
74
75