我希望合并一个每个顶点不同的自定义属性。在这种情况下,它被分配给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
}
答案 0 :(得分:3)
由于vertexTexUnit
属性是整数,因此您必须使用glVertexAttribIPointer()
而不是glVertexAttribPointer()
。
您可以根据需要使用顶点属性。 OpenGL不知道或不关心你使用它们的是什么。