from OpenGL.arrays import vbo
from OpenGL.GL.ARB import vertex_buffer_object
from OpenGL.GL.ARB import uniform_buffer_object
from OpenGL.GL.ARB import texture_buffer_object
from OpenGL.GL.ARB import enhanced_layouts

class Implementation( vbo.Implementation ):
    """OpenGL ARB extension-based implementation of VBO interfaces"""
    def __init__( self ):
        for name in self.EXPORTED_NAMES:
            source = name
            if name.startswith( 'GL_'):
                source = name + '_ARB'
            else:
                source = name + 'ARB'
            found = False
            for source_extension in (
                vertex_buffer_object,
                uniform_buffer_object,
                texture_buffer_object,
                enhanced_layouts,
            ):
                try:
                    setattr( self, name, getattr( source_extension, source ))
                except AttributeError as err:
                    try:
                        setattr( self, name, getattr( source_extension, name ))
                    except AttributeError as err:
                        pass 
                    else:
                        found = True
                else:
                    found =True 
                    break
            assert found, name  # nosec
        if self.glGenBuffers:
            self.available = True
Implementation.register()
