Ejemplo n.º 1
0
def glRenderMode(newMode):
    """Change to the given rendering mode

    If the current mode is GL_FEEDBACK or GL_SELECT, return
    the current buffer appropriate to the mode
    """
    # must get the current mode to determine operation...
    from OpenGL.GL import glGetIntegerv
    from OpenGL.GL import selection, feedback
    currentMode = glGetIntegerv(simple.GL_RENDER_MODE)
    try:
        currentMode = currentMode[0]
    except (TypeError, ValueError, IndexError) as err:
        pass
    if currentMode in (simple.GL_RENDER, 0):
        # no array needs to be returned...
        return simple.glRenderMode(newMode)
    result = simple.glRenderMode(newMode)
    # result is now an integer telling us how many elements were copied...

    if result < 0:
        if currentMode == simple.GL_SELECT:
            raise error.GLError(
                simple.GL_STACK_OVERFLOW,
                "glSelectBuffer too small to hold selection results",
            )
        elif currentMode == simple.GL_FEEDBACK:
            raise error.GLError(
                simple.GL_STACK_OVERFLOW,
                "glFeedbackBuffer too small to hold selection results",
            )
        else:
            raise error.GLError(
                simple.GL_STACK_OVERFLOW,
                "Unknown glRenderMode buffer (%s) too small to hold selection results"
                % (currentMode, ),
            )
    # Okay, now that the easy cases are out of the way...
    #  Do we have a pre-stored pointer about which the user already knows?
    context = platform.GetCurrentContext()
    if context == 0:
        raise error.Error(
            """Returning from glRenderMode without a valid context!""")
    arrayConstant, wrapperFunction = {
        simple.GL_FEEDBACK:
        (simple.GL_FEEDBACK_BUFFER_POINTER, feedback.parseFeedback),
        simple.GL_SELECT: (simple.GL_SELECTION_BUFFER_POINTER,
                           selection.GLSelectRecord.fromArray),
    }[currentMode]
    current = contextdata.getValue(arrayConstant)
    # XXX check to see if it's the *same* array we set currently!
    if current is None:
        current = glGetPointerv(arrayConstant)
    # XXX now, can turn the array into the appropriate wrapper type...
    if wrapperFunction:
        current = wrapperFunction(current, result)
    return current
 def GLSLCheckError(result, baseOperation=None, cArguments=None, *args):
     result = error.glCheckError(result, baseOperation, cArguments, *args)
     status = glGetObjectParameterivARB(cArguments[0], key)
     if not status:
         raise error.GLError(result=result,
                             baseOperation=baseOperation,
                             cArguments=cArguments,
                             description=glGetInfoLogARB(cArguments[0]))
     return result
def eglQueryDevicesEXT(max_devices=10):  # pylint: disable=invalid-name
    devices = (EGLDeviceEXT * max_devices)()
    num_devices = EGL.EGLint()
    success = _eglQueryDevicesEXT(max_devices, devices, num_devices)
    if success == EGL.EGL_TRUE:
        return [devices[i] for i in range(num_devices.value)]
    else:
        raise error.GLError(err=EGL.eglGetError(),
                            baseOperation=eglQueryDevicesEXT,
                            result=success)
Ejemplo n.º 4
0
 def GLSLCheckError(result, baseOperation=None, cArguments=None, *args):
     result = error.glCheckError(result, baseOperation, cArguments, *args)
     status = ctypes.c_int()
     getter(cArguments[0], key, ctypes.byref(status))
     status = status.value
     if not status:
         raise error.GLError(result=result,
                             baseOperation=baseOperation,
                             cArguments=cArguments,
                             description=glGetInfoLog(cArguments[0]))
     return result
 def pullExtensions( self ):
     from OpenGL import platform
     if not platform.PLATFORM.CurrentContextIsValid():
         return False
     from OpenGL.raw.GL._types import GLint
     from OpenGL.raw.GL.VERSION.GL_1_1 import glGetString, glGetError
     from OpenGL.raw.GL.VERSION.GL_1_1 import GL_EXTENSIONS
     from OpenGL import error
     try:
         extensions = glGetString( GL_EXTENSIONS )
         if glGetError():
             raise error.GLError()
         if extensions:
             extensions = extensions.split()
         else:
             return False
     except (AttributeError, error.GLError) as err:
         # OpenGL 3.0 deprecates glGetString( GL_EXTENSIONS )
         from OpenGL.raw.GL.VERSION.GL_3_0 import GL_NUM_EXTENSIONS, glGetStringi
         from OpenGL.raw.GL.VERSION.GL_1_1 import glGetIntegerv
         count = GLint()
         glGetIntegerv( GL_NUM_EXTENSIONS, count )
         extensions = []
         for i in range( count.value ):
             extension = glGetStringi( GL_EXTENSIONS, i )
             extensions.append(
                 extension
             )
     # Add included-by-reference extensions...
     version = self.getVersion()
     if not version:
         # should not be possible?
         return version 
     check = tuple( version[:2] )
     for (v,v_exts) in VERSION_EXTENSIONS:
         if v <= check:
             for v_ext in v_exts:
                 if v_ext not in extensions:
                     extensions.append( as_8_bit(v_ext) )
         else:
             break
     return extensions
Ejemplo n.º 6
0
    from OpenGL.GL import selection, feedback
    currentMode = glGetIntegerv( simple.GL_RENDER_MODE )
    try:
        currentMode = currentMode[0]
    except (TypeError,ValueError,IndexError), err:
        pass
    if currentMode in (simple.GL_RENDER,0):
        # no array needs to be returned...
        return simple.glRenderMode( newMode )
    result = simple.glRenderMode( newMode )
    # result is now an integer telling us how many elements were copied...

    if result < 0:
        if currentMode == simple.GL_SELECT:
            raise error.GLError(
                simple.GL_STACK_OVERFLOW,
                "glSelectBuffer too small to hold selection results",
            )
        elif currentMode == simple.GL_FEEDBACK:
            raise error.GLError(
                simple.GL_STACK_OVERFLOW,
                "glFeedbackBuffer too small to hold selection results",
            )
        else:
            raise error.GLError(
                simple.GL_STACK_OVERFLOW,
                "Unknown glRenderMode buffer (%s) too small to hold selection results"%(
                    currentMode,
                ),
            )
    # Okay, now that the easy cases are out of the way...
    #  Do we have a pre-stored pointer about which the user already knows?