Exemplo n.º 1
0
 def test_freeing(self):
     " Test if the shaders are freed correctly"
     vert_obj = ShaderObject.vertex()
     
     # Warning, borrowed_obj do not own the underlying shader so it will not be freed automatically
     borrowed_obj = ShaderObject(glCreateShader(GL_VERTEX_SHADER), owned=False)          
     
     borrowed_sid = borrowed_obj.sid
     sid = vert_obj.sid
     del vert_obj
     del borrowed_obj
     gc.collect()
     
     self.assertEqual(GL_FALSE, glIsShader(sid), 'shader object is still valid')
     self.assertEqual(GL_TRUE, glIsShader(borrowed_sid), 'shader object was deleted')
     
     #Free the shader object
     glDeleteShader(borrowed_sid)
Exemplo n.º 2
0
def check_shader_or_program_status(obj):
    '''checks if the given shader or program object has been compiled or linked successfully.
    Raises an exception if not and deletes the object.
    Returns the object otherwise'''

    if gl.glIsShader(obj):
        getiv = gl.glGetShaderiv
        getlog = gl.glGetShaderInfoLog
        statusflag = gl.GL_COMPILE_STATUS
        delete = gl.glDeleteShader
        ErrorClass = ShaderCompileError
    elif gl.glIsProgram(obj):
        getiv = gl.glGetProgramiv
        getlog = gl.glGetProgramInfoLog
        statusflag = gl.GL_LINK_STATUS
        delete = gl.glDeleteProgram
        ErrorClass = ProgramLinkError
    else:
        raise ValueError('object {} neither shader nor prorgam'.format(obj))

    ok = c_int(0)
    getiv(obj, statusflag, byref(ok))
    if not ok:
        errlen = c_int(0)
        getiv(obj, gl.GL_INFO_LOG_LENGTH, byref(errlen))
        errlen = errlen.value
        if errlen <= 0:
            error = 'unknown error'
        else:
            log = ctypes.create_string_buffer('', errlen)
            getlog(obj, errlen, None, log)
            error = log.value
        delete(obj)
        raise ErrorClass(error)
    else:
        return obj
Exemplo n.º 3
0
 def valid(self):
     """
         Check if the underlying shader is valid.
         Return True if it is, False otherwise.
     """
     return glIsShader(self.sid) == GL_TRUE