Russian Qt Forum
Октябрь 04, 2024, 18:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как одну текстуру обработать 2 шейдерами?  (Прочитано 4763 раз)
RomanKravchenko
Гость
« : Сентябрь 20, 2012, 15:56 »

Стоит задача: есть два фрагментных шейдера, которые создают два разных эффекта для текстуры. Как в программе применить эти оба шейдера к одной текстуре?
Записан
mitrich
Гость
« Ответ #1 : Сентябрь 20, 2012, 17:27 »

Отрисовать сначала с первым шейдером, затем со вторым, включив смешивание.
См. glEnable(GL_BLEND), glBlendFunc.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Сентябрь 20, 2012, 17:54 »

Или сделать из двух шейдеров один (сложнее но возможностей больше)
Записан
RomanKravchenko
Гость
« Ответ #3 : Сентябрь 20, 2012, 21:11 »

Или сделать из двух шейдеров один (сложнее но возможностей больше)

Я уже так думал - не вариант. Нужно вторым шейдером проходить по новых значениях пикселей. Как вариант пробую с QGlFramebufferObject: прохожу первым шейдером по начальной текстуре и отрисовую её в буфер, а потом отключаю этот шейдер, включаю второй и прохожу уже по текстуре с буфера и её рисую. Идея хорошая, но почему-то в PaintGl(), когда делаю два раза bind() к шейдерам или release(), появляется баг и ничего не рисуется(черный экран).
« Последнее редактирование: Сентябрь 21, 2012, 13:16 от RomanKravchenko » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Сентябрь 21, 2012, 00:26 »

Я уже так думал - не вариант. Нужно вторым шейдером проходить по новых значениях пикселей.
Не знаю, у меня "вариант" (до 8 текстур).
Код
glSlang
color0 = texture2D(texture0, gl_TexCoord[0].xy);
...
color1 = texture2D(texture1, gl_TexCoord[1].xy);
 
Записан
RomanKravchenko
Гость
« Ответ #5 : Сентябрь 21, 2012, 12:41 »

Да Вы правы, так можно сделать. Я просто ещё не очень хорошо разбираюсь в шейдерах. Но с другой стороны, считаю это не очень хорошим стилем - все забрасывать в один файл.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Сентябрь 21, 2012, 12:47 »

Но с другой стороны, считаю это не очень хорошим стилем - все забрасывать в один файл.
Это и намного труднее. Но с буфером - как Вы узнаете откуда взялся цвет пыкселя, т.е. был ли он действительно создан предыдущей текстурой?
Записан
RomanKravchenko
Гость
« Ответ #7 : Сентябрь 21, 2012, 16:43 »

Но с буфером - как Вы узнаете откуда взялся цвет пыкселя, т.е. был ли он действительно создан предыдущей текстурой?
Создаю экземпляр QGlFramebufferObject, в него рисую как в буфер, а потом с него достаю текстуру. А действительно ли - будет видно на экране, я же знаю какой результат мне нужен
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.