xkb: Don't call exit on failure in weston_compositor_xkb_init()
[profile/ivi/weston.git] / src / compositor.h
index b8e767d..c7c583e 100644 (file)
 #include "../shared/config-parser.h"
 #include "weston-egl-ext.h"
 
+#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
+
+#define container_of(ptr, type, member) ({                             \
+       const __typeof__( ((type *)0)->member ) *__mptr = (ptr);        \
+       (type *)( (char *)__mptr - offsetof(type,member) );})
 
 struct weston_transform {
        struct weston_matrix matrix;
@@ -149,16 +154,19 @@ enum dpms_enum {
 struct weston_output {
        uint32_t id;
 
+       EGLSurface egl_surface;
        struct wl_list link;
        struct wl_list resource_list;
        struct wl_global *global;
        struct weston_compositor *compositor;
        struct weston_matrix matrix;
        struct wl_list animation_list;
-       int32_t x, y, mm_width, mm_height;
+       int32_t x, y, width, height;
+       int32_t mm_width, mm_height;
        struct weston_border border;
        pixman_region32_t region;
-       pixman_region32_t previous_damage;
+       int current_buffer;
+       pixman_region32_t buffer_damage[2];
        int repaint_needed;
        int repaint_scheduled;
        struct weston_output_zoom zoom;
@@ -247,8 +255,6 @@ struct weston_shader {
        GLint tex_uniforms[3];
        GLint alpha_uniform;
        GLint color_uniform;
-       GLint texwidth_uniform;
-       GLint opaque_uniform;
 };
 
 enum {
@@ -264,18 +270,27 @@ struct weston_layer {
 
 struct weston_plane {
        pixman_region32_t damage;
+       pixman_region32_t opaque;
        int32_t x, y;
 };
 
+struct weston_renderer {
+       void (*repaint_output)(struct weston_output *output,
+                              pixman_region32_t *output_damage);
+       void (*flush_damage)(struct weston_surface *surface);
+       void (*attach)(struct weston_surface *es, struct wl_buffer *buffer);
+       void (*destroy_surface)(struct weston_surface *surface);
+};
+
 struct weston_compositor {
-       struct wl_shm *shm;
        struct wl_signal destroy_signal;
 
        EGLDisplay egl_display;
        EGLContext egl_context;
        EGLConfig egl_config;
-       GLuint fbo;
        struct weston_shader texture_shader_rgba;
+       struct weston_shader texture_shader_rgbx;
+       struct weston_shader texture_shader_egl_external;
        struct weston_shader texture_shader_y_uv;
        struct weston_shader texture_shader_y_u_v;
        struct weston_shader texture_shader_y_xuxv;
@@ -285,6 +300,7 @@ struct weston_compositor {
        struct weston_shell_interface shell_interface;
 
        struct wl_signal activate_signal;
+       struct wl_signal kill_signal;
        struct wl_signal lock_signal;
        struct wl_signal unlock_signal;
 
@@ -317,11 +333,16 @@ struct weston_compositor {
        int idle_time;                  /* effective timeout, s */
 
        /* Repaint state. */
-       struct wl_array vertices, indices;
+       struct wl_array vertices;
+       struct wl_array indices; /* only used in compositor-wayland */
+       struct wl_array vtxcnt;
        struct weston_plane primary_plane;
+       int fan_debug;
 
        uint32_t focus;
 
+       struct weston_renderer *renderer;
+
        PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC
                image_target_renderbuffer_storage;
        PFNGLEGLIMAGETARGETTEXTURE2DOESPROC image_target_texture_2d;
@@ -395,9 +416,7 @@ struct weston_surface {
        struct wl_list layer_link;
        struct weston_shader *shader;
        GLfloat color[4];
-       GLfloat opaque_rect[4];
-       GLfloat alpha;
-       int blend;
+       float alpha;
        struct weston_plane *plane;
 
        /* Surface geometry state, mutable.
@@ -405,7 +424,7 @@ struct weston_surface {
         * That includes the transformations referenced from the list.
         */
        struct {
-               GLfloat x, y; /* surface translation on display */
+               float x, y; /* surface translation on display */
                int32_t width, height;
 
                /* struct weston_transform */
@@ -447,11 +466,34 @@ struct weston_surface {
        struct wl_list frame_callback_list;
 
        EGLImageKHR images[3];
+       GLenum target;
        int num_images;
 
        struct wl_buffer *buffer;
        struct wl_listener buffer_destroy_listener;
 
+       /* All the pending state, that wl_surface.commit will apply. */
+       struct {
+               /* wl_surface.attach */
+               int remove_contents;
+               struct wl_buffer *buffer;
+               struct wl_listener buffer_destroy_listener;
+               int32_t sx;
+               int32_t sy;
+
+               /* wl_surface.damage */
+               pixman_region32_t damage;
+
+               /* wl_surface.set_opaque_region */
+               pixman_region32_t opaque;
+
+               /* wl_surface.set_input_region */
+               pixman_region32_t input;
+
+               /* wl_surface.frame */
+               struct wl_list frame_callback_list;
+       } pending;
+
        /*
         * If non-NULL, this function will be called on surface::attach after
         * a new buffer has been set up for this surface. The integer params
@@ -475,9 +517,12 @@ weston_surface_to_global_fixed(struct weston_surface *surface,
                               wl_fixed_t *x, wl_fixed_t *y);
 void
 weston_surface_to_global_float(struct weston_surface *surface,
-                              GLfloat sx, GLfloat sy, GLfloat *x, GLfloat *y);
+                              float sx, float sy, float *x, float *y);
 
 void
+weston_surface_from_global_float(struct weston_surface *surface,
+                                float x, float y, float *sx, float *sy);
+void
 weston_surface_from_global(struct weston_surface *surface,
                           int32_t x, int32_t y, int32_t *sx, int32_t *sy);
 void
@@ -497,10 +542,6 @@ void
 weston_surface_activate(struct weston_surface *surface,
                        struct weston_seat *seat);
 void
-weston_surface_draw(struct weston_surface *es,
-                   struct weston_output *output, pixman_region32_t *damage);
-
-void
 notify_motion(struct weston_seat *seat, uint32_t time,
              wl_fixed_t x, wl_fixed_t y);
 void
@@ -622,22 +663,19 @@ weston_surface_create(struct weston_compositor *compositor);
 
 void
 weston_surface_configure(struct weston_surface *surface,
-                        GLfloat x, GLfloat y, int width, int height);
+                        float x, float y, int width, int height);
 
 void
 weston_surface_restack(struct weston_surface *surface, struct wl_list *below);
 
 void
 weston_surface_set_position(struct weston_surface *surface,
-                           GLfloat x, GLfloat y);
+                           float x, float y);
 
 int
 weston_surface_is_mapped(struct weston_surface *surface);
 
 void
-weston_surface_assign_output(struct weston_surface *surface);
-
-void
 weston_surface_schedule_repaint(struct weston_surface *surface);
 
 void
@@ -661,8 +699,6 @@ weston_compositor_get_time(void);
 int
 weston_compositor_init(struct weston_compositor *ec, struct wl_display *display,
                       int argc, char *argv[], const char *config_file);
-int
-weston_compositor_init_gl(struct weston_compositor *ec);
 void
 weston_compositor_shutdown(struct weston_compositor *ec);
 void
@@ -678,7 +714,7 @@ void
 weston_output_move(struct weston_output *output, int x, int y);
 void
 weston_output_init(struct weston_output *output, struct weston_compositor *c,
-                  int x, int y, int width, int height);
+                  int x, int y, int width, int height, uint32_t transform);
 void
 weston_output_destroy(struct weston_output *output);
 
@@ -686,7 +722,7 @@ void
 weston_seat_init(struct weston_seat *seat, struct weston_compositor *ec);
 void
 weston_seat_init_pointer(struct weston_seat *seat);
-void
+int
 weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap);
 void
 weston_seat_init_touch(struct weston_seat *seat);
@@ -738,6 +774,9 @@ void
 text_cursor_position_notifier_create(struct weston_compositor *ec);
 
 void
+text_model_factory_create(struct weston_compositor *ec);
+
+void
 input_method_create(struct weston_compositor *ec,
                    struct weston_seat *seat);
 
@@ -760,35 +799,40 @@ weston_client_launch(struct weston_compositor *compositor,
 void
 weston_watch_process(struct weston_process *process);
 
-int
-weston_xserver_init(struct weston_compositor *compositor);
-
 struct weston_surface_animation;
 typedef        void (*weston_surface_animation_done_func_t)(struct weston_surface_animation *animation, void *data);
 
 struct weston_surface_animation *
-weston_zoom_run(struct weston_surface *surface, GLfloat start, GLfloat stop,
+weston_zoom_run(struct weston_surface *surface, float start, float stop,
                weston_surface_animation_done_func_t done, void *data);
 
 struct weston_surface_animation *
 weston_fade_run(struct weston_surface *surface,
                weston_surface_animation_done_func_t done, void *data);
 struct weston_surface_animation *
-weston_slide_run(struct weston_surface *surface, GLfloat start, GLfloat stop,
+weston_slide_run(struct weston_surface *surface, float start, float stop,
                 weston_surface_animation_done_func_t done, void *data);
 
 void
 weston_surface_set_color(struct weston_surface *surface,
-                        GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+                        float red, float green, float blue, float alpha);
 
 void
 weston_surface_destroy(struct weston_surface *surface);
 
+int
+weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode);
+
+int
+gles2_renderer_init(struct weston_compositor *ec);
+void
+gles2_renderer_destroy(struct weston_compositor *ec);
+
 struct weston_compositor *
 backend_init(struct wl_display *display, int argc, char *argv[],
-            const char *config_file);
+           const char *config_file);
 
 int
-weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode);
+module_init(struct weston_compositor *compositor);
 
 #endif