[PyOpenGL-Devel] Force PyOpenGL to load a specific GL dynamic library
Brought to you by:
mcfletch
From: Tiago N. <ti...@gm...> - 2017-09-01 17:56:03
|
Hi, My application has the requirement to run in environments that might not provide hardware-accelerated OpenGL (such as Remote Desktop on Windows). Since we'd like to use hardware acceleration if available, we have code that detects the local support at runtime and loads a bundled GL lib (Mesa+llvmpipe) if necessary. As far as I understand it, PyOpenGL uses ctypes to load the GL lib at runtime. On Windows, I can update the PATH environment variable to have PyOpenGL find my OpenGL32.dll first, and it works as expected. On Linux, it looks like ctypes does a straight dlopen() on the candidate names (libGL.so, libGL.so.1, etc). Apparently it's too late to update LD_LIBRARY_PATH to have the loader find my lib first (ref: https://stackoverflow.com/questions/856116/changing-ld-library-path-at-runtime-for-ctypes), so PyOpenGL finds another dynamic library and I end up with two loaded libs, which as expected doesn't work. My application has other, non-Python OpenGL dependencies and those are resolved by loading (via ctypes) the full name to our bundled libGL.so, so PyOpenGL is our last remaining loose end. I'm writing to ask if my reasoning here is correct and if PyOpenGL has another mechanism through which I could say "load this dynamic lib please". I did some research but couldn't find anything. If no mechanism is available, would the maintainers be interested in adding it? I figured an environment variable called something like PYOPENGL_GL_LIB_FILE and pointing to the full path of my local libGL.so would be interesting, and that would solve my issue. I would be glad to work on a patch to add this feature, as it looks like I might have to patch our local PyOpenGL build anyway. Thank you, Tiago |