예제 #1
0
    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,
                        caption='Tinyblend example',
                        context=context)

        self.vao = (GLuint * 1)()
        glGenVertexArrays(1, self.vao)
        glBindVertexArray(self.vao[0])

        # Load shaders
        shader = shaders.from_files_names('shaders/main.glsl.vert',
                                          'shaders/main.glsl.frag')
        shader.owned = False
        shader.use()
        shader.enable_all_attributes()
        self.shader = shader

        # Uniforms matrices setup
        self.rotation = [-90, 0, 0]
        self.position = [0, 0, -4.5]
        shaders.transpose_matrices(False)
        self.upload_uniforms()

        # Scene creation
        self.setup_scene()

        # Show the window
        self.set_visible()
예제 #2
0
    def __init__(self, *args, **kwargs):
        super(ShaderWindow, self).__init__(*args, **kwargs)
        print("hwnd", self._hwnd)

        vert = './shader/vert.glsl'
        frag = './glslsandbox_converted/source/47478.glsl'
        self.shader_program = pyshaders.from_files_names(vert, frag)
        self.shader_program.use()

        tris = (-1, -1, -1, 1, 2, -1, 1, 1, -1, 1, 1, -1)
        self.polys = pyglet.graphics.vertex_list(6, ('v2f', tris))

        self.update_mouse_pos = False
        self.timescale = 1
        self.update_rate = 120

        self.backbuffer = None
        self.texture = pyglet.image.Texture.create(self.width, self.height,
                                                   gl.GL_RGBA)
        gl.glEnable(gl.GL_DEPTH_TEST)
        gl.glEnable(gl.GL_BLEND)

        pyglet.clock.schedule_interval(self._update_shader_time,
                                       1 / self.update_rate)
예제 #3
0
    p = win32gui.FindWindowEx(tophandle, 0, "SHELLDLL_DefView", None)
    if p != 0:
        workerw = win32gui.FindWindowEx(0, tophandle, "WorkerW", None)
        pyglet_hwnd = window._hwnd
        pyglet_hdc = win32gui.GetWindowDC(pyglet_hwnd)  #
        win32gui.SetParent(pyglet_hwnd, workerw)
    return True


win32gui.EnumWindows(_enum_windows, 0)  # sets window behind icons

# Shader creation
vert = './shader/vert.glsl'
#frag = './glslsandbox_converted/source/46931.glsl'
frag = './shader/frag/light-sabre.glsl'
shader = pyshaders.from_files_names(vert, frag)
shader.use()

framerate = 30
timescale = 1.0


def _update_shader_time(dt):
    if 'time' in shader.uniforms:
        shader.uniforms.time += dt * timescale


pyglet.clock.schedule_interval(_update_shader_time, 1 / framerate)

vert_count = 70000
vert_mode = GL_TRIANGLES
예제 #4
0
 def __init__(self, logger, parent_viewport):
     super().__init__(
         logger, parent_viewport,
         shader=from_files_names('shaders/shader.vert', 'shaders/onboarding_page/map_switcher_onboarding_page.frag')
     )
예제 #5
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)  
예제 #6
0
파일: test.py 프로젝트: gabdube/pyshaders
 def test_from_file_names(self):
     verts = vert_path('shader2') 
     frags = ( frag_path('shader2'), frag_path('frag_lib') )
     shader = from_files_names(verts, frags)
     
     self.assertTrue(shader.valid(), 'generated shader is not valid')
