Esempio n. 1
0
    def test_setitem(self):
        dtype = np.dtype( [ ('position', np.float32, 3),
                            ('texcoord', np.float32, 2),
                            ('color',    np.float32, 4) ] )
        data = np.zeros(100, dtype=dtype)
        buffer = VertexBuffer(data)

        with self.assertRaises(ValueError):
            buffer['color'] = data['color']
        
        buffer[...] = data
        assert len(buffer._pending_data) == 2

        buffer[10:20] = data[10:20]
        assert len(buffer._pending_data) == 3
    
        # Discart all pending data
        buffer.set_data(data)
        assert len(buffer._pending_data) == 1
        
        with self.assertRaises(ValueError):
            buffer[10:20] = data[10:19]

        with self.assertRaises(ValueError):
            buffer[10:20] = data[10:21]
Esempio n. 2
0
    def test_init_with_structured_data(self):
        
        # Singular 1
        data = np.zeros(100, [('a', np.float32, 1)])
        buffer = VertexBuffer(data)
        assert buffer.count == 100
        assert buffer.vsize == 1
        assert buffer.dtype == np.float32
        
        # Singular 2
        data = np.zeros(100, [('a', np.float32, 4)])
        buffer = VertexBuffer(data)
        assert buffer.count == 100
        assert buffer.vsize == 4
        assert buffer.dtype == np.float32
        
        
        # Multple
        data = np.zeros(100, [ ('a', np.float32, 1),
                               ('b', np.uint8, 2),
                               ('c', np.int16, 3) ] )
        buffer = VertexBuffer(data)
        
        assert buffer.vsize == 1
        assert buffer.dtype == data.dtype
        
        assert buffer['a'].vsize == 1
        assert buffer['a'].dtype == np.float32

        assert buffer['b'].vsize == 2
        assert buffer['b'].dtype == np.uint8

        assert buffer['c'].vsize == 3
        assert buffer['c'].dtype == np.int16
Esempio n. 3
0
    def test_setitem(self):
        dtype = np.dtype([('position', np.float32, 3),
                          ('texcoord', np.float32, 2),
                          ('color', np.float32, 4)])
        data = np.zeros(100, dtype=dtype)
        buffer = VertexBuffer(data)

        def setter(b, d):
            b['color'] = d['color']
        self.assertRaises(ValueError, setter, buffer, data)

        buffer[...] = data
        self.assertEqual(len(buffer._pending_data), 2)

        buffer[10:20] = data[10:20]
        self.assertEqual(len(buffer._pending_data), 3)

        # Discart all pending data
        buffer.set_data(data)
        self.assertEqual(len(buffer._pending_data), 1)

        def setter(b, d):
            b[10:20] = d[10:19]
        self.assertRaises(ValueError, setter, buffer, data)

        def setter(b, d):
            buffer[10:20] = data[10:21]
        self.assertRaises(ValueError, setter, buffer, data)
Esempio n. 4
0
 def test_typechecking(self):
     
     # VertexBuffer supports these
     for dtype in (np.uint8, np.int8, np.uint16, np.int16,
                   np.float32, np.float16):
         buffer = VertexBuffer(dtype)
     
     # VertexBuffer does *not* support these
     float128 = getattr(np, 'float128', np.float64)  # may not exist
     for dtype in (np.uint32, np.int32, np.float64, float128):
         with self.assertRaises(TypeError):
             buffer = VertexBuffer(dtype)
Esempio n. 5
0
    def test_resize(self):

        # Resize allowed with set_data (and offset=0)
        V = VertexBuffer(np.float32)
        V.set_data(np.ones(200, np.float32))
        assert V.count == 200

        V.set_data(np.ones(300, np.float32))
        assert V.count == 300

        # Resize not allowed with set_subdata
        self.assertRaises(ValueError, V.set_subdata, 0,
                          np.ones(400, np.float32))
Esempio n. 6
0
    def test_stride(self):
        dtype = np.dtype( [ ('position', np.float32, 3),
                            ('texcoord', np.float32, 2),
                            ('color',    np.float32, 4) ] )
        data = np.zeros(100, dtype=dtype)
        buffer = VertexBuffer(data)

        assert buffer['position'].stride == 9*np.dtype(np.float32).itemsize
        assert buffer['texcoord'].stride == 9*np.dtype(np.float32).itemsize
        assert buffer['color'].stride    == 9*np.dtype(np.float32).itemsize


        buffer = VertexBuffer(data['position'])
        assert buffer.offset == 0
        assert buffer.stride == 3*np.dtype(np.float32).itemsize
