Для спецификации OpenGL требуется, чтобы фреймбуфер поддерживал не менее 8 цветных вложений. Теперь OpenGL использует константы времени компиляции (по крайней мере, в моей системе), для таких вещей, как GL_COLOR_ATTACHMENTi
и GL_DEPTH_ATTACHMENT
, приложение следует за 32 единицами после GL_COLOR_ATTACHMENT0
. Разве это не означает, что независимо от того, насколько мудрено аппаратное обеспечение, никогда не будет возможно использовать более 32 цветных вложений? Чтобы уточнить, это компилируется отлично с GLEW на Ubuntu 16.04:Является ли количество вложений цветов ограниченным API
static_assert(GL_COLOR_ATTACHMENT0 + 32==GL_DEPTH_ATTACHMENT,"");
и так как это static_assert, это будет справедливо для любой конфигурации аппаратных средств (если установщик драйвера не изменять файлы заголовков, что приведет к непереносимой двоичные файлы). Разделять функции для разных классов привязки было бы лучше, поскольку это устраняет возможность сталкивающихся констант?
* Нет ничего о COLOR_ATTACHMENTm = COLOR_ATTACHMENT0 + m. * Ух ... нет, есть. Проверьте спецификацию 4.5, стр. 288, §9.2: * Каждый 'COLOR_ATTACHMENTi' придерживается' COLOR_ATTACHMENTi = COLOR_ATTACHMENT0 + i' * – peppe
@peppe: достаточно. Но сама функция * * не говорит, что она может принимать значения, отличные от этих счетчиков. Напротив, 'glActiveTexture' * явно * позволяет вам предоставлять значения, которые не являются фактическими счетчиками. –