gl::GetAttribLocation() 返回 -1 尽管该属性被列为活动属性?

问题描述 投票:0回答:0

我在 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.

着色器编译正常,不会返回任何错误或警告。有什么想法吗?

opengl rust glsl
© www.soinside.com 2019 - 2024. All rights reserved.