예제 #7
0
파일: test.py 프로젝트: gabdube/pyshaders
 def test_get_set_uniforms_single(self):
     " Test get set uniforms as single value "
     round_tuple = lambda x: tuple([round(y, 2) for y in x])
     shader = from_files_names(vert_path('shader1'), frag_path('shader1'))
     uni = shader.uniforms
     
     shader.use()  # Shader must be in use        
     
     uni.test_float = 10.53
     self.assertEqual(10.53, round(uni.test_float, 2))
     
     uni.test_vec2 = (5.4, 2.55)
     self.assertEqual((5.4, 2.55), round_tuple(uni.test_vec2) )
     
     uni.test_vec3 = (23.2, 64.33, 2.34)
     self.assertEqual((23.2, 64.33, 2.34), round_tuple(uni.test_vec3) )
     
     uni.test_vec4 = (11.1, 623.32, 67.75, 23.63)
     self.assertEqual((11.1, 623.32, 67.75, 23.63), round_tuple(uni.test_vec4) )
     
     uni.test_int = 8
     self.assertEqual(8, uni.test_int)
     
     uni.test_ivec2 = (844, 453)
     self.assertEqual((844, 453), uni.test_ivec2)
     
     uni.test_ivec3 = (843, 92, 1374)
     self.assertEqual((843, 92, 1374), uni.test_ivec3)
     
     uni.test_ivec4 = (735, 8372, 93, 652)
     self.assertEqual((735, 8372, 93, 652), uni.test_ivec4)
     
     uni.test_mat2 = ((5.0, 8.0), (2.0, 4.0))
     self.assertEqual(((5.0, 8.0), (2.0, 4.0)), uni.test_mat2)
     
     uni.test_mat3 = ((5.0, 8.0, 7.0), (2.0, 4.0, 21.0), (2.0, 10.0, 34.0))
     self.assertEqual(((5.0, 8.0, 7.0), (2.0, 4.0, 21.0), (2.0, 10.0, 34.0)), uni.test_mat3)
     
     uni.test_mat3 = ((5.0, 8.0, 7.0), (2.0, 4.0, 21.0), (2.0, 10.0, 34.0))
     self.assertEqual(((5.0, 8.0, 7.0), (2.0, 4.0, 21.0), (2.0, 10.0, 34.0)), uni.test_mat3)
     
     uni.test_mat4 = ((5.0, 8.0,  7.0,  9.0),
                      (2.0, 4.0,  21.0, 32.0),
                      (2.0, 10.0, 34.0, 91.0),
                      (1.0, 4.0,  8.0,  19.0))
     
     self.assertEqual(((5.0, 8.0,  7.0,  9.0),
                       (2.0, 4.0,  21.0, 32.0),
                       (2.0, 10.0, 34.0, 91.0),
                       (1.0, 4.0,  8.0,  19.0)), uni.test_mat4)
     
     uni.test_mat2x3 = ((8.0, 9.0, 10.0), (20.0, 11.0, 2.0))
     self.assertEqual(((8.0, 9.0, 10.0), (20.0, 11.0, 2.0)), uni.test_mat2x3)
     
     uni.test_mat2x4 = ((8.0, 9.0, 10.0, 3.0), (20.0, 11.0, 2.0, 13.0))
     self.assertEqual(((8.0, 9.0, 10.0, 3.0), (20.0, 11.0, 2.0, 13.0)), uni.test_mat2x4)
     
     uni.test_mat3x2 = ((8.0, 9.0), (20.0, 11.0), (17.0, 16.0))
     self.assertEqual(((8.0, 9.0), (20.0, 11.0), (17.0, 16.0)), uni.test_mat3x2)
     
     uni.test_mat3x4 = ((8.0,  9.0,  10.0,  3.0),
                        (20.0, 11.0,  2.0, 13.0),
                        (14.0, 15.0, 16.0, 83.0))
     self.assertEqual(((8.0,  9.0,  10.0,  3.0),
                        (20.0, 11.0,  2.0, 13.0),
                        (14.0, 15.0, 16.0, 83.0)), uni.test_mat3x4)
     
     uni.test_mat4x2 = ((10.0, 11.0), (12.0, 13.0),
                        ( 1.0,  2.0), (14.0, 15.0))
     self.assertEqual(((10.0, 11.0), (12.0, 13.0),
                        ( 1.0,  2.0), (14.0, 15.0)), uni.test_mat4x2)
     
     uni.test_mat4x3 = ((1.0, 2.0, 3.0), ( 4.0,  5.0,  6.0),
                        (7.0, 8.0, 9.0), (10.0, 11.0, 12.0))
     self.assertEqual(((1.0, 2.0, 3.0), ( 4.0,  5.0,  6.0),
                        (7.0, 8.0, 9.0), (10.0, 11.0, 12.0)), uni.test_mat4x3)
