示例#1
0
    def shader_compile(name, shader, src):
        '''
        logging and error-checking not quite working :(
        '''

        bgl.glCompileShader(shader)

        # report shader compilation log (if any)
        bufLogLen = bgl.Buffer(bgl.GL_INT, 1)
        bgl.glGetShaderiv(shader, bgl.GL_INFO_LOG_LENGTH, bufLogLen)
        if bufLogLen[0] > 0:
            # report log available
            bufLog = bgl.Buffer(bgl.GL_BYTE, bufLogLen)
            bgl.glGetShaderInfoLog(shader, bufLogLen[0], bufLogLen, bufLog)
            log = ''.join(chr(v) for v in bufLog.to_list() if v)
            if log:
                print('SHADER REPORT %s' % name)
                print('\n'.join(['    %s' % l for l in log.splitlines()]))
            else:
                print('Shader %s has no report' % name)
        else:
            log = ''

        # report shader compilation status
        bufStatus = bgl.Buffer(bgl.GL_INT, 1)
        bgl.glGetShaderiv(shader, bgl.GL_COMPILE_STATUS, bufStatus)
        if bufStatus[0] == 0:
            print('ERROR WHILE COMPILING SHADER %s' % name)
            print('\n'.join([
                '   % 4d  %s' % (i + 1, l)
                for (i, l) in enumerate(src.splitlines())
            ]))
            assert False

        return log
示例#2
0
def check_shaderError(shader, flag, isProgram, errorMessage):
    success = bgl.Buffer(bgl.GL_INT, 1)
    slen = 1024
    if isProgram:
        bgl.glGetProgramiv(shader, flag, success)
        check_error("glGetProgramiv")

    else:
        bgl.glGetShaderiv(shader, flag, success)
        check_error("glGetShaderiv")

    import numpy as np
    from .bgl_ext import VoidBufValue

    offset = VoidBufValue(None)
    error = bgl.Buffer(bgl.GL_BYTE, slen)

    if isProgram:
        bgl.glGetProgramInfoLog(shader, slen, offset.buf, error)
        check_error("glGetProgramInfoLog")
    else:
        bgl.glGetShaderInfoLog(shader, slen, offset.buf, error)
        check_error("glGetShaderInfoLog")

    print(np.bytes_(error).decode("utf-8"))

    del offset
    if success[0] != bgl.GL_TRUE:
        print(errorMessage, np.bytes_(error).decode("utf-8"))
        raise RuntimeError(errorMessage, error)
示例#3
0
def compile_shader(type, source):
    shader = bgl.glCreateShader(type)
    bgl.glShaderSource(shader, source)
    bgl.glCompileShader(shader)
    status = bgl.Buffer(bgl.GL_INT, 1)
    bgl.glGetShaderiv(shader, bgl.GL_COMPILE_STATUS, status)
    if status[0] != bgl.GL_TRUE:
        infoLog = bgl.Buffer(bgl.GL_BYTE, 1024)
        length = bgl.Buffer(bgl.GL_INT, 1)
        bgl.glGetShaderInfoLog(shader, 1024, length, infoLog)
        raise RuntimeError(''.join(chr(infoLog[i]) for i in range(length[0])))
    return shader
 def shader_compile(shader):
     '''
     logging and error-checking not quite working :(
     '''
     
     bufLen = bgl.Buffer(bgl.GL_BYTE, 4)
     bufLog = bgl.Buffer(bgl.GL_BYTE, 2000)
     
     bgl.glCompileShader(shader)
     
     bgl.glGetShaderInfoLog(shader, 2000, bufLen, bufLog)
     log = ''.join(chr(v) for v in bufLog.to_list() if v)
     return log
示例#5
0
    def shader_compile(name, shader):
        '''
        logging and error-checking not quite working :(
        '''

        bufLen = bgl.Buffer(bgl.GL_BYTE, 4)
        bufLog = bgl.Buffer(bgl.GL_BYTE, 2000)

        bgl.glCompileShader(shader)

        # XXX: this test is a hack to determine whether the shader was compiled successfully
        # TODO: rewrite to use a more correct test (glIsShader?)
        bgl.glGetShaderInfoLog(shader, 2000, bufLen, bufLog)
        log = ''.join(chr(v) for v in bufLog.to_list() if v)
        assert not log and 'was successfully compiled' not in log, 'ERROR WHILE COMPILING SHADER %s: %s' % (name,log)
        return log
示例#6
0
def gl_compile_error(program_name, shader_name, shader):
    """
    Print OpenGL compilation errors, if any, for a given shader.
    
    program_name and shader_name are arbitrary human readable strings.
    shader is an int (an OpenGL shader name)
    """
    buf = bgl.Buffer(bgl.GL_INT,1)
    bgl.glGetShaderiv(shader,bgl.GL_COMPILE_STATUS,buf)
    if buf[0] == bgl.GL_TRUE:
        return False
    err = buf[0]
    charbuf = bgl.Buffer(bgl.GL_BYTE,4000)
    lenbuf = bgl.Buffer(bgl.GL_INT,1)
    bgl.glGetShaderInfoLog(shader,4000,lenbuf,charbuf)
    print('GL Error: %d (%s:%s)\n%s'%(err, program_name, shader_name, "".join(map( chr, charbuf[:lenbuf[0]]))))
    return True
