summaryrefslogtreecommitdiff
path: root/clutter/clutter-feature.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2006-07-27 16:09:25 +0000
committerEmmanuele Bassi <ebassi@openedhand.com>2006-07-27 16:09:25 +0000
commitad29f37780af2cf4ac3ad6a8d95983b6eab0a6db (patch)
tree2ff61a3817d39f8897031522291d0dfa9efab503 /clutter/clutter-feature.c
parentecccec75cb4769f479e64e5bdb7526c9cbf97e35 (diff)
downloadclutter-ad29f37780af2cf4ac3ad6a8d95983b6eab0a6db.tar.gz
2006-07-27 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-private.h: Move clutter_feature_init() declaration here: you shouldn't even need to initialise features yourself. * clutter/clutter-feature.c: call clutter_feature_init() each time you try to access the feature list; add a static lock around the feature flags container; add api documentation. * clutter/clutter-feature.h: Add a type for the feature flags to make bindings happy.
Diffstat (limited to 'clutter/clutter-feature.c')
-rw-r--r--clutter/clutter-feature.c61
1 files changed, 46 insertions, 15 deletions
diff --git a/clutter/clutter-feature.c b/clutter/clutter-feature.c
index e1aa05572..6cf8c88fa 100644
--- a/clutter/clutter-feature.c
+++ b/clutter/clutter-feature.c
@@ -34,7 +34,8 @@
#include "clutter-feature.h"
#include "string.h"
-static gulong __features;
+G_LOCK_DEFINE_STATIC (__features);
+static ClutterFeatureFlags __features;
/* Note must be called after context created */
static gboolean
@@ -65,20 +66,9 @@ check_gl_extension (const gchar *name)
return FALSE;
}
-gboolean
-clutter_feature_available (gulong query)
-{
- return (__features & query);
-}
-
-gulong
-clutter_feature_all (void)
-{
- return __features;
-}
-
-void
-clutter_feature_init (void)
+/* HOLDS: __features lock */
+static void
+clutter_feature_init_do (void)
{
if (__features)
return;
@@ -87,5 +77,46 @@ clutter_feature_init (void)
if (check_gl_extension ("GL_ARB_texture_rectangle"))
__features |= CLUTTER_FEATURE_TEXTURE_RECTANGLE;
+}
+
+void
+clutter_feature_init (void)
+{
+ G_LOCK (__features);
+ clutter_feature_init_do ();
+ G_UNLOCK (__features);
+}
+/**
+ * clutter_feature_available:
+ * @feature: a #ClutterFeatureFlags
+ *
+ * Checks whether @feature is available. @feature can be a logical
+ * OR of #ClutterFeatureFlags.
+ *
+ * Return value: %TRUE if a feature is available
+ *
+ * Since: 0.1.1
+ */
+gboolean
+clutter_feature_available (ClutterFeatureFlags feature)
+{
+ clutter_feature_init ();
+ return (__features & feature);
+}
+
+/**
+ * clutter_feature_all:
+ *
+ * Returns all the suppoerted features.
+ *
+ * Return value: a logical OR of all the supported features.
+ *
+ * Since: 0.1.1
+ */
+ClutterFeatureFlags
+clutter_feature_all (void)
+{
+ clutter_feature_init ();
+ return __features;
}