summaryrefslogtreecommitdiff
path: root/platform/glfw/glfw_gl_backend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/glfw/glfw_gl_backend.cpp')
-rw-r--r--platform/glfw/glfw_gl_backend.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/platform/glfw/glfw_gl_backend.cpp b/platform/glfw/glfw_gl_backend.cpp
new file mode 100644
index 0000000000..b61e2775d5
--- /dev/null
+++ b/platform/glfw/glfw_gl_backend.cpp
@@ -0,0 +1,58 @@
+#include "glfw_gl_backend.hpp"
+
+#include <mbgl/gfx/backend_scope.hpp>
+#include <mbgl/gl/renderable_resource.hpp>
+
+#include <GLFW/glfw3.h>
+
+class GLFWGLRenderableResource final : public mbgl::gl::RenderableResource {
+public:
+ GLFWGLRenderableResource(GLFWGLBackend& backend_) : backend(backend_) {
+ }
+
+ void bind() override {
+ backend.setFramebufferBinding(0);
+ backend.setViewport(0, 0, backend.getSize());
+ }
+
+private:
+ GLFWGLBackend& backend;
+};
+
+GLFWGLBackend::GLFWGLBackend(GLFWwindow* window_)
+ : mbgl::gfx::Renderable(
+ [window_] {
+ int fbWidth, fbHeight;
+ glfwGetFramebufferSize(window_, &fbWidth, &fbHeight);
+ return mbgl::Size{ static_cast<uint32_t>(fbWidth), static_cast<uint32_t>(fbHeight) };
+ }(),
+ std::make_unique<GLFWGLRenderableResource>(*this)),
+ window(window_) {
+}
+
+GLFWGLBackend::~GLFWGLBackend() = default;
+
+void GLFWGLBackend::activate() {
+ glfwMakeContextCurrent(window);
+}
+
+void GLFWGLBackend::deactivate() {
+ glfwMakeContextCurrent(nullptr);
+}
+
+mbgl::gl::ProcAddress GLFWGLBackend::getExtensionFunctionPointer(const char* name) {
+ return glfwGetProcAddress(name);
+}
+
+void GLFWGLBackend::updateAssumedState() {
+ assumeFramebufferBinding(0);
+ assumeViewport(0, 0, size);
+}
+
+mbgl::Size GLFWGLBackend::getSize() const {
+ return size;
+}
+
+void GLFWGLBackend::setSize(const mbgl::Size newSize) {
+ size = newSize;
+}