()
| 6 | |
| 7 | |
| 8 | def test_multiprogram(): |
| 9 | vert = """ |
| 10 | uniform float u_scale; |
| 11 | |
| 12 | void main() { |
| 13 | gl_Position = $transform(vec4(0, 0, 0, 0)); |
| 14 | } |
| 15 | """ |
| 16 | |
| 17 | frag = """ |
| 18 | void main() { |
| 19 | gl_FragColor = $color; |
| 20 | $post_hook |
| 21 | } |
| 22 | """ |
| 23 | |
| 24 | # test adding programs |
| 25 | mp = MultiProgram(vert, frag) |
| 26 | p1 = mp.add_program() |
| 27 | p2 = mp.add_program('p2') |
| 28 | assert 'p2' in mp._programs |
| 29 | |
| 30 | # test weak reference to program |
| 31 | mp.add_program('junk') |
| 32 | assert 'junk' not in mp._programs and len(mp._programs) == 2 |
| 33 | |
| 34 | # test setting variables on multiprogram or individual programs |
| 35 | mp['u_scale'] = 2 |
| 36 | assert p1['u_scale'] == 2 |
| 37 | assert p2['u_scale'] == 2 |
| 38 | |
| 39 | p1['u_scale'] = 3 |
| 40 | assert p1['u_scale'] == 3 |
| 41 | assert p2['u_scale'] == 2 |
| 42 | |
| 43 | # test setting template variables globally |
| 44 | mp.frag['color'] = (1, 1, 1, 1) |
| 45 | assert p1.frag['color'].value == (1, 1, 1, 1) |
| 46 | assert p2.frag['color'].value == (1, 1, 1, 1) |
| 47 | |
| 48 | # test setting template variables per-program |
| 49 | func = Function(""" |
| 50 | void filter() { |
| 51 | gl_FragColor.r = 0.5; |
| 52 | } |
| 53 | """) |
| 54 | p1.frag['post_hook'] = StatementList() |
| 55 | p2.frag['post_hook'] = StatementList() |
| 56 | p2.frag['post_hook'].add(func()) |
| 57 | |
| 58 | tr1 = STTransform() |
| 59 | tr2 = MatrixTransform() |
| 60 | p1.vert['transform'] = tr1 |
| 61 | p2.vert['transform'] = tr2 |
| 62 | |
| 63 | assert 'st_transform_map' in p1.vert.compile() |
| 64 | assert 'affine_transform_map' in p2.vert.compile() |
| 65 | assert 'filter' not in p1.frag.compile() |
nothing calls this directly
no test coverage detected
searching dependent graphs…