1"""Convenience API for using Frame Buffer Objects"""
2from OpenGL.extensions import alternate
3from OpenGL.GL.ARB.framebuffer_object import *
4from OpenGL.GL.EXT.framebuffer_object import *
5from OpenGL.GL.EXT.framebuffer_multisample import *
6from OpenGL.GL.EXT.framebuffer_blit import *
7
8glBindFramebuffer = alternate(glBindFramebuffer,glBindFramebufferEXT)
9glBindRenderbuffer = alternate( glBindRenderbuffer, glBindRenderbufferEXT )
10glCheckFramebufferStatus = alternate( glCheckFramebufferStatus, glCheckFramebufferStatusEXT )
11glDeleteFramebuffers = alternate( glDeleteFramebuffers, glDeleteFramebuffersEXT )
12glDeleteRenderbuffers = alternate( glDeleteRenderbuffers, glDeleteRenderbuffersEXT )
13glFramebufferRenderbuffer = alternate( glFramebufferRenderbuffer, glFramebufferRenderbufferEXT )
14glFramebufferTexture1D = alternate( glFramebufferTexture1D, glFramebufferTexture1DEXT )
15glFramebufferTexture2D = alternate( glFramebufferTexture2D, glFramebufferTexture2DEXT )
16glFramebufferTexture3D = alternate( glFramebufferTexture3D, glFramebufferTexture3DEXT )
17glGenFramebuffers = alternate( glGenFramebuffers, glGenFramebuffersEXT )
18glGenRenderbuffers = alternate( glGenRenderbuffers, glGenRenderbuffersEXT )
19glGenerateMipmap = alternate( glGenerateMipmap, glGenerateMipmapEXT )
20glGetFramebufferAttachmentParameteriv = alternate( glGetFramebufferAttachmentParameteriv, glGetFramebufferAttachmentParameterivEXT )
21glGetRenderbufferParameteriv = alternate( glGetRenderbufferParameteriv, glGetRenderbufferParameterivEXT )
22glIsFramebuffer = alternate( glIsFramebuffer, glIsFramebufferEXT )
23glIsRenderbuffer = alternate( glIsRenderbuffer, glIsRenderbufferEXT )
24glRenderbufferStorage = alternate( glRenderbufferStorage, glRenderbufferStorageEXT )
25
26glBlitFramebuffer = alternate( glBlitFramebuffer, glBlitFramebufferEXT )
27glRenderbufferStorageMultisample = alternate( glRenderbufferStorageMultisample, glRenderbufferStorageMultisampleEXT )
28
29# this entry point is new to the ARB version of the extensions
30#glFramebufferTextureLayer = alternate( glFramebufferTextureLayer, glFramebufferTextureLayerEXT )
31
32
33def checkFramebufferStatus():
34    """Utility method to check status and raise errors"""
35    status = glCheckFramebufferStatus( GL_FRAMEBUFFER )
36    if status == GL_FRAMEBUFFER_COMPLETE:
37        return True
38    from OpenGL.error import GLError
39    description = None
40    for error_constant in [
41        GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT,
42        GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT,
43        GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS,
44        GL_FRAMEBUFFER_INCOMPLETE_FORMATS,
45        GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER,
46        GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER,
47        GL_FRAMEBUFFER_UNSUPPORTED,
48    ]:
49        if status == error_constant:
50            status = error_constant
51            description = str(status)
52    raise GLError(
53        err=status,
54        result=status,
55        baseOperation=glCheckFramebufferStatus,
56        description=description,
57    )
58