为什么我的glGetAttribLocation返回0表示位置和颜色

时间:2015-02-21 17:37:06

标签: c++ opengl glsl qt5.4

我不明白为什么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;
}

在这个顶点着色器中,我试图替换 &#34;在vec3 in_position;&#34; 通过 &#34;在vec3布局(location = 0)in_position;&#34;

&#34;在vec3 in_color;&#34; 通过 &#34;在vec3布局(位置= 1)in_color;&#34;

并删除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 jessie身上

我使用由Qt5管理的OpenGL核心配置文件上下文

谢谢你

0 个答案:

没有答案