Compiz 插件/过滤器 - 排序

Compiz 插件/过滤器 - 排序

使用 Ubuntu 14.04。在 Compiz 中,我启用了Negative插件OBS(颜色过滤器)。我想要的是,过滤器 A 应该在过滤器 B 之后应用(我希望能够控制顺序)。我该如何实现?

注意:特别是,我希望在设置Negative之前应用过滤器OBS。要了解为什么需要这样做。假设我想要 70% 的亮度(在 OBS 中)并且我想要反转颜色(最好是黑底白字)。我想要的是:

Original:  Black on White (#000 on #FFF)
After Negative:  #FFF on #000
After OBS (final):  #AAA on #000 (approx).

发生的情况是,首先应用 OBS,结果为:

After OBS:  #000 on #AAA
After Negative (final):  #FFF on #444 (approx).

导致整体亮度比我想要的更高,并且眩光也增加了。

答案1

你的问题很好。我确认在 Ubuntu 14.04.1 LTS 上 Neg 和 OBS 的行为也相同。

不幸的是,Ubuntu 10.04 LTS 之后 Compiz 的开发就停止了,所以再也没有关于 Compiz 的错误报告或功能请求可以解决了。更糟糕的是,Ubuntu 12.04 LTS 和 14.04 LTS 缺少 Compiz 色彩过滤器,它可以轻松解决您的任务(甚至更多)。

因此目前没有直接的解决方案。但有两种或多或少有用的解决方法。

  1. 使用任何黑色窗口或图片作为背景,并从 OBS 中对目标窗口使用不透明度而不是亮度。我使用它,效果很好,但当打开许多窗口时会很奇怪。

  2. 有一种方法可以修改 Neg 滤波器,以便它可以使窗口变暗,但只能变暗一个固定的量......

对于我来说,没有 CCF 的系统是无法使用的。因此,我进行了一些开发 [1]。最后,我找到了一种使用 Neg 模拟 CCF 的好方法。此外,我还修复了长期存在的错误,即不正确的颜色反转(类似 Windows(R) 的反转或简单的 RGB 反转)。如何获得它:

警告,不适用于生产机器。请先在测试机上试用!

检查您是否有正确的版本,两个输出应该匹配:

$ compiz --version
Compiz 0.9.11.3

$ dd if=/usr/lib/compiz/libneg.so bs=1 skip=46052 count=505

void neg_fragment () {                                   
    vec3 color = vec3(1.0, 1.0, 1.0) - gl_FragColor.rgb; 
    gl_FragColor = vec4(color, gl_FragColor.a);          
}                                                        
 18PluginClassHandlerI9NegWindow10CompWindowLi0EE18PluginClassHandlerI9NegScreen10CompScreenLi0EEN10CompAction9ContainerE9NegScreen9NegWindowN10CompPlugin24VTableForScreenAndWindowI9NegScreen9NegWindowLi0EEE15NegPluginVTable
505+0 records in
505+0 records out

创建文件负补丁。注意,“1.0”是您需要的亮度:

void neg_fragment(){;
float l,d,i,a;
vec3 t;
i=gl_FragColor.r;
i=min(i,gl_FragColor.g);
i=min(i,gl_FragColor.b);
a=gl_FragColor.r;
a=max(a,gl_FragColor.g);
a=max(a,gl_FragColor.b);
l=i+a;
d=1.0-l;
t=vec3(gl_FragColor.r+d,gl_FragColor.g+d,gl_FragColor.b+d)*1.0;
gl_FragColor=vec4(t,gl_FragColor.a);
}

备份:

sudo cp /usr/lib/compiz/libneg.so /usr/lib/compiz/libneg.so.bk

修补:

printf '\0\0' >> neg-patch; cat neg-patch | sudo dd of=/usr/lib/compiz/libneg.so bs=1 seek=46052 conv=notrunc

并检查:

$ dd if=/usr/lib/compiz/libneg.so bs=1 skip=46052 count=505

重启,它就可以正常工作了。有时甚至需要立即工作。我们构建了自己的 CCF 过滤器!

这一切都表明,实现 CCF 所需的所有功能都存在于当前的 Compiz 中。所以除了懒惰之外,没有其他理由将如此有用的 CCF 从 Ububtu 的 Compiz 中删除?

此解决方案还兼容褪黑素/冷色/暖色效果,如 lian1238 在 [1] 中的帖子所述。请注意,您的文件大小绝不能超过 500 字节负补丁文件!

希望能帮助到你。

-jpka

[1]http://ubuntuforums.org/showthread.php?t=1419702

相关内容