Revert 72272ab4fe
Apparently NVIDIA drivers dont handle this well. Sigh. Go back to calling wl_egl_window_resize() before resizing the framebuffer instead of before swapping in the resized framebuffer. Logically, these should be equivalent, but... Wayland is such an ongoing disaster. Fixes #7493 (I hope).
This commit is contained in:
parent
06a45dcf36
commit
88aa4d1de3
3 changed files with 5 additions and 17 deletions
3
glfw/context.c
vendored
3
glfw/context.c
vendored
|
|
@ -476,9 +476,6 @@ GLFWAPI void glfwSwapBuffers(GLFWwindow* handle)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _GLFW_WAYLAND
|
|
||||||
_glfwWaylandBeforeBufferSwap(window);
|
|
||||||
#endif
|
|
||||||
window->context.swapBuffers(window);
|
window->context.swapBuffers(window);
|
||||||
#ifdef _GLFW_WAYLAND
|
#ifdef _GLFW_WAYLAND
|
||||||
_glfwWaylandAfterBufferSwap(window);
|
_glfwWaylandAfterBufferSwap(window);
|
||||||
|
|
|
||||||
3
glfw/wl_platform.h
vendored
3
glfw/wl_platform.h
vendored
|
|
@ -185,9 +185,6 @@ typedef struct _GLFWwindowWayland
|
||||||
struct zwlr_layer_surface_v1* zwlr_layer_surface_v1;
|
struct zwlr_layer_surface_v1* zwlr_layer_surface_v1;
|
||||||
} layer_shell;
|
} layer_shell;
|
||||||
|
|
||||||
struct {
|
|
||||||
int width, height, dirty;
|
|
||||||
} framebuffer_size_at_last_resize;
|
|
||||||
/* information about axis events on current frame */
|
/* information about axis events on current frame */
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|
|
||||||
16
glfw/wl_window.c
vendored
16
glfw/wl_window.c
vendored
|
|
@ -370,27 +370,21 @@ wait_for_swap_to_commit(_GLFWwindow *window) {
|
||||||
|
|
||||||
static void
|
static void
|
||||||
resizeFramebuffer(_GLFWwindow* window) {
|
resizeFramebuffer(_GLFWwindow* window) {
|
||||||
|
GLFWwindow *ctx = glfwGetCurrentContext();
|
||||||
|
const bool ctx_changed = ctx != (GLFWwindow*)window;
|
||||||
|
if (ctx_changed) glfwMakeContextCurrent((GLFWwindow*)window);
|
||||||
double scale = _glfwWaylandWindowScale(window);
|
double scale = _glfwWaylandWindowScale(window);
|
||||||
int scaled_width = (int)round(window->wl.width * scale);
|
int scaled_width = (int)round(window->wl.width * scale);
|
||||||
int scaled_height = (int)round(window->wl.height * scale);
|
int scaled_height = (int)round(window->wl.height * scale);
|
||||||
debug("Resizing framebuffer of window: %llu to: %dx%d window size: %dx%d at scale: %.3f\n",
|
debug("Resizing framebuffer of window: %llu to: %dx%d window size: %dx%d at scale: %.3f\n",
|
||||||
window->id, scaled_width, scaled_height, window->wl.width, window->wl.height, scale);
|
window->id, scaled_width, scaled_height, window->wl.width, window->wl.height, scale);
|
||||||
|
wl_egl_window_resize(window->wl.native, scaled_width, scaled_height, 0, 0);
|
||||||
update_regions(window);
|
update_regions(window);
|
||||||
wait_for_swap_to_commit(window);
|
wait_for_swap_to_commit(window);
|
||||||
window->wl.framebuffer_size_at_last_resize.width = scaled_width;
|
if (ctx_changed) glfwMakeContextCurrent(ctx);
|
||||||
window->wl.framebuffer_size_at_last_resize.height = scaled_height;
|
|
||||||
window->wl.framebuffer_size_at_last_resize.dirty = true;
|
|
||||||
_glfwInputFramebufferSize(window, scaled_width, scaled_height);
|
_glfwInputFramebufferSize(window, scaled_width, scaled_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_glfwWaylandBeforeBufferSwap(_GLFWwindow* window) {
|
|
||||||
if (window->wl.framebuffer_size_at_last_resize.dirty) {
|
|
||||||
wl_egl_window_resize(window->wl.native, window->wl.framebuffer_size_at_last_resize.width, window->wl.framebuffer_size_at_last_resize.height, 0, 0);
|
|
||||||
window->wl.framebuffer_size_at_last_resize.dirty = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_glfwWaylandAfterBufferSwap(_GLFWwindow* window) {
|
_glfwWaylandAfterBufferSwap(_GLFWwindow* window) {
|
||||||
if (window->wl.temp_buffer_used_during_window_creation) {
|
if (window->wl.temp_buffer_used_during_window_creation) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue