我在 OpenGL 中有这个着色器:
#version 440
in vec3 pos;
in vec3 col;
out vec4 vertexColor;
void main()
{
gl_Position = vec4(pos, 1.0);
vertexColor = vec4(col, 1.0);
}
我尝试使用 GetAttribLocation 获取他们的位置。
let position_attr = gl::GetAttribLocation(shader_program, "pos".as_ptr() as *const i8);
let color_attr = gl::GetAttribLocation(shader_program, "col".as_ptr() as *const i8);
我得到这个输入:
4294967295 (-1 unsigned)
1
为了理解问题,我制作了这两个功能。
unsafe fn check_active_atributes(shader_program: u32){
let mut count = 0;
gl::GetProgramiv(shader_program, gl::ACTIVE_ATTRIBUTES, &mut count);
println!("Number of active attributes: {}", count);
}
fn print_active_attributes(program: gl::types::GLuint) {
let mut num_active_attrs = 0;
unsafe {
gl::GetProgramiv(program, gl::ACTIVE_ATTRIBUTES, &mut num_active_attrs);
}
println!("Active attributes:");
for i in 0..num_active_attrs {
let mut name: [u8; 256] = [0; 256];
let mut length = 0;
let mut size = 0;
let mut gl_type = 0;
unsafe {
gl::GetActiveAttrib(
program,
i as gl::types::GLuint,
256,
&mut length,
&mut size,
&mut gl_type,
name.as_mut_ptr() as *mut gl::types::GLchar,
);
}
let name_str = std::str::from_utf8(&name[..length as usize]).unwrap();
println!("- {}.", name_str);
}
}
这是他们打印的内容:
Number of active attributes: 2
Active attributes:
- pos.
- col.
着色器编译正常,不会返回任何错误或警告。有什么想法吗?