2012-02-22 2 views
4

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

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

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

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

ответ

5

Нет, нет.

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

+0

Спасибо! Это то, с чем я пошел. Было бы неплохо, если бы это могло стать функцией GLSL в будущем! –

13

FYI:

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

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

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

+0

@OP Итак, ваше решение по проверке определенного «не включенного» значения может быть адаптировано для использования значения, отличного от 0, которое не является «реальным» значением атрибута, которое могло бы произойти иначе, просто установив «glVertexAttrib» к этому значению. Таким образом, вам не требуется дополнительное логическое значение. –

+0

О! Функция 'glVertexAttrib' устанавливает значение, которое будет использоваться для каждой вершины? Так, например, если я назвал 'glVertexAttrib1f (3, -1.0f)', то все атрибуты вершин в местоположении 3 были бы установлены равными -1.0f? –

+0

@JamesBedford: Да. Если этот атрибут не включен. –

Смежные вопросы