コード例 #1
0
class TestSaveKeyBindings(BaseCase):

    def setUp(self):
        # Clear any file that exists
        self.tearDown()
        # Start with the blank shader
        shader = Mock(vertex_shader="", fragment_shader="")
        self.shader = ShaderController(shader, "blank/blank_shader")
        # Load a different json file
        self.shader.load_key_bindings(loadfile)
        # Save key binds to a new file
        self.shader.save_key_bindings(savefile)

    def test_binding_save(self):
        # do a byte compare (should work :-/)
        with open (loadfile, "r") as lf, open (savefile, "r") as sf:
            loadBindings = json.load(lf)
            saveBindings = json.load(sf)
            self.assertEqual(loadBindings, saveBindings)

    def tearDown(self):
        super(TestSaveKeyBindings, self).tearDown()
        try:
            os.remove(savefile)
        except OSError:
            pass
コード例 #2
0
class TestSetupFloat(BaseCase):

    class mockUniform(object):
        def __init__(self):
            self.gdict = {}

        def group(self, key):
            if key in self.gdict:
                return self.gdict[key]
            else:
                return None

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")
        self.uniform = TestSetupFloat.mockUniform()
        self.binding = {}

    def test_no_default_no_diff(self):
        self.viewer.init_float_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['default'], 0)
        self.assertEqual(self.binding['diff'], 1)
        # Keys should be bound to the first 2 off the list
        self.assertEqual(self.binding['inc_key'], 113) # Q
        self.assertEqual(self.binding['dec_key'], 97)  # A

    def test_with_default_and_diff(self):
        self.uniform.gdict['default'] = 100
        self.uniform.gdict['diff'] = 20
        self.viewer.init_float_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['default'], 100)
        self.assertEqual(self.binding['diff'], 20)
コード例 #3
0
class TestSetupBool(BaseCase):

    class mockUniform(object):
        def __init__(self):
            self.gdict = {}

        def group(self, key):
            if key in self.gdict:
                return self.gdict[key]
            else:
                return None

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")
        self.uniform = TestSetupBool.mockUniform()
        self.binding = {}

    def test_no_default(self):
        self.viewer.init_bool_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['default'], False)
        # Key should be bound to the first off the list
        self.assertEqual(self.binding['toggle_key'], 113) # Q

    def test_with_default(self):
        self.uniform.gdict['default'] = True
        self.viewer.init_bool_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['default'], True)
コード例 #4
0
class TestMouseDrag(BaseCase):

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")

    def test_no_zoom_bound(self):
        self.viewer.mouse_x = {}
        self.viewer.mouse_x['default'] = -10
        self.viewer.mouse_y = {}
        self.viewer.mouse_y['default'] = 0
        self.viewer.mouse_drag(10, -20)
        self.assertEqual(self.viewer.mouse_x['default'], -20)
        self.assertEqual(self.viewer.mouse_y['default'], 20)

    def test_zoom_bound(self):
        self.viewer.mouse_scroll = {}
        self.viewer.mouse_scroll['default'] = 10
        self.viewer.mouse_x = {}
        self.viewer.mouse_x['default'] = -10
        self.viewer.mouse_y = {}
        self.viewer.mouse_y['default'] = 0
        self.viewer.mouse_drag(1, -2)
        self.assertEqual(self.viewer.mouse_x['default'], -20)
        self.assertEqual(self.viewer.mouse_y['default'], 20)