예제 #8
0
파일: test.py 프로젝트: vintch/pyshaders
    def test_get_set_uniforms_single(self):
        " Test get set uniforms as single value "
        round_tuple = lambda x: tuple([round(y, 2) for y in x])
        shader = from_files_names(vert_path('shader1'), frag_path('shader1'))
        uni = shader.uniforms

        shader.use()  # Shader must be in use

        uni.test_float = 10.53
        self.assertEqual(10.53, round(uni.test_float, 2))

        uni.test_vec2 = (5.4, 2.55)
        self.assertEqual((5.4, 2.55), round_tuple(uni.test_vec2))

        uni.test_vec3 = (23.2, 64.33, 2.34)
        self.assertEqual((23.2, 64.33, 2.34), round_tuple(uni.test_vec3))

        uni.test_vec4 = (11.1, 623.32, 67.75, 23.63)
        self.assertEqual((11.1, 623.32, 67.75, 23.63),
                         round_tuple(uni.test_vec4))

        uni.test_int = 8
        self.assertEqual(8, uni.test_int)

        uni.test_ivec2 = (844, 453)
        self.assertEqual((844, 453), uni.test_ivec2)

        uni.test_ivec3 = (843, 92, 1374)
        self.assertEqual((843, 92, 1374), uni.test_ivec3)

        uni.test_ivec4 = (735, 8372, 93, 652)
        self.assertEqual((735, 8372, 93, 652), uni.test_ivec4)

        uni.test_mat2 = ((5.0, 8.0), (2.0, 4.0))
        self.assertEqual(((5.0, 8.0), (2.0, 4.0)), uni.test_mat2)

        uni.test_mat3 = ((5.0, 8.0, 7.0), (2.0, 4.0, 21.0), (2.0, 10.0, 34.0))
        self.assertEqual(
            ((5.0, 8.0, 7.0), (2.0, 4.0, 21.0), (2.0, 10.0, 34.0)),
            uni.test_mat3)

        uni.test_mat3 = ((5.0, 8.0, 7.0), (2.0, 4.0, 21.0), (2.0, 10.0, 34.0))
        self.assertEqual(
            ((5.0, 8.0, 7.0), (2.0, 4.0, 21.0), (2.0, 10.0, 34.0)),
            uni.test_mat3)

        uni.test_mat4 = ((5.0, 8.0, 7.0, 9.0), (2.0, 4.0, 21.0, 32.0),
                         (2.0, 10.0, 34.0, 91.0), (1.0, 4.0, 8.0, 19.0))

        self.assertEqual(((5.0, 8.0, 7.0, 9.0), (2.0, 4.0, 21.0, 32.0),
                          (2.0, 10.0, 34.0, 91.0), (1.0, 4.0, 8.0, 19.0)),
                         uni.test_mat4)

        uni.test_mat2x3 = ((8.0, 9.0, 10.0), (20.0, 11.0, 2.0))
        self.assertEqual(((8.0, 9.0, 10.0), (20.0, 11.0, 2.0)),
                         uni.test_mat2x3)

        uni.test_mat2x4 = ((8.0, 9.0, 10.0, 3.0), (20.0, 11.0, 2.0, 13.0))
        self.assertEqual(((8.0, 9.0, 10.0, 3.0), (20.0, 11.0, 2.0, 13.0)),
                         uni.test_mat2x4)

        uni.test_mat3x2 = ((8.0, 9.0), (20.0, 11.0), (17.0, 16.0))
        self.assertEqual(((8.0, 9.0), (20.0, 11.0), (17.0, 16.0)),
                         uni.test_mat3x2)

        uni.test_mat3x4 = ((8.0, 9.0, 10.0, 3.0), (20.0, 11.0, 2.0, 13.0),
                           (14.0, 15.0, 16.0, 83.0))
        self.assertEqual(((8.0, 9.0, 10.0, 3.0), (20.0, 11.0, 2.0, 13.0),
                          (14.0, 15.0, 16.0, 83.0)), uni.test_mat3x4)

        uni.test_mat4x2 = ((10.0, 11.0), (12.0, 13.0), (1.0, 2.0), (14.0,
                                                                    15.0))
        self.assertEqual(
            ((10.0, 11.0), (12.0, 13.0), (1.0, 2.0), (14.0, 15.0)),
            uni.test_mat4x2)

        uni.test_mat4x3 = ((1.0, 2.0, 3.0), (4.0, 5.0, 6.0), (7.0, 8.0, 9.0),
                           (10.0, 11.0, 12.0))
        self.assertEqual(((1.0, 2.0, 3.0), (4.0, 5.0, 6.0), (7.0, 8.0, 9.0),
                          (10.0, 11.0, 12.0)), uni.test_mat4x3)

        tex_16x16 = pyglet.image.load(tex_path("texture_16x16")).get_texture()
        tex_31x16 = pyglet.image.load(
            tex_path("texture_31x16")).get_texture(rectangle=True)
        #
        uni.test_tex = tex_16x16
        self.assertEqual(0, uni.test_tex)
        uni.test_tex_rect = tex_31x16
        self.assertEqual(1, uni.test_tex_rect)
        #
        uni.test_tex = tex_16x16  # check for texture units bindings preserving
        self.assertEqual(0, uni.test_tex)
        uni.test_tex_rect = tex_31x16
        self.assertEqual(1, uni.test_tex_rect)
        #
        uni.test_tex = 2
        self.assertEqual(2, uni.test_tex)
        uni.test_tex_rect = 3
        self.assertEqual(3, uni.test_tex_rect)