示例#7
0
    def shader_compile(name, shader):
        '''
        logging and error-checking not quite working :(
        '''

        bufLen = bgl.Buffer(bgl.GL_BYTE, 4)
        bufLog = bgl.Buffer(bgl.GL_BYTE, 2000)
        bufStatus = bgl.Buffer(bgl.GL_INT, 1)

        bgl.glCompileShader(shader)

        # get shader compilation log and status (successfully compiled?)
        bgl.glGetShaderiv(shader, bgl.GL_COMPILE_STATUS, bufStatus)
        bgl.glGetShaderInfoLog(shader, 2000, bufLen, bufLog)
        log = ''.join(chr(v) for v in bufLog.to_list() if v)
        if bufStatus[0] == 0:
            print('ERROR WHILE COMPILING SHADER %s' % name)
            print('\n'.join(['    %s'%l for l in log.splitlines()]))
            assert False
        return log
示例#8
0
def createShader(shader_type, shader_source):
    shader = bgl.glCreateShader(shader_type)
    bgl.glShaderSource(shader, shader_source)
    bgl.glCompileShader(shader)
    success = bgl.Buffer(bgl.GL_INT, [1])
    bgl.glGetShaderiv(shader, bgl.GL_COMPILE_STATUS, success)
    if (success[0] == bgl.GL_TRUE):
        print("shader compiled")
        return shader
    bgl.glGetShaderiv(shader, bgl.GL_INFO_LOG_LENGTH, success);
    success[0] = success[0] + 1
    log = bgl.Buffer(bgl.GL_BYTE, [success[0]])
    start = bgl.Buffer(bgl.GL_INT, [1])
    start[0] =0
    bgl.glGetShaderInfoLog(shader, success[0]+1,start, log)
    py_log = log[:]
    py_log_str = ""
    for c in py_log:
        py_log_str += str(chr(c))
    print(str(py_log_str))
    bgl.glDeleteShader(shader)
示例#9
0
def check_shaderError(shader, flag, isProgram, errorMessage):
    success = bgl.Buffer(bgl.GL_INT, 1)

    if isProgram:
        bgl.glGetProgramiv(shader, flag, success)
    else:
        bgl.glGetShaderiv(shader, flag, success)

    if success[0] == bgl.GL_FALSE:
        import numpy as np
        import ctypes

        offset = bgl.Buffer(bgl.GL_INT, 1, (ctypes.c_int * 1).from_address(0))
        error = bgl.Buffer(bgl.GL_BYTE, 1024)
        if isProgram:
            bgl.glGetProgramInfoLog(shader, 1024, offset, error)
            print(errorMessage, np.bytes_(error).decode("utf-8"))
        else:
            bgl.glGetShaderInfoLog(shader, 1024, offset, error)
            print(errorMessage, np.bytes_(error).decode("utf-8"))

        del offset
        raise #RuntimeError(errorMessage, bgl.glGetShaderInfoLog(shader))
示例#10
0
def check_shaderError(shader, flag, isProgram, errorMessage):
    success = bgl.Buffer(bgl.GL_INT, 1)

    if isProgram:
        bgl.glGetProgramiv(shader, flag, success)
    else:
        bgl.glGetShaderiv(shader, flag, success)

    if success[0] == bgl.GL_FALSE:
        import numpy as np
        from .bgl_ext import VoidBufValue

        offset = VoidBufValue(None)
        error = bgl.Buffer(bgl.GL_BYTE, 1024)
        if isProgram:
            bgl.glGetProgramInfoLog(shader, 1024, offset.buf, error)
            print(errorMessage, np.bytes_(error).decode("utf-8"))
        else:
            bgl.glGetShaderInfoLog(shader, 1024, offset.buf, error)
            print(errorMessage, np.bytes_(error).decode("utf-8"))

        del offset
        raise #RuntimeError(errorMessage, bgl.glGetShaderInfoLog(shader))
示例#11
0
def check_shaderError(shader, flag, isProgram, errorMessage):
    success = bgl.Buffer(bgl.GL_INT, 1)

    if isProgram:
        bgl.glGetProgramiv(shader, flag, success)
    else:
        bgl.glGetShaderiv(shader, flag, success)

    if success[0] == bgl.GL_FALSE:
        import numpy as np
        import ctypes

        offset = bgl.Buffer(bgl.GL_INT, 1, (ctypes.c_int32 * 1).from_address(0))
        error = bgl.Buffer(bgl.GL_BYTE, 1024)
        if isProgram:
            bgl.glGetProgramInfoLog(shader, 1024, offset, error)
            print(errorMessage, np.bytes_(error).decode("utf-8"))
        else:
            bgl.glGetShaderInfoLog(shader, 1024, offset, error)
            print(errorMessage, np.bytes_(error).decode("utf-8"))

        del offset
        raise #RuntimeError(errorMessage, bgl.glGetShaderInfoLog(shader))