コード例 #5
0
class TestBindingTrigger(BaseCase):

    def setUp(self):
        self.key = 113 # key.Q
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")

    def test_symbol_not_bound(self):
        self.assertFalse(self.viewer.binding_trigger(self.key))

    def test_toggle_key_bound(self):
        # Key bindings are normally prepared in the viewer.bindings and linked in usedkeys
        # Here we're just throwing them into usedkeys directly and ignoring the bindings table
        self.viewer.used_keys[self.key] = {}
        self.viewer.used_keys[self.key]['toggle_key'] = self.key
        self.viewer.used_keys[self.key]['default'] = False
        # Check the bound key caused an action
        self.assertTrue(self.viewer.binding_trigger(self.key))
        # Check the default value was toggled
        self.assertTrue(self.viewer.used_keys[self.key]['default'])

    def test_inc_key_bound(self):
        self.viewer.used_keys[self.key] = {}
        self.viewer.used_keys[self.key]['inc_key'] = self.key
        self.viewer.used_keys[self.key]['default'] = 10
        self.viewer.used_keys[self.key]['diff'] = 5
        # Check the bound key caused an action
        self.assertTrue(self.viewer.binding_trigger(self.key))
        # Check the default value was incremented
        self.assertEqual(self.viewer.used_keys[self.key]['default'], 15)

    def test_dec_key_bound(self):
        self.viewer.used_keys[self.key] = {}
        self.viewer.used_keys[self.key]['dec_key'] = self.key
        self.viewer.used_keys[self.key]['default'] = 10
        self.viewer.used_keys[self.key]['diff'] = 5
        # Check the bound key caused an action
        self.assertTrue(self.viewer.binding_trigger(self.key))
        # Check the default value was decremented
        self.assertEqual(self.viewer.used_keys[self.key]['default'], 5)

    def test_shuffle_key_bound(self):
        self.viewer.used_keys[self.key] = {}
        self.viewer.used_keys[self.key]['shuffle_key'] = self.key
        self.viewer.used_keys[self.key]['default'] = [0, 1, 2, 3, 4]
        self.viewer.used_keys[self.key]['loop'] = len(self.viewer.used_keys[self.key]['default'])
        self.viewer.used_keys[self.key]['seed'] = 1
        # Check the bound key caused an action
        self.assertTrue(self.viewer.binding_trigger(self.key))
        # Check the shuffle was triggered, i.e.: list is reordered
        self.assertNotEqual(self.viewer.used_keys[self.key]['default'], [0, 1, 2, 3, 4])
        # but still the same values
        self.assertEqual(sorted(self.viewer.used_keys[self.key]['default']), [0, 1, 2, 3, 4])

    def test_key_used_but_not_bound(self):
        self.viewer.used_keys[self.key] = {}
        # Check the bound key caused an exception
        self.assertRaises(ValueError, self.viewer.binding_trigger, self.key)
コード例 #6
0
 def setUp(self):
     shader = Mock(vertex_shader="", fragment_shader="")
     self.shader = ShaderController(shader, "blank/blank_shader")
     self.shader.parse_numeric_bindings =\
             create_autospec(self.shader.parse_numeric_bindings, return_value=False)
     self.shader.parse_boolean_bindings =\
             create_autospec(self.shader.parse_boolean_bindings, return_value=False)
     self.shader.parse_array_bindings =\
             create_autospec(self.shader.parse_array_bindings, return_value=False)
コード例 #7
0
 def setUp(self):
     # Clear any file that exists
     self.tearDown()
     # Start with the blank shader
     shader = Mock(vertex_shader="", fragment_shader="")
     self.shader = ShaderController(shader, "blank/blank_shader")
     # Load a different json file
     self.shader.load_key_bindings(loadfile)
     # Save key binds to a new file
     self.shader.save_key_bindings(savefile)
コード例 #8
0
    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")
        self.viewer.init_int_array_binding = create_autospec(self.viewer.init_int_array_binding)
        self.viewer.init_float_array_binding = create_autospec(self.viewer.init_float_array_binding)
        self.viewer.init_bool_array_binding = create_autospec(self.viewer.init_bool_array_binding)
        self.viewer.init_vec2_array_binding = create_autospec(self.viewer.init_vec2_array_binding)
        self.viewer.init_vec3_array_binding = create_autospec(self.viewer.init_vec3_array_binding)
        self.viewer.init_vec4_array_binding = create_autospec(self.viewer.init_vec4_array_binding)

        self.uniform = TestCreateArrayBinding.mockUniform()
コード例 #9
0
class TestLoadKeyBindings(BaseCase):

    def setUp(self):
        # Start with the blank shader
        shader = Mock(vertex_shader="", fragment_shader="")
        self.shader = ShaderController(shader, "blank/blank_shader")
        # Load a different json file
        self.shader.load_key_bindings(loadfile)

    def test_binding_load(self):
        # Check bindings have been loaded
        # {"zoom": {"default": 0.02, "dec_key": 102, "type": "float", "inc_key": 114, "diff": 0.0005}}
        self.assertIn("zoom", self.shader.bindings)
        binding = self.shader.bindings["zoom"]
        self.assertIn("dec_key", binding)
        self.assertEqual(binding["dec_key"], 102)
