rust - wgpu-rs:`线程'main'在'Texture [1]不存在'时惊慌失措'`
问题描述
wgpu::TextureView
我在render
如下方法中创建一个:
let mut encoder = self.device.create_command_encoder(...);
let texture_view = self
.surface
.get_current_frame()?
.output
.texture
.create_view(&wgpu::TextureViewDescriptor::default());
let mut render_pass = encoder.begin_render_pas(&wgpu::RenderPassDescriptor {
color_attachments: &[wgpu::RenderPassColorAttachment {
view: &texture_view,
...
}],
...
})
render_pass.set_/* pipeline, bind_group, vertex_buffer, index_buffer */(...);
render_pass.draw_indexed(...);
self.queue.submit(std::iter::once(encoder.finish()));
但是当我运行程序时,它会恐慌:
thread 'main' panicked at 'Texture[1] does not exist', /home/doliphin/.cargo/registry/src/github.com-1ecc6299db9ec823/wgpu-core-0.10.0/src/hub.rs:129:32
解决方案
这可以通过SurfaceTexture
在 . 之后强制删除来解决TextureView
。
let mut encoder = self.device.create_command_encoder(...);
let surface_texture = self.surface.get_current_frame()?.output; // SurfaceTexture
{
let texture_view = surface_texture
.texture
.create_view(&wgpu::TextureViewDescriptor::default()); // TextureView
let mut render_pass = encoder.begin_render_pas(&wgpu::RenderPassDescriptor {
color_attachments: &[wgpu::RenderPassColorAttachment {
view: &texture_view,
...
}],
...
})
render_pass.set_/* pipeline, bind_group, vertex_buffer, index_buffer */(...);
render_pass.draw_indexed(...);
}
// drop(render_pass);
// drop(texture_view);
self.queue.submit(std::iter::once(encoder.finish()));
// drop(surface_texture)
// drop(encoder)
推荐阅读
- openlayers-6 - 如何更改绘图交互的来源?
- webgl - Webgl - 您可以在片段着色器中写入纹理的任意位置吗?
- asp.net - 如何在运行时使用 ASP.NET 的 WSFederationAuthenticationModule 选择身份提供者
- android - 按下 Home 按钮时,Android 会忘记 Activity BackStack
- python - 在单击下一页时收到 AJAX POST 响应后 DataTable 未刷新
- python - 从命令行使用输入值“python3 app.py virus”运行 python 应用程序
- telegram-bot - pyTelegramBotAPI - 如何创建使用按钮更新的消息?
- arduino - 在 Arduino IR 接收器中接收信号一次
- azure - 处理 Azure Function 中的 HttpStatus 302
- angularjs - 如何设置组标签排序angularjs ui-select group-by