[Trouble Shooting] NullFunctionError of glutInit in OpenGL
Problem
When trying to call “glutInit()” of PyOpenGL, I got the error “NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling”.
# python source code from OpenGL.GL import * from OpenGL.GLUT import * from OpenGL.GLU import * glutInit() glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
Error Detail --------------------------------------------------------------------------- NullFunctionError Traceback (most recent call last) /tmp/ipykernel_14/3289264930.py in <module> 3 from OpenGL.GLU import * 4 ----> 5 glutInit() 6 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) 7 /usr/local/lib/python3.9/site-packages/OpenGL/GLUT/special.py in glutInit(*args) 331 try: 332 # XXX need to check for error condition here... --> 333 _base_glutInit( ctypes.byref(count), holder ) 334 finally: 335 os.chdir( currentDirectory ) /usr/local/lib/python3.9/site-packages/OpenGL/platform/baseplatform.py in __call__(self, *args, **named) 421 pass 422 else: --> 423 raise error.NullFunctionError( 424 """Attempt to call an undefined function %s, check for bool(%s) before calling"""%( 425 self.__name__, self.__name__, NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling
Environment
Windows10
Python 3.9.7
Cause
There are some Recommended Enhancements for PyOpenGL. And some of them, such as GLUT or FreeGLUT, are not contained in PyOpenGL itself.
Solution
Solution1 use binary installer for windows.
The documentation says “Win32 and Win64 binary installers for PyOpenGL include a copy of GLUT”.
So uninstall current pyopengl first.
And download binary installer for windows. Put the downloaded file in some directory, then run the command “pip install <file name>” in the directory where the file is saved.
pip uninstall PyOpenGL
pip install PyOpenGL‑3.1.6‑cp39‑cp39‑win_amd64.whl
Solution2 install GLUT or FreeGLUT separately
Installing and adding GLUT or FreeGLUT to PATH solves this problem.
Build FreeGLUT from source code or download built FreeGLUT from “Download freeglut 3.0.0 for MSVC” in transmissionzero.co.uk/software/freeglut-devel.
Put freeglut\bin\x64\freeglut.dll into C:\Windows\System32.
Add “C:\Windows\System32” to environment variable “PATH” to enable python find the library.
If the error still occurred, check if your library name is in Win32Platform.GLUT() <python>\Lib\site-packages\OpenGL\platform\win32.py
@baseplatform.lazy_property def GLUT( self ): for possible in ('freeglut%s.%s'%(size,vc,), 'freeglut', 'glut%s.%s'%(size,vc,)): # Added 'freeglut' because the library name is freeglut.dll # Prefer FreeGLUT if the user has installed it, fallback to the included # GLUT if it is installed try: return ctypesloader.loadLibrary( ctypes.windll, possible, mode = ctypes.RTLD_GLOBAL ) except WindowsError: pass return None
These links might help you.
python – Attempt to call an undefined function glutInit
#219 glutInit fails on windows 64-bit
Attempt to call an undefined function glutInit
Python and PyOpenGL Installation
Appendix: How to install GLUT or FreeGLUT on Linux
Use “sudo apt-get install python-opengl” command to install PyOpenGL with dependent library at once.