/* * Copyright © 2012 John Kåre Alsaker * * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the copyright holders not be used in * advertising or publicity pertaining to distribution of the software * without specific, written prior permission. The copyright holders make * no representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "config.h" #include "compositor.h" #ifdef ENABLE_EGL #include #else typedef int EGLint; typedef void *EGLDisplay; typedef void *EGLSurface; typedef intptr_t EGLNativeDisplayType; typedef intptr_t EGLNativeWindowType; #define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) #endif enum gl_renderer_border_side { GL_RENDERER_BORDER_TOP = 0, GL_RENDERER_BORDER_LEFT = 1, GL_RENDERER_BORDER_RIGHT = 2, GL_RENDERER_BORDER_BOTTOM = 3, }; struct gl_renderer_interface { const EGLint *opaque_attribs; const EGLint *alpha_attribs; int (*create)(struct weston_compositor *ec, EGLNativeDisplayType display, const EGLint *attribs, const EGLint *visual_id); EGLDisplay (*display)(struct weston_compositor *ec); int (*output_create)(struct weston_output *output, EGLNativeWindowType window, const EGLint *attribs, const EGLint *visual_id); void (*output_destroy)(struct weston_output *output); EGLSurface (*output_surface)(struct weston_output *output); /* Sets the output border. * * The side specifies the side for which we are setting the border. * The width and height are the width and height of the border. * The tex_width patemeter specifies the width of the actual * texture; this may be larger than width if the data is not * tightly packed. * * The top and bottom textures will extend over the sides to the * full width of the bordered window. The right and left edges, * however, will extend only to the top and bottom of the * compositor surface. This is demonstrated by the picture below: * * +-----------------------+ * | TOP | * +-+-------------------+-+ * | | | | * |L| |R| * |E| |I| * |F| |G| * |T| |H| * | | |T| * | | | | * +-+-------------------+-+ * | BOTTOM | * +-----------------------+ */ void (*output_set_border)(struct weston_output *output, enum gl_renderer_border_side side, int32_t width, int32_t height, int32_t tex_width, unsigned char *data); void (*print_egl_error_state)(void); };