100 lines
3.2 KiB
Diff
100 lines
3.2 KiB
Diff
diff --git a/src/mag.cpp b/src/mag.cpp
|
|
index 1ed4d73..f03cf7c 100644
|
|
--- a/src/mag.cpp
|
|
+++ b/src/mag.cpp
|
|
@@ -35,16 +35,6 @@
|
|
#include "wayfire/opengl.hpp"
|
|
#include <glm/gtc/matrix_transform.hpp>
|
|
|
|
-extern "C"
|
|
-{
|
|
-#define static
|
|
-#include <wlr/config.h>
|
|
-#include <wlr/render/gles2.h>
|
|
-#include <wlr/render/wlr_renderer.h>
|
|
-#include <wlr/types/wlr_matrix.h>
|
|
-#undef static
|
|
-}
|
|
-
|
|
#include <wayfire/util/log.hpp>
|
|
|
|
|
|
@@ -171,19 +161,6 @@ class wayfire_magnifier : public wf::plugin_interface_t
|
|
|
|
wf::effect_hook_t post_hook = [=] ()
|
|
{
|
|
- wlr_dmabuf_attributes dmabuf_attribs;
|
|
-
|
|
- /* This plugin only works if this function succeeds. It will not
|
|
- * work with the x11 backend but works with drm, for example. */
|
|
- if (!wlr_output_export_dmabuf(output->handle, &dmabuf_attribs))
|
|
- {
|
|
- LOGE("Failed reading output contents");
|
|
- deactivate();
|
|
- active = false;
|
|
-
|
|
- return;
|
|
- }
|
|
-
|
|
auto cursor_position = output->get_cursor_position();
|
|
|
|
auto ortho = output->render->get_target_framebuffer()
|
|
@@ -201,9 +178,6 @@ class wayfire_magnifier : public wf::plugin_interface_t
|
|
float y = cursor.y;
|
|
|
|
auto og = output->get_relative_geometry();
|
|
- gl_geometry src_geometry = {0, 0, (float)og.width, (float)og.height};
|
|
- auto transform = output->render->get_target_framebuffer().transform;
|
|
- transform = glm::inverse(transform);
|
|
|
|
width = og.width;
|
|
height = og.height;
|
|
@@ -220,6 +194,9 @@ class wayfire_magnifier : public wf::plugin_interface_t
|
|
/* Compute zoom_box, forcing the zoom to stay on the output */
|
|
gl_geometry zoom_box;
|
|
|
|
+ /* Y-invert */
|
|
+ y = 1.0 - y;
|
|
+
|
|
zoom_box.x1 = x - level;
|
|
zoom_box.y1 = y - level;
|
|
zoom_box.x2 = x + level;
|
|
@@ -249,27 +226,25 @@ class wayfire_magnifier : public wf::plugin_interface_t
|
|
zoom_box.y2 = 1.0;
|
|
}
|
|
|
|
+ zoom_box.x1 *= width - 1;
|
|
+ zoom_box.x2 *= width - 1;
|
|
+ zoom_box.y1 *= height - 1;
|
|
+ zoom_box.y2 *= height - 1;
|
|
+
|
|
/* Copy zoom_box part of the output to our own texture to be
|
|
* read by the mag_view_t. */
|
|
- auto wlr_texture = wlr_texture_from_dmabuf(
|
|
- wf::get_core().renderer, &dmabuf_attribs);
|
|
-
|
|
- wf::texture_t texture{wlr_texture};
|
|
|
|
OpenGL::render_begin();
|
|
mag_view->mag_tex.allocate(width, height);
|
|
mag_view->mag_tex.geometry = og;
|
|
mag_view->mag_tex.bind();
|
|
-
|
|
- OpenGL::render_transformed_texture(texture, src_geometry, zoom_box,
|
|
- transform * mag_view->mag_tex.get_orthographic_projection(),
|
|
- glm::vec4(1.0),
|
|
- OpenGL::TEXTURE_USE_TEX_GEOMETRY);
|
|
+ GL_CALL(glBindFramebuffer(GL_READ_FRAMEBUFFER,
|
|
+ output->render->get_target_framebuffer().fb));
|
|
+ GL_CALL(glBlitFramebuffer(zoom_box.x1, zoom_box.y2, zoom_box.x2, zoom_box.y1,
|
|
+ 0, 0, width, height,
|
|
+ GL_COLOR_BUFFER_BIT, GL_LINEAR));
|
|
OpenGL::render_end();
|
|
|
|
- wlr_texture_destroy(wlr_texture);
|
|
- wlr_dmabuf_attributes_finish(&dmabuf_attribs);
|
|
-
|
|
mag_view->damage();
|
|
};
|
|
|