带有gnome扩展的ClutterShaderEffect

Erwan Douaille

我项目的目的是实现一个着色器并将其附加在舞台上。我希望使用JS gnome扩展系统使整个屏幕变形。(我是用C语言完成的,然后重新编译gnome,但我想使用一种无​​需任何编译的技术)。

然后,我正在寻找实现并将一个自定义的ShaderEffect附加到舞台上。我尝试使用以下代码进行操作,但整个屏幕都死机了:

fx = new Clutter.ShaderEffect({
        shader_type: Clutter.ShaderType.FRAGMENT_SHADER });
fx.set_shader_source(shader);
fx.set_uniform_value('height', this._actor.get_height());
fx.set_uniform_value('width', this._actor.get_width());
this._actor.add_effect_with_name('shader', fx);

this._actor = global.stage这可以正常工作,但屏幕冻结。因此,我阅读了文档并找到了此Doc链接

实现ClutterOffscreenEffect创建ClutterOffscreenEffect的子类需要重写ClutterOffscreenEffect的实现,以覆盖ClutterEffect虚拟函数。除了ClutterEffect的虚拟函数外,ClutterOffscreenEffect还提供了ClutterOffscreenEffectClass.paint_target()函数,该函数封装了包含屏幕外重定向结果的纹理的有效绘制。

但是我想怎么用JS做呢?

const ClutterShaderEffectCustom = new Lang.Class({
  Name : 'ClutterShaderEffectCustom',
  Extends : Clutter.ShaderEffect,

  _init : function(shader_type, actor, shaderSource) {
      // some stuff 
  },

  paint_target : function() {
     // TODO but how ? :/
  }
});

因为我有一些C文件在做,但是我不知道如何在JS中实现它。非官方的JS文档无济于事。

我还用Clutter.Shader尝试了其他方法:

fx = new Clutter.Shader();
fx.set_fragment_source(shader, shader.lenght);
fx.set_uniform('height', this._actor.get_height());
fx.set_uniform('width', this._actor.get_width());
this._actor.set_shader(fx);

但是着色器仅适用于儿童,而不适用于舞台。this._actor = global.stage这是使用第二种方法的结果的概述。我的着色器只是为了测试而复制纹理,但是为什么要在图标上而不是整个屏幕上复制纹理,因为我将其附加在舞台上了?

使用Clutter.Shader的第二种方法概述

Erwan Douaille

我通过使用以下源代码解决了我的非刷新问题:

myFunction : function() {
    fx = new Clutter.ShaderEffect({
        shader_type: Clutter.ShaderType.FRAGMENT_SHADER });
    fx.set_shader_source(shader);
    fx.set_uniform_value('height', this._actor.get_height());
    fx.set_uniform_value('width', this._actor.get_width());
    this._actor.add_effect_with_name('shader', fx); 
    this._timeline = new Clutter.Timeline({ duration: 1, repeat_count: -1 });
    this._timeline.connect('new-frame', Lang.bind(this, this._newFrame));
    this._timeline.start();
}

_newFrame: function() {
    this._actor.scale_y = 1.0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有gnome扩展的ClutterShaderEffect

来自分类Dev

16.04:带有 Dash 到面板扩展的 Gnome shell - 在悬停预览中关闭应用程序时系统崩溃

来自分类Dev

带有扩展字符的sparql

来自分类Dev

带有分层的可扩展面板

来自分类Dev

带有模板“扩展”的Django 1.5错误?

来自分类Dev

扩展带有特殊重载的类

来自分类Dev

带有jQuery的可扩展菜单-动画

来自分类Dev

带有空格的lex扩展失败

来自分类Dev

下载带有扩展名的文件

来自分类Dev

Notepad ++带有键盘的扩展/折叠块

来自分类Dev

XSLT中带有子类的扩展对象

来自分类Dev

带有json的可扩展列表

来自分类Dev

从Java运行带有R扩展的Rapidminer

来自分类Dev

laravel形式的文本,带有值扩展

来自分类Dev

扩展带有参数的javascript函数

来自分类Dev

如何扩展带有元组的集合?

来自分类Dev

了解带有扩展RegExp的Sed命令

来自分类Dev

带有工具栏的Firefox扩展

来自分类Dev

带有可选属性的 UIView 扩展

来自分类Dev

带有扩展部分的侧边栏

来自分类Dev

如何启用所有已安装的Gnome Shell扩展?

来自分类Dev

如何启用所有已安装的Gnome Shell扩展?

来自分类Dev

如何完全卸载gnome-shell和所有扩展?

来自分类Dev

如何删除没有“删除按钮”的 Gnome 扩展?

来自分类Dev

如何完全卸载gnome-shell和所有扩展?

来自分类Dev

13.04带有拖放和文本选择的gnome问题

来自分类Dev

带有gnome外壳的ATI图形卡,屏幕闪烁

来自分类Dev

使用带有bundle show和gnome-open的管道

来自分类Dev

虚拟机中带有Gnome的空白桌面