|
1 | | -use bevy::image::ImageAddressMode; |
| 1 | +use bevy::image::{ImageAddressMode, TextureReinterpretationError}; |
2 | 2 | use bevy::{ |
3 | 3 | asset::uuid_handle, |
4 | 4 | mesh::{MeshVertexAttribute, MeshVertexBufferLayoutRef, VertexAttributeDescriptor}, |
5 | 5 | pbr::{MaterialExtension, MaterialExtensionKey, MaterialExtensionPipeline}, |
6 | 6 | prelude::*, |
7 | 7 | reflect::TypePath, |
8 | 8 | render::render_resource::{ |
9 | | - AsBindGroup, RenderPipelineDescriptor, SpecializedMeshPipelineError, VertexFormat, |
| 9 | + AsBindGroup, RenderPipelineDescriptor, SpecializedMeshPipelineError, |
| 10 | + TextureViewDescriptor, TextureViewDimension, VertexFormat, |
10 | 11 | }, |
11 | 12 | }; |
12 | 13 | use bevy_shader::{Shader, ShaderDefVal, ShaderRef}; |
@@ -96,11 +97,27 @@ pub(crate) fn prepare_texture( |
96 | 97 | { |
97 | 98 | return; |
98 | 99 | } |
99 | | - loading_texture.is_loaded = true; |
100 | 100 |
|
101 | 101 | let image = images.get_mut(&loading_texture.handle).unwrap(); |
| 102 | + if let Err(err) = prepare_voxel_texture(image, texture_layers.0) { |
| 103 | + warn_once!("Failed to prepare voxel texture as a texture array: {err}"); |
| 104 | + } |
| 105 | + |
| 106 | + loading_texture.is_loaded = true; |
| 107 | +} |
| 108 | + |
| 109 | +pub(crate) fn prepare_voxel_texture( |
| 110 | + image: &mut Image, |
| 111 | + texture_layers: u32, |
| 112 | +) -> Result<(), TextureReinterpretationError> { |
102 | 113 | set_repeat_sampler(image); |
103 | | - let _ = image.reinterpret_stacked_2d_as_array(texture_layers.0); |
| 114 | + image.reinterpret_stacked_2d_as_array(texture_layers)?; |
| 115 | + image.texture_view_descriptor = Some(TextureViewDescriptor { |
| 116 | + dimension: Some(TextureViewDimension::D2Array), |
| 117 | + ..default() |
| 118 | + }); |
| 119 | + |
| 120 | + Ok(()) |
104 | 121 | } |
105 | 122 |
|
106 | 123 | pub(crate) fn set_repeat_sampler(image: &mut Image) { |
|
0 commit comments