ПрограммированиеФорумГрафика

OpenGL ES, FBO

#0
21:11, 28 мар 2013

Суть такова:
Портирую 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

#1
21:56, 28 мар 2013

Try
> Вопрос что делать? При запуске проверять поддержку обоих варантов? Или можно
> как-то проще?

Скорее всего проще не получится, разные железки - разные драйвера ...

#2
23:04, 28 мар 2013

Try
> Прикрепляем текстуру scrW*scrH, а RBO - potW*potH
Так нельзя, должны быть одинаковые. Galaxy Tab по ошибке это прожёвывает, не верь ему :)

Что касается
> GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS <- wtf?
при NPOT текстуре - ей должны (обязаны) быть выставлены GL_CLAMP_TO_EDGE и min/mag фильтрация GL_NEAREST или GL_LINEAR. У тебя так?

#3
23:30, 28 мар 2013

ALPINE
Фильтрация - точно NEAREST. Клампинг - пойду проверю...

>Так нельзя, должны быть одинаковые. Galaxy Tab по ошибке это прожёвывает, не верь ему
Я знаю, что так нельзя, но почему-то работает(есть картинка, есть glow, работает bloom) :)

#4
0:11, 29 мар 2013

Настроил клампинг:безрезультатно.

#5
16:00, 6 апр 2013

Роман Шувалов
> при NPOT текстуре - ей должны (обязаны) быть выставлены GL_CLAMP_TO_EDGE и
> min/mag фильтрация GL_NEAREST или GL_LINEAR. У тебя так?
С чего ты взял этот бред?

#6
18:42, 6 апр 2013

>С чего ты взял этот бред?
Это не бред. В OpenGL ES 2.0 npot текстуры поддерживаются с ограничениями. Хотя я конечно не понимаю, почему нельзя делать GL_REPEAT. Ведь в шейдерах никто не запрещает делать mod над текстурными координатами, чтобы получить то же самое, только линейная фильтрация на краях будет неправильно работать.

#7
23:03, 6 апр 2013

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

Если хотя бы одно из этих условий не выполняется, система согласно спецификации должна выдать чёрный цвет. Ещё вопросы? :)

ПрограммированиеФорумГрафика

Тема в архиве.