如何在gfx-rs中处理更新索引缓冲区?

时间:2017-12-25 19:43:53

标签: graphics rust

我发现接受索引缓冲区的唯一方法是:

let (vbuf, slice) = factory.create_vertex_buffer(&verts, &indices);

这会创建一个新的缓冲区,我不能每帧都这样做。

我可以用encoder.update_buffer(&buf, &data, offset)更新顶点缓冲区,但我不知道如何更新索引缓冲区。

1 个答案:

答案 0 :(得分:0)

您可以使用创建顶点缓冲区的localStorage.getItem("fontSize")更新索引缓冲区。

切片具有一个公用字段slice.buffer,它代表索引缓冲区本身,尽管这是gfx::IndexBuffer而不是gfx::handle::Buffer,这是调用{{3 }}。

为了获取基础缓冲区,请在slice上与您创建的类型进行匹配,如下所示:

IndexBuffer

其中只有一种会在运行时匹配,具体取决于创建顶点缓冲区时选择的索引缓冲区。

match &slice.buffer { // On `Auto`, there is no index buffer gfx::IndexBuffer::Auto => ..., // On `Index16`, the indices are `u16` gfx::IndexBuffer::Index16(buffer) => ..., // On `Index32`, the indices are `u32` gfx::IndexBuffer::Index32(buffer) => ..., } Index16情况下,Index32将是buffer,其中gfx::handle::Buffer<R, T>Tu16