1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
//! [0]
fmt = QGLFormat()
fmt.setAlpha(True)
fmt.setStereo(True)
QGLFormat.setDefaultFormat(fmt)
//! [0]
//! [1]
fmt = QGLFormat()
fmt.setDoubleBuffer(False) # single buffer
fmt.setDirectRendering(False) # software rendering
myWidget = MyGLWidget(fmt, ...)
//! [1]
//! [2]
fmt = QGLFormat()
fmt.setOverlay(True)
fmt.setStereo(True)
myWidget = MyGLWidget(fmt, ...)
if !myWidget.format().stereo():
# ok, goggles off
if !myWidget.format().hasOverlay():
print "Cool hardware required"
//! [2]
//! [3]
# The rendering in MyGLWidget depends on using
# stencil buffer and alpha channel
class MyGLWidget(QGLWidget):
def __init__(self, parent):
QGLWidget.__init__(self, QGLFormat(QGL.StencilBuffer | QGL.AlphaChannel), parent)
if !format().stencil():
print "Could not get stencil buffer results will be suboptimal"
if !format().alpha():
print "Could not get alpha channel results will be suboptimal"
...
//! [3]
//! [4]
a = QApplication([])
f = QGLFormat()
f.setDoubleBuffer(False)
QGLFormat.setDefaultFormat(f)
//! [4]
//! [5]
f = QGLFormat.defaultOverlayFormat()
f.setDoubleBuffer(True)
QGLFormat.setDefaultOverlayFormat(f)
//! [5]
//! [6]
# ...continued from above
myWidget = MyGLWidget(QGLFormat(QGL.HasOverlay), ...)
if myWidget.format().hasOverlay():
# Yes, we got an overlay, let's check _its_ format:
olContext = myWidget.overlayContext()
if olContext.format().doubleBuffer():
# yes, we got a double buffered overlay
else:
# no, only single buffered overlays are available
//! [6]
//! [7]
cx = QGLContext()
# ...
f = QGLFormat()
f.setStereo(True)
cx.setFormat(f)
if !cx.create():
exit() # no OpenGL support, or cannot render on the specified paintdevice
if !cx.format().stereo():
exit() # could not create stereo context
//! [7]
//! [8]
class MyGLDrawer(QGLWidget):
def __init__(self, parent):
QGLWidget.__init__(self, parent)
pass
def initializeGL(self):
# Set up the rendering context, define display lists etc.:
...
glClearColor(0.0, 0.0, 0.0, 0.0)
glEnable(GL_DEPTH_TEST)
...
def resizeGL(self, w, h):
# setup viewport, projection etc.:
glViewport(0, 0, w, h)
...
glFrustum(...)
...
def paintGL(self):
# draw the scene:
...
glRotatef(...)
glMaterialfv(...)
glBegin(GL_QUADS)
glVertex3f(...)
glVertex3f(...)
...
glEnd()
...
//! [8]
|