glVertexAttribpointer仅用于顶点,UV,颜色和法线吗?没有其他的?

时间:2015-08-22 07:09:15

标签: opengl glsl

我希望合并一个每个顶点不同的自定义属性。在这种情况下,它被分配给location = 4 ...但没有任何反应,其他四个属性正确地变化,除了那个。在底部,我添加了一个测试来生成一个特定的颜色,如果它遇到值'1'(我知道存在于缓冲区中,因为我之前查询过缓冲区)。属性4停留在其数组的第一个值,并且永远不会移动。

我错过了一个设置吗? (可能会启用哪些东西?)或者openGL只会改变少数几个属性而不是其他什么?

#version 330 //for openGL 3.3

//uniform variables stay constant for the whole glDraw call
uniform mat4  ProjViewModelMatrix;
uniform vec4  DefaultColor;  //x=-1 signifies no default color

//non-uniform variables get fed per vertex from the buffers
layout (location=0) in vec3 coords;       //feeding from attribute=0 of the main code
layout (location=1) in vec4 color;        //per vertex color, feeding from attribute=1 of the main code
layout (location=2) in vec3 normals;      //per vertex normals
layout (location=3) in vec2 UVcoord;      //texture coordinates
layout (location=4) in int  vertexTexUnit;//per vertex texture unit index

//Output
out vec4 thisColor;
out vec2 vertexUVcoord;
flat out int  TexUnitIdx;

void main ()
{
    vertexUVcoord = UVcoord;
    TexUnitIdx=vertexTexUnit;

    if (DefaultColor.x==-1) {thisColor = color;} //If no default color is set, use per vertex colors
    else {thisColor = DefaultColor;}

    gl_Position = ProjViewModelMatrix * vec4(coords,1.0); //This outputs the position to the graphics card.

    //TESTING
    if (vertexTexUnit==1) thisColor=vec4(1,1,0,1); //Never receives value of 1, but the buffer does contain such values
}

1 个答案:

答案 0 :(得分:3)

由于vertexTexUnit属性是整数,因此您必须使用glVertexAttribIPointer()而不是glVertexAttribPointer()

您可以根据需要使用顶点属性。 OpenGL不知道或不关心你使用它们的是什么。