Thread: [PyOpenGL-Users] Error loading extensions on forward compatible context: GL_NUM_EXTENSIONS invalid_
Brought to you by:
mcfletch
From: T.J. Jankun-K. <tj...@cs...> - 2011-09-13 18:17:38
|
So, now that I have a Core Proifle, forward compatible context (the only option on Lion), I get errors when loading PyOpenGL. I have the latest from bzr which included the patch for it, but the patch does not work because my OpenGL is firing an AttributeError, not a GLerror. So, after patching that (attached) I get an error deeper down: When wrapper tries to call glGetIntergerv. The odd thing is that is glGetIntegerv(GL_NUM_EXTENSIONS) works when I call it directly. I'm attaching the error and the code that generates it. Help would be appreciated. TJK === The code #!/usr/bin/env pythonw from __future__ import division from ctypes import * from glfw import * from OpenGL.GL import * # Initialize GLFW if not glfwInit(): raise RuntimeError("glfw failed to initialize") # Open a 300x300 OpenGL window with an OpenGL 3.2 Core Profile context glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3) glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2) glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE) glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE) if not glfwOpenWindow(300, 300, 0,0,0,0,24,0, GLFW_WINDOW): glfwTerminate() raise RuntimeError("glfw could not create window") # This is a test of glGetIntegerv. It doesn't crash when I call it directly count = glGetIntegerv( GL_NUM_EXTENSIONS ) print "count", count # Error occurs here arrayID = GLuint() glGenVertexArrays(1, byref(arrayID)) glfwTerminate() ==== === The error Traceback (most recent call last): File "error.py", line 29, in <module> glGenVertexArrays(1, byref(arrayID)) File "/Users/tjk/.virtualenvs/gfx/lib/python2.7/site-packages/PyOpenGL-3.0.2a1-py2.7.egg/OpenGL/platform/baseplatform.py", line 371, in __call__ if self.load(): File "/Users/tjk/.virtualenvs/gfx/lib/python2.7/site-packages/PyOpenGL-3.0.2a1-py2.7.egg/OpenGL/platform/baseplatform.py", line 351, in load if not platform.PLATFORM.checkExtension( self.extension ): File "/Users/tjk/.virtualenvs/gfx/lib/python2.7/site-packages/PyOpenGL-3.0.2a1-py2.7.egg/OpenGL/platform/baseplatform.py", line 246, in checkExtension result = extensions.hasGLExtension( name ) File "/Users/tjk/.virtualenvs/gfx/lib/python2.7/site-packages/PyOpenGL-3.0.2a1-py2.7.egg/OpenGL/extensions.py", line 58, in hasGLExtension count = glGetIntegerv( GL_NUM_EXTENSIONS ) File "/Users/tjk/.virtualenvs/gfx/lib/python2.7/site-packages/PyOpenGL-3.0.2a1-py2.7.egg/OpenGL/latebind.py", line 41, in __call__ return self._finalCall( *args, **named ) File "/Users/tjk/.virtualenvs/gfx/lib/python2.7/site-packages/PyOpenGL-3.0.2a1-py2.7.egg/OpenGL/wrapper.py", line 580, in wrapperCall raise err OpenGL.error.GLError: GLError( err = 1280, description = 'invalid enumerant', baseOperation = glGetIntegerv, pyArgs = (GL_NUM_EXTENSIONS,), cArgs = ( GL_NUM_EXTENSIONS, array([13], dtype=int32), ), cArguments = ( GL_NUM_EXTENSIONS, array([13], dtype=int32), ) ) ==== -- T.J. Jankun-Kelly Associate Professor (Visualization, Analytics & Gaming) Computer Science & Engineering, Mississippi State University http://www.cse.msstate.edu/~tjk/ @dr_tj |
From: Alejandro S. <as...@gm...> - 2011-09-13 19:08:47
|
Hello TJ, === The code > #!/usr/bin/env pythonw > from __future__ import division > > from ctypes import * > > from glfw import * > from OpenGL.GL import * > > # Initialize GLFW > if not glfwInit(): > raise RuntimeError("glfw failed to initialize") > > # Open a 300x300 OpenGL window with an OpenGL 3.2 Core Profile context > glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3) > glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2) > glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE) > glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE) > if not glfwOpenWindow(300, 300, 0,0,0,0,24,0, GLFW_WINDOW): > glfwTerminate() > raise RuntimeError("glfw could not create window") > > > # This is a test of glGetIntegerv. It doesn't crash when I call it directly > count = glGetIntegerv( GL_NUM_EXTENSIONS ) > print "count", count > > # Error occurs here > arrayID = GLuint() > glGenVertexArrays(1, byref(arrayID)) > This might sound incredibly silly, but may be worth testing. Have you tried calling glGenVertexArrays like so?: arrayID = glGenVertexArrays(1) Some PyOpenGL functions are "Pythonized" and can cause problems. Alejandro.- -- http://alejandrosegovia.net |
From: T.J. Jankun-K. <tj...@cs...> - 2011-09-13 19:30:45
|
On Sep 13, 2011, at 2:08 PM, Alejandro Segovia wrote: > This might sound incredibly silly, but may be worth testing. Have you tried calling glGenVertexArrays like so?: > > arrayID = glGenVertexArrays(1) > > Some PyOpenGL functions are "Pythonized" and can cause problems. > > Alejandro.- > Thanks, I had forgotten about that. Unfortunately that and its permutations: glGenVertexArrays(1, arrayID) glGenvertexArrays(1, [arrayID]) all generate the same error. TJK -- T.J. Jankun-Kelly Associate Professor (Visualization, Analytics & Gaming) Computer Science & Engineering, Mississippi State University http://www.cse.msstate.edu/~tjk/ @dr_tj |
From: Mike C. F. <mcf...@vr...> - 2011-09-14 03:05:22
|
On 11-09-13 02:17 PM, T.J. Jankun-Kelly wrote: > So, now that I have a Core Proifle, forward compatible context (the only option on Lion), I get errors when loading PyOpenGL. I have the latest from bzr which included the patch for it, but the patch does not work because my OpenGL is firing an AttributeError, not a GLerror. So, after patching that (attached) I get an error deeper down: When wrapper tries to call glGetIntergerv. The odd thing is that is glGetIntegerv(GL_NUM_EXTENSIONS) works when I call it directly. > > > I'm attaching the error and the code that generates it. Help would be appreciated. On my Ubuntu machine, the code runs to completion, likely because my machine doesn't really honour the forward-compatible-only flag, so has a glGetString available. There was a bug in the glGetStringi return type that was causing it to attempt to instantiate ArrayDataType objects (which are not data objects, they are place holders). That may be a side-effect of some changes in Python 2.7's ctypes? Will have to investigate complex return types to be sure we're getting the right data-types everywhere. I've fixed the bug in glGetStringi for now in bzr head, but as I can't see a reason for the glGetIntegerv bug yet, I don't have a fix there. You may find that de-activating the accelerate module makes it easier to debug what is crashing (that's how I found the glGetStringi bug); just include: OpenGL.USE_ACCELERATE = False at the top of your main script and you can use pdb to trace into the operations being performed in wrapping the functions. You should not need the byref() around the arrayID, ctypes handles that automatically when you pass a primitive type in where an array is required. Good luck, and let me know if there's anything more I can help with. I have no forward-compatible-context test code at the moment, so this is all in "theoretically should work" territory. Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |