mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-15 06:59:49 -05:00
Split native drm part of compositor out
This commit is contained in:
parent
44be655b6d
commit
fc783d4071
10 changed files with 897 additions and 833 deletions
145
compositor.h
145
compositor.h
|
|
@ -19,9 +19,131 @@
|
|||
#ifndef _WAYLAND_SYSTEM_COMPOSITOR_H_
|
||||
#define _WAYLAND_SYSTEM_COMPOSITOR_H_
|
||||
|
||||
struct wlsc_input_device;
|
||||
void
|
||||
wlsc_device_get_position(struct wlsc_input_device *device, int32_t *x, int32_t *y);
|
||||
#include <termios.h>
|
||||
#include <xf86drm.h>
|
||||
#include <xf86drmMode.h>
|
||||
#include <libudev.h>
|
||||
#include "wayland.h"
|
||||
#include "wayland-util.h"
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
|
||||
#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
|
||||
|
||||
struct wlsc_matrix {
|
||||
GLfloat d[16];
|
||||
};
|
||||
|
||||
struct wl_visual {
|
||||
struct wl_object base;
|
||||
};
|
||||
|
||||
struct wlsc_surface;
|
||||
|
||||
struct wlsc_listener {
|
||||
struct wl_list link;
|
||||
void (*func)(struct wlsc_listener *listener,
|
||||
struct wlsc_surface *surface);
|
||||
};
|
||||
|
||||
struct wlsc_output {
|
||||
struct wl_object base;
|
||||
struct wl_list link;
|
||||
struct wlsc_compositor *compositor;
|
||||
struct wlsc_surface *background;
|
||||
struct wlsc_matrix matrix;
|
||||
int32_t x, y, width, height;
|
||||
|
||||
drmModeModeInfo mode;
|
||||
uint32_t crtc_id;
|
||||
uint32_t connector_id;
|
||||
|
||||
GLuint rbo[2];
|
||||
uint32_t fb_id[2];
|
||||
EGLImageKHR image[2];
|
||||
uint32_t current;
|
||||
};
|
||||
|
||||
struct wlsc_input_device {
|
||||
struct wl_object base;
|
||||
int32_t x, y;
|
||||
struct wlsc_compositor *ec;
|
||||
struct wlsc_surface *sprite;
|
||||
struct wl_list link;
|
||||
|
||||
int grab;
|
||||
struct wlsc_surface *grab_surface;
|
||||
struct wlsc_surface *pointer_focus;
|
||||
struct wlsc_surface *keyboard_focus;
|
||||
struct wl_array keys;
|
||||
|
||||
struct wlsc_listener listener;
|
||||
};
|
||||
|
||||
struct wlsc_compositor {
|
||||
struct wl_compositor base;
|
||||
struct wl_visual argb_visual, premultiplied_argb_visual, rgb_visual;
|
||||
|
||||
EGLDisplay display;
|
||||
EGLContext context;
|
||||
int drm_fd;
|
||||
GLuint fbo, vbo;
|
||||
GLuint proj_uniform, tex_uniform;
|
||||
struct wl_display *wl_display;
|
||||
|
||||
/* There can be more than one, but not right now... */
|
||||
struct wlsc_input_device *input_device;
|
||||
|
||||
struct wl_list output_list;
|
||||
struct wl_list input_device_list;
|
||||
struct wl_list surface_list;
|
||||
|
||||
struct wl_list surface_destroy_listener_list;
|
||||
|
||||
struct wl_event_source *term_signal_source;
|
||||
|
||||
/* tty handling state */
|
||||
int tty_fd;
|
||||
uint32_t vt_active : 1;
|
||||
|
||||
struct termios terminal_attributes;
|
||||
struct wl_event_source *tty_input_source;
|
||||
struct wl_event_source *enter_vt_source;
|
||||
struct wl_event_source *leave_vt_source;
|
||||
|
||||
struct udev *udev;
|
||||
|
||||
/* Repaint state. */
|
||||
struct wl_event_source *timer_source;
|
||||
int repaint_needed;
|
||||
int repaint_on_timeout;
|
||||
struct timespec previous_swap;
|
||||
uint32_t current_frame;
|
||||
struct wl_event_source *drm_source;
|
||||
|
||||
uint32_t modifier_state;
|
||||
};
|
||||
|
||||
#define MODIFIER_CTRL (1 << 8)
|
||||
#define MODIFIER_ALT (1 << 9)
|
||||
|
||||
struct wlsc_vector {
|
||||
GLfloat f[4];
|
||||
};
|
||||
|
||||
struct wlsc_surface {
|
||||
struct wl_surface base;
|
||||
struct wlsc_compositor *compositor;
|
||||
struct wl_visual *visual;
|
||||
GLuint texture;
|
||||
EGLImageKHR image;
|
||||
int width, height;
|
||||
struct wl_list link;
|
||||
struct wlsc_matrix matrix;
|
||||
struct wlsc_matrix matrix_inv;
|
||||
};
|
||||
|
||||
void
|
||||
notify_motion(struct wlsc_input_device *device, int x, int y);
|
||||
void
|
||||
|
|
@ -29,8 +151,19 @@ notify_button(struct wlsc_input_device *device, int32_t button, int32_t state);
|
|||
void
|
||||
notify_key(struct wlsc_input_device *device, uint32_t key, uint32_t state);
|
||||
|
||||
struct evdev_input_device *
|
||||
evdev_input_device_create(struct wlsc_input_device *device,
|
||||
struct wl_display *display, const char *path);
|
||||
void
|
||||
wlsc_compositor_present_drm(struct wlsc_compositor *wlsc);
|
||||
int
|
||||
wlsc_compositor_init_drm(struct wlsc_compositor *ec);
|
||||
void
|
||||
wlsc_compositor_finish_frame(struct wlsc_compositor *compositor, int msecs);
|
||||
struct wlsc_input_device *
|
||||
wlsc_input_device_create(struct wlsc_compositor *ec);
|
||||
|
||||
void
|
||||
screenshooter_create(struct wlsc_compositor *ec);
|
||||
|
||||
extern const char *option_background;
|
||||
extern int option_connector;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue