cvp
Jun 17, 2020 - 19:40
For the fun or as sample of a Pixelisation Shader in a Scene View

from scene import *
import ui
# PIXELISATION GLSL shader program
ripple_shader1 = '''
precision highp float;
uniform vec2 u_sprite_size; // size of the sprite (in points)
varying vec2 v_tex_coord; // texture coordinate
uniform sampler2D u_texture; // input image
uniform float u_time; // current timestamp of the scene animation loop
void main()
{
float px = 20.;
float dx = px*cos(u_time/4.)*(1./u_sprite_size.x);
float dy = px*cos(u_time/4.)*(1./u_sprite_size.y);
vec2 coord = vec2(dx*floor(v_tex_coord.x/dx),
dy*floor(v_tex_coord.y/dy));
gl_FragColor = texture2D(u_texture,coord);
}
'''
class MyScene(Scene):
def setup(self):
self.sprite = SpriteNode('test:Lenna')
self.sprite.shader = Shader(ripple_shader1)
self.sprite.position = self.size / 2
self.add_child(self.sprite)
# create ui.View as SceneView
def MySceneView():
SceneView_str = '''[{
"class" : "View",
"attributes" : {"custom_class" : "SceneView"},
"frame" : "{{0, 0}, {240, 240}}"
}]
'''
v = ui.load_view_str(SceneView_str)
return v
mv = ui.View()
mv.name = 'Pixelisation Shader in a Scene View'
mv.frame = (0,0,400,400)
mv.background_color = 'white'
sv = MySceneView()
sv.frame = (80,80,240,240)
sv.scene = MyScene()
mv.add_subview(sv)
mv.present('sheet')