diff --git a/cogl/Makefile.am b/cogl/Makefile.am index 0c223b860..8cfe317dc 100644 --- a/cogl/Makefile.am +++ b/cogl/Makefile.am @@ -397,6 +397,8 @@ cogl_sources_c += \ $(srcdir)/winsys/cogl-winsys-egl-wayland-private.h endif if SUPPORT_EGL_PLATFORM_KMS +cogl_public_h += \ + $(srcdir)/cogl-kms-renderer.h cogl_sources_c += \ $(srcdir)/winsys/cogl-winsys-egl-kms.c \ $(srcdir)/winsys/cogl-winsys-egl-kms-private.h diff --git a/cogl/cogl-kms-renderer.h b/cogl/cogl-kms-renderer.h new file mode 100644 index 000000000..68d126ebf --- /dev/null +++ b/cogl/cogl-kms-renderer.h @@ -0,0 +1,51 @@ +/* + * 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, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#if !defined(__COGL_H_INSIDE__) && !defined(CLUTTER_COMPILATION) +#error "Only <cogl/cogl.h> can be included directly." +#endif + +#ifndef __COGL_KMS_RENDERER_H__ +#define __COGL_KMS_RENDERER_H__ + +#include <cogl/cogl-types.h> +#include <cogl/cogl-renderer.h> + +G_BEGIN_DECLS + +/** + * cogl_kms_renderer_get_kms_fd: + * @renderer: A #CoglRenderer + * + * Queries the file descriptor Cogl is using internally for + * communicating with the kms driver. + * + * Return value: The kms file descriptor or -1 if no kms file + * desriptor has been opened by Cogl. + * Stability: unstable + */ +int +cogl_kms_renderer_get_kms_fd (CoglRenderer *renderer); + +G_END_DECLS +#endif /* __COGL_KMS_RENDERER_H__ */ diff --git a/cogl/cogl.h b/cogl/cogl.h index 5a8691b25..ab46eeb05 100644 --- a/cogl/cogl.h +++ b/cogl/cogl.h @@ -98,6 +98,9 @@ typedef struct _CoglFramebuffer CoglFramebuffer; #include <cogl/cogl-framebuffer.h> #include <cogl/cogl-onscreen.h> #include <cogl/cogl-poll.h> +#if defined (COGL_HAS_EGL_PLATFORM_KMS_SUPPORT) +#include <cogl/cogl-kms-renderer.h> +#endif #if defined (COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT) #include <cogl/cogl-wayland-renderer.h> #endif diff --git a/cogl/winsys/cogl-winsys-egl-kms.c b/cogl/winsys/cogl-winsys-egl-kms.c index ec1d02bd9..b39c45dd4 100644 --- a/cogl/winsys/cogl-winsys-egl-kms.c +++ b/cogl/winsys/cogl-winsys-egl-kms.c @@ -565,3 +565,18 @@ _cogl_winsys_egl_kms_get_vtable (void) return &vtable; } + +int +cogl_kms_renderer_get_kms_fd (CoglRenderer *renderer) +{ + _COGL_RETURN_VAL_IF_FAIL (cogl_is_renderer (renderer), -1); + + if (renderer->connected) + { + CoglRendererEGL *egl_renderer = renderer->winsys; + CoglRendererKMS *kms_renderer = egl_renderer->platform; + return kms_renderer->fd; + } + else + return -1; +}