Thread: [PyOpenGL-Users] How to use shaders in pyopengl
Brought to you by:
mcfletch
From: Nicolas B. <ncl...@ya...> - 2008-08-25 03:01:39
|
Are there any examples on how to use shaders in pyopengl that actually work, the test in pyopenglcontext doesnt work. I get an error; NullFunctionError: Attempt to call an undefined function glShaderSourceARB, check for bool(glShaderSourceARB) before calling glShaderSource doesnt work either, i get the same error.I need an example cuz i am tired of trying to find answers and not getting any. |
From: Mike C. F. <mcf...@vr...> - 2008-08-25 03:44:12
|
Nicolas Brown wrote: > Are there any examples on how to use shaders in pyopengl that actually > work, the test in pyopenglcontext doesnt work. > I get an error; > NullFunctionError: Attempt to call an undefined function > glShaderSourceARB, check for bool(glShaderSourceARB) before calling > glShaderSource doesnt work either, i get the same error.I need an > example cuz i am tired of trying to find answers and not getting any. Are you certain that your current context supports shaders? You can see by running the following from the OpenGLContext/tests directory: python glget.py | grep program There are basically two possibilities, either your context doesn't support glShaderSource, or there's something wrong with PyOpenGL's handling of extensions on your platform (possibly Windows?) I don't use Windows or OSX, so I rely on other people to report errors over there. As for a context that doesn't support the extensions, you'll see that if e.g. you have older hardware, or your drivers are very old (e.g. a stock install of Win2K) or for some reason your machine is running in software-mode rendering. The shaderobject.py test just ran on my (Linux) workstation here, so the code should be reasonably close to working. Good luck, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |
From: Dirk R. <di...@li...> - 2008-08-28 03:39:31
|
Hi Mike, Mike C. Fletcher wrote: > > The shaderobject.py test just ran on my (Linux) workstation here, so the > code should be reasonably close to working. I'm having trouble getting that to work. It complains about not being able to find vrml.arrays, and I can't find it either... Is there a way to get at the extension system without going through the full OpenGL Context? Or using a GLUT context? I'm a little confused by the whole context code... ;) Thanks Dirk |
From: Mike C. F. <mcf...@vr...> - 2008-08-28 12:35:44
|
Dirk Reiners wrote: > Hi Mike, > > Mike C. Fletcher wrote: > >> The shaderobject.py test just ran on my (Linux) workstation here, so the >> code should be reasonably close to working. >> > > I'm having trouble getting that to work. It complains about not being able to > find vrml.arrays, and I can't find it either... > vrml97.arrays is part of PyVRML97... assuming it's installed... easy_install pyvrml97 should have happened when you did easy_install OpenGLContext However... > Is there a way to get at the extension system without going through the full > OpenGL Context? Or using a GLUT context? I'm a little confused by the whole > context code... ;) > There's no need at all for OpenGLContext to use extensions. OpenGLContext is a separate project. The reason I mentioned it is that it has *sample* code for using shaders. Extensions are all available as simple imports in PyOpenGL, see: OpenGL/tests/tests.py:552 for an example of using the frame buffer object extension in PyOpenGL, for instance. Or OpenGL/arrays/vbo.py for code using vertex buffer objects. HTH, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |
From: Dirk R. <di...@li...> - 2008-08-28 14:35:50
Attachments:
shader_test.py
|
Hi Mike, thanks for the quick response! Mike C. Fletcher wrote: > > vrml97.arrays is part of PyVRML97... assuming it's installed... > > easy_install pyvrml97 > > should have happened when you did > > easy_install OpenGLContext > > However... I'm trying to set it to be easy for a Windows user, and I didn't use easy_install, I just ran setup.py from the OpenGL Context. Let me try that one. This is what I get: D:\CMPS415_Stuff\Python25\Scripts>easy_install.exe OpenGLContext Searching for OpenGLContext Best match: OpenGLContext 2.1.0a2 Adding OpenGLContext 2.1.0a2 to easy-install.pth file Installing vrml_view-script.pyw script to D:\CMPS415_Stuff\Python25\Scripts Installing vrml_view.exe script to D:\CMPS415_Stuff\Python25\Scripts Installing choosecontext-script.pyw script to D:\CMPS415_Stuff\Python25\Scripts Installing choosecontext.exe script to D:\CMPS415_Stuff\Python25\Scripts Using d:\cmps415_stuff\python25\lib\site-packages Processing dependencies for OpenGLContext Searching for PyVRML97 Reading https://sourceforge.net/project/showfiles.php?group_id=19262 Reading https://sourceforge.net/project/showfiles.php?group_id=84080 Reading http://pypi.python.org/simple/PyVRML97/ Couldn't find index page for 'PyVRML97' (maybe misspelled?) Scanning index of all packages (this may take a while) Reading http://pypi.python.org/simple/ No local packages or download links found for PyVRML97 error: Could not find suitable distribution for Requirement.parse('PyVRML97') Not sure what's wrong here. > There's no need at all for OpenGLContext to use extensions. > OpenGLContext is a separate project. The reason I mentioned it is that > it has *sample* code for using shaders. Extensions are all available as > simple imports in PyOpenGL, see: > > OpenGL/tests/tests.py:552 > > for an example of using the frame buffer object extension in PyOpenGL, > for instance. Or OpenGL/arrays/vbo.py for code using vertex buffer > objects. OK, RTFM really does help. :-/ I found the extension usage docs. So I changed your shaderobjects example to run with raw GLUT. But it's not working. I do get past the glInitShaderObjectsARB etc., but when I try to call glShaderSourceARB it says it's not available. OpenGLExtensionsViewer confirms that the extension really is supported, so I'm a little confused. I attached the program, if somebody could try this on their system I'd appreciate it. Thanks Dirk |
From: Mike C. F. <mcf...@vr...> - 2008-08-29 12:51:21
|
Dirk Reiners wrote: > I'm trying to set it to be easy for a Windows user, and I didn't use > easy_install, I just ran setup.py from the OpenGL Context. Let me try > that one. Obviously I'm going to have to fire up a Win32 box and see what's wrong over there. > Not sure what's wrong here. Me either. I tested easy_installing on a Win32 box a long while ago, but apparently something has broken in the meantime. > OK, RTFM really does help. :-/ I found the extension usage docs. Didn't realize we had those... I'll have to track them down and make sure they're accurate still... > So I changed your shaderobjects example to run with raw GLUT. But it's > not working. I do get past the glInitShaderObjectsARB etc., but when I > try to call glShaderSourceARB it says it's not available. > OpenGLExtensionsViewer confirms that the extension really is > supported, so I'm a little confused. > > I attached the program, if somebody could try this on their system I'd > appreciate it. It runs without alteration on an AMD64 Gentoo Linux box with Nvidia and latest CVS of PyOpenGL. I'll have to fire up the Win32 box and see if I can track down the problem over there. I'll keep you apprised. Take care, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |
From: Dirk R. <di...@li...> - 2008-09-05 21:37:41
|
Hi Mike, any news on the Windows shader problem? has anybody else been able to reproduce it? Mike C. Fletcher wrote: > Me either. I tested easy_installing on a Win32 box a long while ago, > but apparently something has broken in the meantime. :( > Didn't realize we had those... I'll have to track them down and make > sure they're accurate still... I was talking about "Accessing OpenGL Functionality" on http://pyopengl.sourceforge.net/ctypes/using.html, which gave me enough hints to get it done. A more complete documentation would be good, but that's what I used. > It runs without alteration on an AMD64 Gentoo Linux box with Nvidia and > latest CVS of PyOpenGL. I'll have to fire up the Win32 box and see if I > can track down the problem over there. I'll keep you apprised. Thanks Dirk |
From: Mike C. F. <mcf...@vr...> - 2008-09-11 12:30:24
|
Dirk Reiners wrote: > Hi Mike, > > any news on the Windows shader problem? has anybody else been able to reproduce it? > Not yet. I've been able to use extensions on my XP laptop, but it doesn't have shader support. My Win2K machine (which has a reasonable video card) spent the entire time I was intending to work on it just getting updated and cleaned up so it would run properly. Take care, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |
From: Mike C. F. <mcf...@vr...> - 2008-09-12 03:54:24
|
Mike C. Fletcher wrote: > Dirk Reiners wrote: > >> Hi Mike, >> >> any news on the Windows shader problem? has anybody else been able to reproduce it? >> >> > Not yet. I've been able to use extensions on my XP laptop, but it > doesn't have shader support. My Win2K machine (which has a reasonable > video card) spent the entire time I was intending to work on it just > getting updated and cleaned up so it would run properly. > > Take care, > Mike > I found the bug. Basically there was a wrapper for glShaderSource/glShaderSourceARB which was not passing in the "extension" parameter which was being used to decide whether the function should be available. Previously we would just try to get the function and check for a NULL pointer, but the Mesa implementation decided to start returning non-null pointers that just print out warning messages when you try to call a non-existent function, so we started checking for the extensions. Unfortunately, the wrapper didn't get updated, so the test was always coming up false. Anyway, with current CVS shaders should work on Win32. I'll likely be doing some further refactoring of the base platform module to clean it up and see if I can discover the problem on OSX tomorrow. Take care, Mike -- ________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com |
From: Dirk R. <di...@li...> - 2008-10-07 01:33:35
|
Hi Mike, Mike C. Fletcher wrote: > > I found the bug. Basically there was a wrapper for > glShaderSource/glShaderSourceARB which was not passing in the > "extension" parameter which was being used to decide whether the > function should be available. Previously we would just try to get the > function and check for a NULL pointer, but the Mesa implementation > decided to start returning non-null pointers that just print out warning > messages when you try to call a non-existent function, so we started > checking for the extensions. Unfortunately, the wrapper didn't get > updated, so the test was always coming up false. > > Anyway, with current CVS shaders should work on Win32. I'll likely be > doing some further refactoring of the base platform module to clean it > up and see if I can discover the problem on OSX tomorrow. Thanks for fixing this, works like a charm! I finally took the time to take a look at PyOpenGLs implementation. Not needing a C/C++ part makes the whole system pretty nice, I have to say. It's a little painful to write in the first place, but not having to deal with compiling stuff everywhere is pretty nice (I'm fighting compiling my boost::python module on Windows right now...). Thanks again Dirk |