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
|
import moderngl
def test_1(ctx):
prog = ctx.program(
vertex_shader='''
#version 330
in vec2 in_vert;
out vec2 v_vert;
uniform mat2 Mvp;
uniform VertexShaderUniforms {
vec2 Position;
float Scale;
};
void main() {
v_vert = Position + in_vert * Scale;
gl_Position = vec4(Mvp * v_vert, 0.0, 1.0);
}
''',
fragment_shader='''
#version 330
uniform bool UseTexture;
uniform sampler2D Texture;
uniform FragmentShaderUniforms {
vec3 Color;
float Alpha;
};
in vec2 v_vert;
out vec4 f_color;
void main() {
if (UseTexture) {
f_color = texture(Texture, v_vert);
f_color.rgb *= Color;
f_color.a *= Alpha;
} else {
f_color = vec4(Color, Alpha);
}
}
''',
)
assert 'in_vert' in prog
assert 'Position' not in prog
assert 'Scale' not in prog
assert 'Mvp' in prog
assert 'UseTexture' in prog
assert 'Texture' in prog
assert 'Color' not in prog
assert 'Alpha' not in prog
assert 'VertexShaderUniforms' in prog
assert 'FragmentShaderUniforms' in prog
assert isinstance(prog['in_vert'], moderngl.Attribute)
assert isinstance(prog['Mvp'], moderngl.Uniform)
assert isinstance(prog['UseTexture'], moderngl.Uniform)
assert isinstance(prog['Texture'], moderngl.Uniform)
assert isinstance(prog['VertexShaderUniforms'], moderngl.UniformBlock)
assert isinstance(prog['FragmentShaderUniforms'], moderngl.UniformBlock)
|