blade: always create texture views for atlas tiles

This commit is contained in:
Dzmitry Malyshau 2024-02-04 12:15:41 -08:00
parent aae532987f
commit 61fa5e93a8
2 changed files with 24 additions and 24 deletions

View file

@ -32,15 +32,14 @@ struct BladeAtlasState {
impl BladeAtlasState {
fn destroy(&mut self) {
for texture in self.monochrome_textures.drain(..) {
self.gpu.destroy_texture(texture.raw);
for mut texture in self.monochrome_textures.drain(..) {
texture.destroy(&self.gpu);
}
for texture in self.polychrome_textures.drain(..) {
self.gpu.destroy_texture(texture.raw);
for mut texture in self.polychrome_textures.drain(..) {
texture.destroy(&self.gpu);
}
for texture in self.path_textures.drain(..) {
self.gpu.destroy_texture(texture.raw);
self.gpu.destroy_texture_view(texture.raw_view.unwrap());
for mut texture in self.path_textures.drain(..) {
texture.destroy(&self.gpu);
}
self.upload_belt.destroy(&self.gpu);
}
@ -48,7 +47,7 @@ impl BladeAtlasState {
pub struct BladeTextureInfo {
pub size: gpu::Extent,
pub raw_view: Option<gpu::TextureView>,
pub raw_view: gpu::TextureView,
}
impl BladeAtlas {
@ -198,17 +197,13 @@ impl BladeAtlasState {
dimension: gpu::TextureDimension::D2,
usage,
});
let raw_view = if usage.contains(gpu::TextureUsage::TARGET) {
Some(self.gpu.create_texture_view(gpu::TextureViewDesc {
name: "",
texture: raw,
format,
dimension: gpu::ViewDimension::D2,
subresources: &Default::default(),
}))
} else {
None
};
let raw_view = self.gpu.create_texture_view(gpu::TextureViewDesc {
name: "",
texture: raw,
format,
dimension: gpu::ViewDimension::D2,
subresources: &Default::default(),
});
let textures = match kind {
AtlasTextureKind::Monochrome => &mut self.monochrome_textures,
@ -270,7 +265,7 @@ struct BladeAtlasTexture {
id: AtlasTextureId,
allocator: BucketedAtlasAllocator,
raw: gpu::Texture,
raw_view: Option<gpu::TextureView>,
raw_view: gpu::TextureView,
format: gpu::TextureFormat,
}
@ -293,6 +288,11 @@ impl BladeAtlasTexture {
Some(tile)
}
fn destroy(&mut self, gpu: &gpu::Context) {
gpu.destroy_texture(self.raw);
gpu.destroy_texture_view(self.raw_view);
}
fn bytes_per_pixel(&self) -> u8 {
self.format.block_info().size
}

View file

@ -336,7 +336,7 @@ impl BladeRenderer {
let vertex_buf = self.instance_belt.alloc_data(&vertices, &self.gpu);
let mut pass = self.command_encoder.render(gpu::RenderTargetSet {
colors: &[gpu::RenderTarget {
view: tex_info.raw_view.unwrap(),
view: tex_info.raw_view,
init_op: gpu::InitOp::Clear(gpu::TextureColor::OpaqueBlack),
finish_op: gpu::FinishOp::Store,
}],
@ -426,7 +426,7 @@ impl BladeRenderer {
0,
&ShaderPathsData {
globals,
t_sprite: tex_info.raw_view.unwrap(),
t_sprite: tex_info.raw_view,
s_sprite: self.atlas_sampler,
b_path_sprites: instance_buf,
},
@ -457,7 +457,7 @@ impl BladeRenderer {
0,
&ShaderMonoSpritesData {
globals,
t_sprite: tex_info.raw_view.unwrap(),
t_sprite: tex_info.raw_view,
s_sprite: self.atlas_sampler,
b_mono_sprites: instance_buf,
},
@ -475,7 +475,7 @@ impl BladeRenderer {
0,
&ShaderPolySpritesData {
globals,
t_sprite: tex_info.raw_view.unwrap(),
t_sprite: tex_info.raw_view,
s_sprite: self.atlas_sampler,
b_poly_sprites: instance_buf,
},