File: test_program.py

package info (click to toggle)
python-moderngl 5.12.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,700 kB
  • sloc: python: 15,758; cpp: 14,665; makefile: 14
file content (82 lines) | stat: -rw-r--r-- 2,411 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import moderngl


def test_program(ctx):
    program = ctx.program(
        vertex_shader='''
            #version 330

            uniform vec2 pos;
            uniform float scale;

            in vec2 vert;
            out vec2 v_vert;

            void main() {
                gl_Position = vec4(pos + vert * scale, 0.0, 1.0);
                v_vert = vert;
            }
        ''',
        fragment_shader='''
            #version 330

            in vec2 v_vert;
            out vec4 color;

            void main() {
                color = vec4(v_vert, 0.0, 1.0);
            }
        ''',
    )

    program.label = "my favorite program"
    assert program.glo > 0

    assert 'vert' in program
    assert 'pos' in program
    assert 'scale' in program
    assert program.is_transform is False
    assert program.label == "my favorite program"

    assert isinstance(program['vert'], moderngl.Attribute)
    assert isinstance(program['pos'], moderngl.Uniform)
    assert isinstance(program['scale'], moderngl.Uniform)


def test_geo_input_output_primitive(ctx):
    """Test detection of all geo shader input/output primitives types"""
    input_types = [
        ("points", moderngl.POINTS),
        ("lines", moderngl.LINES),
        ("lines_adjacency", moderngl.LINES_ADJACENCY),
        ("triangles", moderngl.TRIANGLES),
        ("triangles_adjacency", moderngl.TRIANGLES_ADJACENCY),
    ]
    output_types = [
        ("points", moderngl.POINTS),
        ("line_strip", moderngl.LINES),
        ("triangle_strip", moderngl.TRIANGLES),
    ]

    for out_name, out_type in output_types:
        for in_name, in_type in input_types:
            p = ctx.program(
                vertex_shader="""
                #version 330
                void main() {
                    gl_Position = vec4(1.0);
                }
                """,
                geometry_shader=(
                    "#version 330\n"
                    f"layout({in_name}) in;\n"
                    f"layout({out_name}, max_vertices=6) out;\n"
                    "void main() {\n"
                    "    gl_Position = vec4(1.0);\n"
                    "    EmitVertex();\n"
                    "    EndPrimitive();\n"
                    "}\n"
                ),
            )
            assert p.geometry_input == in_type
            assert p.geometry_output == out_type, f"input: {in_name}, output: {out_name}"