コード例 #10
0
class TestMouseScrollY(BaseCase):

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")

    def test_no_zoom_bound(self):
        self.viewer.mouse_scroll_y(2)
        self.assertFalse(getattr(self.viewer, 'mouseScroll', None))

    def test_zoom_bound(self):
        self.viewer.mouse_scroll = {}
        self.viewer.mouse_scroll['default'] = 10
        self.viewer.mouse_scroll['diff'] = 5
        self.viewer.mouse_scroll_y(-2)
        self.assertEqual(self.viewer.mouse_scroll['default'], 20)
コード例 #11
0
class TestCheckNumericKeyBindingsFromShader(BaseCase):

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.shader = ShaderController(shader, "blank/blank_shader")
        self.shader.update_binding = create_autospec(self.shader.update_binding)

    def test_bools_arrays_not_found(self):
        self.assertFalse(self.shader.parse_numeric_bindings(
            "uniform bool boolname; uniform float arrayname[1];"))
        self.assertEqual(self.shader.update_binding.call_count, 0)

    def test_ints_floats_found(self):
        self.assertTrue(self.shader.parse_numeric_bindings(
            "uniform bool boolname; uniform float arrayname[1];"
            "uniform int intname; uniform float floatname;"))
        self.assertEqual(self.shader.update_binding.call_count, 2)
コード例 #12
0
    def __init__(self, shader_path):
        '''
        Load and attempt to run the shader at shader_path.
        '''
        self.w = 512
        self.h = 512

        # Load shader code
        vspath = '%s.v.glsl' % shader_path
        fspath = '%s.f.glsl' % shader_path
        with io.open(vspath) as vstrm, io.open(fspath) as fstrm:
            vertexshader = ' '.join(vstrm)
            fragmentshader = ' '.join(fstrm)

        self.shader = Shader(vertexshader, fragmentshader)
        self.shader_controller = ShaderController(self.shader, shader_path)
        super(TextureWindow, self).__init__(caption=shader_path, width=self.w, height=self.h)

        self.create_key_help_labels()
コード例 #13
0
class TestSetupIntArray(BaseCase):

    class mockUniform(object):
        def __init__(self):
            self.gdict = {}

        def group(self, key):
            if key in self.gdict:
                return self.gdict[key]
            else:
                return None

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")
        self.uniform = TestSetupIntArray.mockUniform()
        self.binding = {}

    def test_no_linesize_no_permutation(self):
        self.uniform.gdict['size'] = 5
        self.viewer.init_int_array_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['default'], [0, 1, 2, 3, 4])
        self.assertEqual(self.binding['shuffle_key'], 113) # Q

    def test_with_linesize(self):
        self.uniform.gdict['size'] = 10
        self.uniform.gdict['line'] = 5
        self.viewer.init_int_array_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['loop'], 5)
        self.assertEqual(self.binding['default'], [0, 1, 2, 3, 4, 0, 1, 2, 3, 4])
        self.assertEqual(self.binding['shuffle_key'], 113) # Q

    def test_with_permutation_size_unseeded(self):
        self.uniform.gdict['size'] = 10
        self.uniform.gdict['perm'] = 5
        self.viewer.init_int_array_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['loop'], 5)
        self.assertEqual(self.binding['seed'], 1)
        self.assertEqual(sorted(self.binding['default'][:5]), list(range(0, 5)))
        self.assertEqual(self.binding['default'][:5], self.binding['default'][5:])
        self.assertEqual(self.binding['shuffle_key'], 113) # Q

    def test_with_permutation_size_seeded(self):
        self.uniform.gdict['size'] = 10
        self.uniform.gdict['perm'] = 5
        self.uniform.gdict['seed'] = 50
        self.viewer.init_int_array_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['loop'], 5)
        self.assertEqual(self.binding['seed'], 50)
        self.assertEqual(sorted(self.binding['default'][:5]), list(range(0, 5)))
        self.assertEqual(self.binding['default'][:5], self.binding['default'][5:])
        self.assertEqual(self.binding['shuffle_key'], 113) # Q
コード例 #14
0
class TestBindMostObviousMouseControls(BaseCase):

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")

    def test_no_controls_to_bind(self):
        self.viewer.bind_mouse_controls()
        self.assertFalse(getattr(self.viewer, 'mouseX', None))
        self.assertFalse(getattr(self.viewer, 'mouseY', None))
        self.assertFalse(getattr(self.viewer, 'mouseScroll', None))

    def test_controls_bound(self):
        self.viewer.bindings['x'] = "mock_x"
        self.viewer.bindings['y'] = "mock_y"
        self.viewer.bindings['zoom'] = "mock_zoom"
        self.viewer.bind_mouse_controls()
        self.assertEqual(getattr(self.viewer, 'mouse_x'), "mock_x")
        self.assertEqual(getattr(self.viewer, 'mouse_y'), "mock_y")
        self.assertEqual(getattr(self.viewer, 'mouse_scroll'), "mock_zoom")
