C++ 为什么我的GLGetAttributeLocation为位置和颜色返回0

C++ 为什么我的GLGetAttributeLocation为位置和颜色返回0,c++,opengl,glsl,qt5.4,C++,Opengl,Glsl,Qt5.4,我不明白为什么GLGetAttriblLocation为我的in_顶点和in_颜色返回0,而不是0和1 我的着色器加载程序 void着色器::充电器 { bool编译_vert_ok; bool compile_frag_ok; /*顶点着色器的Création et编译*/ _id_vertex_shader=glCreateShaderGL_vertex_shader; glShaderSource_id_vertex_着色器,1,&_vertex_source,&_vertex_sourc

我不明白为什么GLGetAttriblLocation为我的in_顶点和in_颜色返回0,而不是0和1

我的着色器加载程序 void着色器::充电器 { bool编译_vert_ok; bool compile_frag_ok; /*顶点着色器的Création et编译*/ _id_vertex_shader=glCreateShaderGL_vertex_shader; glShaderSource_id_vertex_着色器,1,&_vertex_source,&_vertex_source_length; glCompileShader_id_vertex_着色器; compile_vert_ok=verif_compile_shader_id_vertex_shader,vertex; /*片段着色器的Création et编译*/ _id_fragme_shader=glCreateShaderGL_FRAGMENT_shader; glShaderSource_id_fragme_着色器,1,&_fragme_source,&_fragme_source_length; glCompileShader_id_fragme_着色器; compile\u frag\u ok=verif\u compile\u shader\u id\u fragme\u shader,fragment; //S'il y a un des deux shader qui n'a pas编译器更正,在S'en va上 如果!编译\u vert\u ok和编译\u frag\u ok 回来 //关于crée le程序GLSL complett qui va contenir le vertex shader et le fragment shader _id_shader_program=glCreateProgram; glAttachShader_id_shader_程序,_id_vertex_shader; glAttachShader_id_shader_程序,_id_fragme_shader; glBindAttribLocation\u id\u着色器\u程序,0,在\u位置; glBindAttribLocation_id_shader_程序,1,以_颜色显示; glBindFragDataLocation_id_shader_program,0,out_color; glLinkProgram\u id\u shader\u program; if!verif_compile_shader_id_shader_程序,程序 出口-1; //规范和环境变量和时间计划GLS _id\u position=glGetAttributeLocation\u id\u shader\u程序,在\u位置; _id_color=glGetAttributeLocation_id_shader_程序,以_颜色显示;
我看到的唯一问题是行if!verif_compile_shader_id_shader_program,program。我不知道这个函数实际上做了什么,但是检查着色器的编译状态和日志与检查程序的链接状态是不同的。但是,你的着色器实际上应该编译和链接很好,所以我看不到任何解决方法你得到的行为。问题可能在于你没有粘贴的代码部分。我已经修复了link程序的检查日志,使用一个新的函数check_link_程序,我用glGetProgramiv检查GL_link_程序,这是GL_true,所以link程序正如你所说的那样很好。这是首先运行的代码,我在我的程序中加载带有这些函数的着色器场景构造器
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;
}
#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);
}