Rendering#

 1import moderngl
 2import numpy as np
 3
 4from PIL import Image
 5
 6ctx = moderngl.create_standalone_context()
 7
 8prog = ctx.program(
 9    vertex_shader='''
10        #version 330
11
12        in vec2 in_vert;
13        in vec3 in_color;
14
15        out vec3 v_color;
16
17        void main() {
18            v_color = in_color;
19            gl_Position = vec4(in_vert, 0.0, 1.0);
20        }
21    ''',
22    fragment_shader='''
23        #version 330
24
25        in vec3 v_color;
26
27        out vec3 f_color;
28
29        void main() {
30            f_color = v_color;
31        }
32    ''',
33)
34
35x = np.linspace(-1.0, 1.0, 50)
36y = np.random.rand(50) - 0.5
37r = np.ones(50)
38g = np.zeros(50)
39b = np.zeros(50)
40
41vertices = np.dstack([x, y, r, g, b])
42
43vbo = ctx.buffer(vertices.astype('f4').tobytes())
44vao = ctx.simple_vertex_array(prog, vbo, 'in_vert', 'in_color')
45
46fbo = ctx.simple_framebuffer((512, 512))
47fbo.use()
48fbo.clear(0.0, 0.0, 0.0, 1.0)
49vao.render(moderngl.LINE_STRIP)
50
51Image.frombytes('RGB', fbo.size, fbo.read(), 'raw', 'RGB', 0, -1).show()