QtQuick2: применение шейдерных/графических эффектов GLSL к элементам окна?

Я тестировал возможности GUI, используя QtQuick и QML, но у меня возникли проблемы с поиском информации о применении эффектов шейдера GLSL к самому Window. Например, допустим, я хочу сделать полноэкранное приложение, которое просто размывает все, что находится за окном; когда вы перемещаете окно приложения по рабочему столу, шейдеры будут влиять на все, что находится за окном, а если вы развернете приложение, это повлияет на весь экран.

В официальной документации QtQuick5.2 упоминается применение эффекта шейдера в элемент изображения. Для этого они создают вариант и подключают его к изображению с помощью идентификатора. Я попытался обратиться к свойству id моего QML-элемента Window, но это не работает (в результате появляется черное окно, поскольку шейдер не может правильно обработать). Существует также модуль QtGraphicalEffects с очень хорошими эффектами. встроенный в него, но мне тоже не очень повезло с применением этих эффектов к окну.

Итак, с QtQuick2.2 и QML можно ли как-то «захватить» пиксели за окном и обработать их с помощью шейдера GLSL и/или свойства графических эффектов QML?


person MrKatSwordfish    schedule 22.04.2014    source источник


Ответы (1)


Интересная задача, если вы хотите на самом деле манипулировать пикселями на экране, которые кажутся не частью окна вашей программы, а частью рабочего стола за окном? Лучший способ, который я могу придумать для Qt, чтобы «захватить» пиксели, которые кажутся за пределами его главного окна, - это фактически сделать их частью окна Qt, сделав часть окна прозрачной. Это, вероятно, потребует некоторых проб и ошибок, но можно начать с чтения таких тем, как эта там, где это пытались сделать другие.

Как только вам это удалось, вы можете применить шейдерные эффекты к самому окну, и это может/должно повлиять на захваченные в нем пиксели. Конечно, это не обычная задача, но если немного поэкспериментировать, можно получить интересные результаты.

person Bill Abrams    schedule 27.04.2014