def test_glbuffers(self): from pyglbuffers import Buffer load_extension('pyglbuffers_bindings') shader = from_files_names(vert_path('ext_shader_glbuffers'), frag_path('ext_shader_glbuffers')) buffer = Buffer.array('(4f)[color]') buffer.reserve(10) shader.use() shader.enable_all_attributes() shader.map_attributes(buffer) attr = shader.attributes self.assertEqual(sizeof(buffer.format.struct), attr.color.stride) self.assertEqual(False, attr.color.normalized) self.assertEqual(4, attr.color.size) self.assertEqual(GL_FLOAT, attr.color.ptr_type) #self.assertEqual(0, attr.position.buffer) #self.assertEqual(0, attr.position.stride) #self.assertEqual(GL_FALSE, attr.position.normalized) #self.assertEqual(3, attr.position.size) #self.assertEqual(GL_FLOAT, attr.position.ptr_type) self.assertEqual(0, attr.secret_value.buffer) self.assertEqual(0, attr.secret_value.stride) self.assertEqual(GL_FALSE, attr.secret_value.normalized) self.assertEqual(4, attr.secret_value.size) self.assertEqual(GL_FLOAT, attr.secret_value.ptr_type) shader = from_files_names(vert_path('ext_shader_glbuffers'), frag_path('ext_shader_glbuffers')) buffer = Buffer.array('(3f)[position](4f)[color](1i)[secret_value]') buffer.reserve(10) shader.use() shader.enable_all_attributes() shader.map_attributes(buffer) attr = shader.attributes self.assertEqual(sizeof(buffer.format.struct), attr.position.stride) self.assertEqual(False, attr.position.normalized) self.assertEqual(3, attr.position.size) self.assertEqual(GL_FLOAT, attr.position.ptr_type) self.assertEqual(sizeof(buffer.format.struct), attr.color.stride) self.assertEqual(False, attr.color.normalized) self.assertEqual(4, attr.color.size) self.assertEqual(GL_FLOAT, attr.color.ptr_type) self.assertEqual(sizeof(buffer.format.struct), attr.secret_value.stride) self.assertEqual(False, attr.secret_value.normalized) self.assertEqual(1, attr.secret_value.size) self.assertEqual(GL_INT, attr.secret_value.ptr_type)
def test_load(self): " Test extension loading " load_extension('uint_uniforms') with self.assertRaises(ImportError) as cm1: load_extension('foo_bar') with self.assertRaises(PyShadersExtensionError) as cm2: load_extension('create_mmo') with self.assertRaises(ImportError) as cm3: load_extension('uint_uniforms') self.assertEqual('No extension named "foo_bar" found', str(cm1.exception), 'Exception do not matches') self.assertEqual('Extension "create_mmo" is not supported', str(cm2.exception), 'Exception do not matches') self.assertEqual('Extension "uint_uniforms" is already loaded', str(cm3.exception), 'Exception do not matches') self.assertIn('uint_uniforms', pyshaders.LOADED_EXTENSIONS, 'Extension name is not in the loaded extensions') self.assertTrue(extension_loaded('uint_uniforms'), 'Extension name is not in the loaded extensions') self.assertNotIn('create_mmo', pyshaders.LOADED_EXTENSIONS, 'Extension name is in the loaded extensions') self.assertNotIn('foo_bar', pyshaders.LOADED_EXTENSIONS, 'Extension name is in the loaded extensions') self.assertFalse(extension_loaded('create_mmo'), 'Extension name is in the loaded extensions') self.assertFalse(extension_loaded('foo_bar'), 'Extension name is in the loaded extensions')
def test_uint_uniforms(self): # Extension might have been loaded before if not extension_loaded('uint_uniforms'): load_extension('uint_uniforms') shader = from_files_names(vert_path('shader1'), frag_path('ext_shader_uint')) self.assertEqual(8, len(shader.uniforms)) self.assertEqual(8, shader.uniforms_count) uniforms_names = [ 'model', 'view', 'test_uint', 'test_uvec2', 'test_uvec4', 'test_uvec3', 'test_uint_3', 'test_uvec2_2' ] for name, info in shader.uniforms: self.assertIn(name, uniforms_names) uniforms_names.remove(name) shader.use() uni = shader.uniforms uni.test_uint = 2345 self.assertEqual(2345, uni.test_uint) uni.test_uvec2 = (2147483648, 78) self.assertEqual((2147483648, 78), uni.test_uvec2) uni.test_uvec3 = (7000, 8000, 80000) self.assertEqual((7000, 8000, 80000), uni.test_uvec3) uni.test_uvec4 = (1, 2, 3, 30000) self.assertEqual((1, 2, 3, 30000), uni.test_uvec4) uni.test_uint_3 = (1, 3782463, 3) self.assertEqual((1, 3782463, 3), uni.test_uint_3) uni.test_uvec2_2 = ((99, 88), (9345, 9456)) self.assertEqual(((99, 88), (9345, 9456)), uni.test_uvec2_2) self.assertEqual( 0, len(uniforms_names), 'Some name were not found: {}.'.format(uniforms_names))
def test_double_uniforms(self): load_extension('double_uniforms') shader = from_files_names(vert_path('shader1'), frag_path('ext_shader_double')) self.assertEqual(18, len(shader.uniforms)) self.assertEqual(18, shader.uniforms_count) uniforms_names = ['model', 'view', 'test_double', 'test_dvec2', 'test_dvec4', 'test_dvec3', 'test_double_3', 'test_dvec2_2', 'test_dmat3', 'test_dmat2', 'test_dmat4', 'test_dmat2_3', 'test_dmat2_4', 'test_dmat3_2', 'test_dmat3_4', 'test_dmat4_2', 'test_dmat4_3', 'test_dmat2_2'] for name, info in shader.uniforms: self.assertIn(name, uniforms_names) uniforms_names.remove(name) shader.use() uni = shader.uniforms uni.test_double = 6.0 self.assertEqual(6.0, uni.test_double) uni.test_dvec2 = (3.0, 4720.0) self.assertEqual((3.0, 4720.0), uni.test_dvec2 ) uni.test_dvec3 = (7000.0, 8000.0, 80000.0) self.assertEqual((7000.0, 8000.0, 80000.0), uni.test_dvec3 ) uni.test_dvec4 = (1.0, 2.0, 3.0, 30000.0) self.assertEqual((1.0, 2.0, 3.0, 30000.0), uni.test_dvec4) uni.test_double_3 = (1.0, 3782463.0, 3.0) self.assertEqual((1.0, 3782463.0, 3.0), uni.test_double_3) uni.test_dvec2_2 = ((99.0, 88.0), (9345.0, 9456.0)) self.assertEqual(((99.0, 88.0), (9345.0, 9456.0)), uni.test_dvec2_2) uni.test_dmat2 = ((1.0, 2.0), (3.0, 4.0)) self.assertEqual(((1.0, 2.0), (3.0, 4.0)), uni.test_dmat2) uni.test_dmat3 = ((1.0, 2.0, 9.0), (3.0, 4.0, 10.0), (22.0, 33.0, 44.0)) self.assertEqual(((1.0, 2.0, 9.0), (3.0, 4.0, 10.0), (22.0, 33.0, 44.0)), uni.test_dmat3) uni.test_dmat4 = ((1.0, 2.0, 19.0, 80.0), (3.0, 4.0, 11.0, 41.0), (16.0, 3.0, 11.0, 89.0), (83.0, 233.0, 213.0, 982.0)) self.assertEqual(((1.0, 2.0, 19.0, 80.0), (3.0, 4.0, 11.0, 41.0), (16.0, 3.0, 11.0, 89.0), (83.0, 233.0, 213.0, 982.0)), uni.test_dmat4) uni.test_dmat2_3 = ((8.0, 77.0, 45.0), (9.0, 244.0, 24.0)) self.assertEqual(((8.0, 77.0, 45.0), (9.0, 244.0, 24.0)), uni.test_dmat2_3) uni.test_dmat2_4 = ((8.0, 77.0, 45.0, 82.0), (9.0, 244.0, 24.0, 374.0)) self.assertEqual(((8.0, 77.0, 45.0, 82.0), (9.0, 244.0, 24.0, 374.0)), uni.test_dmat2_4) uni.test_dmat3_2 = ((8.0, 77.0), (45.0, 82.0), (9.0, 244.0)) self.assertEqual(((8.0, 77.0), (45.0, 82.0), (9.0, 244.0)), uni.test_dmat3_2) uni.test_dmat3_4 = ((8.0, 77.0, 45.0, 82.0), (9.0, 244.0, 24.0, 374.0), (98.0, 2448.0, 248.0, 3748.0),) self.assertEqual(((8.0, 77.0, 45.0, 82.0), (9.0, 244.0, 24.0, 374.0), (98.0, 2448.0, 248.0, 3748.0),), uni.test_dmat3_4) uni.test_dmat4_2 = ((8.0, 77.0), (45.0, 82.0), (9.0, 244.0), (91.0, 1244.0)) self.assertEqual(((8.0, 77.0), (45.0, 82.0), (9.0, 244.0), (91.0, 1244.0)), uni.test_dmat4_2) uni.test_dmat4_3 = ((8.0, 77.0, 45.0), (9.0, 244.0, 24.0), (98.0, 2448.0, 248.0), (99.0, 34.0, 1.0)) self.assertEqual(((8.0, 77.0, 45.0), (9.0, 244.0, 24.0), (98.0, 2448.0, 248.0), (99.0, 34.0, 1.0)), uni.test_dmat4_3) uni.test_dmat2_2 = (((1.0, 2.0), (3.0, 4.0)), ((10.0, 20.0), (30.0, 40.0))) self.assertEqual((((1.0, 2.0), (3.0, 4.0)), ((10.0, 20.0), (30.0, 40.0))), uni.test_dmat2_2)
GL_FRAGMENT_SHADER, glCreateShader, GL_TRUE, glDeleteShader, glIsProgram, glCreateProgram, glDeleteProgram, GL_DOUBLE, GL_FLOAT, GL_INT) import pyshaders from pyshaders import (ShaderObject, ShaderCompilationError, shader_source, ShaderProgram, from_files, from_files_names, current_program, GL_FLOAT_MAT3, GL_FLOAT_VEC3, load_extension, check_extension, PyShadersExtensionError, extension_loaded) vert_path = lambda fname: 'fixtures/{}.glsl.vert'.format(fname) frag_path = lambda fname: 'fixtures/{}.glsl.frag'.format(fname) tex_path = lambda fname: 'fixtures/{}.bmp'.format(fname) load_extension("sampler2D_uniforms") # this extension is always supported def eof(f): pos = f.tell() f.seek(0, SEEK_END) return pos == f.tell() class TestShaderObjects(unittest.TestCase): def test_create(self): " Test ShaderObject.vertex and ShaderObject.fragment " vert_obj = ShaderObject.vertex() frag_obj = ShaderObject.fragment() self.assertIs(type(vert_obj), ShaderObject,
from pyglet.gl import glDrawElements, glClearColor, Config, glGenVertexArrays, glDeleteVertexArrays, glBindVertexArray, GLuint, glViewport from pyglet.window import Window, mouse, key from pyglet import app except (ImportError, ModuleNotFoundError) as _e: print( "This demo require the lastest version of Pyglet to run. Use `pip install pyglet` to fix this problem" ) exit() import tinyblend as blend import pyshaders as shaders from pyglbuffers import Buffer from matmath import translate, perspective, rotate # Load the bindings in order to operate more easily with pyglbuffers shaders.load_extension('pyglbuffers_bindings') class Game(Window): def __init__(self): display = pyglet.canvas.get_display() config = display.get_default_screen().get_best_config(Config()) config.major_version = 3 config.minor_version = 3 context = config.create_context(None) Window.__init__(self, 800, 600, visible=False, resizable=True,