Можете ли вы сказать, включен ли атрибут вершины из вершинного шейдера? - PullRequest
6 голосов
/ 23 февраля 2012

Мне было интересно, есть ли способ узнать, включен ли атрибут вершины из вершинного шейдера? Я знаю, что если атрибут вершины отключен, все значения будут обрабатываться как 0.0, поэтому я мог бы сделать тест, подобный следующему:

if (attribute == 0)
{
    // Do something different to normal.
}
else
{
    // Use the attribute.
}

Но это имеет очевидную проблему для случая, когда атрибут включен, а значение просто установлено в 0 (оно будет рассматриваться как отключенное)!

Другим решением было бы просто использовать унифицированную переменную, которая указывает, использовать ли атрибут или нет, но я задавался вопросом, есть ли что-нибудь встроенное в GLSL, которое бы это делало?

Ответы [ 2 ]

15 голосов
/ 23 февраля 2012

FYI:

Я знаю, что если атрибут вершины отключен, все значения будут обрабатываться как 0.0, поэтому я мог бы провести тест, подобный следующему:

Это не правда. Если атрибут отключен, его значение поступает из обычного состояния OpenGL. А именно, состояние, установленное функциями glVertexAttrib. Поэтому вполне законно, что такие виды «постоянных атрибутов» отправляются шейдерам.

Вот почему у API нет возможности для шейдера определить, отключен ли атрибут. Атрибут «disabled» может все еще содержать значимые данные.

5 голосов
/ 23 февраля 2012

Нет, нет.

Передайте булеву форму, чтобы подражать ей.

...