[cogl/wip/pixel-format-2101010: 5/14] Adds _cogl_pixel_format_is_endian_dependant api
- From: Robert Bragg <rbragg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl/wip/pixel-format-2101010: 5/14] Adds _cogl_pixel_format_is_endian_dependant api
- Date: Fri, 17 Feb 2012 23:53:58 +0000 (UTC)
commit 27366766716b0a1e5f0a68e19f98dbb3e9bc4073
Author: Robert Bragg <robert linux intel com>
Date: Mon Feb 13 23:28:28 2012 +0000
Adds _cogl_pixel_format_is_endian_dependant api
This adds an internal utility function
_cogl_pixel_format_is_endian_dependant() that can query whether
accessing the components of a given format depends on the endianness of
the current host CPU or whether a pixel can be loaded as a word and
channels accessed using bit masking and shifting.
cogl/cogl-private.h | 16 ++++++++++++++++
cogl/cogl.c | 21 +++++++++++++++++++++
2 files changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/cogl/cogl-private.h b/cogl/cogl-private.h
index b4ff420..ef33392 100644
--- a/cogl/cogl-private.h
+++ b/cogl/cogl-private.h
@@ -75,6 +75,22 @@ _cogl_get_enable_legacy_state (void);
int
_cogl_pixel_format_get_bytes_per_pixel (CoglPixelFormat format);
+/*
+ * _cogl_pixel_format_has_aligned_components:
+ * @format: a #CoglPixelFormat
+ *
+ * Queries whether the ordering of the components for the given
+ * @format depend on the endianness of the host CPU or if the
+ * components can be accessed using bit shifting and bitmasking by
+ * loading a whole pixel into a word.
+ *
+ * Return value: %TRUE if you need to consider the host CPU
+ * endianness when dealing with the given @format
+ * else %FALSE.
+ */
+gboolean
+_cogl_pixel_format_is_endian_dependant (CoglPixelFormat format);
+
G_END_DECLS
#endif /* __COGL_PRIVATE_H__ */
diff --git a/cogl/cogl.c b/cogl/cogl.c
index 26870d0..28ab146 100644
--- a/cogl/cogl.c
+++ b/cogl/cogl.c
@@ -1023,3 +1023,24 @@ _cogl_pixel_format_get_bytes_per_pixel (CoglPixelFormat format)
return bpp_lut [format & 0xf];
}
+
+/* Note: this also refers to the mapping defined above for
+ * _cogl_pixel_format_get_bytes_per_pixel() */
+gboolean
+_cogl_pixel_format_is_endian_dependant (CoglPixelFormat format)
+{
+ int aligned_lut[] = { -1, 1, 1, 1,
+ 0, 0, 0, -1,
+ 1, 1, -1, -1,
+ 0, 0, -1, -1};
+ int aligned = aligned_lut[format & 0xf];
+
+ _COGL_RETURN_VAL_IF_FAIL (aligned != -1, FALSE);
+
+ /* NB: currently checking whether the format components are aligned
+ * or not determines whether the format is endian dependent or not.
+ * In the future though we might consider adding formats with
+ * aligned components that are also endian independant. */
+
+ return aligned;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]