Exemple #1
0
    def _compile(self):
        if self.shader:
            return
        if self.compiling:
            return
        self.compiling = True

        self.shader = gl.glCreateShaderObjectARB(self.shaderType())
        if self.shader == 0:
            raise GLSLException('faled to create shader object')

        prog = c_char_p(self.prog)
        length = c_int(-1)
        gl.glShaderSourceARB(self.shader, 1,
                             cast(byref(prog), POINTER(POINTER(c_char))),
                             byref(length))
        gl.glCompileShaderARB(self.shader)

        self.compiling = False

        compile_status = c_int(0)
        gl.glGetObjectParameterivARB(self.shader,
                                     gl.GL_OBJECT_COMPILE_STATUS_ARB,
                                     byref(compile_status))

        if not compile_status.value:
            err = glsl_log(self.shader)
            gl.glDeleteObjectARB(self.shader)
            self.shader = 0
            raise GLSLException('failed to compile shader', err)
Exemple #2
0
    def link(self):
        if self.vertex_shader is not None:
            self.vertex_shader.compileFlat()
        if self.fragment_shader is not None:
            self.fragment_shader.compileFlat()

        self.program = gl.glCreateProgramObjectARB()
        if self.program == 0:
            raise GLSLException('failed to create program object')

        if self.vertex_shader is not None:
            self.vertex_shader.attachFlat(self.program)
        if self.fragment_shader is not None:
            self.fragment_shader.attachFlat(self.program)

        gl.glLinkProgramARB(self.program)

        link_status = c_int(0)
        gl.glGetObjectParameterivARB(self.program,
                                     gl.GL_OBJECT_LINK_STATUS_ARB,
                                     byref(link_status))
        if link_status.value == 0:
            err = glsl_log(self.program)
            gl.glDeleteObjectARB(self.program)
            self.program = 0
            raise GLSLException('failed to link shader', err)

        self.__class__._uloc_ = {}
        self.__class__._vloc_ = {}

        return self.program
Exemple #3
0
    def compileFlat(self):
        if self.isCompiled():
            return

        self.shader = gl.glCreateShaderObjectARB(self.shaderType())
        if self.shader == 0:
            raise GLSLException('faled to create shader object')

        all_source = [b'\n'.join(self._source())]
        prog = (c_char_p * len(all_source))(*all_source)
        length = (c_int * len(all_source))(-1)
        gl.glShaderSourceARB(self.shader, len(all_source),
                             cast(prog, POINTER(POINTER(c_char))), length)
        gl.glCompileShaderARB(self.shader)

        compile_status = c_int(0)
        gl.glGetObjectParameterivARB(self.shader,
                                     gl.GL_OBJECT_COMPILE_STATUS_ARB,
                                     byref(compile_status))

        if not compile_status.value:
            err = glsl_log(self.shader)
            gl.glDeleteObjectARB(self.shader)
            self.shader = 0
            raise GLSLException('failed to compile shader', err)
Exemple #4
0
    def _compile(self):
        if self.shader:
            return
        if self.compiling:
            return
        self.compiling = True

        self.shader = gl.glCreateShaderObjectARB(self.shaderType())
        if self.shader == 0:
            raise GLSLException('faled to create shader object')

        prog = c_char_p(self.prog)
        length = c_int(-1)
        gl.glShaderSourceARB(self.shader,
                          1,
                          cast(byref(prog), POINTER(POINTER(c_char))),
                          byref(length))
        gl.glCompileShaderARB(self.shader)

        self.compiling = False

        compile_status = c_int(0)
        gl.glGetObjectParameterivARB(self.shader, gl.GL_OBJECT_COMPILE_STATUS_ARB, byref(compile_status))

        if not compile_status.value:
            err = glsl_log(self.shader)
            gl.glDeleteObjectARB(self.shader)
            self.shader = 0
            raise GLSLException('failed to compile shader', err)
Exemple #5
0
    def link(self):
        if self.vertex_shader is not None:
            self.vertex_shader.compileFlat()
        if self.fragment_shader is not None:
            self.fragment_shader.compileFlat()

        self.program = gl.glCreateProgramObjectARB()
        if self.program == 0:
            raise GLSLException('failed to create program object')

        if self.vertex_shader is not None:
            self.vertex_shader.attachFlat(self.program)
        if self.fragment_shader is not None:
            self.fragment_shader.attachFlat(self.program)

        gl.glLinkProgramARB(self.program)

        link_status = c_int(0)
        gl.glGetObjectParameterivARB(self.program, gl.GL_OBJECT_LINK_STATUS_ARB, byref(link_status))
        if link_status.value == 0:
            err = glsl_log(self.program)
            gl.glDeleteObjectARB(self.program)
            self.program = 0
            raise GLSLException('failed to link shader', err)

        self.__class__._uloc_ = {}
        self.__class__._vloc_ = {}

        return self.program
Exemple #6
0
    def compileFlat(self):
        if self.isCompiled():
            return

        self.shader = gl.glCreateShaderObjectARB(self.shaderType())
        if self.shader == 0:
            raise GLSLException('faled to create shader object')

        all_source = [b'\n'.join(self._source())]
        prog = (c_char_p * len(all_source))(*all_source)
        length = (c_int * len(all_source))(-1)
        gl.glShaderSourceARB(self.shader,
                          len(all_source),
                          cast(prog, POINTER(POINTER(c_char))),
                          length)
        gl.glCompileShaderARB(self.shader)

        compile_status = c_int(0)
        gl.glGetObjectParameterivARB(self.shader, gl.GL_OBJECT_COMPILE_STATUS_ARB, byref(compile_status))

        if not compile_status.value:
            err = glsl_log(self.shader)
            gl.glDeleteObjectARB(self.shader)
            self.shader = 0
            raise GLSLException('failed to compile shader', err)
Exemple #7
0
def glsl_log(handle):
    if handle == 0:
        return ''
    log_len = c_int(0)

    gl.glGetObjectParameterivARB(handle, gl.GL_OBJECT_INFO_LOG_LENGTH_ARB,
                                 byref(log_len))
    if log_len.value == 0:
        return ''

    log = create_string_buffer(log_len.value)  # does log_len include the NUL?

    chars_written = c_int(0)
    gl.glGetInfoLogARB(handle, log_len.value, byref(chars_written), log)

    return log.value
Exemple #8
0
def glsl_log(handle):
    if handle == 0:
        return ''
    log_len = c_int(0)

    gl.glGetObjectParameterivARB(handle, gl.GL_OBJECT_INFO_LOG_LENGTH_ARB,
                              byref(log_len))
    if log_len.value == 0:
        return ''

    log = create_string_buffer(log_len.value)  # does log_len include the NUL?

    chars_written = c_int(0)
    gl.glGetInfoLogARB(handle, log_len.value, byref(chars_written), log)

    return log.value