mirror of
https://github.com/brl/mutter.git
synced 2025-01-03 08:12:15 +00:00
2007-03-27 Matthew Allum <mallum@openedhand.com>
* clutter/clutter-feature.c: Rejig ifdef's a little. Make drm vblanking Linux only. * clutter/clutter-stage.c: * clutter/clutter-stage.h: Add a perspective boxed type. * clutter/glx/clutter-stage-glx.c: Add some FIXMEs * clutter/Makefile.am: * clutter/cogl/Makefile.am: * clutter/cogl/cogl.h: * clutter/cogl/gl/Makefile.am: * clutter/cogl/gl/cogl.c: * configure.ac: Very initial work on 'cogl' GL/GLES abstraction/utility code.
This commit is contained in:
parent
f595460932
commit
464f24fdc0
20
ChangeLog
20
ChangeLog
@ -1,3 +1,23 @@
|
|||||||
|
2007-03-27 Matthew Allum <mallum@openedhand.com>
|
||||||
|
|
||||||
|
* clutter/clutter-feature.c:
|
||||||
|
Rejig ifdef's a little. Make drm vblanking Linux only.
|
||||||
|
|
||||||
|
* clutter/clutter-stage.c:
|
||||||
|
* clutter/clutter-stage.h:
|
||||||
|
Add a perspective boxed type.
|
||||||
|
|
||||||
|
* clutter/glx/clutter-stage-glx.c:
|
||||||
|
Add some FIXMEs
|
||||||
|
|
||||||
|
* clutter/Makefile.am:
|
||||||
|
* clutter/cogl/Makefile.am:
|
||||||
|
* clutter/cogl/cogl.h:
|
||||||
|
* clutter/cogl/gl/Makefile.am:
|
||||||
|
* clutter/cogl/gl/cogl.c:
|
||||||
|
* configure.ac:
|
||||||
|
Very initial work on 'cogl' GL/GLES abstraction/utility code.
|
||||||
|
|
||||||
2007-03-26 Emmanuele Bassi <ebassi@openedhand.com>
|
2007-03-26 Emmanuele Bassi <ebassi@openedhand.com>
|
||||||
|
|
||||||
* clutter/clutter-behaviour-scale.[ch]: Add API for getting
|
* clutter/clutter-behaviour-scale.[ch]: Add API for getting
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
NULL =
|
NULL =
|
||||||
|
|
||||||
SUBDIRS = pango $(clutterbackend)
|
SUBDIRS = cogl pango $(clutterbackend)
|
||||||
|
|
||||||
DIST_SUBDIRS = pango glx egl
|
DIST_SUBDIRS = pango glx egl cogl
|
||||||
|
|
||||||
target = $(clutterbackend)
|
target = $(clutterbackend)
|
||||||
|
|
||||||
@ -15,6 +15,7 @@ GLIB_MKENUMS=`pkg-config --variable=glib_mkenums glib-2.0`
|
|||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir) \
|
-I$(top_srcdir) \
|
||||||
-I$(top_srcdir)/clutter/pango \
|
-I$(top_srcdir)/clutter/pango \
|
||||||
|
-I$(top_srcdir)/cogl \
|
||||||
-DPREFIX=\""$(prefix)"\" \
|
-DPREFIX=\""$(prefix)"\" \
|
||||||
-DLIBDIR=\""$(libdir)"\" \
|
-DLIBDIR=\""$(libdir)"\" \
|
||||||
-DDATADIR=\""$(datadir)"\" \
|
-DDATADIR=\""$(datadir)"\" \
|
||||||
@ -149,25 +150,22 @@ source_h_priv = \
|
|||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
|
||||||
libclutter_glx_0_3_la_LIBADD = $(CLUTTER_LIBS) pango/libpangoclutter.la glx/libclutter-glx.la
|
libclutter_@CLUTTER_FLAVOUR@_@CLUTTER_API_VERSION@_la_LIBADD = \
|
||||||
libclutter_glx_0_3_la_SOURCES = $(source_c) $(source_h) $(source_h_priv)
|
$(CLUTTER_LIBS) pango/libpangoclutter.la \
|
||||||
libclutter_glx_0_3_la_LDFLAGS = $(LDADD)
|
@CLUTTER_FLAVOUR@/libclutter-@CLUTTER_FLAVOUR@.la \
|
||||||
|
cogl/gl/libclutter-cogl.la
|
||||||
|
|
||||||
#libclutter_egl_0_3_la_LIBADD = \
|
libclutter_@CLUTTER_FLAVOUR@_@CLUTTER_API_VERSION@_la_SOURCES = \
|
||||||
# $(CLUTTER_LIBS) \
|
$(source_c) $(source_h) $(source_h_priv)
|
||||||
# pango/libpangoclutter.la \
|
|
||||||
# egl/libclutter-egl.la
|
libclutter_@CLUTTER_FLAVOUR@_@CLUTTER_API_VERSION@_la_LDFLAGS = $(LDADD)
|
||||||
#libclutter_egl_0_3_la_LDADD = $(LDADD)
|
|
||||||
#libclutter_egl_0_3_la_SOURCES = \
|
|
||||||
# $(source_c) \
|
|
||||||
# $(source_h) \
|
|
||||||
# $(source_h_priv)
|
|
||||||
|
|
||||||
lib_LTLIBRARIES = $(clutterbackendlib)
|
lib_LTLIBRARIES = $(clutterbackendlib)
|
||||||
|
|
||||||
EXTRA_LTLIBRARIES = libclutter-glx-0.3.la
|
EXTRA_LTLIBRARIES = libclutter-@CLUTTER_FLAVOUR@-@CLUTTER_API_VERSION@.la
|
||||||
|
|
||||||
clutterdir = $(includedir)/clutter-@CLUTTER_API_VERSION@/clutter
|
clutterdir = $(includedir)/clutter-@CLUTTER_API_VERSION@/clutter
|
||||||
|
|
||||||
clutter_HEADERS = \
|
clutter_HEADERS = \
|
||||||
$(source_h) \
|
$(source_h) \
|
||||||
clutter-enum-types.h \
|
clutter-enum-types.h \
|
||||||
|
@ -55,16 +55,16 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef void (*FuncPtr) (void);
|
typedef void (*FuncPtr) (void);
|
||||||
typedef int (*GLXGetVideoSyncProc) (unsigned int *count);
|
typedef int (*GetVideoSyncProc) (unsigned int *count);
|
||||||
typedef int (*GLXWaitVideoSyncProc) (int divisor,
|
typedef int (*WaitVideoSyncProc) (int divisor,
|
||||||
int remainder,
|
int remainder,
|
||||||
unsigned int *count);
|
unsigned int *count);
|
||||||
typedef FuncPtr (*GLXGetProcAddressProc) (const guint8 *procName);
|
typedef FuncPtr (*GLXGetProcAddressProc) (const guint8 *procName);
|
||||||
|
|
||||||
typedef struct ClutterFeatureFuncs
|
typedef struct ClutterFeatureFuncs
|
||||||
{
|
{
|
||||||
GLXGetVideoSyncProc get_video_sync;
|
GetVideoSyncProc get_video_sync;
|
||||||
GLXWaitVideoSyncProc wait_video_sync;
|
WaitVideoSyncProc wait_video_sync;
|
||||||
|
|
||||||
} ClutterFeatureFuncs;
|
} ClutterFeatureFuncs;
|
||||||
|
|
||||||
@ -89,7 +89,8 @@ typedef struct ClutterFeatures
|
|||||||
static ClutterFeatures* __features = NULL;
|
static ClutterFeatures* __features = NULL;
|
||||||
G_LOCK_DEFINE_STATIC (__features);
|
G_LOCK_DEFINE_STATIC (__features);
|
||||||
|
|
||||||
/* #ifdef linux */
|
|
||||||
|
#ifdef __linux__
|
||||||
#define DRM_VBLANK_RELATIVE 0x1;
|
#define DRM_VBLANK_RELATIVE 0x1;
|
||||||
|
|
||||||
struct drm_wait_vblank_request {
|
struct drm_wait_vblank_request {
|
||||||
@ -129,7 +130,7 @@ static int drm_wait_vblank(int fd, drm_wait_vblank_t *vbl)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* #endif */
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Note must be called after context created */
|
/* Note must be called after context created */
|
||||||
@ -137,6 +138,7 @@ static gboolean
|
|||||||
check_gl_extension (const gchar *name,
|
check_gl_extension (const gchar *name,
|
||||||
const gchar *ext)
|
const gchar *ext)
|
||||||
{
|
{
|
||||||
|
/* FIXME: move to cogl */
|
||||||
gchar *end;
|
gchar *end;
|
||||||
gint name_len, n;
|
gint name_len, n;
|
||||||
|
|
||||||
@ -159,6 +161,7 @@ check_gl_extension (const gchar *name,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: move to cogl */
|
||||||
static FuncPtr
|
static FuncPtr
|
||||||
get_proc_address (const gchar *name)
|
get_proc_address (const gchar *name)
|
||||||
{
|
{
|
||||||
@ -237,7 +240,7 @@ check_vblank_env (const char *name)
|
|||||||
static void
|
static void
|
||||||
clutter_feature_init (void)
|
clutter_feature_init (void)
|
||||||
{
|
{
|
||||||
const gchar *gl_extensions, *glx_extensions;
|
const gchar *gl_extensions, *glx_extensions = NULL;
|
||||||
|
|
||||||
CLUTTER_NOTE (MISC, "checking features");
|
CLUTTER_NOTE (MISC, "checking features");
|
||||||
|
|
||||||
@ -259,16 +262,18 @@ clutter_feature_init (void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef HAVE_CLUTTER_GLX
|
#ifdef HAVE_CLUTTER_GLX
|
||||||
|
glx_extensions
|
||||||
|
= glXQueryExtensionsString (clutter_glx_get_default_display (),
|
||||||
|
clutter_glx_get_default_screen ());
|
||||||
|
#endif
|
||||||
|
|
||||||
gl_extensions = (const gchar*) glGetString (GL_EXTENSIONS);
|
gl_extensions = (const gchar*) glGetString (GL_EXTENSIONS);
|
||||||
glx_extensions = glXQueryExtensionsString (clutter_glx_get_default_display (),
|
|
||||||
clutter_glx_get_default_screen ());
|
|
||||||
|
|
||||||
if (check_gl_extension ("GL_ARB_texture_rectangle", gl_extensions) ||
|
if (check_gl_extension ("GL_ARB_texture_rectangle", gl_extensions) ||
|
||||||
check_gl_extension ("GL_EXT_texture_rectangle", gl_extensions))
|
check_gl_extension ("GL_EXT_texture_rectangle", gl_extensions))
|
||||||
{
|
{
|
||||||
__features->flags |= CLUTTER_FEATURE_TEXTURE_RECTANGLE;
|
__features->flags |= CLUTTER_FEATURE_TEXTURE_RECTANGLE;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* vblank */
|
/* vblank */
|
||||||
|
|
||||||
@ -285,10 +290,10 @@ clutter_feature_init (void)
|
|||||||
check_gl_extension ("GLX_SGI_video_sync", glx_extensions))
|
check_gl_extension ("GLX_SGI_video_sync", glx_extensions))
|
||||||
{
|
{
|
||||||
__features->funcs.get_video_sync =
|
__features->funcs.get_video_sync =
|
||||||
(GLXGetVideoSyncProc) get_proc_address ("glXGetVideoSyncSGI");
|
(GetVideoSyncProc) get_proc_address ("glXGetVideoSyncSGI");
|
||||||
|
|
||||||
__features->funcs.wait_video_sync =
|
__features->funcs.wait_video_sync =
|
||||||
(GLXWaitVideoSyncProc) get_proc_address ("glXWaitVideoSyncSGI");
|
(WaitVideoSyncProc) get_proc_address ("glXWaitVideoSyncSGI");
|
||||||
|
|
||||||
if ((__features->funcs.get_video_sync != NULL) &&
|
if ((__features->funcs.get_video_sync != NULL) &&
|
||||||
(__features->funcs.wait_video_sync != NULL))
|
(__features->funcs.wait_video_sync != NULL))
|
||||||
@ -300,7 +305,7 @@ clutter_feature_init (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
if (!(__features->flags & CLUTTER_FEATURE_SYNC_TO_VBLANK))
|
if (!(__features->flags & CLUTTER_FEATURE_SYNC_TO_VBLANK))
|
||||||
{
|
{
|
||||||
__features->dri_fd = open("/dev/dri/card0", O_RDWR);
|
__features->dri_fd = open("/dev/dri/card0", O_RDWR);
|
||||||
@ -312,7 +317,7 @@ clutter_feature_init (void)
|
|||||||
__features->flags |= CLUTTER_FEATURE_SYNC_TO_VBLANK;
|
__features->flags |= CLUTTER_FEATURE_SYNC_TO_VBLANK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (!(__features->flags & CLUTTER_FEATURE_SYNC_TO_VBLANK))
|
if (!(__features->flags & CLUTTER_FEATURE_SYNC_TO_VBLANK))
|
||||||
{
|
{
|
||||||
CLUTTER_NOTE (MISC,
|
CLUTTER_NOTE (MISC,
|
||||||
@ -388,6 +393,7 @@ clutter_feature_wait_for_vblank (void)
|
|||||||
switch (__features->vblank_type)
|
switch (__features->vblank_type)
|
||||||
{
|
{
|
||||||
case CLUTTER_VBLANK_GLX:
|
case CLUTTER_VBLANK_GLX:
|
||||||
|
#ifdef HAVE_CLUTTER_GLX
|
||||||
{
|
{
|
||||||
unsigned int retraceCount;
|
unsigned int retraceCount;
|
||||||
__features->funcs.get_video_sync (&retraceCount);
|
__features->funcs.get_video_sync (&retraceCount);
|
||||||
@ -395,8 +401,10 @@ clutter_feature_wait_for_vblank (void)
|
|||||||
(retraceCount + 1) % 2,
|
(retraceCount + 1) % 2,
|
||||||
&retraceCount);
|
&retraceCount);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case CLUTTER_VBLANK_DRI:
|
case CLUTTER_VBLANK_DRI:
|
||||||
|
#ifdef __linux__
|
||||||
{
|
{
|
||||||
drm_wait_vblank_t blank;
|
drm_wait_vblank_t blank;
|
||||||
blank.request.type = DRM_VBLANK_RELATIVE;
|
blank.request.type = DRM_VBLANK_RELATIVE;
|
||||||
@ -404,6 +412,7 @@ clutter_feature_wait_for_vblank (void)
|
|||||||
blank.request.signal = 0;
|
blank.request.signal = 0;
|
||||||
drm_wait_vblank (__features->dri_fd, &blank);
|
drm_wait_vblank (__features->dri_fd, &blank);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case CLUTTER_VBLANK_NONE:
|
case CLUTTER_VBLANK_NONE:
|
||||||
default:
|
default:
|
||||||
|
@ -767,3 +767,58 @@ clutter_stage_get_actor_at_pos (ClutterStage *stage,
|
|||||||
|
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*** Perspective boxed type ******/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_perspective_copy:
|
||||||
|
* @perspective: a #ClutterPerspective
|
||||||
|
*
|
||||||
|
* Makes a copy of the perspective structure. The result must be
|
||||||
|
* freed using clutter_perspective_free().
|
||||||
|
*
|
||||||
|
* Return value: an allocated copy of @perspective.
|
||||||
|
*
|
||||||
|
* Since: 0.2
|
||||||
|
*/
|
||||||
|
ClutterPerspective *
|
||||||
|
clutter_perspective_copy (const ClutterPerspective *perspective)
|
||||||
|
{
|
||||||
|
ClutterPerspective *result;
|
||||||
|
|
||||||
|
g_return_val_if_fail (perspective != NULL, NULL);
|
||||||
|
|
||||||
|
result = g_slice_new (ClutterPerspective);
|
||||||
|
*result = *perspective;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_perspective_free:
|
||||||
|
* @perspective: a #ClutterPerspective
|
||||||
|
*
|
||||||
|
* Frees a perspective structure created with clutter_perspective_copy().
|
||||||
|
*
|
||||||
|
* Since: 0.2
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
clutter_perspective_free (ClutterPerspective *perspective)
|
||||||
|
{
|
||||||
|
g_return_if_fail (perspective != NULL);
|
||||||
|
|
||||||
|
g_slice_free (ClutterPerspective, perspective);
|
||||||
|
}
|
||||||
|
|
||||||
|
GType
|
||||||
|
clutter_perspective_get_type (void)
|
||||||
|
{
|
||||||
|
static GType our_type = 0;
|
||||||
|
|
||||||
|
if (!our_type)
|
||||||
|
our_type = g_boxed_type_register_static
|
||||||
|
("ClutterPerspective",
|
||||||
|
(GBoxedCopyFunc) clutter_perspective_copy,
|
||||||
|
(GBoxedFreeFunc) clutter_perspective_free);
|
||||||
|
return our_type;
|
||||||
|
}
|
||||||
|
@ -120,6 +120,22 @@ struct _ClutterStageClass
|
|||||||
void (*_clutter_stage6) (void);
|
void (*_clutter_stage6) (void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define CLUTTER_TYPE_PERSPECTIVE (clutter_perspective_get_type ())
|
||||||
|
|
||||||
|
typedef struct _ClutterPerspective ClutterPerspective;
|
||||||
|
|
||||||
|
struct _ClutterPerspective
|
||||||
|
{
|
||||||
|
ClutterFixed fovy;
|
||||||
|
ClutterFixed aspect;
|
||||||
|
ClutterFixed zNear;
|
||||||
|
ClutterFixed zFar;
|
||||||
|
};
|
||||||
|
|
||||||
|
ClutterPerspective *clutter_perspective_copy (const ClutterPerspective *perspective);
|
||||||
|
void clutter_perspective_free (ClutterPerspective *perspective);
|
||||||
|
|
||||||
|
|
||||||
GType clutter_stage_get_type (void) G_GNUC_CONST;
|
GType clutter_stage_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
ClutterActor *clutter_stage_get_default (void);
|
ClutterActor *clutter_stage_get_default (void);
|
||||||
|
3
clutter/cogl/Makefile.am
Normal file
3
clutter/cogl/Makefile.am
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
SUBDIRS=gl
|
||||||
|
|
||||||
|
EXTRA_DIST=cogl.h
|
59
clutter/cogl/cogl.h
Normal file
59
clutter/cogl/cogl.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Clutter COGL
|
||||||
|
*
|
||||||
|
* A basic GL/GLES Abstraction/Utility Layer
|
||||||
|
*
|
||||||
|
* Authored By Matthew Allum <mallum@openedhand.com>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2007 OpenedHand
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
|
typedef void (*CoglFuncPtr) (void);
|
||||||
|
|
||||||
|
CoglFuncPtr
|
||||||
|
cogl_get_proc_address (const gchar* name);
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
cogl_check_extension (const gchar *name, const gchar *ext);
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_paint_init (ClutterColor *color);
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_push_matrix (void);
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_pop_matrix (void);
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_scaled (ClutterFixed x, ClutterFixed z);
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_translatex (ClutterFixed x, ClutterFixed y, ClutterFixed z);
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_translate (gint x, gint y, gint z);
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_rotatex (ClutterFixed angle, gint x, gint y, gint z);
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_rotate (gint angle, gint x, gint y, gint z);
|
||||||
|
|
17
clutter/cogl/gl/Makefile.am
Normal file
17
clutter/cogl/gl/Makefile.am
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
libclutterincludedir = $(includedir)/clutter-@CLUTTER_API_VERSION@/clutter
|
||||||
|
libclutterinclude_HEADERS = $(top_srcdir)/clutter/cogl/cogl.h
|
||||||
|
|
||||||
|
INCLUDES = \
|
||||||
|
-I$(top_srcdir) \
|
||||||
|
-I$(top_srcdir)/clutter/cogl \
|
||||||
|
$(CLUTTER_CFLAGS) \
|
||||||
|
$(CLUTTER_DEBUG_CFLAGS) \
|
||||||
|
$(GCC_FLAGS)
|
||||||
|
|
||||||
|
LDADD = $(CLUTTER_LIBS)
|
||||||
|
|
||||||
|
noinst_LTLIBRARIES = libclutter-cogl.la
|
||||||
|
|
||||||
|
libclutter_cogl_la_SOURCES = \
|
||||||
|
$(top_srcdir)/clutter/cogl/cogl.h \
|
||||||
|
cogl.c
|
102
clutter/cogl/gl/cogl.c
Normal file
102
clutter/cogl/gl/cogl.c
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
* Clutter COGL
|
||||||
|
*
|
||||||
|
* A basic GL/GLES Abstraction/Utility Layer
|
||||||
|
*
|
||||||
|
* Authored By Matthew Allum <mallum@openedhand.com>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2007 OpenedHand
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "cogl.h"
|
||||||
|
#include <GL/gl.h>
|
||||||
|
|
||||||
|
CoglFuncPtr
|
||||||
|
cogl_get_proc_address (const gchar* name)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
cogl_check_extension (const gchar *name, const gchar *ext)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_paint_init (ClutterColor *color)
|
||||||
|
{
|
||||||
|
glClearColor (((float) color->red / 0xff * 1.0),
|
||||||
|
((float) color->green / 0xff * 1.0),
|
||||||
|
((float) color->blue / 0xff * 1.0),
|
||||||
|
0.0);
|
||||||
|
|
||||||
|
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||||
|
glDisable (GL_LIGHTING);
|
||||||
|
glDisable (GL_DEPTH_TEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME: inline most of these */
|
||||||
|
void
|
||||||
|
cogl_push_matrix (void)
|
||||||
|
{
|
||||||
|
glPushMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_pop_matrix (void)
|
||||||
|
{
|
||||||
|
glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_scaled (ClutterFixed x, ClutterFixed y)
|
||||||
|
{
|
||||||
|
glScaled (CLUTTER_FIXED_TO_DOUBLE (x),
|
||||||
|
CLUTTER_FIXED_TO_DOUBLE (y),
|
||||||
|
1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_translatex (ClutterFixed x, ClutterFixed y, ClutterFixed z)
|
||||||
|
{
|
||||||
|
glTranslated (CLUTTER_FIXED_TO_DOUBLE (x),
|
||||||
|
CLUTTER_FIXED_TO_DOUBLE (y),
|
||||||
|
CLUTTER_FIXED_TO_DOUBLE (z));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_translate (gint x, gint y, gint z)
|
||||||
|
{
|
||||||
|
glTranslatef ((float)x, (float)y, (float)z);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_rotatex (ClutterFixed angle, gint x, gint y, gint z)
|
||||||
|
{
|
||||||
|
glRotated (CLUTTER_FIXED_TO_DOUBLE (angle),
|
||||||
|
CLUTTER_FIXED_TO_DOUBLE (x),
|
||||||
|
CLUTTER_FIXED_TO_DOUBLE (y),
|
||||||
|
CLUTTER_FIXED_TO_DOUBLE (z));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cogl_rotate (gint angle, gint x, gint y, gint z)
|
||||||
|
{
|
||||||
|
glRotatef ((float)angle, (float)x, (float)y, (float)z);
|
||||||
|
}
|
@ -287,10 +287,10 @@ static void
|
|||||||
clutter_stage_glx_paint (ClutterActor *self)
|
clutter_stage_glx_paint (ClutterActor *self)
|
||||||
{
|
{
|
||||||
ClutterStageGlx *stage_glx = CLUTTER_STAGE_GLX (self);
|
ClutterStageGlx *stage_glx = CLUTTER_STAGE_GLX (self);
|
||||||
ClutterStage *stage = CLUTTER_STAGE (self);
|
ClutterStage *stage = CLUTTER_STAGE (self);
|
||||||
ClutterColor stage_color;
|
ClutterColor stage_color;
|
||||||
static GTimer *timer = NULL;
|
static GTimer *timer = NULL;
|
||||||
static guint timer_n_frames = 0;
|
static guint timer_n_frames = 0;
|
||||||
|
|
||||||
CLUTTER_NOTE (PAINT, " Redraw enter");
|
CLUTTER_NOTE (PAINT, " Redraw enter");
|
||||||
|
|
||||||
@ -302,6 +302,7 @@ clutter_stage_glx_paint (ClutterActor *self)
|
|||||||
|
|
||||||
clutter_stage_get_color (stage, &stage_color);
|
clutter_stage_get_color (stage, &stage_color);
|
||||||
|
|
||||||
|
/* FIXME: move below into cogl_paint_start() ? */
|
||||||
glClearColor (((float) stage_color.red / 0xff * 1.0),
|
glClearColor (((float) stage_color.red / 0xff * 1.0),
|
||||||
((float) stage_color.green / 0xff * 1.0),
|
((float) stage_color.green / 0xff * 1.0),
|
||||||
((float) stage_color.blue / 0xff * 1.0),
|
((float) stage_color.blue / 0xff * 1.0),
|
||||||
@ -310,9 +311,14 @@ clutter_stage_glx_paint (ClutterActor *self)
|
|||||||
glDisable (GL_LIGHTING);
|
glDisable (GL_LIGHTING);
|
||||||
glDisable (GL_DEPTH_TEST);
|
glDisable (GL_DEPTH_TEST);
|
||||||
|
|
||||||
if (CLUTTER_ACTOR_CLASS (clutter_stage_glx_parent_class)->paint)
|
/* FIXME Check is redundant */
|
||||||
|
if (G_LIKELY(CLUTTER_ACTOR_CLASS (clutter_stage_glx_parent_class)->paint))
|
||||||
|
/* Basically call up to ClutterGroup paint here */
|
||||||
CLUTTER_ACTOR_CLASS (clutter_stage_glx_parent_class)->paint (self);
|
CLUTTER_ACTOR_CLASS (clutter_stage_glx_parent_class)->paint (self);
|
||||||
|
|
||||||
|
/* Why this paint is done in backend as likely GL windowing system
|
||||||
|
* specific calls, like swapping buffers.
|
||||||
|
*/
|
||||||
if (stage_glx->xwin)
|
if (stage_glx->xwin)
|
||||||
{
|
{
|
||||||
clutter_feature_wait_for_vblank ();
|
clutter_feature_wait_for_vblank ();
|
||||||
|
@ -115,10 +115,12 @@ AC_SUBST([clutterbackend])
|
|||||||
case $clutterbackend in
|
case $clutterbackend in
|
||||||
glx)
|
glx)
|
||||||
CLUTTER_FLAVOUR="glx"
|
CLUTTER_FLAVOUR="glx"
|
||||||
|
CLUTTER_GOGL="gl"
|
||||||
AC_DEFINE([HAVE_CLUTTER_GLX], 1, [Have the GLX backend])
|
AC_DEFINE([HAVE_CLUTTER_GLX], 1, [Have the GLX backend])
|
||||||
;;
|
;;
|
||||||
egl)
|
egl)
|
||||||
CLUTTER_FLAVOUR="egl"
|
CLUTTER_FLAVOUR="egl"
|
||||||
|
CLUTTER_GOGL="gles"
|
||||||
AC_DEFINE([HAVE_CLUTTER_EGL], 1, [Have the EGL backend])
|
AC_DEFINE([HAVE_CLUTTER_EGL], 1, [Have the EGL backend])
|
||||||
;;
|
;;
|
||||||
*) AC_MSG_ERROR([Invalid backend for Clutter: use glx or egl])
|
*) AC_MSG_ERROR([Invalid backend for Clutter: use glx or egl])
|
||||||
@ -126,6 +128,7 @@ case $clutterbackend in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
AC_SUBST(CLUTTER_FLAVOUR)
|
AC_SUBST(CLUTTER_FLAVOUR)
|
||||||
|
AC_SUBST(CLUTTER_COGL)
|
||||||
|
|
||||||
clutterbackendlib=libclutter-$clutterbackend-$CLUTTER_MAJORMINOR.la
|
clutterbackendlib=libclutter-$clutterbackend-$CLUTTER_MAJORMINOR.la
|
||||||
AC_SUBST([clutterbackendlib])
|
AC_SUBST([clutterbackendlib])
|
||||||
@ -196,6 +199,8 @@ AC_CONFIG_FILES([
|
|||||||
clutter/clutter-version.h
|
clutter/clutter-version.h
|
||||||
clutter/glx/Makefile
|
clutter/glx/Makefile
|
||||||
clutter/egl/Makefile
|
clutter/egl/Makefile
|
||||||
|
clutter/cogl/Makefile
|
||||||
|
clutter/cogl/gl/Makefile
|
||||||
examples/Makefile
|
examples/Makefile
|
||||||
doc/Makefile
|
doc/Makefile
|
||||||
doc/reference/Makefile
|
doc/reference/Makefile
|
||||||
|
Loading…
Reference in New Issue
Block a user