Допустим, у меня есть функция, где я хочу, чтобы пользователь мог выбрать подходящую текстуру безопасным типом. Поэтому вместо использования GLenum GL_TEXTUREX я определяю метод следующим образом.Как получить максимальное количество мультитекстурированных единиц
void activate_enable_bind(uint32_t texture_num) {
const uint32_t max_textures = GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS - GL_TEXTURE0;
const uint32_t actual_texture = (GL_TEXTURE0 + texture_num);
if (texture_num > max_textures) {
throw std::runtime_error("ERROR: texture::activate_enable_bind()");
}
glActiveTexture(actual_texture);
glEnable(target_type);
glBindTexture(target_type, texture_id_);
}
это Гарантируется ли работать при всех реализаций на основе спецификации OpenGL, или исполнители разрешено иметь
`GL_TEXTURE0 - GL_TEXTURE(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS -1)`
определяется в несмежных образом?
Я модифицируя свой код как хорошо здесь в том, что у меня есть:
void activate_enable_bind(uint32_t texture_num = 0) {
GLint max_textures = 0;
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &max_textures);
if (static_cast<GLint>(texture_num) > max_textures - 1) {
throw std::runtime_error("ERROR: texture::activate_enable_bind()");
}
const uint32_t actual_texture = (GL_TEXTURE0 + texture_num);
glActiveTexture(actual_texture);
glEnable(target_type);
glBindTexture(target_type, texture_id_);
}
Это, если неверно, если texture_num не начинается с 1 до n. – Trax
ошибка забора забора, модульные тесты поймали бы это. Но хороший глаз. –
Если вы измените свой заголовок на что-то вроде «Как получить максимальное количество мультитекстурированных единиц», этот пост может быть более полезным для других. – Trax