コード例 #15
0
class TestGetStatuses(BaseCase):

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")

    def test_no_bindings(self):
        results = list(self.viewer.get_statuses())
        self.assertEqual(len(results), 0)

    def test_statuses_bound(self):
        self.viewer.bindings['Bool'] = {}
        self.viewer.bindings['Bool']['default'] = False
        self.viewer.bindings['Scalar'] = {}
        self.viewer.bindings['Scalar']['default'] = 10
        self.viewer.bindings['List'] = {}
        self.viewer.bindings['List']['default'] = [x for x in range(10)] 
        self.viewer.bindings['Nothing'] = {}
        results = sorted(self.viewer.get_statuses())
        self.assertEqual(results, ['<b>Bool</b>=False', '<b>List</b>=[0,1,2,...,9]', '<b>Nothing</b>=None', '<b>Scalar</b>=10'])
コード例 #16
0
class TestCheckKeyBindingsFromShaderUniforms(BaseCase):

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.shader = ShaderController(shader, "blank/blank_shader")
        self.shader.parse_numeric_bindings =\
                create_autospec(self.shader.parse_numeric_bindings, return_value=False)
        self.shader.parse_boolean_bindings =\
                create_autospec(self.shader.parse_boolean_bindings, return_value=False)
        self.shader.parse_array_bindings =\
                create_autospec(self.shader.parse_array_bindings, return_value=False)

    def assertBindingChecksCalled(self, shaderCode):
        # All subtasks are called once each
        # Whether binding found or not
        self.shader.parse_numeric_bindings.assert_called_once_with(shaderCode)
        self.shader.parse_boolean_bindings.assert_called_once_with(shaderCode)
        self.shader.parse_array_bindings.assert_called_once_with(shaderCode)

    def testFoundNoUniforms(self):
        shaderCode = ""
        self.assertFalse(self.shader.parse_bindings_from_uniforms(shaderCode))
        self.assertBindingChecksCalled(shaderCode)

    def testFoundNumericUniforms(self):
        shaderCode = ""
        self.shader.parse_numeric_bindings.return_value = True
        self.assertTrue(self.shader.parse_bindings_from_uniforms(shaderCode))
        self.assertBindingChecksCalled(shaderCode)

    def testFoundBooleanUniforms(self):
        shaderCode = ""
        self.shader.parse_boolean_bindings.return_value = True
        self.assertTrue(self.shader.parse_bindings_from_uniforms(shaderCode))
        self.assertBindingChecksCalled(shaderCode)

    def testFoundArrayUniforms(self):
        shaderCode = ""
        self.shader.parse_array_bindings.return_value = True
        self.assertTrue(self.shader.parse_bindings_from_uniforms(shaderCode))
        self.assertBindingChecksCalled(shaderCode)
コード例 #17
0
class TestCheckShaderBinding(BaseCase):

    class mockUniform(object):
        def group(self, key):
            return key

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.shader = ShaderController(shader, "blank/blank_shader")
        self.shader.create_binding = create_autospec(self.shader.create_binding)
        self.uniform = TestCheckShaderBinding.mockUniform()

    def test_name_not_in_bindings(self):
        self.shader.update_binding(self.uniform)
        self.shader.create_binding.assert_called_once_with(self.uniform)
    
    def test_name_in_bindings_already_same_type(self):
        self.shader.bindings['name'] = {}
        self.shader.bindings['name']['type'] = 'type'
        self.shader.update_binding(self.uniform)
        self.assertEqual(self.shader.create_binding.call_count, 0)

    def test_name_in_bindings_new_type(self):
        self.shader.bindings['name'] = {}
        self.shader.bindings['name']['type'] = 'oldtype'
        self.shader.update_binding(self.uniform)
        self.shader.create_binding.assert_called_once_with(self.uniform)
