Суть такова:
Портирую 3д игрушку под планшет, столькнулся с проблемой. Для применения пост-эффектов мне нужно отрендерить сценку в текстуру, размера с экран.
Создаю FBO, прикрепляю к нему текстуру scrW*scrH и Render Buffer Object такового же размера, статус:
Galaxy Tab - GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS <- wtf?
HTS(мобилка) - GL_FRAMEBUFFER_COMPLETE
Дальше интересней: считаем ближайшую сверху стень двойки для scrW, scrH: potW, potH. Прикрепляем текстуру scrW*scrH, а RBO - potW*potH
Galaxy Tab - GL_FRAMEBUFFER_COMPLETE <- WAT?
HTS(мобилка) - GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS <- ну, логично
Если делать и тектуру, и RBO как степень двойки - GL_FRAMEBUFFER_COMPLETE, на каждом устройстве.
Вопрос что делать? При запуске проверять поддержку обоих варантов? Или можно как-то проще?
API: OpenGL ES 2.0
Try
> Вопрос что делать? При запуске проверять поддержку обоих варантов? Или можно
> как-то проще?
Скорее всего проще не получится, разные железки - разные драйвера ...
Try
> Прикрепляем текстуру scrW*scrH, а RBO - potW*potH
Так нельзя, должны быть одинаковые. Galaxy Tab по ошибке это прожёвывает, не верь ему :)
Что касается
> GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS <- wtf?
при NPOT текстуре - ей должны (обязаны) быть выставлены GL_CLAMP_TO_EDGE и min/mag фильтрация GL_NEAREST или GL_LINEAR. У тебя так?
ALPINE
Фильтрация - точно NEAREST. Клампинг - пойду проверю...
>Так нельзя, должны быть одинаковые. Galaxy Tab по ошибке это прожёвывает, не верь ему
Я знаю, что так нельзя, но почему-то работает(есть картинка, есть glow, работает bloom) :)
Настроил клампинг:безрезультатно.
Роман Шувалов
> при NPOT текстуре - ей должны (обязаны) быть выставлены GL_CLAMP_TO_EDGE и
> min/mag фильтрация GL_NEAREST или GL_LINEAR. У тебя так?
С чего ты взял этот бред?
>С чего ты взял этот бред?
Это не бред. В OpenGL ES 2.0 npot текстуры поддерживаются с ограничениями. Хотя я конечно не понимаю, почему нельзя делать GL_REPEAT. Ведь в шейдерах никто не запрещает делать mod над текстурными координатами, чтобы получить то же самое, только линейная фильтрация на краях будет неправильно работать.
SNVampyre
> С чего ты взял этот бред?
Спецификация GL ES 2.0, стр. 81, пункт 3.7.7
<...>
Non-power-of-two textures have restrictions on the allowed texture wrap modes and filters, as described in section 3.8.2
<...>
стр. 87-88, пункт 3.8.2
Calling a sampler from a fragment shader will return (R;G;B;A) = (0;0;0;1) if any of the following conditions are true:
- <...>
- A two-dimensional sampler is called, the corresponding texture image is a non-power-of-two image (as described in the Mipmapping discussion of section 3.7.7), and either the texture wrap mode is not CLAMP_TO_EDGE, or the minification filter is neither NEAREST nor LINEAR.
- <...>
Итого, для NPOT текстур обязательны:
- wrap mode == CLAMP_TO_EDGE
- min filter == NEAREST или LINEAR
Если хотя бы одно из этих условий не выполняется, система согласно спецификации должна выдать чёрный цвет. Ещё вопросы? :)
Тема в архиве.