У меня есть следующий вершинный шейдер GLSL:
attribute vec3 a_vTangent;
attribute vec3 a_vBinormal;
attribute vec2 a_vCustomParams;
varying vec3 i_vTangent;
varying vec3 i_vBinormal;
varying vec4 i_vColor;
varying vec2 i_vCustomParams;
void main()
{
i_vTangent = a_vTangent;
i_vBinormal = a_vBinormal;
i_vColor = gl_Color;
//i_vCustomParams = a_vCustomParams;
gl_Position = gl_Vertex;
}
Если я раскомментирую строку i_vCustomParams = a_vCustomParams;
, больше ничего не отрисовывается с помощью этого шейдера, больше не рисует, нет ошибок GL, нет ошибок компиляции шейдера или ссылки.Это удивляет меня, поскольку геометрический шейдер еще даже не использует i_vCustomParams, и, кроме того, два других атрибута вершины (a_vTangent
и a_vBinormal
) работают отлично.
Я знаю, что это правильно, но при условииВо всяком случае, моя установка вершины
layout = new VertexLayout(new VertexElement[]
{
new VertexPosition(VertexPointerType.Short, 3),
new VertexAttribute(VertexAttribPointerType.UnsignedByte, 2, 3), //2 elements, location 3
new VertexColor(ColorPointerType.UnsignedByte, 4),
new VertexAttribute(VertexAttribPointerType.Byte, 4, 1), //4 elements location 1
new VertexAttribute(VertexAttribPointerType.Byte, 4, 2), //4 elements, location 2
});
для этой структуры вершины:
struct CubeVertex : IVertex
{
public ushort3 Position;
public byte2 Custom;
public byte4 Color;
public sbyte4 Tangent;
public sbyte4 Binormal;
}
Есть идеи, почему это происходит?