output: save buffer in pending state
This commit is contained in:
parent
afe7b207d5
commit
ff6b352d75
|
@ -398,11 +398,23 @@ struct wlr_output_mode *wlr_output_preferred_mode(struct wlr_output *output) {
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void output_state_clear_buffer(struct wlr_output_state *state) {
|
||||||
|
if (!(state->committed & WLR_OUTPUT_STATE_BUFFER)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wlr_buffer_unref(state->buffer);
|
||||||
|
state->buffer = NULL;
|
||||||
|
|
||||||
|
state->committed &= ~WLR_OUTPUT_STATE_BUFFER;
|
||||||
|
}
|
||||||
|
|
||||||
bool wlr_output_attach_render(struct wlr_output *output, int *buffer_age) {
|
bool wlr_output_attach_render(struct wlr_output *output, int *buffer_age) {
|
||||||
if (!output->impl->attach_render(output, buffer_age)) {
|
if (!output->impl->attach_render(output, buffer_age)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
output_state_clear_buffer(&output->pending);
|
||||||
output->pending.committed |= WLR_OUTPUT_STATE_BUFFER;
|
output->pending.committed |= WLR_OUTPUT_STATE_BUFFER;
|
||||||
output->pending.buffer_type = WLR_OUTPUT_STATE_BUFFER_RENDER;
|
output->pending.buffer_type = WLR_OUTPUT_STATE_BUFFER_RENDER;
|
||||||
return true;
|
return true;
|
||||||
|
@ -430,8 +442,9 @@ void wlr_output_set_damage(struct wlr_output *output,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void output_state_clear(struct wlr_output_state *state) {
|
static void output_state_clear(struct wlr_output_state *state) {
|
||||||
state->committed = 0;
|
output_state_clear_buffer(state);
|
||||||
pixman_region32_clear(&state->damage);
|
pixman_region32_clear(&state->damage);
|
||||||
|
state->committed = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wlr_output_commit(struct wlr_output *output) {
|
bool wlr_output_commit(struct wlr_output *output) {
|
||||||
|
@ -488,8 +501,10 @@ bool wlr_output_attach_buffer(struct wlr_output *output,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
output_state_clear_buffer(&output->pending);
|
||||||
output->pending.committed |= WLR_OUTPUT_STATE_BUFFER;
|
output->pending.committed |= WLR_OUTPUT_STATE_BUFFER;
|
||||||
output->pending.buffer_type = WLR_OUTPUT_STATE_BUFFER_SCANOUT;
|
output->pending.buffer_type = WLR_OUTPUT_STATE_BUFFER_SCANOUT;
|
||||||
|
output->pending.buffer = wlr_buffer_ref(buffer);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue