annotate edview.cpp @ 385:eb5b793c8867

GL display widget skeleton.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 18 Oct 2012 20:10:31 +0300
parents
children 28a74940f2b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
385
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 #include "edview.h"
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 DemoView::DemoView(QWidget *parent)
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 : QGLWidget(QGLFormat(QGL::SampleBuffers|QGL::AlphaChannel), parent)
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 {
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 makeCurrent();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 if (QGLFramebufferObject::hasOpenGLFramebufferBlit())
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 {
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 QGLFramebufferObjectFormat format;
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12 format.setSamples(4);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 format.setAttachment(QGLFramebufferObject::CombinedDepthStencil);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 render_fbo = new QGLFramebufferObject(512, 512, format);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 texture_fbo = new QGLFramebufferObject(512, 512);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17 }
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 else
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 {
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 render_fbo = new QGLFramebufferObject(1024, 1024);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 texture_fbo = render_fbo;
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 }
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23 }
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 DemoView::~DemoView()
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 {
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 delete texture_fbo;
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 if (render_fbo != texture_fbo)
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 delete render_fbo;
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 }
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 void DemoView::paintEvent(QPaintEvent *)
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 {
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 draw();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36 }
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 void DemoView::draw()
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 {
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 QPainter p(this); // used for text overlay
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 // save the GL state set for QPainter
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 saveGLState();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46 // restore the GL state that QPainter expects
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47 restoreGLState();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48 }
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51 void DemoView::saveGLState()
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 {
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
53 glPushAttrib(GL_ALL_ATTRIB_BITS);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54 glMatrixMode(GL_PROJECTION);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55 glPushMatrix();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 glMatrixMode(GL_MODELVIEW);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57 glPushMatrix();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 }
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61 void DemoView::restoreGLState()
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 {
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63 glMatrixMode(GL_PROJECTION);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64 glPopMatrix();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65 glMatrixMode(GL_MODELVIEW);
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
66 glPopMatrix();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 glPopAttrib();
eb5b793c8867 GL display widget skeleton.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 }