Esempio n. 7
0
    def test_glsl_type(self):

        data = np.zeros((10, ), np.float32)
        B = VertexBuffer(data)
        C = B[1:]
        assert B.glsl_type == ('attribute', 'float')
        assert C.glsl_type == ('attribute', 'float')

        data = np.zeros((10, 2), np.float32)
        B = VertexBuffer(data)
        C = B[1:]
        assert B.glsl_type == ('attribute', 'vec2')
        assert C.glsl_type == ('attribute', 'vec2')

        data = np.zeros((10, 4), np.float32)
        B = VertexBuffer(data)
        C = B[1:]
        assert B.glsl_type == ('attribute', 'vec4')
        assert C.glsl_type == ('attribute', 'vec4')
Esempio n. 8
0
 def test_resize(self):
     
     # Resize allowed with set_data (and offset=0)
     V = VertexBuffer(np.float32)
     V.set_data(np.ones(200, np.float32))
     assert V.count == 200
     
     V.set_data(np.ones(300, np.float32))
     assert V.count == 300
     
     # Resize not allowed with set_subdata
     with self.assertRaises(ValueError):
         V.set_subdata(0, np.ones(400, np.float32))
Esempio n. 9
0
 def test_init_with_data(self):
     
     for dtype in (np.float32, np.uint8, np.int16):
     
         data = np.zeros(100, dtype)
         buffer = VertexBuffer(data)
         assert buffer.count == 100
         assert buffer.vsize == 1
         assert buffer.dtype == dtype
         
         data = np.zeros((100, 1), dtype)
         buffer = VertexBuffer(data)
         assert buffer.count == 100
         assert buffer.vsize == 1
         assert buffer.dtype == dtype
 
         data = np.zeros((100,4), dtype)
         buffer = VertexBuffer(data)
         assert buffer.count == 100
         assert buffer.vsize == 4
         assert buffer.dtype == dtype
Esempio n. 10
0
 def test_init_with_dtype(self):
     
     # Single element, this is simply unraveled
     dtype = np.dtype([('a',np.float32,4)])
     buffer = VertexBuffer(dtype)
     assert buffer.count == 0
     assert buffer.vsize == 4
     assert buffer.dtype == np.float32
     
     # Short notation specific to VertexBuffer
     buffer = VertexBuffer(('a',np.float32,4))
     assert buffer.vsize == 4
     assert buffer.dtype == np.float32
     
     # Plain dtype descriptor
     buffer = VertexBuffer(np.float32)
     assert buffer.vsize == 1
     assert buffer.dtype == np.float32
     
     # String dtype descirptor
     buffer = VertexBuffer('float32')
     assert buffer.vsize == 1
     assert buffer.dtype == np.float32
     
     # Multiple elements
     dtype = dtype=[('a',np.float32,4), ('b',np.uint8,2)]
     buffer = VertexBuffer(dtype)
     assert buffer.count == 0
     assert buffer.vsize == 1
     assert buffer.dtype == np.dtype(dtype)
     #
     subbuffer = buffer['a']
     assert subbuffer.count == 0
     assert subbuffer.vsize == 4
     assert subbuffer.dtype == np.float32
     #
     subbuffer = buffer['b']
     assert subbuffer.count == 0
     assert subbuffer.vsize == 2
     assert subbuffer.dtype == np.uint8
Esempio n. 11
0
 def test_set_vars(self):
     vert = VertexShader("attribute vec4 color;")
     frag = FragmentShader("")
     program = Program(vert, frag)
     arr = np.array((100, 5), dtype=np.float32)
     assert_raises(ValueError, program.set_vars, arr)
     dtype = np.dtype([('position', np.float32, 3),
                       ('texcoord', np.float32, 2),
                       ('color', np.float32, 4)])
     data = np.zeros(100, dtype=dtype)
     arr = VertexBuffer(data)
     program.set_vars(arr)
     assert_raises(TypeError, program.set_vars, 'hello')
     program.set_vars(dict(color=arr, fake=arr))
Esempio n. 12
0
 def test_set_data_on_view(self):
     
     dtype = np.dtype( [ ('a', np.float32, 3),
                         ('b', np.float32, 2),
                         ('c',    np.float32, 4) ] )
     data = np.zeros(100, dtype=dtype)
     buffer = VertexBuffer(data)
     
     with self.assertRaises(RuntimeError):
         buffer['a'].set_count(100)
     
     with self.assertRaises(RuntimeError):
         buffer['a'].set_data(data['a'])
     
     with self.assertRaises(RuntimeError):
         buffer['a'].set_subdata(data['a'])
