Remove redundant texture copies in TextureCopyNode (#871)
Remove redundant texture syncs in TextureCopyNode
This commit is contained in:
parent
fcf9d525e1
commit
3fca8c60bb
@ -6,6 +6,7 @@ use crate::{
|
|||||||
use bevy_app::prelude::{EventReader, Events};
|
use bevy_app::prelude::{EventReader, Events};
|
||||||
use bevy_asset::{AssetEvent, Assets};
|
use bevy_asset::{AssetEvent, Assets};
|
||||||
use bevy_ecs::{Resources, World};
|
use bevy_ecs::{Resources, World};
|
||||||
|
use bevy_utils::{AHashExt, HashSet};
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct TextureCopyNode {
|
pub struct TextureCopyNode {
|
||||||
@ -23,10 +24,15 @@ impl Node for TextureCopyNode {
|
|||||||
) {
|
) {
|
||||||
let texture_events = resources.get::<Events<AssetEvent<Texture>>>().unwrap();
|
let texture_events = resources.get::<Events<AssetEvent<Texture>>>().unwrap();
|
||||||
let textures = resources.get::<Assets<Texture>>().unwrap();
|
let textures = resources.get::<Assets<Texture>>().unwrap();
|
||||||
|
let mut copied_textures = HashSet::new();
|
||||||
for event in self.texture_event_reader.iter(&texture_events) {
|
for event in self.texture_event_reader.iter(&texture_events) {
|
||||||
match event {
|
match event {
|
||||||
AssetEvent::Created { handle } | AssetEvent::Modified { handle } => {
|
AssetEvent::Created { handle } | AssetEvent::Modified { handle } => {
|
||||||
if let Some(texture) = textures.get(handle) {
|
if let Some(texture) = textures.get(handle) {
|
||||||
|
if copied_textures.contains(&handle.id) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
let texture_descriptor: TextureDescriptor = texture.into();
|
let texture_descriptor: TextureDescriptor = texture.into();
|
||||||
let width = texture.size.x() as usize;
|
let width = texture.size.x() as usize;
|
||||||
let aligned_width = render_context
|
let aligned_width = render_context
|
||||||
@ -67,6 +73,8 @@ impl Node for TextureCopyNode {
|
|||||||
texture_descriptor.size,
|
texture_descriptor.size,
|
||||||
);
|
);
|
||||||
render_context.resources().remove_buffer(texture_buffer);
|
render_context.resources().remove_buffer(texture_buffer);
|
||||||
|
|
||||||
|
copied_textures.insert(&handle.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AssetEvent::Removed { .. } => {}
|
AssetEvent::Removed { .. } => {}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user