我发现接受索引缓冲区的唯一方法是:
let (vbuf, slice) = factory.create_vertex_buffer(&verts, &indices);
这会创建一个新的缓冲区,我不能每帧都这样做。
我可以用encoder.update_buffer(&buf, &data, offset)
更新顶点缓冲区,但我不知道如何更新索引缓冲区。
答案 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>
是T
或u16