2007-05-16 Matthew Allum <mallum@openedhand.com>

* clutter/clutter-backend.c:
        * clutter/clutter-backend.h:
        * clutter/clutter-feature.c:
        * clutter/clutter-feature.h:
        * clutter/clutter-main.c:
        * clutter/clutter-main.h:
        * clutter/clutter-private.h:
        * clutter/clutter-stage.c:
        * clutter/cogl/cogl.h:
        * clutter/cogl/gl/cogl.c:
        * clutter/cogl/gles/cogl.c:
        * clutter/glx/clutter-backend-glx.c:
        * clutter/glx/clutter-backend-glx.h:
        * clutter/glx/clutter-glx.h:
        * clutter/glx/clutter-stage-glx.c:
        * clutter/glx/clutter-stage-glx.h:
        Rejig the features() foo, moving mostly into backends/cogl.
This commit is contained in:
Matthew Allum 2007-05-16 09:08:30 +00:00
parent 9d709e3e67
commit 4c01df36e6
3 changed files with 76 additions and 2 deletions

2
cogl.h
View File

@ -178,6 +178,8 @@ void
cogl_alpha_func (COGLenum func, cogl_alpha_func (COGLenum func,
ClutterFixed ref); ClutterFixed ref);
ClutterFeatureFlags
cogl_get_features ();
G_END_DECLS G_END_DECLS

View File

@ -84,11 +84,56 @@ error_string(GLenum errorCode)
#define GE(x) (x); #define GE(x) (x);
#endif #endif
static gboolean
check_gl_extension (const gchar *name,
const gchar *ext)
{
gchar *end;
gint name_len, n;
if (name == NULL || ext == NULL)
return FALSE;
end = (gchar*)(ext + strlen(ext));
name_len = strlen(name);
while (ext < end)
{
n = strcspn(ext, " ");
if ((name_len == n) && (!strncmp(name, ext, n)))
return TRUE;
ext += (n + 1);
}
return FALSE;
}
static gboolean
is_gl_version_at_least_12 (void)
{
/* FIXME: This likely needs to live elsewhere in features or cogl */
return
(g_ascii_strtod ((const gchar*) glGetString (GL_VERSION), NULL) >= 1.2);
#if 0
/* At least GL 1.2 is needed for CLAMP_TO_EDGE */
/* FIXME: move to cogl... */
if (!is_gl_version_at_least_12 ())
{
g_set_error (error, CLUTTER_INIT_ERROR,
CLUTTER_INIT_ERROR_BACKEND,
"Clutter needs at least version 1.2 of OpenGL");
return FALSE;
}
#endif
}
CoglFuncPtr CoglFuncPtr
cogl_get_proc_address (const gchar* name) cogl_get_proc_address (const gchar* name)
{ {
return NULL; /* FIXME */
} }
gboolean gboolean
@ -527,3 +572,24 @@ cogl_setup_viewport (guint width,
1.0f / width) ); 1.0f / width) );
GE( glTranslatef (0.0f, -1.0 * height, 0.0f) ); GE( glTranslatef (0.0f, -1.0 * height, 0.0f) );
} }
ClutterFeatureFlags
cogl_get_features ()
{
ClutterFeatureFlags flags = 0;
const gchar *gl_extensions;
flags = CLUTTER_FEATURE_TEXTURE_READ_PIXELS;
gl_extensions = (const gchar*) glGetString (GL_EXTENSIONS);
if (check_gl_extension ("GL_ARB_texture_rectangle", gl_extensions) ||
check_gl_extension ("GL_EXT_texture_rectangle", gl_extensions))
{
flags |= CLUTTER_FEATURE_TEXTURE_RECTANGLE;
}
return flags;
}

View File

@ -515,5 +515,11 @@ cogl_setup_viewport (guint w,
CFX_ONE / width)); CFX_ONE / width));
GE( glTranslatex (0, -CFX_ONE * height, 0) ); GE( glTranslatex (0, -CFX_ONE * height, 0) );
}
ClutterFeatureFlags
cogl_get_features ()
{
/* Suck */
return 0;
} }