import array import random import pynodegl as ngl from pynodegl_utils.misc import scene @scene(color=scene.Color(), rotate=scene.Bool(), scale=scene.Bool(), translate=scene.Bool()) def animated_square(cfg, color=(1, 0.66, 0, 1), rotate=True, scale=True, translate=True): '''Animated Translate/Scale/Rotate on a square''' cfg.duration = 5.0 cfg.aspect_ratio = (1, 1) sz = 1 / 3. q = ngl.Quad((-sz / 2, -sz / 2, 0), (sz, 0, 0), (0, sz, 0)) p = ngl.Program(vertex=cfg.get_vert('color'), fragment=cfg.get_frag('color')) node = ngl.Render(q, p) ucolor = ngl.UniformVec4(value=color) node.update_uniforms(color=ucolor) coords = [(-1, 1), (1, 1), (1, -1), (-1, -1), (-1, 1)] if rotate: animkf = (ngl.AnimKeyFrameFloat(0, 0),
} """) program = ngl.Program(vertex=vert, fragment=frag) program.update_vert_out_vars( color=ngl.IOVec4(precision_out="high", precision_in="low")) geometry = ngl.Quad(corner=(-1, -1, 0), width=(2, 0, 0), height=(0, 2, 0)) scene = ngl.Render(geometry, program) return scene def _render_shape(geometry, color): return ngl.RenderColor(color, geometry=geometry) @test_fingerprint() @scene(sz=scene.Range(range=[0.1, 2], unit_base=100), color=scene.Color()) def shape_triangle(cfg, sz=1, color=COLORS.orange): cfg.aspect_ratio = (1, 1) p0, p1, p2 = equilateral_triangle_coords(sz) geometry = ngl.Triangle(p0, p1, p2) return _render_shape(geometry, color) @test_fingerprint(samples=4) @scene(sz=scene.Range(range=[0.1, 2], unit_base=100), color=scene.Color()) def shape_triangle_msaa(cfg, sz=1, color=COLORS.orange): cfg.aspect_ratio = (1, 1) p0, p1, p2 = equilateral_triangle_coords(sz) geometry = ngl.Triangle(p0, p1, p2) return _render_shape(geometry, color)
# software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # from pynodegl_utils.misc import scene from pynodegl_utils.toolbox.colors import COLORS import pynodegl as ngl @scene( txt=scene.Text(), fg_color=scene.Color(), bg_color=scene.Color(), box_corner=scene.Vector(n=3, minv=(-1, -1, -1), maxv=(1, 1, 1)), box_width=scene.Vector(n=3, minv=(-10, -10, -10), maxv=(10, 10, 10)), box_height=scene.Vector(n=3, minv=(-10, -10, -10), maxv=(10, 10, 10)), padding=scene.Range(range=[0, 100]), font_scale=scene.Range(range=[0, 15], unit_base=100), valign=scene.List(choices=("top", "center", "bottom")), halign=scene.List(choices=("left", "center", "right")), ) def text( cfg, txt="the quick brown fox\njumps over the lazy dog", fg_color=COLORS.cgreen, bg_color=(0.3, 0.3, 0.3), box_corner=(-1 + 0.25, -1 + 0.25, 0),
import array import math import random import pynodegl as ngl from pynodegl_utils.misc import scene @scene(square_color=scene.Color(), circle_color=scene.Color()) def square2circle(cfg, square_color=(0.9, 0.1, 0.3, 1.0), circle_color=(1.0, 1.0, 1.0, 1.0)): '''Morphing of a square (composed of many vertices) into a circle''' cfg.duration = 5 cfg.aspect_ratio = (1, 1) def sqxf(t): # square x coordinates clockwise starting top-left if t < 1 / 4.: return t * 4 if t < 1 / 2.: return 1 if t < 3 / 4.: return 1. - (t - .5) * 4 return 0 def sqyf(t): # square y coordinates clockwise starting top-left if t < 1 / 4.: return 1 if t < 1 / 2.: return 1. - (t - .25) * 4 if t < 3 / 4.: return 0 return (t - .75) * 4 n = 1024 # number of vertices s = 1.25 # shapes scale interp = 'exp_in_out'
from pynodegl_utils.misc import scene from pynodegl_utils.toolbox.colors import get_random_color_buffer import pynodegl as ngl @scene(color=scene.Color(), rotate=scene.Bool(), scale=scene.Bool(), translate=scene.Bool()) def animated_square(cfg, color=(1, 0.66, 0), rotate=True, scale=True, translate=True): """Animated Translate/Scale/Rotate on a square""" cfg.duration = 5.0 cfg.aspect_ratio = (1, 1) sz = 1 / 3.0 q = ngl.Quad((-sz / 2, -sz / 2, 0), (sz, 0, 0), (0, sz, 0)) node = ngl.RenderColor(color, geometry=q) coords = [(-1, 1), (1, 1), (1, -1), (-1, -1), (-1, 1)] if rotate: animkf = (ngl.AnimKeyFrameFloat(0, 0), ngl.AnimKeyFrameFloat(cfg.duration, 360)) node = ngl.Rotate(node, angle=ngl.AnimatedFloat(animkf)) if scale: animkf = ( ngl.AnimKeyFrameVec3(0, (1, 1, 1)), ngl.AnimKeyFrameVec3(cfg.duration / 2, (2, 2, 2)), ngl.AnimKeyFrameVec3(cfg.duration, (1, 1, 1)), ) node = ngl.Scale(node, factors=ngl.AnimatedVec3(animkf)) if translate:
shader_version = '300 es' if cfg.backend == 'gles' else '330' shader_header = '#version %s\n' % shader_version prog = ngl.Program(fragment=shader_header + cfg.get_frag('lut3d'), vertex=shader_header + cfg.get_vert('lut3d')) quad = ngl.Quad((-1, -1, 0), (2, 0, 0), (0, 2, 0)) render = ngl.Render(quad, prog) render.update_textures(tex0=video_tex) render.update_textures(lut3d=lut3d_tex) render.update_uniforms(xsplit=ngl.UniformFloat(value=xsplit)) return render @scene(bgcolor1=scene.Color(), bgcolor2=scene.Color(), bilinear_filtering=scene.Bool()) def buffer_dove(cfg, bgcolor1=(.6, 0, 0, 1), bgcolor2=(.8, .8, 0, 1), bilinear_filtering=True): '''Blending of a Render using a Buffer as data source''' cfg.duration = 3. # Credits: https://icons8.com/icon/40514/dove icon_filename = op.join(op.dirname(__file__), 'data', 'icons8-dove.raw') cfg.files.append(icon_filename) w, h = (96, 96) cfg.aspect_ratio = (w, h) img_buf = ngl.BufferUBVec4(filename=icon_filename, label='icon raw buffer')
from pynodegl_utils.toolbox.colors import get_random_color_buffer from pynodegl_utils.tests.cmp_fingerprint import test_fingerprint from pynodegl_utils.toolbox.shapes import equilateral_triangle_coords from pynodegl_utils.toolbox.grid import autogrid_simple def _render_shape(cfg, geometry, color): prog = ngl.Program(vertex=cfg.get_vert('color'), fragment=cfg.get_frag('color')) render = ngl.Render(geometry, prog) render.update_frag_resources(color=ngl.UniformVec4(value=color)) return render @test_fingerprint() @scene(sz=scene.Range(range=[0.1, 2], unit_base=100), color=scene.Color()) def shape_triangle(cfg, sz=1, color=COLORS['orange']): cfg.aspect_ratio = (1, 1) p0, p1, p2 = equilateral_triangle_coords(sz) geometry = ngl.Triangle(p0, p1, p2) return _render_shape(cfg, geometry, color) @test_fingerprint(samples=4) @scene(sz=scene.Range(range=[0.1, 2], unit_base=100), color=scene.Color()) def shape_triangle_msaa(cfg, sz=1, color=COLORS['orange']): cfg.aspect_ratio = (1, 1) p0, p1, p2 = equilateral_triangle_coords(sz) geometry = ngl.Triangle(p0, p1, p2) return _render_shape(cfg, geometry, color)