예제 #1
0
파일: test.py 프로젝트: vintch/pyshaders
    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)
예제 #2
0
파일: test.py 프로젝트: vintch/pyshaders
    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')
예제 #3
0
파일: test.py 프로젝트: vintch/pyshaders
    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))
예제 #4
0
파일: test.py 프로젝트: gabdube/pyshaders
 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)  
예제 #5
0
파일: test.py 프로젝트: vintch/pyshaders
                       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,
예제 #6
0
    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,