fix atlas sometime fails

This commit is contained in:
Junkui Zhang 2025-07-29 16:56:01 +08:00
parent 181f324473
commit 98f31172ab

View file

@ -142,7 +142,7 @@ impl DirectXAtlasState {
} }
} }
let texture = self.push_texture(size, texture_kind); let texture = self.push_texture(size, texture_kind)?;
texture.allocate(size) texture.allocate(size)
} }
@ -150,7 +150,7 @@ impl DirectXAtlasState {
&mut self, &mut self,
min_size: Size<DevicePixels>, min_size: Size<DevicePixels>,
kind: AtlasTextureKind, kind: AtlasTextureKind,
) -> &mut DirectXAtlasTexture { ) -> Option<&mut DirectXAtlasTexture> {
const DEFAULT_ATLAS_SIZE: Size<DevicePixels> = Size { const DEFAULT_ATLAS_SIZE: Size<DevicePixels> = Size {
width: DevicePixels(1024), width: DevicePixels(1024),
height: DevicePixels(1024), height: DevicePixels(1024),
@ -194,9 +194,11 @@ impl DirectXAtlasState {
}; };
let mut texture: Option<ID3D11Texture2D> = None; let mut texture: Option<ID3D11Texture2D> = None;
unsafe { unsafe {
// This only returns None if the device is lost, which we will recreate later.
// So it's ok to return None here.
self.device self.device
.CreateTexture2D(&texture_desc, None, Some(&mut texture)) .CreateTexture2D(&texture_desc, None, Some(&mut texture))
.unwrap(); .ok()?;
} }
let texture = texture.unwrap(); let texture = texture.unwrap();
@ -209,7 +211,7 @@ impl DirectXAtlasState {
let mut view = None; let mut view = None;
self.device self.device
.CreateShaderResourceView(&texture, None, Some(&mut view)) .CreateShaderResourceView(&texture, None, Some(&mut view))
.unwrap(); .ok()?;
[view] [view]
}; };
let atlas_texture = DirectXAtlasTexture { let atlas_texture = DirectXAtlasTexture {
@ -225,10 +227,10 @@ impl DirectXAtlasState {
}; };
if let Some(ix) = index { if let Some(ix) = index {
texture_list.textures[ix] = Some(atlas_texture); texture_list.textures[ix] = Some(atlas_texture);
texture_list.textures.get_mut(ix).unwrap().as_mut().unwrap() texture_list.textures.get_mut(ix).unwrap().as_mut()
} else { } else {
texture_list.textures.push(Some(atlas_texture)); texture_list.textures.push(Some(atlas_texture));
texture_list.textures.last_mut().unwrap().as_mut().unwrap() texture_list.textures.last_mut().unwrap().as_mut()
} }
} }