diff options
Diffstat (limited to 'cogl/winsys/cogl-winsys-kms.h')
-rw-r--r-- | cogl/winsys/cogl-winsys-kms.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/cogl/winsys/cogl-winsys-kms.h b/cogl/winsys/cogl-winsys-kms.h new file mode 100644 index 00000000..165550bc --- /dev/null +++ b/cogl/winsys/cogl-winsys-kms.h @@ -0,0 +1,99 @@ +/* + * Cogl + * + * An object oriented GL/GLES Abstraction/Utility Layer + * + * Copyright (C) 2011 Intel Corporation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Authors: + * Rob Bradford <rob@linux.intel.com> + */ + +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <drm.h> +#include <xf86drmMode.h> +#include <gbm.h> +#include <glib.h> + +#include "cogl-winsys-private.h" + +typedef struct _CoglRendererKMS +{ + int fd; + struct gbm_device *gbm; + EGLDisplay *dpy; +} CoglRendererKMS; + +typedef struct _CoglDisplayKMS +{ + EGLContext egl_context; + drmModeConnector *connector; + drmModeEncoder *encoder; + drmModeModeInfo mode; + drmModeCrtcPtr saved_crtc; + gint width, height; +} CoglDisplayKMS; + +typedef struct _CoglOnscreenKMS +{ + CoglContext *cogl_context; + + uint32_t fb_id[2]; + struct gbm_bo *bo[2]; + GLuint fb, color_rb[2], depth_rb; + EGLImageKHR image[2]; + gint current_frame; +} CoglOnscreenKMS; + +gboolean +_cogl_winsys_kms_connect (CoglRendererKMS *kms_renderer, + GError **error); + +gboolean +_cogl_winsys_kms_onscreen_init (CoglContext *context, + CoglRendererKMS *kms_renderer, + CoglDisplayKMS *kms_display, + CoglOnscreenKMS *kms_onscreen, + GError **error); +void +_cogl_winsys_kms_onscreen_deinit (CoglRendererKMS *kms_renderer, + CoglOnscreenKMS *kms_onscreen); + +gboolean +_cogl_winsys_kms_display_setup (CoglRendererKMS *kms_renderer, + CoglDisplayKMS *kms_display, + GError **error); + +void +_cogl_winsys_kms_swap_buffers (CoglRendererKMS *kms_renderer, + CoglDisplayKMS *kms_display, + CoglOnscreenKMS *kms_onscreen); + +void +_cogl_winsys_kms_bind (CoglRendererKMS *kms_renderer, + CoglDisplayKMS *kms_display); + +gboolean +_cogl_winsys_kms_create_context (CoglRendererKMS *kms_renderer, + CoglDisplayKMS *kms_display, + GError **error); + +gboolean +_cogl_winsys_kms_destroy_context (CoglRendererKMS *kms_renderer, + CoglDisplayKMS *kms_display, + GError **error); |