renderer: expose CoglOutputs
This adds a cogl_renderer_foreach_output() function that can be used to iterate the display outputs for a particular renderer. This also updates cogl-info to use this new api so it can dump out all the output information. Reviewed-by: Owen W. Taylor <otaylor@fishsoup.net> (cherry picked from commit a2abf4c4c1fd5aeafd761f965d07a0fe9a362afc)
This commit is contained in:
parent
88d8bd84f2
commit
013548c109
@ -631,3 +631,17 @@ cogl_renderer_get_driver (CoglRenderer *renderer)
|
||||
|
||||
return renderer->driver;
|
||||
}
|
||||
|
||||
void
|
||||
cogl_renderer_foreach_output (CoglRenderer *renderer,
|
||||
CoglOutputCallback callback,
|
||||
void *user_data)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
_COGL_RETURN_IF_FAIL (renderer->connected);
|
||||
_COGL_RETURN_IF_FAIL (callback != NULL);
|
||||
|
||||
for (l = renderer->outputs; l; l = l->next)
|
||||
callback (l->data, user_data);
|
||||
}
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <cogl/cogl-types.h>
|
||||
#include <cogl/cogl-onscreen-template.h>
|
||||
#include <cogl/cogl-error.h>
|
||||
#include <cogl/cogl-output.h>
|
||||
|
||||
COGL_BEGIN_DECLS
|
||||
|
||||
@ -383,6 +384,39 @@ cogl_renderer_set_driver (CoglRenderer *renderer,
|
||||
CoglDriver
|
||||
cogl_renderer_get_driver (CoglRenderer *renderer);
|
||||
|
||||
/**
|
||||
* CoglOutputCallback:
|
||||
* @output: The current display output being iterated
|
||||
* @user_data: The user pointer passed to
|
||||
* cogl_renderer_foreach_output()
|
||||
*
|
||||
* A callback type that can be passed to
|
||||
* cogl_renderer_foreach_output() for iterating display outputs for a
|
||||
* given renderer.
|
||||
*
|
||||
* Since: 1.14
|
||||
* Stability: Unstable
|
||||
*/
|
||||
typedef void (*CoglOutputCallback) (CoglOutput *output, void *user_data);
|
||||
|
||||
/**
|
||||
* cogl_renderer_foreach_output:
|
||||
* @renderer: A connected #CoglRenderer
|
||||
* @callback: A #CoglOutputCallback to be called for each display output
|
||||
* @user_data: A user pointer to be passed to @callback
|
||||
*
|
||||
* Iterates all known display outputs for the given @renderer and
|
||||
* passes a corresponding #CoglOutput pointer to the given @callback
|
||||
* for each one, along with the given @user_data.
|
||||
*
|
||||
* Since: 1.14
|
||||
* Stability: Unstable
|
||||
*/
|
||||
void
|
||||
cogl_renderer_foreach_output (CoglRenderer *renderer,
|
||||
CoglOutputCallback callback,
|
||||
void *user_data);
|
||||
|
||||
COGL_END_DECLS
|
||||
|
||||
#endif /* __COGL_RENDERER_H__ */
|
||||
|
@ -77,6 +77,7 @@
|
||||
#if defined (COGL_ENABLE_EXPERIMENTAL_API)
|
||||
#include <cogl/cogl-swap-chain.h>
|
||||
#include <cogl/cogl-renderer.h>
|
||||
#include <cogl/cogl-output.h>
|
||||
#include <cogl/cogl-display.h>
|
||||
#include <cogl/cogl-context.h>
|
||||
#include <cogl/cogl-buffer.h>
|
||||
|
@ -164,6 +164,58 @@ feature_cb (CoglFeatureID feature, void *user_data)
|
||||
printf (" » Unknown feature %d\n", feature);
|
||||
}
|
||||
|
||||
typedef struct _OutputState
|
||||
{
|
||||
int id;
|
||||
} OutputState;
|
||||
|
||||
static void
|
||||
output_cb (CoglOutput *output, void *user_data)
|
||||
{
|
||||
OutputState *state = user_data;
|
||||
const char *order;
|
||||
float refresh;
|
||||
|
||||
printf (" Output%d:\n", state->id++);
|
||||
printf (" » position = (%d, %d)\n",
|
||||
cogl_output_get_x (output),
|
||||
cogl_output_get_y (output));
|
||||
printf (" » resolution = %d x %d\n",
|
||||
cogl_output_get_width (output),
|
||||
cogl_output_get_height (output));
|
||||
printf (" » physical size = %dmm x %dmm\n",
|
||||
cogl_output_get_mm_width (output),
|
||||
cogl_output_get_mm_height (output));
|
||||
switch (cogl_output_get_subpixel_order (output))
|
||||
{
|
||||
case COGL_SUBPIXEL_ORDER_UNKNOWN:
|
||||
order = "unknown";
|
||||
break;
|
||||
case COGL_SUBPIXEL_ORDER_NONE:
|
||||
order = "non-standard";
|
||||
break;
|
||||
case COGL_SUBPIXEL_ORDER_HORIZONTAL_RGB:
|
||||
order = "horizontal,rgb";
|
||||
break;
|
||||
case COGL_SUBPIXEL_ORDER_HORIZONTAL_BGR:
|
||||
order = "horizontal,bgr";
|
||||
break;
|
||||
case COGL_SUBPIXEL_ORDER_VERTICAL_RGB:
|
||||
order = "vertical,rgb";
|
||||
break;
|
||||
case COGL_SUBPIXEL_ORDER_VERTICAL_BGR:
|
||||
order = "vertical,bgr";
|
||||
break;
|
||||
}
|
||||
printf (" » sub pixel order = %s\n", order);
|
||||
|
||||
refresh = cogl_output_get_refresh_rate (output);
|
||||
if (refresh)
|
||||
printf (" » refresh = %f Hz\n", refresh);
|
||||
else
|
||||
printf (" » refresh = unknown\n");
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
@ -173,6 +225,7 @@ main (int argc, char **argv)
|
||||
CoglError *error = NULL;
|
||||
CoglWinsysID winsys_id;
|
||||
const char *winsys_name;
|
||||
OutputState output_state;
|
||||
|
||||
ctx = cogl_context_new (NULL, &error);
|
||||
if (!ctx) {
|
||||
@ -189,5 +242,11 @@ main (int argc, char **argv)
|
||||
g_print ("Features:\n");
|
||||
cogl_foreach_feature (ctx, feature_cb, NULL);
|
||||
|
||||
g_print ("Outputs:\n");
|
||||
output_state.id = 0;
|
||||
cogl_renderer_foreach_output (renderer, output_cb, &output_state);
|
||||
if (output_state.id == 0)
|
||||
printf (" Unknown\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user