почему мой glGetAttribLocation возвращает 0 для позиции и цвета

Я не понимаю, почему glGetAttribLocation возвращает 0 для моего in_vertex и in_color вместо 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;
}

В этом вершинном шейдере я пытаюсь заменить
«в vec3 in_position;»
«в макете vec3 (location = 0) in_position;»

а также

«в vec3 in_color;»
«в макете vec3 (location = 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 Джесси

Я использую контекст профиля ядра OpenGL, управляемый Qt5

Спасибо вам

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]