OpenGL vers >=2.0 требует, чтобы размеры текстуры были кратны 4 пикселям?

Я работаю над приложением Mac, использующим текстуры OpenGL, которые я загружаю из файлов изображений на диске, используя glTexImage2D.

Согласно документации, для версий OpenGL>= 2.0, текстуры могут быть любого произвольного размера. (для версий <2.0 размеры x и y должны быть степенью 2.)

Однако я получаю плохие текстуры, если размеры моего изображения не кратны 4. Я искал и искал, но не могу найти документацию по этому требованию. На самом деле, "красная книга" прямо заявляет, что размеры текстуры могут быть любым значением для версии>= 2.0.

Что мне не хватает?

И есть ли выигрыш в производительности для преобразования текстуры в следующее по величине измерение степени двойки? Моему приложению потребуется Mac OS 10.6.6 или более поздней версии, которая должна работать на любом Intel Mac. Некоторые из ранних моделей Intel имели очень "скромное" графическое оборудование.

Любая помощь будет принята с благодарностью.

2 ответа

Ограничение на обычные текстуры с размерами, равными степеням 2, сохраняется в версиях OpenGL>= 2. Однако поддерживается новый текстурный объект GL_TEXTURE_RECTANGLE, который поддерживает произвольные размеры, но не выполняет мипмапинг.

Нет ограничений на размерность, кратную 4, однако я подозреваю, что у вас могут быть установлены параметры glPixelStore(GL_UNPACK...), возможно, установленные другими частями программы, которые вызывают такое поведение.

В каком формате ваши текстуры? Сжатые форматы текстур S3TC работают с плитками 4x4, поэтому могут не работать или могут иметь визуальные артефакты, если размеры не кратны 4.

Другие вопросы по тегам