Линия

glActiveTexture(GL_TEXTURE0+32);

Выбрасывает GL_INVALID_ENUM (как я обнаружил при запуске glGetError ()), а

glActiveTexture(GL_TEXTURE0+31);

Работает нормально.

Согласно документации:

«GL_INVALID_ENUM создается, если текстура не является одной из GL_TEXTUREi, где i изменяется от нуля до значения GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS минус один».

Но в моем случае GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS определяется как 35661 и согласно той же документации

«Количество текстурных блоков зависит от реализации, но должно быть не менее 80».

Как я мог решить эту проблему?

На всякий случай GL_TEXTURE0 определен как 33984, а моя версия OpenGL - 2.1.

2
Matias Morant 17 Апр 2014 в 13:03

2 ответа

Лучший ответ

GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS можно определить как 35661, но это не то, что вам нужно, это значение перечисления (то же самое, что GL_TEXTURE0 определяется как 33984). Эти ценности вообще не имеют значения.

Вы получите число, запросив glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &texture_units);, который вернет количество текстур, которые вы можете использовать. Очень вероятно, что на OpenGL 2.1 hw будет 32.

5
Jaa-c 17 Апр 2014 в 09:11

Документация немного вводит в заблуждение. Они означают значение, полученное

glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, ...)

Не стоимость самого токена.

4
datenwolf 17 Апр 2014 в 09:10