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

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

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

Итак, с QtQuick2.2 и QML, все равно нужно "захватывать" пиксели за окном и обрабатывать их с помощью свойства GLSL shader и/или QML Graphical Effects?

1 ответ

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

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

licensed under cc by-sa 3.0 with attribution.