我目前正在用 Rust 开发一个简单的程序,在屏幕上绘制一个彩色三角形。我按照OpenGL 的说明进行操作。我的程序运行良好,三角形按预期呈现:
之后,我尝试抽象代码: 和VAO成为VBO处理ShaderProgram绑定、附加着色器等的结构。那行得通。现在解决问题:
当我尝试抽象属性时遇到了问题。我将这两个方法添加到结构中ShaderProgram,它们应该处理属性的启用,而不必对诸如步幅或属性在向量中的位置开始的指针之类的内容进行硬编码。
pub fn add_attribute(&mut self, name: &'a str, length: i32) {
let mut props = VertexAttributeProps::new(name, length);
self.attributes.push(props);
}
pub fn apply_attributes(&self) {
const GL_FLOAT_SIZE: i32 = mem::size_of::<gl::types::GLfloat>() as i32;
let stride = self
.attributes
.iter()
.fold(0, |prev, attr| prev + attr.length)
* GL_FLOAT_SIZE;
let mut current_pos: i32 = 0;
for attr_options in self.attributes.iter() {
// println!("{:?}", current_pos);
unsafe {
let attribute = VertexAttribute::new( …Run Code Online (Sandbox Code Playgroud)