rust - 直接将纹理添加到资产资源导致 gpu_alloc 错误
问题描述
我正在从文件中加载纹理作为 aVec<u8>
并将该数据转换为纹理,当我将该纹理添加到资产资源以获取 aHandle<Texture>
时,它会导致两个错误,第一个来自日志记录系统并说gpu_alloc::block: Memory block wasn't deallocated
第二个(我假设是相关的)是thread 'main' panicked at 'range end index 32896 out of range for slice of length 32768'
。这一切似乎都源于这个代码块
Ok(pak) => {
let mut assets : CurrentlyLoadedAssets = CurrentlyLoadedAssets::default();
for texture in pak.textures {
//Creates texture from data and loads it into the resource for a handle
let texture_asset: Texture = Texture::new(Extent3d { width: 32, height: 32, depth: 1 }, TextureDimension::D2, texture.1, Rgba8UnormSrgb);
//This is causing problems
let texture_handle: Handle<Texture> = textures.add(texture_asset);
println!("Loading: {}", &texture.0);
assets.textures.insert(texture.0, texture_handle);
//Problems end here
}
println!("Done getting assets");
commands.insert_resource(assets);
}
知道我需要改变什么来解决这个问题吗?
解决方案
我解决了这个问题。
let texture_asset: Texture = Texture::new(Extent3d { width: 32, height: 32, depth: 1 }, TextureDimension::D2, texture.1, Rgba8UnormSrgb);
应该
texture_asset: Texture = Texture::new(Extent3d { width: 256, height: 256, depth: 1 }, TextureDimension::D2, texture.1, Rgba8UnormSrgb);
不同之处在于宽度和高度必须与您尝试加载的图像相同Vec<u8>
,我使用的是 256x256 的测试图像,而不是我要使用的 32x32 精灵。
推荐阅读
- unity3d - 修复使用 ARCore 在按钮上创建的地面上的家具
- node.js - 使用 pm2 启动时 Mongoose 中的只读属性分配错误
- jsf - 如何将 CASBIN 与 JSF 集成
- azure - 如何在 Azure 数据工厂中将 txt 转换为 csv 文件
- javascript - 我应该如何让我的 jquery 验证器工作?(我认为它不会等待远程规则)
- python - 如何使用 sqlalchemy 在 Web 浏览器上显示 postgresql 数据库表数据?
- php - PHP composer:更新本地路径存储库依赖项
- c# - 如何为包含实体框架代码优先的项目创建设置
- node.js - 使用 AWS Rekognition 和 Lambda 指定要索引的面孔
- spring-boot - 在外部 tomcat 上使用 Spring Boot 配置文件