コード例 #18
0
class TestSetupVec(BaseCase):

    class mockUniform(object):
        def __init__(self):
            self.gdict = {}

        def group(self, key):
            if key in self.gdict:
                return self.gdict[key]
            else:
                return None

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")
        self.uniform = TestSetupVec.mockUniform()
        self.binding = {}

    def test_vec2(self):
        # Parsing not done yet, will update here when implementing
        self.viewer.init_vec2_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['default'], (0.0, 0.0))

    def test_vec3(self):
        # Parsing not done yet, will update here when implementing
        self.viewer.init_vec3_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['default'], (0.0, 0.0, 0.0))

    def test_vec4(self):
        # Parsing not done yet, will update here when implementing
        self.viewer.init_vec4_binding(self.binding, self.uniform)
        self.assertEqual(self.binding['default'], (0.0, 0.0, 0.0, 0.0))
コード例 #19
0
class TestGetHtmlHelps(BaseCase):

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")

    def test_no_bindings(self):
        key = Mock()
        results = list(self.viewer.get_html_help(key))
        self.assertEqual(len(results), 0)

    def test_keys_bound(self):
        key = Mock(W=119, Q=113, A=97, S=115)
        yek = lambda v: {119: 'W', 113: 'Q', 97: 'A', 115: 'S'}.get(v, None)
        key.symbol_string = Mock(side_effect=yek)
        self.viewer.bindings['Bool'] = {}
        self.viewer.bindings['Bool']['toggle_key'] = key.W
        self.viewer.bindings['Scalar'] = {}
        self.viewer.bindings['Scalar']['inc_key'] = key.Q
        self.viewer.bindings['Scalar']['dec_key'] = key.A
        self.viewer.bindings['List'] = {}
        self.viewer.bindings['List']['shuffle_key'] = key.S
        results = sorted(self.viewer.get_html_help(key))
        self.assertEqual(results, ['<b>Q/A</b>:Scalar', '<b>S</b>:List', '<b>W</b>:Bool'])
コード例 #20
0
 def setUp(self):
     # Ensure there's no json for blank
     self.tearDown()
     shader = Mock(vertex_shader="", fragment_shader="")
     self.shader_controller = ShaderController(shader, "blank/blank_shader")
コード例 #21
0
class TextureWindow(pyglet.window.Window):
    '''
    Concrete draw window. This uses the ShaderController to load and operate the shader at the path
    passed to the constructor.
    '''

    def __init__(self, shader_path):
        '''
        Load and attempt to run the shader at shader_path.
        '''
        self.w = 512
        self.h = 512

        # Load shader code
        vspath = '%s.v.glsl' % shader_path
        fspath = '%s.f.glsl' % shader_path
        with io.open(vspath) as vstrm, io.open(fspath) as fstrm:
            vertexshader = ' '.join(vstrm)
            fragmentshader = ' '.join(fstrm)

        self.shader = Shader(vertexshader, fragmentshader)
        self.shader_controller = ShaderController(self.shader, shader_path)
        super(TextureWindow, self).__init__(caption=shader_path, width=self.w, height=self.h)

        self.create_key_help_labels()

    def create_key_help_labels(self):
        '''
        Create the help labels to display overlaying the drawn shader
        '''
        self.helpLabels = []
        y = self.height
        for labelText in self.shader_controller.get_html_help(key):
            self.helpLabels.append(pyglet.text.HTMLLabel(
                    "<font face='Courier New' color='white'>{}</font>".format(labelText),
                    x=0, y=y,
                    anchor_x='left', anchor_y='top'))
            y -= 20
    
    def updateStatusLabels(self):
        self.statusLabels = []
        y = 20
        label = 0
        for labelText in self.shader_controller.get_statuses():
            # Create a new label if we need one (suddenly)
            if label >= len(self.statusLabels):
                self.statusLabels.append(pyglet.text.HTMLLabel("",
                    x=0, y=y,
                    anchor_x='left', anchor_y='top'))
            # Modify an existing label to give it status text
            self.statusLabels[label].text = "<font face='Courier New' color='white'>{}</font>".format(labelText)
            y += 20
            label += 1

    def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
        self.shader_controller.mouse_drag(dx, dy)

    def on_mouse_scroll(self, x, y, scroll_x, scroll_y):
        self.shader_controller.mouse_scroll_y(scroll_y)

    def on_key_release(self, symbol, modifiers):
        self.shader_controller.binding_trigger(symbol)

    def saveFromShader(self):
        a = (gl.GLubyte * (4 * self.w * self.h))(0)
        # Save without any GUI elements
        self.drawGenerated()
        gl.glReadPixels(0, 0, self.w, self.h, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, a)
        image = pyglet.image.ImageData(self.w, self.h, 'RGBA', a)
        scriptPath = os.path.dirname(os.path.realpath(__file__))
        filePath = scriptPath + "/TESTSAVE_" + time.strftime("%Y%m%d_%H%M%S") + ".png"
        print ("saved to {}".format(filePath))
        image.save(filePath)

    def on_draw(self):
        self.drawGenerated()
        self.updateStatusLabels()
        self.drawGUI()
        
    def drawGenerated(self):
        gl.glMatrixMode(gl.GL_PROJECTION)
        gl.glLoadIdentity()
        gl.glOrtho(-1., 1., 1., -1., 0., 1.)

        gl.glMatrixMode(gl.GL_MODELVIEW)
        gl.glLoadIdentity()

        self.shader.bind()

        self.shader_controller.set_uniforms()

        gl.glBegin(gl.GL_QUADS)
        gl.glVertex2i(-1, -1)
        gl.glTexCoord2i(-2, -2)
        gl.glVertex2f(1, -1)
        gl.glTexCoord2i(2, -2)
        gl.glVertex2i(1, 1)
        gl.glTexCoord2i(2, 2)
        gl.glVertex2i(-1, 1)
        gl.glTexCoord2i(-2, 2)
        gl.glEnd()

        self.shader.unbind()

    def drawGUI(self):
        gl.glMatrixMode(gl.GL_PROJECTION)
        gl.glLoadIdentity()
        gl.glOrtho(0, self.w, 0, self.h, -1, 1)

        for label in self.helpLabels:
            label.draw()
        for label in self.statusLabels:
            label.draw()
