Untitled
unknown
plain_text
a year ago
2.8 kB
14
Indexable
// rdprail_output.c
#include <assert.h>
#include <stdlib.h>
#include <wlr/interfaces/wlr_output.h>
#include <wlr/util/log.h>
#include "backend/rdprail/rdprail_output.h"
// Remove the gamma size function as it's not needed
// rdprail_output.c
static bool output_test(struct wlr_output *wlr_output,
const struct wlr_output_state *state) {
return true; // Always allow test state
}
static bool output_commit(struct wlr_output *wlr_output,
const struct wlr_output_state *state) {
struct wlr_rdp_output *output = (struct wlr_rdp_output *)wlr_output;
if (state->committed & WLR_OUTPUT_STATE_BUFFER && state->buffer) {
void *data;
uint32_t format;
size_t stride;
if (wlr_buffer_begin_data_ptr_access(state->buffer, 0,
&data, &format, &stride)) {
// Get damage region
pixman_box32_t *rects;
int n_rects;
rects = pixman_region32_rectangles(&output->pending.damage, &n_rects);
for (int i = 0; i < n_rects; i++) {
RECTANGLE_16 rect = {
.left = (uint16_t)rects[i].x1,
.top = (uint16_t)rects[i].y1,
.right = (uint16_t)rects[i].x2,
.bottom = (uint16_t)rects[i].y2
};
output->backend->redir_ctx->SurfaceCommand(
output->backend->redir_ctx,
output,
GFX_REDIR_SURFACE_COMMAND_UPDATEREGION,
&rect,
data);
}
wlr_buffer_end_data_ptr_access(state->buffer);
}
}
return true;
}
static void output_destroy(struct wlr_output *wlr_output) {
struct wlr_rdp_output *output = (struct wlr_rdp_output *)wlr_output;
wl_list_remove(&output->link);
free(output);
}
static const struct wlr_output_impl output_impl = {
.destroy = output_destroy,
.test = output_test,
.commit = output_commit,
};
struct wlr_rdp_output *wlr_rdp_output_create(struct wlr_rdp_backend *backend) {
struct wlr_rdp_output *output = calloc(1, sizeof(*output));
if (!output) {
return NULL;
}
struct wl_event_loop *event_loop =
wl_display_get_event_loop(backend->display);
wlr_output_init(&output->base,
&backend->base, // backend
&output_impl, // impl
event_loop, // event_loop
NULL); // state
output->backend = backend;
output->width = 1920;
output->height = 1080;
output->refresh_rate = 60000;
pixman_region32_init(&output->pending.damage);
wl_list_insert(&backend->outputs, &output->link);
wlr_signal_emit_safe(&backend->events.new_output, output);
return output;
}Editor is loading...
Leave a Comment