遇到这种情况是在使用OpenGL编写
问题在于
我目前的解决方案是手动放置一个未使用的引用:
在更复杂的情况下,引用可能会变得必要,但感觉不够优雅且浪费资源。具有多个VBO的VAO可以使用引用的数组/向量来实现。在创建VAO之后能够更改相关缓冲区也可能增加此要求。
是否有任何方法可以在没有引用的情况下实现相同的行为?或者,由于编译器可以识别出引用从未被使用并发出警告,因此它是否会被优化掉?
VertexBuffer
和VertexArray
的struct
时。每个结构实质上都是一个单独的GLuint
,用于引用OpenGL对象。在最简单的情况下,VertexArray
恰好与一个VertexBuffer
相关联。问题在于
VertexArray
的生命周期不能超过其关联的VertexBuffer
。然而,Rust并不知道这一点,因为VertexArray
所持有的引用是内部OpenGL的,因此它会在一个现有的VertexArray
引用它的同时调用VertexBuffer
上的析构函数,这样会出现问题。我目前的解决方案是手动放置一个未使用的引用:
struct VertexArray<'a> {
id: GLuint,
#[warn(dead_code)]
vbo: &'a VertexBuffer
}
在更复杂的情况下,引用可能会变得必要,但感觉不够优雅且浪费资源。具有多个VBO的VAO可以使用引用的数组/向量来实现。在创建VAO之后能够更改相关缓冲区也可能增加此要求。
是否有任何方法可以在没有引用的情况下实现相同的行为?或者,由于编译器可以识别出引用从未被使用并发出警告,因此它是否会被优化掉?