Add treppe-gl shader renderer for treppe2000
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
5e6bc54d08
1 changed files with 550 additions and 0 deletions
61
tests/test_treppe_gl.py
Normal file
61
tests/test_treppe_gl.py
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
import os
|
||||
import socket
|
||||
import sys
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
||||
|
||||
import treppe_gl as t
|
||||
|
||||
|
||||
def test_encode_frame_known_bytes():
|
||||
rgbw = np.zeros((16, 4), dtype=np.float32)
|
||||
rgbw[0] = [1.0, 0.0, 0.5, 0.0]
|
||||
frame = t.encode_frame(rgbw)
|
||||
assert len(frame) == 2 + 16 * 8
|
||||
assert frame[:2] == bytes([0x42, 0x0A])
|
||||
# r=65535, g=0, b=round(0.5*65535)=32768, w=0 big endian
|
||||
assert frame[2:10] == bytes([0xFF, 0xFF, 0, 0, 0x80, 0x00, 0, 0])
|
||||
|
||||
|
||||
def test_white_modes():
|
||||
px = np.array([[1.0, 0.5, 0.25, 1.0]] + [[0, 0, 0, 0]] * 15)
|
||||
assert t.to_rgbw(px, "extract")[0].tolist() == [0.75, 0.25, 0.0, 0.25]
|
||||
assert t.to_rgbw(px, "alpha")[0].tolist() == [1.0, 0.5, 0.25, 1.0]
|
||||
assert t.to_rgbw(px, "off")[0].tolist() == [1.0, 0.5, 0.25, 0.0]
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def renderer():
|
||||
ctx, _ = t.create_context(window=False)
|
||||
return t.Renderer(ctx)
|
||||
|
||||
|
||||
def test_strip_pixels(renderer):
|
||||
renderer.load("""
|
||||
void mainImage(out vec4 c, in vec2 p) {
|
||||
c = vec4(p.x / iResolution.x, 0.0, iTime, 1.0);
|
||||
}""")
|
||||
px = renderer.render_strip(0.25)
|
||||
assert px.shape == (16, 4)
|
||||
np.testing.assert_allclose(px[:, 0], (np.arange(16) + 0.5) / 16, atol=1e-5)
|
||||
np.testing.assert_allclose(px[:, 2], 0.25, atol=1e-5)
|
||||
|
||||
|
||||
def test_bad_shader_keeps_old(renderer):
|
||||
renderer.load("void mainImage(out vec4 c, in vec2 p) { c = vec4(1.0); }")
|
||||
with pytest.raises(Exception):
|
||||
renderer.load("void mainImage(out vec4 c, in vec2 p) { nope }")
|
||||
px = renderer.render_strip(0.0)
|
||||
np.testing.assert_allclose(px[:, 0], 1.0)
|
||||
|
||||
|
||||
def test_udp_loopback():
|
||||
rx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
rx.bind(("127.0.0.1", 0))
|
||||
rx.settimeout(2)
|
||||
tx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
tx.sendto(t.BLACK_FRAME, rx.getsockname())
|
||||
assert rx.recv(2048) == t.BLACK_FRAME
|
||||
Loading…
Reference in a new issue