| /* |
| * 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 <EGL/egl.h> |
| |
| #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 while. 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); |
| }; |
| |
| struct gl_renderer_interface gl_renderer_interface; |