#c #opengl-es
#c #opengl-es
Вопрос:
В настоящее время я использую glClearBuffer*
функции для очистки буферов рисования в проекте, работающем в OpenGL ES 3.0. В документации glClearBuffer указано следующее:
Команды glClearBufferfv, glClearBufferiv и glClearBufferuiv следует использовать для очистки цветовых буферов с фиксированной запятой, целых чисел со знаком и целых чисел без знака соответственно.
Правильно ли я понимаю это следующим образом:
Использовать glClearBufferfv
, если буфер рисования имеет GL_FLOAT
тип
, Использовать glClearBufferiv
, если буфер рисования имеет GL_INT
тип
, Использовать glClearBufferuiv
, если буфер рисования имеет GL_UNSIGNED_INT
тип
Это правильно? Я спрашиваю, потому что нет упоминания (из того, что я могу сказать) о правильном способе очистки буфера отрисовки других типов, таких как GL_BYTE
и GL_UNSIGNED_BYTE
.
Спасибо!
Ответ №1:
fv
Версия должна использоваться для буферов с нормализованными или графическими форматами с плавающей запятой. Версии iv
и uiv
следует использовать для буферов с целочисленными форматами со знаком и без знака.
Это не ограничивает их определенным форматом, а общими категориями форматов. GL_RGBA8UI
является целочисленным форматом без знака, как есть GL_R32UI
.
GL_INT
это не какой-либо формат изображения.
Комментарии:
1. Я знаю
GL_INT
, что это не формат, я не упоминал, что это был один. Но вместо того, чтобы иметь регистр переключения, в котором перечислены все известные форматы, разве нельзя было бы проверить тип формата?2. @Deathicon: » Но вместо того, чтобы иметь регистр переключения, в котором перечислены все известные форматы «, зачем вам его иметь? Вообще говоря, вы знаете, каковы форматы ваших целей рендеринга. В большинстве случаев это жестко запрограммировано в вашем приложении. Итак, зачем вам нужен оператор switch?
3. Это не жестко запрограммировано, в проекте пользователи могут создавать контент с типом объектов рендеринга по мере необходимости.
4. @Deathicon: тогда пользователь должен знать, какой «тип» он создал для цели рендеринга, и, следовательно, сообщить вам, как его следует очистить, когда придет время. Поэтому, если они создают нормализованное изображение или изображение с плавающей запятой, они должны вызвать соответствующую функцию очистки для этого изображения. В конце концов, пользователь должен указать значение для его очистки, поэтому он должен знать, какое значение нужно предоставить.
5. Хорошо, я думаю, я не могу проверить тип , поскольку этой информации недостаточно для вызова правильного
glClearBuffer
, поскольку, напримерGL_R8_SNORM
, нормализован со знаком, ноGL_R8I
имеет подписанный интегральный формат, и оба имеютGL_BYTE
тип, но требуютfv
иiv
соответственно.