我不明白为什么 glGetAttribLocation 为我的 in_vertex 和 in_color 返回 0,而不是 0 和 1
我的着色器加载器
void Shader::charger()
{
bool compile_vert_ok;
bool compile_frag_ok;
/* Création et compilation du vertex shader */
_id_vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(_id_vertex_shader, 1, &_vertex_source, &_vertex_source_length);
glCompileShader(_id_vertex_shader);
compile_vert_ok = verif_compil_shader(_id_vertex_shader, "vertex");
/* Création et compilation du fragment shader */
_id_fragme_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(_id_fragme_shader, 1, &_fragme_source, &_fragme_source_length);
glCompileShader(_id_fragme_shader);
compile_frag_ok = verif_compil_shader(_id_fragme_shader, "fragment");
// S'il y a un des deux shader qui n'a pas compiler correctement, on s'en va
if( !(compile_vert_ok && compile_frag_ok))
return;
// On crée le programme GLSL complet qui va contenir le vertex shader et le fragment shader
_id_shader_program = glCreateProgram();
glAttachShader(_id_shader_program, _id_vertex_shader);
glAttachShader(_id_shader_program, _id_fragme_shader);
glBindAttribLocation(_id_shader_program, 0, "in_position");
glBindAttribLocation(_id_shader_program, 1, "in_color");
glBindFragDataLocation(_id_shader_program, 0, "out_color");
glLinkProgram(_id_shader_program);
if(! verif_compil_shader(_id_shader_program, "program"))
exit(-1);
// Spécification et envoie des variables et données au programme GLS
_id_position = glGetAttribLocation(_id_shader_program, "in_position");
_id_color = glGetAttribLocation(_id_shader_program, "in_color");
std::cout << "\ninpos: " << _id_position;
std::cout << "\nincol: " << _id_color << std::endl;
}
我的输出:
inpos: 0
incol: 0
顶点着色器
#version 330 core
// Entrées
in vec3 in_position;
in vec3 in_color;
// Uniform
uniform mat4 mvp;
// Sortie
out vec3 color;
// Fonction main
void main()
{
// Position finale du vertex en 3D
gl_Position = mvp * ( vec4(in_position, 1.0) );
// Envoi de la couleur au Fragment Shader
color = in_color;
}
在这个顶点着色器中,我尝试替换“in vec3 in_position;” 通过“在 vec3 布局(位置 = 0)in_position;”
和
“在 vec3 in_color 中;” 通过“在 vec3 布局(位置 = 1)in_color;”
并删除 glBindAttribLocation 指令;
但我有相同的输出(即 glGetAttribLocation 返回 0)
片段着色器
#version 330 core
// Entrée
in vec3 color;
// Sortie
out vec4 out_color;
// Fonction main
void main()
{
// Couleur finale du pixel
out_color = vec4(color, 1.0);
}
信息:[版本 GLSL:3.30] [版本 OpenGL:3.3(核心配置文件)Mesa 10.2.6]
我在 Debian 杰西
我使用由 Qt5 管理的 OpenGL 核心配置文件上下文
谢谢