aboutsummaryrefslogtreecommitdiffstats
path: root/doc/codesnippets/doc/src/snippets/code/src_opengl_qgl.cpp
blob: 80ef99c95d53cf7dd649ed7072a935617868155a (plain)
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]