summaryrefslogtreecommitdiff
path: root/platform/qt/src/qmapboxgl_renderer_backend.cpp
blob: 2a9706eb484528243ada8df7eed669719c0d83dc (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
#include "qmapboxgl_renderer_backend.hpp"

#include <mbgl/gfx/backend_scope.hpp>
#include <mbgl/gl/renderable_resource.hpp>

#include <QOpenGLContext>
#include <QtGlobal>

class QMapboxGLRenderableResource final : public mbgl::gl::RenderableResource {
public:
    QMapboxGLRenderableResource(QMapboxGLRendererBackend& backend_) : backend(backend_) {
    }

    void bind() override {
        assert(mbgl::gfx::BackendScope::exists());
        backend.restoreFramebufferBinding();
        backend.setViewport(0, 0, backend.getSize());
    }

private:
    QMapboxGLRendererBackend& backend;
};

QMapboxGLRendererBackend::QMapboxGLRendererBackend()
    : mbgl::gfx::Renderable({ 0, 0 }, std::make_unique<QMapboxGLRenderableResource>(*this)) {
}

QMapboxGLRendererBackend::~QMapboxGLRendererBackend() = default;

void QMapboxGLRendererBackend::updateAssumedState() {
    assumeFramebufferBinding(ImplicitFramebufferBinding);
    assumeViewport(0, 0, size);
}

void QMapboxGLRendererBackend::restoreFramebufferBinding() {
    setFramebufferBinding(m_fbo);
}

void QMapboxGLRendererBackend::updateFramebuffer(quint32 fbo, const mbgl::Size& newSize) {
    m_fbo = fbo;
    size = newSize;
}

/*!
    Initializes an OpenGL extension function such as Vertex Array Objects (VAOs),
    required by Mapbox GL Native engine.
*/
mbgl::gl::ProcAddress QMapboxGLRendererBackend::getExtensionFunctionPointer(const char* name) {
    QOpenGLContext* thisContext = QOpenGLContext::currentContext();
    return thisContext->getProcAddress(name);
}