Esempio n. 13
0
    def test_set_attribute_float(self):

        vert = VertexShader("attribute float f;")
        frag = FragmentShader("")

        program = Program(vert, frag)
        program["f"] = VertexBuffer(np.zeros(100, dtype=np.float32))
        assert program._attributes["f"].count == 100

        program = Program(vert, frag)
        program["f"] = ClientVertexBuffer(
            np.zeros((100, 1, 1), dtype=np.float32))
        assert program._attributes["f"].count == 100

        program = Program(vert, frag)
        with self.assertRaises(ValueError):
            program["f"] = np.zeros((100, 1, 1), dtype=np.float32)
Esempio n. 14
0
    def test_set_attribute_float(self):

        vert = VertexShader("attribute float f;")
        frag = FragmentShader("")

        program = Program(vert, frag)
        program["f"] = VertexBuffer(np.zeros(100, dtype=np.float32))
        assert program._attributes["f"].count == 100

        program = Program(vert, frag)
        program.set_vars(f=ClientVertexBuffer(np.zeros((100, 1, 1),
                                                       dtype=np.float32)))
        assert_raises(NameError, program.set_vars, junk='foo')
        assert program._attributes["f"].count == 100

        program = Program(vert, frag)

        def modifier(p):
            p["f"] = np.zeros((100, 1, 1), dtype=np.float32)
        self.assertRaises(ValueError, modifier, program)
Esempio n. 15
0
    def test_init_allowed_dtype(self):
        for dtype in (np.uint8, np.int8, np.uint16, np.int16, np.float32):
            V = VertexBuffer(np.zeros((10, 3), dtype=dtype))
            names = V.dtype.names
            assert V.dtype[names[0]].base == dtype
            assert V.dtype[names[0]].shape == (3,)
        for dtype in (np.float64, np.int64):
            self.assertRaises(TypeError, VertexBuffer,
                              np.zeros((10, 3), dtype=dtype))

        # Tuple/list is also allowed
        V = VertexBuffer([1, 2, 3])
        assert V.size == 3
        assert V.itemsize == 4
        #
        V = VertexBuffer([[1, 2], [3, 4], [5, 6]])
        assert V.size == 3
        assert V.itemsize == 2 * 4
        
        # Convert
        data = np.zeros((10,), 'uint8')
        B = VertexBuffer(data)
        assert B.dtype[0].base == np.uint8
        assert B.dtype[0].itemsize == 1
        #
        data = np.zeros((10, 2), 'uint8')
        B = VertexBuffer(data)
        assert B.dtype[0].base == np.uint8
        assert B.dtype[0].itemsize == 2
        B.set_data(data, convert=True)
        assert B.dtype[0].base == np.float32
        assert B.dtype[0].itemsize == 8
        B = VertexBuffer(data[::2].copy())
        
        # This is converted to 1D
        B = VertexBuffer([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]])
        assert B.size == 10 
         
        # Not allowed
        self.assertRaises(TypeError, VertexBuffer, dtype=np.float64)
Esempio n. 16
0
 def test_init(self):
     data = np.zeros(100, np.float32)
     buffer = VertexBuffer(data=data)
     assert buffer.count == 100
     assert buffer.vsize == 1
     assert buffer.dtype == np.float32
Esempio n. 17
0
 def test_init_allowed_dtype(self):
     for dtype in (np.uint8, np.int8, np.uint16, np.int16, np.float32):
         V = VertexBuffer(dtype=dtype)
         names = V.dtype.names
         assert V.dtype[names[0]].base == dtype
         assert V.dtype[names[0]].shape == ()
Esempio n. 18
0
    def test_init_allowed_dtype(self):
        for dtype in (np.uint8, np.int8, np.uint16, np.int16, np.float32):
            V = VertexBuffer(np.zeros((10, 3), dtype=dtype))
            names = V.dtype.names
            assert V.dtype[names[0]].base == dtype
            assert V.dtype[names[0]].shape == (3, )

        # Tuple/list is also allowed
        V = VertexBuffer([1, 2, 3])
        assert V.size == 3
        assert V.itemsize == 4
        #
        V = VertexBuffer([[1, 2], [3, 4], [5, 6]])
        assert V.size == 3
        assert V.itemsize == 2 * 4

        # Convert
        data = np.zeros((10, ), 'uint8')
        B = VertexBuffer(data)
        assert B.dtype[0].base == np.uint8
        assert B.dtype[0].itemsize == 1
        #
        data = np.zeros((10, 2), 'uint8')
        B = VertexBuffer(data)
        assert B.dtype[0].base == np.uint8
        assert B.dtype[0].itemsize == 2
        B.set_data(data, convert=True)
        assert B.dtype[0].base == np.float32
        assert B.dtype[0].itemsize == 8
        B = VertexBuffer(data[::2].copy())

        # This is converted to 1D
        B = VertexBuffer([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]])
        assert B.size == 10

        # Not allowed
        self.assertRaises(TypeError, VertexBuffer, dtype=np.float64)