[cogl/wip/neil/pipeline-uniforms: 13/18] cogl-bitmask: Add _cogl_bitmask_set_flags
- From: Neil Roberts <nroberts src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl/wip/neil/pipeline-uniforms: 13/18] cogl-bitmask: Add _cogl_bitmask_set_flags
- Date: Fri, 4 Nov 2011 18:37:35 +0000 (UTC)
commit 7c2f14f714aaa0c25d6fe57e55103f74a7c979af
Author: Neil Roberts <neil linux intel com>
Date: Thu Nov 3 16:50:39 2011 +0000
cogl-bitmask: Add _cogl_bitmask_set_flags
This adds a _cogl_bitmask_set_flags function which can be used to copy
the values from a CoglBitmask to an array of unsigned longs which can
be used with the COGL_FLAGS_* macros. The values are or'd in so that
in can be used multiple times to combine multiple bitmasks.
cogl/cogl-bitmask.c | 11 +++++++++++
cogl/cogl-bitmask.h | 22 +++++++++++++++++++++-
2 files changed, 32 insertions(+), 1 deletions(-)
---
diff --git a/cogl/cogl-bitmask.c b/cogl/cogl-bitmask.c
index ec69625..5e2ff92 100644
--- a/cogl/cogl-bitmask.c
+++ b/cogl/cogl-bitmask.c
@@ -260,3 +260,14 @@ _cogl_bitmask_foreach (const CoglBitmask *bitmask,
COGL_FLAGS_FOREACH_END;
}
}
+
+void
+_cogl_bitmask_set_flags_array (const CoglBitmask *bitmask,
+ unsigned long *flags)
+{
+ const GArray *array = (const GArray *) *bitmask;
+ int i;
+
+ for (i = 0; i < array->len; i++)
+ flags[i] |= g_array_index (array, unsigned long, i);
+}
diff --git a/cogl/cogl-bitmask.h b/cogl/cogl-bitmask.h
index e36a551..479ac4a 100644
--- a/cogl/cogl-bitmask.h
+++ b/cogl/cogl-bitmask.h
@@ -101,6 +101,9 @@ _cogl_bitmask_set_range_in_array (CoglBitmask *bitmask,
void
_cogl_bitmask_clear_all_in_array (CoglBitmask *bitmask);
+void
+_cogl_bitmask_set_flags_array (const CoglBitmask *bitmask,
+ unsigned long *flags);
/*
* cogl_bitmask_set_bits:
* @dst: The bitmask to modify
@@ -233,7 +236,24 @@ _cogl_bitmask_clear_all (CoglBitmask *bitmask)
*bitmask = _cogl_bitmask_from_bits (0);
}
+/*
+ * _cogl_bitmask_set_flags:
+ * @bitmask: A pointer to a bitmask
+ * @flags: An array of flags
+ *
+ * Bitwise or's the bits from @bitmask into the flags array (see
+ * cogl-flags) pointed to by @flags.
+ */
+static inline void
+_cogl_bitmask_set_flags (const CoglBitmask *bitmask,
+ unsigned long *flags)
+{
+ if (_cogl_bitmask_has_array (bitmask))
+ return _cogl_bitmask_set_flags_array (bitmask, flags);
+ else
+ flags[0] |= _cogl_bitmask_to_bits (bitmask);
+}
+
G_END_DECLS
#endif /* __COGL_BITMASK_H */
-
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]