mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
No crash on startup
This commit is contained in:
parent
366e8e8e04
commit
cdb6bd56a1
@ -35,7 +35,7 @@ impl<T: Copy + Pod> DynamicBuffer<T> {
|
||||
buf: device.create_buffer(&wgpu::BufferDescriptor {
|
||||
label: None,
|
||||
mapped_at_creation: false,
|
||||
size: (len / std::mem::size_of::<T>()) as u64,
|
||||
size: len as u64 * std::mem::size_of::<T>() as u64,
|
||||
usage: usage | wgpu::BufferUsage::COPY_DST,
|
||||
}),
|
||||
len,
|
||||
@ -48,7 +48,7 @@ impl<T: Copy + Pod> DynamicBuffer<T> {
|
||||
if !vals.is_empty() {
|
||||
queue.write_buffer(
|
||||
&self.buf,
|
||||
(offset / std::mem::size_of::<T>()) as u64,
|
||||
offset as u64 * std::mem::size_of::<T>() as u64,
|
||||
bytemuck::cast_slice(vals),
|
||||
)
|
||||
}
|
||||
|
@ -18,6 +18,19 @@ impl Texture {
|
||||
filter_method: Option<wgpu::FilterMode>,
|
||||
address_mode: Option<wgpu::AddressMode>,
|
||||
) -> Result<Self, RenderError> {
|
||||
let format = match &image {
|
||||
DynamicImage::ImageLuma8(_) => wgpu::TextureFormat::R8Unorm,
|
||||
DynamicImage::ImageLumaA8(_) => panic!("ImageLuma8 unsupported"),
|
||||
DynamicImage::ImageRgb8(_) => panic!("ImageRgb8 unsupported"),
|
||||
DynamicImage::ImageRgba8(_) => wgpu::TextureFormat::Rgba8UnormSrgb,
|
||||
DynamicImage::ImageBgr8(_) => panic!("ImageBgr8 unsupported"),
|
||||
DynamicImage::ImageBgra8(_) => panic!("ImageBgra8 unsupported"),
|
||||
DynamicImage::ImageLuma16(_) => panic!("ImageLuma16 unsupported"),
|
||||
DynamicImage::ImageLumaA16(_) => panic!("ImageLumaA16 unsupported"),
|
||||
DynamicImage::ImageRgb16(_) => panic!("ImageRgb16 unsupported"),
|
||||
DynamicImage::ImageRgba16(_) => panic!("ImageRgba16 unsupported"),
|
||||
};
|
||||
|
||||
// TODO: Actually handle images that aren't in rgba format properly.
|
||||
let buffer = image.as_flat_samples_u8().ok_or_else(|| {
|
||||
RenderError::CustomError(
|
||||
@ -25,6 +38,8 @@ impl Texture {
|
||||
)
|
||||
})?;
|
||||
|
||||
let bytes_per_pixel = u32::from(buffer.layout.channels);
|
||||
|
||||
let size = Extent3d {
|
||||
width: image.width(),
|
||||
height: image.height(),
|
||||
@ -37,7 +52,7 @@ impl Texture {
|
||||
mip_level_count: 1,
|
||||
sample_count: 1,
|
||||
dimension: wgpu::TextureDimension::D2,
|
||||
format: wgpu::TextureFormat::Rgba8UnormSrgb,
|
||||
format,
|
||||
usage: wgpu::TextureUsage::SAMPLED | wgpu::TextureUsage::COPY_DST,
|
||||
});
|
||||
|
||||
@ -53,7 +68,7 @@ impl Texture {
|
||||
buffer.as_slice(),
|
||||
wgpu::TextureDataLayout {
|
||||
offset: 0,
|
||||
bytes_per_row: image.width() * 4,
|
||||
bytes_per_row: image.width() * bytes_per_pixel,
|
||||
rows_per_image: image.height(),
|
||||
},
|
||||
wgpu::Extent3d {
|
||||
@ -76,7 +91,7 @@ impl Texture {
|
||||
|
||||
let view = tex.create_view(&wgpu::TextureViewDescriptor {
|
||||
label: None,
|
||||
format: Some(wgpu::TextureFormat::Rgba8UnormSrgb),
|
||||
format: Some(format),
|
||||
dimension: Some(wgpu::TextureViewDimension::D2),
|
||||
aspect: wgpu::TextureAspect::All,
|
||||
base_mip_level: 0,
|
||||
|
Loading…
Reference in New Issue
Block a user