예제 #9
0
    def __init__(self, aspect: float):
        self.array = buffer_array = gl.GLuint(0)
        self.vertices = vertex_buffer = gl.GLuint(0)
        self.offsets = offset_buffer = gl.GLuint(0)
        self.indices = index_buffer = gl.GLuint(0)

        self.edge_chunks = 3
        self.instances = 0
        self.stored_chunks: list[int] = []

        gl.glGenVertexArrays(1, byref(buffer_array))
        gl.glGenBuffers(1, byref(vertex_buffer))
        gl.glGenBuffers(1, byref(offset_buffer))
        gl.glGenBuffers(1, byref(index_buffer))

        self.shader = from_files_names(
            "res/Shaders/chunk.vert",
            "res/Shaders/chunk.frag"
        )
        self.shader.use()

        width = aspect if aspect >= 1.0 else 1.0
        height = 1.0 / aspect if aspect < 1.0 else 1.0
        self.shader.uniforms["projection"].set((
            (1.0 / width, 0.0,          0.0, 0.0),
            (0.0,         1.0 / height, 0.0, 0.0),
            (0.0,         0.0,          1.0, 0.0),
            (0.0,         0.0,          0.0, 1.0)
        ))

        cell_size = 1.0 / Chunk.edge_cells

        # The math gets weird converting between quad and edge space.
        num_quads_x = num_quads_y = Chunk.edge_cells

        num_vertices_x = num_quads_x + 1
        num_vertices_y = num_quads_y + 1

        def construct_vertex_buffer():
            # Crazy thought, instead of creating quads here, we can render points
            #   and use a geometry shader to create the quads.
            # Saves (width + height) * 2 * sizeof(float) bytes on vertices and completely
            #   elminiates indices.

            # Create vertex buffer.
            x_slice = y_slice = cell_size
            chunk_vertices = (gl.GLfloat * (num_vertices_x * num_vertices_y * 2))()
            for row in range(num_vertices_y):
                for col in range(num_vertices_x):
                    index = (row * num_vertices_x + col) * 2  # Convert to array space.
                    chunk_vertices[index:index + 2] = (
                        # Define the chunk by its center.
                        x_slice * float(col) - 0.5,
                        y_slice * float(row) - 0.5
                    )

            gl.glBufferData(
                gl.GL_ARRAY_BUFFER,
                sizeof(chunk_vertices),
                chunk_vertices,
                gl.GL_STATIC_DRAW
            )

            gl.glEnableVertexAttribArray(0)
            gl.glVertexAttribPointer(0, 2, gl.GL_FLOAT, False, 2 * sizeof(gl.GLfloat), 0)

        def construct_offset_buffer():
            gl.glBufferData(gl.GL_ARRAY_BUFFER, 9 * 2 * sizeof(gl.GLfloat), None, gl.GL_DYNAMIC_DRAW)

            gl.glEnableVertexAttribArray(1)
            gl.glVertexAttribPointer(1, 2, gl.GL_FLOAT, False, 2 * sizeof(gl.GLfloat), 0)
            gl.glVertexAttribDivisor(1, 1)

        def construct_index_buffer():
            chunk_indices = (gl.GLuint * (num_quads_x * num_quads_y * 6))()
            for row in range(num_quads_y):
                for col in range(num_quads_x):
                    current_quad = row * num_quads_x + col  # Calculate the current block in the chunk.
                    left_corner = current_quad + row  # Add one extra column each time we need to go up a row.
                    index = current_quad * 6  # Convert to array space.
                    chunk_indices[index:index + 6] = (
                        # Quad lower right triangle.
                        left_corner,
                        left_corner + 1,
                        left_corner + num_vertices_x + 1,

                        # Quad upper right triangle.
                        left_corner + num_vertices_x + 1,
                        left_corner + num_vertices_x,
                        left_corner
                    )

            gl.glBufferData(gl.GL_ELEMENT_ARRAY_BUFFER, sizeof(chunk_indices), chunk_indices, gl.GL_STATIC_DRAW)

        gl.glBindVertexArray(buffer_array)
        gl.glBindBuffer(gl.GL_ARRAY_BUFFER, vertex_buffer)
        construct_vertex_buffer()

        gl.glBindBuffer(gl.GL_ARRAY_BUFFER, offset_buffer)
        construct_offset_buffer()

        gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, index_buffer)
        construct_index_buffer()

        gl.glBindVertexArray(0)
        gl.glBindBuffer(gl.GL_ARRAY_BUFFER, 0)
        gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, 0)
예제 #10
0
    def on_draw(self):
        self.clear()
        self.shape_1.render()
        # self.shape_2.render()

    # def on_resize(self, width, height):
    #     pyglet.gl.glViewport(0, 0, width, height)

    def on_key_press(self, symbol, modifiers):
        if symbol in colour_map.keys():
            shader.uniforms.colour = colour_map[symbol]


pyglet.gl.glClearColor(0, 0, 0, 0)

w = 512
h = w
window = MyWindow(visible=True, width=w, height=h, resizable=True)

shader = pyshaders.from_files_names("example.vert", "example.frag")
shader.use()

shader.uniforms.offset_x = 0.1
shader.uniforms.colour = 1

colour_map = {getattr(key, f"_{i}"): (i + 1) / 10 for i in range(10)}

if __name__ == '__main__':
    pyglet.app.run()