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)
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
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?