コード例 #22
0
 def setUp(self):
     shader = Mock(vertex_shader="", fragment_shader="")
     self.viewer = ShaderController(shader, "blank/blank_shader")
コード例 #23
0
 def setUp(self):
     shader = Mock(vertex_shader="", fragment_shader="")
     self.shader = ShaderController(shader, "blank/blank_shader")
     self.shader.update_binding = create_autospec(self.shader.update_binding)
コード例 #24
0
 def setUp(self):
     shader = Mock(vertex_shader="", fragment_shader="")
     self.shader = ShaderController(shader, "blank/blank_shader")
     self.shader.create_binding = create_autospec(self.shader.create_binding)
     self.uniform = TestCheckShaderBinding.mockUniform()
コード例 #25
0
class TestSetUniforms(BaseCase):

    def setUp(self):
        self.shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(self.shader, "blank/blank_shader")
        # self.viewer.uniformi = create_autospec(self.viewer.uniformi)
        # self.viewer.uniformf = create_autospec(self.viewer.uniformf)

    def test_no_uniforms(self):
        self.viewer.set_uniforms()
        self.assertEqual(self.shader.uniformi.call_count, 0)
        self.assertEqual(self.shader.uniformf.call_count, 0)

    def test_int_uniform(self):
        self.viewer.bindings['an_int'] = {}
        self.viewer.bindings['an_int']['type'] = "int"
        self.viewer.bindings['an_int']['default'] = 1
        self.viewer.set_uniforms()
        self.shader.uniformi.assert_called_once_with('an_int', 1)
        self.assertEqual(self.shader.uniformf.call_count, 0)
        
    def test_int_array_uniform(self):
        self.viewer.bindings['an_int_array'] = {}
        self.viewer.bindings['an_int_array']['type'] = "int"
        self.viewer.bindings['an_int_array']['default'] = [1, 2, 3, 4, 5]
        self.viewer.set_uniforms()
        self.shader.uniformi.assert_called_once_with('an_int_array', 1, 2, 3, 4, 5)
        self.assertEqual(self.shader.uniformf.call_count, 0)

    def test_ivec2_uniform(self):
        self.viewer.bindings['an_ivec2'] = {}
        self.viewer.bindings['an_ivec2']['type'] = "ivec2"
        self.viewer.bindings['an_ivec2']['default'] = [1, 2]
        self.viewer.set_uniforms()
        self.shader.uniformi.assert_called_once_with('an_ivec2', 1, 2)
        self.assertEqual(self.shader.uniformf.call_count, 0)

    def test_ivec3_uniform(self):
        self.viewer.bindings['an_ivec3'] = {}
        self.viewer.bindings['an_ivec3']['type'] = "ivec3"
        self.viewer.bindings['an_ivec3']['default'] = [1, 2, 3]
        self.viewer.set_uniforms()
        self.shader.uniformi.assert_called_once_with('an_ivec3', 1, 2, 3)
        self.assertEqual(self.shader.uniformf.call_count, 0)

    def test_ivec4_uniform(self):
        self.viewer.bindings['an_ivec4'] = {}
        self.viewer.bindings['an_ivec4']['type'] = "ivec4"
        self.viewer.bindings['an_ivec4']['default'] = [1, 2, 3, 4]
        self.viewer.set_uniforms()
        self.shader.uniformi.assert_called_once_with('an_ivec4', 1, 2, 3, 4)
        self.assertEqual(self.shader.uniformf.call_count, 0)

    def test_bool_uniform(self):
        self.viewer.bindings['a_bool'] = {}
        self.viewer.bindings['a_bool']['type'] = "bool"
        self.viewer.bindings['a_bool']['default'] = True
        self.viewer.set_uniforms()
        self.shader.uniformi.assert_called_once_with('a_bool', True)
        self.assertEqual(self.shader.uniformf.call_count, 0)

    def test_float_uniform(self):
        self.viewer.bindings['a_float'] = {}
        self.viewer.bindings['a_float']['type'] = "float"
        self.viewer.bindings['a_float']['default'] = 1.0
        self.viewer.set_uniforms()
        self.assertEqual(self.shader.uniformi.call_count, 0)
        self.shader.uniformf.assert_called_once_with('a_float', 1.0)

    def test_float_array_uniform(self):
        self.viewer.bindings['a_float_array'] = {}
        self.viewer.bindings['a_float_array']['type'] = "float"
        self.viewer.bindings['a_float_array']['default'] = [1.0, 1.1, 1.2, 1.3, 1.4]
        self.viewer.set_uniforms()
        self.assertEqual(self.shader.uniformi.call_count, 0)
        self.shader.uniformf.assert_called_once_with('a_float_array', 1.0, 1.1, 1.2, 1.3, 1.4)

    def test_vec2_uniform(self):
        self.viewer.bindings['a_vec2'] = {}
        self.viewer.bindings['a_vec2']['type'] = "vec2"
        self.viewer.bindings['a_vec2']['default'] = [1.0, 1.1]
        self.viewer.set_uniforms()
        self.assertEqual(self.shader.uniformi.call_count, 0)
        self.shader.uniformf.assert_called_once_with('a_vec2', 1.0, 1.1)

    def test_vec3_uniform(self):
        self.viewer.bindings['a_vec3'] = {}
        self.viewer.bindings['a_vec3']['type'] = "vec3"
        self.viewer.bindings['a_vec3']['default'] = [1.0, 1.1, 1.2]
        self.viewer.set_uniforms()
        self.assertEqual(self.shader.uniformi.call_count, 0)
        self.shader.uniformf.assert_called_once_with('a_vec3', 1.0, 1.1, 1.2)

    def test_vec4_uniform(self):
        self.viewer.bindings['a_vec4'] = {}
        self.viewer.bindings['a_vec4']['type'] = "vec4"
        self.viewer.bindings['a_vec4']['default'] = [1.0, 1.1, 1.2, 1.3]
        self.viewer.set_uniforms()
        self.assertEqual(self.shader.uniformi.call_count, 0)
        self.shader.uniformf.assert_called_once_with('a_vec4', 1.0, 1.1, 1.2, 1.3)
