385
|
1 #include "edview.h"
|
391
|
2 #include <QtGui>
|
385
|
3
|
|
4
|
391
|
5 GLDemoView::GLDemoView(QWidget *parent) :
|
|
6 QGLWidget(QGLFormat(QGL::SampleBuffers|QGL::AlphaChannel), parent)
|
385
|
7 {
|
|
8 makeCurrent();
|
|
9
|
|
10 if (QGLFramebufferObject::hasOpenGLFramebufferBlit())
|
|
11 {
|
|
12 QGLFramebufferObjectFormat format;
|
|
13 format.setSamples(4);
|
|
14 format.setAttachment(QGLFramebufferObject::CombinedDepthStencil);
|
|
15
|
391
|
16 // render_fbo = new QGLFramebufferObject(512, 512, format);
|
|
17 // texture_fbo = new QGLFramebufferObject(512, 512);
|
385
|
18 }
|
|
19 else
|
|
20 {
|
391
|
21 // render_fbo = new QGLFramebufferObject(1024, 1024);
|
|
22 // texture_fbo = render_fbo;
|
385
|
23 }
|
|
24 }
|
|
25
|
391
|
26
|
|
27 GLDemoView::~GLDemoView()
|
385
|
28 {
|
391
|
29 }
|
|
30
|
|
31
|
|
32 void GLDemoView::setEngineData(DMEngineData *mengine)
|
|
33 {
|
|
34 engine = mengine;
|
385
|
35 }
|
|
36
|
|
37
|
391
|
38 void GLDemoView::render(int frameTime)
|
385
|
39 {
|
391
|
40 if (engine != NULL)
|
|
41 {
|
|
42 engine->frameTime = frameTime;
|
|
43
|
|
44 if (engine->demoRender != NULL)
|
|
45 {
|
|
46 engine->demoRender(engine);
|
|
47 }
|
|
48 else
|
|
49 {
|
|
50 dmExecuteTimeline(engine->ptl, engine->screen, engineGetTick(engine));
|
|
51 }
|
|
52
|
|
53 engine->frameCount++;
|
|
54 }
|
385
|
55 }
|
|
56
|
|
57
|
391
|
58 void GLDemoView::paintEvent(QPaintEvent *)
|
385
|
59 {
|
|
60 // save the GL state set for QPainter
|
|
61 saveGLState();
|
|
62
|
|
63 // restore the GL state that QPainter expects
|
|
64 restoreGLState();
|
|
65 }
|
|
66
|
|
67
|
391
|
68 void GLDemoView::saveGLState()
|
385
|
69 {
|
|
70 glPushAttrib(GL_ALL_ATTRIB_BITS);
|
|
71 glMatrixMode(GL_PROJECTION);
|
|
72 glPushMatrix();
|
|
73 glMatrixMode(GL_MODELVIEW);
|
|
74 glPushMatrix();
|
|
75 }
|
|
76
|
|
77
|
391
|
78 void GLDemoView::restoreGLState()
|
385
|
79 {
|
|
80 glMatrixMode(GL_PROJECTION);
|
|
81 glPopMatrix();
|
|
82 glMatrixMode(GL_MODELVIEW);
|
|
83 glPopMatrix();
|
|
84 glPopAttrib();
|
|
85 }
|
391
|
86
|
|
87
|
|
88 SWDemoView::SWDemoView(QWidget *parent) : GLDemoView(parent)
|
|
89 {
|
|
90 img = NULL;
|
|
91 }
|
|
92
|
|
93
|
|
94 SWDemoView::~SWDemoView()
|
|
95 {
|
|
96 delete img;
|
|
97 }
|
|
98
|
|
99
|
|
100 void SWDemoView::setEngineData(DMEngineData *mengine)
|
|
101 {
|
|
102 engine = mengine;
|
|
103 delete img;
|
|
104
|
|
105 img = new QImage((const uchar *)mengine->screen->pixels,
|
|
106 mengine->screen->w, mengine->screen->h,
|
|
107 mengine->screen->pitch, QImage::Format_RGB32);
|
|
108 }
|
|
109
|
|
110
|
|
111 void SWDemoView::paintEvent(QPaintEvent *)
|
|
112 {
|
|
113 if (img != NULL)
|
|
114 {
|
|
115 QPainter painter(this);
|
|
116 painter.drawImage(QPoint(0, 0), *img);
|
|
117 }
|
|
118 }
|
|
119
|
|
120
|
|
121 void SWDemoView::render(int frameTime)
|
|
122 {
|
|
123 if (SDL_MUSTLOCK(engine->screen) != 0 && SDL_LockSurface(engine->screen) != 0)
|
|
124 return;
|
|
125
|
|
126 GLDemoView::render(frameTime);
|
|
127
|
|
128 if (SDL_MUSTLOCK(engine->screen) != 0)
|
|
129 SDL_UnlockSurface(engine->screen);
|
|
130
|
|
131 update();
|
|
132 }
|
|
133
|
|
134
|