Output: fix Wayland backend support
The wlroots Wayland backend does not support gamma LUT application and
will currently fail to render anything if river commits a gamma LUT.
To fix this, test the state when applying a gamma LUT and fall back to a
state with no gamma LUT set if that fails.
This problem was revealed by 2e09b66
which flags gamma as dirty on all
outputs when they are enabled.
This commit is contained in:
parent
0997fde28e
commit
a80e0f7322
@ -12,8 +12,8 @@
|
|||||||
.hash = "1220687c8c47a48ba285d26a05600f8700d37fc637e223ced3aa8324f3650bf52242",
|
.hash = "1220687c8c47a48ba285d26a05600f8700d37fc637e223ced3aa8324f3650bf52242",
|
||||||
},
|
},
|
||||||
.@"zig-wlroots" = .{
|
.@"zig-wlroots" = .{
|
||||||
.url = "https://codeberg.org/ifreund/zig-wlroots/archive/v0.17.1.tar.gz",
|
.url = "https://codeberg.org/ifreund/zig-wlroots/archive/084736cd92364b5fa7d8161611d085ce272fa707.tar.gz",
|
||||||
.hash = "1220c65ab884c236cc950b564c70f6cd04046d86485ee76e0cde886cef7438021b4f",
|
.hash = "12208383c1cf42e9b932b90f68cd4f378582cf966355a6377fd8f913852e7bc2d7c6",
|
||||||
},
|
},
|
||||||
.@"zig-xkbcommon" = .{
|
.@"zig-xkbcommon" = .{
|
||||||
.url = "https://codeberg.org/ifreund/zig-xkbcommon/archive/v0.2.0.tar.gz",
|
.url = "https://codeberg.org/ifreund/zig-xkbcommon/archive/v0.2.0.tar.gz",
|
||||||
|
@ -540,18 +540,23 @@ fn renderAndCommit(output: *Output, scene_output: *wlr.SceneOutput) !void {
|
|||||||
var state = wlr.Output.State.init();
|
var state = wlr.Output.State.init();
|
||||||
defer state.finish();
|
defer state.finish();
|
||||||
|
|
||||||
if (server.root.gamma_control_manager.getControl(output.wlr_output)) |control| {
|
const control = server.root.gamma_control_manager.getControl(output.wlr_output);
|
||||||
log.info("applying gamma settings from client", .{});
|
if (!wlr.GammaControlV1.apply(control, &state)) return error.OutOfMemory;
|
||||||
if (!control.apply(&state)) return error.OutOfMemory;
|
|
||||||
} else {
|
if (!output.wlr_output.testState(&state)) {
|
||||||
log.info("clearing gamma settings from client", .{});
|
wlr.GammaControlV1.sendFailedAndDestroy(control);
|
||||||
state.clearGammaLut();
|
state.clearGammaLut();
|
||||||
|
// If the backend does not support gamma LUTs it will reject any
|
||||||
|
// state with the gamma LUT committed bit set even if the state
|
||||||
|
// has a null LUT. The wayland backend for example has this behavior.
|
||||||
|
state.committed.gamma_lut = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!scene_output.buildState(&state, null)) return error.CommitFailed;
|
if (!scene_output.buildState(&state, null)) return error.CommitFailed;
|
||||||
|
|
||||||
if (!output.wlr_output.commitState(&state)) return error.CommitFailed;
|
if (!output.wlr_output.commitState(&state)) return error.CommitFailed;
|
||||||
|
|
||||||
|
// TODO(wlroots) remove this rotate() call when updating to wlroots 0.18
|
||||||
scene_output.damage_ring.rotate();
|
scene_output.damage_ring.rotate();
|
||||||
output.gamma_dirty = false;
|
output.gamma_dirty = false;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user