Подтвердить что ты не робот

OpenGL bool uniform?

Я пытаюсь отправить логическое значение в шейдер OpenGL glsl.

В настоящее время у меня это в шейдере:

uniform bool foo;

И я использую это, чтобы установить его:

glUniform1i(glGetUniformLocation(shader, "foo"), true);

Кажется, что нет glUniform1b, поэтому я устанавливаю его как целое число. Кажется, что это нормально.

Есть ли какие-либо проблемы с этим подходом? Является ли он переносимым или может быть поврежден на других видеокартах/драйверах? Я использую OpenGL 4.3 на данный момент.

4b9b3361

Ответ 1

§ 4.1 Основные типыЯзык затенения OpenGL поддерживает следующие основные типы данных, сгруппированные следующим образом:

  • bool условный тип, принимающий значения true или false
  • bvec2 двухкомпонентный булев вектор
  • bvec3 трехкомпонентный булев вектор
  • bvec4 четырехкомпонентный булев вектор

...

§ 4.1.2 Логические Чтобы упростить выражение для условного выполнения кода, поддерживается тип bool. Нет никакого ожидания, что аппаратное обеспечение напрямую поддерживает переменные этого типа. (...)

Что касается установки:

§ 2.2.1 (...) Когда значения состояния задаются с использованием другого типа параметра, чем фактический тип этого состояния, преобразования данных выполняется следующим образом:

  • Когда тип внутреннего состояния является логическим, значения с нулевым целым или с плавающей запятой преобразуются в FALSE, а ненулевые значения преобразуются в TRUE.