QtQuick2:将 GLSL 着色器/图形效果应用于窗口元素?

Posted

技术标签:

【中文标题】QtQuick2:将 GLSL 着色器/图形效果应用于窗口元素?【英文标题】:QtQuick2: Applying GLSL shader/graphical effects to Window elements? 【发布时间】:2014-04-22 07:22:37 【问题描述】:

我一直在使用 QtQuick 和 QML 测试 GUI 的可能性,但我一直无法找到有关将 GLSL 着色器效果应用于 Window 本身的信息。例如,假设我想制作一个全屏应用程序,它可以简单地模糊窗口后面的所有内容;当您在桌面上移动应用程序窗口时,窗口后面的所有内容都会受到着色器的影响,如果您最大化应用程序,整个屏幕都会受到影响。

在官方 QtQuick5.2 文档中,他们提到将 shader effect 应用于 Image 元素。为此,他们制作了一个变体并使用 id 将其连接到 Image。我尝试引用我的“Window”QML 元素的“id”属性,但它不起作用(由于着色器无法正确处理,导致黑色窗口)。还有 QtGraphicalEffects 模块,它内置了一些非常好的效果,但我也没有将这些效果应用到窗口上。

那么,对于 QtQuick2.2 和 QML,是否可以“捕获”窗口后面的像素并使用 GLSL 着色器和/或 QML 图形效果属性对其进行处理?

【问题讨论】:

【参考方案1】:

有趣的任务,如果您想实际操作屏幕上的像素,这些像素不会显示 是程序窗口的一部分,而是窗口后面的桌面的一部分?我能想到的让 Qt “捕获”出现在其主窗口之外的像素的最佳方法是通过使窗口的一部分透明来实际使它们成为 Qt 窗口的一部分。这可能需要一些试验和错误,但一个起点是阅读诸如this one 之类的线程,其他人曾尝试这样做。

一旦您成功地做到了这一点,您就可以将着色器效果应用到窗口本身,它可能/应该影响其中捕获的像素。当然不是一项常见的任务,但通过一些实验,您可以获得一些有趣的结果。

【讨论】:

以上是关于QtQuick2:将 GLSL 着色器/图形效果应用于窗口元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 glsl 中注册来设置着色器常量?

GLSL实现图像处理

Python之OpenGL笔记(5):OpenGL着色器语言(GLSL)应用画三角形

OpenGL入门4:着色器 GLSL

GLSL着色器,来玩

GLSL将颜色数据从片段着色器发送到顶点着色器似乎总是等于0