[cogl/wip/rib/master-next: 27/36] tests: Adds a really simple cogl-info program



commit c7f3178aa7e2d3c8dd3e4b6d925f0b17f4197757
Author: Robert Bragg <robert linux intel com>
Date:   Thu Oct 13 15:17:49 2011 +0100

    tests: Adds a really simple cogl-info program
    
    It could be nice to extend this as Cogl gains more APIs for
    introspecting its own features but for now cogl-info just uses the new
    cogl_foreach_feature() API to enumerate the available features for
    a default context and prints those to the terminal.

 examples/Makefile.am |    4 +-
 examples/cogl-info.c |  140 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 143 insertions(+), 1 deletions(-)
---
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 00919d0..1a98fa0 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -18,12 +18,14 @@ common_ldadd = \
 	$(COGL_DEP_LIBS) \
 	$(top_builddir)/cogl/libcogl.la
 
-programs = cogl-hello cogl-msaa cogl-repeat-modes
+programs = cogl-hello cogl-info cogl-msaa cogl-repeat-modes
 examples_datadir = $(pkgdatadir)/examples-data
 examples_data_DATA =
 
 cogl_hello_SOURCES = cogl-hello.c
 cogl_hello_LDADD = $(common_ldadd)
+cogl_info_SOURCES = cogl-info.c
+cogl_info_LDADD = $(common_ldadd)
 cogl_msaa_SOURCES = cogl-msaa.c
 cogl_msaa_LDADD = $(common_ldadd)
 cogl_repeat_modes_SOURCES = cogl-repeat-modes.c
diff --git a/examples/cogl-info.c b/examples/cogl-info.c
new file mode 100644
index 0000000..6279db9
--- /dev/null
+++ b/examples/cogl-info.c
@@ -0,0 +1,140 @@
+#include <cogl/cogl.h>
+#include <glib.h>
+#include <stdio.h>
+
+struct {
+  CoglFeatureID feature;
+  const char *short_description;
+  const char *long_description;
+} features[] =
+{
+  {
+    COGL_FEATURE_ID_TEXTURE_NPOT_BASIC,
+    "Non power of two textures (basic)",
+    "The hardware supports non power of two textures, but you also "
+    "need to check the COGL_FEATURE_ID_TEXTURE_NPOT_MIPMAP and "
+    "COGL_FEATURE_ID_TEXTURE_NPOT_REPEAT features to know if the "
+    "hardware supports npot texture mipmaps or repeat modes other "
+    "than COGL_RENDERER_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE respectively."
+  },
+  {
+    COGL_FEATURE_ID_TEXTURE_NPOT_MIPMAP,
+    "Non power of two textures (+ mipmap)",
+    "Mipmapping is supported in conjuntion with non power of two "
+    "textures."
+  },
+  {
+    COGL_FEATURE_ID_TEXTURE_NPOT_REPEAT,
+    "Non power of two textures (+ repeat modes)",
+    "Repeat modes other than "
+    "COGL_RENDERER_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE are supported by "
+    "the hardware in conjunction with non power of two textures."
+  },
+  {
+    COGL_FEATURE_ID_TEXTURE_NPOT,
+    "Non power of two textures (fully featured)",
+    "Non power of two textures are supported by the hardware. This "
+    "is a equivalent to the COGL_FEATURE_ID_TEXTURE_NPOT_BASIC, "
+    "COGL_FEATURE_ID_TEXTURE_NPOT_MIPMAP and "
+    "COGL_FEATURE_ID_TEXTURE_NPOT_REPEAT features combined."
+  },
+  {
+    COGL_FEATURE_ID_TEXTURE_RECTANGLE,
+    "Unnormalized coordinate, rectangle textures",
+    "Support for rectangular textures with non-normalized texture "
+    "coordinates."
+  },
+  {
+    COGL_FEATURE_ID_TEXTURE_3D,
+    "3D texture support",
+    "3D texture support"
+  },
+  {
+    COGL_FEATURE_ID_OFFSCREEN,
+    "Offscreen rendering support",
+    "Offscreen rendering support"
+  },
+  {
+    COGL_FEATURE_ID_OFFSCREEN_MULTISAMPLE,
+    "Offscreen rendering with multisampling support",
+    "Offscreen rendering with multisampling support"
+  },
+  {
+    COGL_FEATURE_ID_ONSCREEN_MULTIPLE,
+    "Multiple onscreen framebuffers supported",
+    "Multiple onscreen framebuffers supported"
+  },
+  {
+    COGL_FEATURE_ID_GLSL,
+    "GLSL support",
+    "GLSL support"
+  },
+  {
+    COGL_FEATURE_ID_ARBFP,
+    "ARBFP support",
+    "ARBFP support"
+  },
+  {
+    COGL_FEATURE_ID_UNSIGNED_INT_INDICES,
+    "Unsigned integer indices",
+    "COGL_RENDERER_INDICES_TYPE_UNSIGNED_INT is supported in cogl_indices_new()."
+  },
+  {
+    COGL_FEATURE_ID_DEPTH_RANGE,
+    "cogl_pipeline_set_depth_range() support",
+    "cogl_pipeline_set_depth_range() support",
+  },
+  {
+    COGL_FEATURE_ID_POINT_SPRITE,
+    "Point sprite coordinates",
+    "cogl_pipeline_set_layer_point_sprite_coords_enabled() is supported"
+  },
+  {
+    COGL_FEATURE_ID_MAP_BUFFER_FOR_READ,
+    "Mapping buffers for reading",
+    "Mapping buffers for reading"
+  },
+  {
+    COGL_FEATURE_ID_MAP_BUFFER_FOR_WRITE,
+    "Mapping buffers for writing",
+    "Mapping buffers for writing"
+  },
+  {
+    COGL_FEATURE_ID_MIRRORED_REPEAT,
+    "Mirrored repeat wrap modes",
+    "Mirrored repeat wrap modes"
+  }
+};
+
+static void
+feature_cb (CoglFeatureID feature, void *user_data)
+{
+  int i;
+  for (i = 0; i < sizeof(features) / sizeof(features[0]); i++)
+    {
+      if (features[i].feature == feature)
+        {
+          printf (" Â %s\n", features[i].short_description);
+          return;
+        }
+    }
+  printf (" Â Unknown feature %d\n", feature);
+}
+
+int
+main (int argc, char **argv)
+{
+    CoglContext *ctx;
+    GError *error = NULL;
+
+    ctx = cogl_context_new (NULL, &error);
+    if (!ctx) {
+        fprintf (stderr, "Failed to create context: %s\n", error->message);
+        return 1;
+    }
+
+    g_print ("Features:\n");
+    cogl_foreach_feature (ctx, feature_cb, NULL);
+
+    return 0;
+}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]