diff options
Diffstat (limited to 'platform/glfw/glfw_gl_backend.cpp')
-rw-r--r-- | platform/glfw/glfw_gl_backend.cpp | 58 |
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; +} |