В моей 2D игре мне нужны текстуры, которые могут быть сколь угодно большими, могут быть NPOT и не квадратными.
Они только когда-либо отображаются на один вид примитива: прямоугольники через GL_QUADS (четыре угла QUAD отображаются на четыре угла текстуры). Иногда матрица текстуры масштабируется перед рисованием.
Я хочу, чтобы моя игра работала везде, даже на старых / дешевых видеокартах, которые допускают только небольшие и / или POT-текстуры.
Какое решение я должен использовать? Стоит ...
- Простота реализации
- Очень хорошая производительность.
В настоящее время мне известны следующие опции:
Используйте расширение , как GL_TEXTURE_RECTANGLE_{EXT,NV,ARB}
, чтобы NPOT работал на картах, которые не поддерживают собственные текстуры NPOT OGL2.0.
- это не решает проблему "большой текстуры".
- работает ли оно на максимальном количестве ПК? видеокарты, которые поддерживают OGL2.0 NPOT, также поддерживают эти расширения?
- Какой из трех вариантов EXT / NV / ARB использовать?
Реализуйте BigTextures в виде набора маленьких кусочков текстуры POT, которые тщательно рисуются на нескольких смежных квадроциклах. Это обеспечивает "большие текстуры" и NPOT, но это немного сложно и ограничивает.
- Реализуйте мои текстуры NPOT как текстуры POT, дополненные прозрачностью справа и снизу. Это приведет к потере памяти и затруднит разбиение текстур, и это не решит проблему «больших текстур».
- Используйте готовый раствор.
Примером проблемной видеокарты является набор микросхем Intel® 945GM Express для мобильных ПК , который, похоже, не поддерживает встроенный NPOT.
Обновление : В итоге я выбрал третий вариант. Круто, я смог использовать glTexSubImage2D, а не заполнять текстуру вручную. Это безумно быстро. Да, он не обеспечивает поддержку «больших текстур», но я понял, что мои целевые графические процессоры поддерживают до 2048x2048, что достаточно для меня. Да, и GL_TEXTURE_RECTANGLE_EXT даже не поддерживается на мобильных чипсетах Intel® 945GM Express .