forked from mapsme/omim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqtoglcontext.cpp
128 lines (102 loc) · 2.39 KB
/
qtoglcontext.cpp
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
119
120
121
122
123
124
125
126
127
128
#include "qt/qtoglcontext.hpp"
#include "base/assert.hpp"
#include "base/logging.hpp"
#include "base/macros.hpp"
#include "base/math.hpp"
#include "drape/glfunctions.hpp"
QtRenderOGLContext::QtRenderOGLContext(QOpenGLContext * rootContext, QOffscreenSurface * surface)
: m_surface(surface)
{
m_ctx = new QOpenGLContext();
m_ctx->setFormat(rootContext->format());
m_ctx->setShareContext(rootContext);
m_ctx->create();
ASSERT(m_ctx->isValid(), ());
}
QtRenderOGLContext::~QtRenderOGLContext()
{
delete m_frontFrame;
delete m_backFrame;
delete m_ctx;
}
void QtRenderOGLContext::present()
{
if (!m_resizeLock)
lockFrame();
m_resizeLock = false;
GLFunctions::glFinish();
swap(m_frontFrame, m_backFrame);
unlockFrame();
}
void QtRenderOGLContext::makeCurrent()
{
VERIFY(m_ctx->makeCurrent(m_surface), ());
}
void QtRenderOGLContext::doneCurrent()
{
m_ctx->doneCurrent();
}
void QtRenderOGLContext::setDefaultFramebuffer()
{
if (m_backFrame == nullptr)
return;
m_backFrame->bind();
}
void QtRenderOGLContext::resize(int w, int h)
{
lockFrame();
m_resizeLock = true;
delete m_frontFrame;
delete m_backFrame;
QSize size(my::NextPowOf2(w), my::NextPowOf2(h));
m_texRect = QRectF(0.0, 0.0, w / (float)size.width(), h / (float)size.height());
m_frontFrame = new QOpenGLFramebufferObject(size, QOpenGLFramebufferObject::Depth);
m_backFrame = new QOpenGLFramebufferObject(size, QOpenGLFramebufferObject::Depth);
}
void QtRenderOGLContext::lockFrame()
{
m_lock.lock();
}
QRectF const & QtRenderOGLContext::getTexRect() const
{
return m_texRect;
}
GLuint QtRenderOGLContext::getTextureHandle() const
{
if (m_frontFrame == nullptr)
return 0;
return m_frontFrame->texture();
}
void QtRenderOGLContext::unlockFrame()
{
m_lock.unlock();
}
QtUploadOGLContext::QtUploadOGLContext(QOpenGLContext * rootContext, QOffscreenSurface * surface)
: m_surface(surface)
{
m_ctx = new QOpenGLContext();
m_ctx->setFormat(rootContext->format());
m_ctx->setShareContext(rootContext);
m_ctx->create();
ASSERT(m_ctx->isValid(), ());
}
QtUploadOGLContext::~QtUploadOGLContext()
{
delete m_ctx;
}
void QtUploadOGLContext::makeCurrent()
{
m_ctx->makeCurrent(m_surface);
}
void QtUploadOGLContext::doneCurrent()
{
m_ctx->doneCurrent();
}
void QtUploadOGLContext::present()
{
ASSERT(false, ());
}
void QtUploadOGLContext::setDefaultFramebuffer()
{
ASSERT(false, ());
}