コード例 #26
0
class TestCreateArrayBinding(BaseCase):

    class mockUniform(object):
        def __init__(self):
            self.gdict = {}

        def group(self, key):
            return self.gdict[key]

    def setUp(self):
        shader = Mock(vertex_shader="", fragment_shader="")
        self.viewer = ShaderController(shader, "blank/blank_shader")
        self.viewer.init_int_array_binding = create_autospec(self.viewer.init_int_array_binding)
        self.viewer.init_float_array_binding = create_autospec(self.viewer.init_float_array_binding)
        self.viewer.init_bool_array_binding = create_autospec(self.viewer.init_bool_array_binding)
        self.viewer.init_vec2_array_binding = create_autospec(self.viewer.init_vec2_array_binding)
        self.viewer.init_vec3_array_binding = create_autospec(self.viewer.init_vec3_array_binding)
        self.viewer.init_vec4_array_binding = create_autospec(self.viewer.init_vec4_array_binding)

        self.uniform = TestCreateArrayBinding.mockUniform()

    def test_type_is_int(self):
        self.uniform.gdict['name'] = 'an_int'
        self.uniform.gdict['type'] = 'int'
        self.viewer.create_array_binding(self.uniform)
        self.viewer.init_int_array_binding.assert_called_once_with(self.viewer.bindings['an_int'], self.uniform)
        self.assertEqual(self.viewer.init_float_array_binding.call_count, 0)
        self.assertEqual(self.viewer.init_bool_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec2_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec3_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec4_array_binding .call_count, 0)
        self.assertEqual(self.viewer.bindings['an_int']['type'], 'int')

    def test_type_is_float(self):
        self.uniform.gdict['name'] = 'a_float'
        self.uniform.gdict['type'] = 'float'
        self.viewer.create_array_binding(self.uniform)
        self.assertEqual(self.viewer.init_int_array_binding  .call_count, 0)
        self.viewer.init_float_array_binding.assert_called_once_with(self.viewer.bindings['a_float'], self.uniform)
        self.assertEqual(self.viewer.init_bool_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec2_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec3_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec4_array_binding .call_count, 0)
        self.assertEqual(self.viewer.bindings['a_float']['type'], 'float')

    def test_type_is_bool(self):
        self.uniform.gdict['name'] = 'a_bool'
        self.uniform.gdict['type'] = 'bool'
        self.viewer.create_array_binding(self.uniform)
        self.assertEqual(self.viewer.init_int_array_binding  .call_count, 0)
        self.assertEqual(self.viewer.init_float_array_binding.call_count, 0)
        self.viewer.init_bool_array_binding.assert_called_once_with(self.viewer.bindings['a_bool'], self.uniform)
        self.assertEqual(self.viewer.init_vec2_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec3_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec4_array_binding .call_count, 0)
        self.assertEqual(self.viewer.bindings['a_bool']['type'], 'bool')

    def test_type_is_vec2(self):
        self.uniform.gdict['name'] = 'a_vec'
        self.uniform.gdict['type'] = 'vec2'
        self.viewer.create_array_binding(self.uniform)
        self.assertEqual(self.viewer.init_int_array_binding  .call_count, 0)
        self.assertEqual(self.viewer.init_float_array_binding.call_count, 0)
        self.assertEqual(self.viewer.init_bool_array_binding .call_count, 0)
        self.viewer.init_vec2_array_binding.assert_called_once_with(self.viewer.bindings['a_vec'], self.uniform)
        self.assertEqual(self.viewer.init_vec3_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec4_array_binding .call_count, 0)
        self.assertEqual(self.viewer.bindings['a_vec']['type'], 'vec2')

    def test_type_is_vec3(self):
        self.uniform.gdict['name'] = 'a_vec'
        self.uniform.gdict['type'] = 'vec3'
        self.viewer.create_array_binding(self.uniform)
        self.assertEqual(self.viewer.init_int_array_binding  .call_count, 0)
        self.assertEqual(self.viewer.init_float_array_binding.call_count, 0)
        self.assertEqual(self.viewer.init_bool_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec2_array_binding .call_count, 0)
        self.viewer.init_vec3_array_binding.assert_called_once_with(self.viewer.bindings['a_vec'], self.uniform)
        self.assertEqual(self.viewer.init_vec4_array_binding .call_count, 0)
        self.assertEqual(self.viewer.bindings['a_vec']['type'], 'vec3')

    def test_type_is_vec4(self):
        self.uniform.gdict['name'] = 'a_vec'
        self.uniform.gdict['type'] = 'vec4'
        self.viewer.create_array_binding(self.uniform)
        self.assertEqual(self.viewer.init_int_array_binding  .call_count, 0)
        self.assertEqual(self.viewer.init_float_array_binding.call_count, 0)
        self.assertEqual(self.viewer.init_bool_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec2_array_binding .call_count, 0)
        self.assertEqual(self.viewer.init_vec3_array_binding .call_count, 0)
        self.viewer.init_vec4_array_binding.assert_called_once_with(self.viewer.bindings['a_vec'], self.uniform)
        self.assertEqual(self.viewer.bindings['a_vec']['type'], 'vec4')
コード例 #27
0
 def setUp(self):
     shader = Mock(vertex_shader="", fragment_shader="")
     self.viewer = ShaderController(shader, "blank/blank_shader")
     self.uniform = TestSetupIntArray.mockUniform()
     self.binding = {}
コード例 #28
0
 def setUp(self):
     # Start with the blank shader
     shader = Mock(vertex_shader="", fragment_shader="")
     self.shader = ShaderController(shader, "blank/blank_shader")
     # Load a different json file
     self.shader.load_key_bindings(loadfile)