我想使用glVertexAttribPointer()給我的頂點着色器一些數據。問題是,它的第一屬性的工作只有...glVertexAttribPointer()只適用於第一個流
這裏是我的OpenGL代碼:
struct Flag_vertex
{
GLfloat position_1[ 8 ];
GLfloat position_2[ 8 ];
};
Flag_vertex flag_vertex;
... // fill some data to flag_vertex
GLuint vertexbuffer_id;
glGenBuffers(1, &vertexbuffer_id);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer_id);
glBufferData(GL_ARRAY_BUFFER, sizeof(flag_vertex), &flag_vertex, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer_id);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)offsetof(Flag_vertex, position_1));
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)offsetof(Flag_vertex, position_2));
和我着色器是一樣的東西:
#version 420 core
layout(location = 0) in vec2 in_position_1;
layout(location = 1) in vec2 in_position_2;
out vec2 texcoord;
void main()
{
gl_Position = vec4(in_position_X, 0.0, 1.0);
texcoord = in_position_X * vec2(0.5) + vec2(0.5);
}
如果我使用「in_position_1 「我的紋理RENDERS PERFECTLY,但如果我使用in_position_2沒有任何反應...
提示:在鏈接我的着色器之前我在做:
glBindAttribLocation(programID, 0, "in_position_1");
glBindAttribLocation(programID, 1, "in_position_2");
爲什麼它只適用於第一個流?我需要更多的數據到我的頂點......我需要發送顏色等......任何提示?
你是否啓用了兩個頂點屬性?順便說一句,如果在着色器中使用佈局限定符,則不需要使用'glBindAttribLocation'。 – radical7
哦,是的,當然...我忘記寫了...我使用glEnableVertexAttribArray(0)和glEnableVertexAttribArray(1)之前...我會更新它。 –
如果您切換佈局ID(即,in_position_1 - > 1,in_position_2 - > 0),做事情的工作方式不同嗎? – radical7