Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Igors от Декабрь 19, 2010, 14:57



Название: OpenGL POT (без "с") [решено]
Отправлено: Igors от Декабрь 19, 2010, 14:57
Добрый день

Прошу прощения за тупой вопрос (чисто на конкретные знания): как определить карта поддерживает произвольный размер текстуры или только POT - "Power of Two" (32, 64. 256 и.т.п)  ? Конечно гуглю но пока без успеха

Спасибо


Название: Re: OpenGL POT (без "с")
Отправлено: xop от Декабрь 20, 2010, 15:09
Ну, если OpenGL 3.0 и выше драйвером держится - то можно автоматически. Может и ниже можно, точно версию не помню, можно посмотреть на сайте opengl.org. Еще можно ориентироваться на расширения:
1) если есть NV/ARB_texture_rectangle, значит можно создавать специальные текстуры GL_TEXTURE_RECT. Они двумерные, не NPOT, не могут иметь мипмапов.
2) если есть ARB_texture_non_power_of_two, значит обычные текстуры GL_TEXTURE_2D могут иметь npot размер

Ну и чтобы не насиловать гугль - рекомендую ходить вот по этому адресу: http://www.opengl.org/registry/
Там есть спецификации OpenGL и всех официально зарегистрированных расширений с момента появления этого самого OpenGL :)


Название: Re: OpenGL POT (без "с")
Отправлено: xop от Декабрь 21, 2010, 22:27
Апдейт :) Специально посмотрел в спецификации - ARB_texture_non_power_of_two перешла в ядро начиная с версии 2.0. Так что их должны держать практически все карточки начиная где-то с 2003-2004 года выпуска. Хотя активно пользоваться ими не рекомендуют, разве что для рендер таргетов.


Название: Re: OpenGL POT (без "с") [решено]
Отправлено: Igors от Декабрь 22, 2010, 12:13
Понял, спасибо xop
Решается через

const GLubyte * ext = glGetString(GL_EXTENSIONS);

Затем в возвращенной строке ищем GL_ARB_texture_non_power_of_two. Если есть - поддерживается


Название: Re: OpenGL POT (без "с") [решено]
Отправлено: xop от Декабрь 22, 2010, 13:44
Ну вообще-то если glGetIntegerv( GL_MAJOR_VERSION, &majorVersion ) записала в majorVersion 2 или выше, то автоматом можно считать, что поддерживаются. Более того, писатели драйверов вполне имеют право в этом случае не экспортировать в явном виде расширение texture_non_power_of_two. Так что имхо лучше сначала проверить версию, и если она ниже 2, то уже проверять наличие расширения.