आप पाइथन-ओपनग्लॉग के साथ सीधे पाइथन-एक्सलिब प्रकारों का उपयोग नहीं कर सकते हैं। लेकिन आप इस तथ्य का उपयोग कर सकते हैं कि एक विंडो XID एक ही विंडो पर पायथन-ओपनगल का उपयोग करने के लिए सिर्फ एक संख्या है।
from Xlib import X, display
from OpenGL import GL, GLX
from OpenGL.raw._GLX import struct__XDisplay
from ctypes import *
# some python-xlib code...
pd = display.Display()
pw = pd.screen().root.create_window(50, 50, 200, 200, 0,
pd.screen().root_depth,
X.InputOutput, X.CopyFromParent)
pw.map()
# ensure that the XID is valid on the server
pd.sync()
# get the window XID
xid = pw.__resource__()
# a separate ctypes Display object for OpenGL.GLX
xlib = cdll.LoadLibrary('libX11.so')
xlib.XOpenDisplay.argtypes = [c_char_p]
xlib.XOpenDisplay.restype = POINTER(struct__XDisplay)
d = xlib.XOpenDisplay("")
# use GLX to create an OpenGL context on the same window XID
elements = c_int()
configs = GLX.glXChooseFBConfig(d, 0, None, byref(elements))
w = GLX.glXCreateWindow(d, configs[0], c_ulong(xid), None)
context = GLX.glXCreateNewContext(d, configs[0], GLX.GLX_RGBA_TYPE, None, True)
GLX.glXMakeContextCurrent(d, w, w, context)
# some python-opengl code....
GL.glShadeModel(GL.GL_FLAT)
GL.glClearColor(0.5, 0.5, 0.5, 1.0)
GL.glViewport(0, 0, 200, 200)
GL.glMatrixMode(GL.GL_PROJECTION)
GL.glLoadIdentity()
GL.glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0)
GL.glClear(GL.GL_COLOR_BUFFER_BIT)
GL.glColor3f(1.0, 1.0, 0.0)
GL.glRectf(-0.8, -0.8, 0.8, 0.8)
# assume we got a double buffered fbConfig and show what we drew
GLX.glXSwapBuffers(d, w)
# a terrible end to a terrible piece of code...
raw_input()
हालांकि यह वास्तव में भयानक है। (स्पष्टता के लिए छोड़े गए एक समझदार fbConfig को जांचने और चुनने में त्रुटि)
हालांकि वास्तव में ctypes के साथ सभी आवश्यक xlib कॉल करना संभव होना चाहिए। उदाहरण के लिए, पेजलेट, किसी भी तरह से प्रबंधित करता है, लेकिन मुझे यकीन नहीं है कि आप किस विशिष्ट समस्या में भाग गए हैं।
आपके पास एक्सलिब जैसे निम्न-स्तरीय पुस्तकालयों का उपयोग करने का एक अच्छा कारण हो सकता है लेकिन मुझे यह पूछना है: क्या आपने [QtOpenGL] जैसे कुछ उच्च स्तर का उपयोग करने पर विचार किया है (http://srinikom.github.com/pyside -डॉक्स/पायसाइड/QtOpenGL/index.html) PySide से? आपके द्वारा पाइसाइड का उपयोग करके लिखने वाला कोड Xlib का उपयोग करके लिखने वाले एक के विपरीत कई प्लेटफॉर्म (विंडोज, लिनक्स, मैक) पर भी काम करेगा। सिर्फ एक विचार। – crayzeewulf
नहीं, PyOpenGL का अपना xlib कार्यान्वयन नहीं है। वास्तव में पाइथन पक्ष पर कुछ भी नहीं है। पाइथन-एक्सलिब को आखिरकार 200 9 में रिलीज़ किया गया था, इसलिए यह प्रभावी रूप से मर चुका है। जीएलयूटी या उच्च स्तरीय टूलकिट्स में से एक का प्रयोग करें। –
@ क्रेजवेउल्फ: हाँ, मेरे पास एक अच्छा कारण है। मैं एक एक्स-विंडोज हैक कर रहा हूं जिसमें डेस्कटॉप पर इंटरैक्टिव ओपनजीएल वॉलपेपर ड्राइंग शामिल है। इसमें ईएमडब्लूएच संकेत और कुछ अन्य गन्दा बिट्स सेट करना शामिल है, इसलिए मुझे संदेह है कि क्यूटी या जो कुछ भी कर सकता है। –