summaryrefslogtreecommitdiff
path: root/cogl/cogl-renderer.c
diff options
context:
space:
mode:
Diffstat (limited to 'cogl/cogl-renderer.c')
-rw-r--r--cogl/cogl-renderer.c89
1 files changed, 84 insertions, 5 deletions
diff --git a/cogl/cogl-renderer.c b/cogl/cogl-renderer.c
index 2564c9d2..ab9b37b9 100644
--- a/cogl/cogl-renderer.c
+++ b/cogl/cogl-renderer.c
@@ -44,6 +44,7 @@
#include "cogl-winsys-stub-private.h"
#include "cogl-config-private.h"
#include "cogl-error-private.h"
+#include "cogl-output-private.h"
#ifdef COGL_HAS_EGL_PLATFORM_XLIB_SUPPORT
#include "cogl-winsys-egl-x11-private.h"
@@ -111,7 +112,7 @@ static CoglDriverDescription _cogl_drivers[] =
{
COGL_DRIVER_GL3,
"gl3",
- 0,
+ COGL_RENDERER_CONSTRAINT_USES_KMS,
COGL_PRIVATE_FEATURE_ANY_GL |
COGL_PRIVATE_FEATURE_GL_PROGRAMMABLE,
&_cogl_driver_gl,
@@ -121,7 +122,7 @@ static CoglDriverDescription _cogl_drivers[] =
{
COGL_DRIVER_GL,
"gl",
- 0,
+ COGL_RENDERER_CONSTRAINT_USES_KMS,
COGL_PRIVATE_FEATURE_ANY_GL |
COGL_PRIVATE_FEATURE_GL_FIXED |
COGL_PRIVATE_FEATURE_GL_PROGRAMMABLE,
@@ -134,7 +135,8 @@ static CoglDriverDescription _cogl_drivers[] =
{
COGL_DRIVER_GLES2,
"gles2",
- COGL_RENDERER_CONSTRAINT_SUPPORTS_COGL_GLES2,
+ COGL_RENDERER_CONSTRAINT_SUPPORTS_COGL_GLES2 |
+ COGL_RENDERER_CONSTRAINT_USES_KMS,
COGL_PRIVATE_FEATURE_ANY_GL |
COGL_PRIVATE_FEATURE_GL_EMBEDDED |
COGL_PRIVATE_FEATURE_GL_PROGRAMMABLE,
@@ -147,7 +149,7 @@ static CoglDriverDescription _cogl_drivers[] =
{
COGL_DRIVER_GLES1,
"gles1",
- 0,
+ COGL_RENDERER_CONSTRAINT_USES_KMS,
COGL_PRIVATE_FEATURE_ANY_GL |
COGL_PRIVATE_FEATURE_GL_EMBEDDED |
COGL_PRIVATE_FEATURE_GL_FIXED,
@@ -173,7 +175,7 @@ static CoglDriverDescription _cogl_drivers[] =
{
COGL_DRIVER_NOP,
"nop",
- 0, /* constraints satisfied */
+ COGL_RENDERER_CONSTRAINT_USES_KMS, /* constraints satisfied */
0, /* flags */
&_cogl_driver_nop,
NULL, /* texture driver */
@@ -843,3 +845,80 @@ cogl_renderer_foreach_output (CoglRenderer *renderer,
for (l = renderer->outputs; l; l = l->next)
callback (l->data, user_data);
}
+
+CoglBool
+cogl_renderer_commit_outputs (CoglRenderer *renderer,
+ CoglError **error)
+{
+ CoglWinsysVtable *winsys;
+
+ _COGL_RETURN_IF_FAIL (!renderer->connected);
+
+ winsys = renderer->winsys;
+
+ if (winsys->commit_outputs)
+ return winsys->commit_outputs (renderer, error);
+ else
+ {
+ _cogl_set_error (error,
+ COGL_SYSTEM_ERROR,
+ COGL_SYSTEM_ERROR_UNSUPPORTED,
+ "The current Cogl window system doesn't support "
+ "display configuration");
+ return FALSE;
+ }
+}
+
+void
+_cogl_renderer_notify_outputs_changed (CoglRenderer *renderer)
+{
+ const CoglWinsysVtable *winsys = renderer->winsys_vtable;
+ GList *l;
+
+ COGL_NOTE (WINSYS, "Outputs changed:");
+
+ for (l = renderer->outputs; l; l = l->next)
+ {
+ CoglOutput *output = l->data;
+ const char *subpixel_string;
+
+ switch (output->state->subpixel_order)
+ {
+ case COGL_SUBPIXEL_ORDER_UNKNOWN:
+ default:
+ subpixel_string = "unknown";
+ break;
+ case COGL_SUBPIXEL_ORDER_NONE:
+ subpixel_string = "none";
+ break;
+ case COGL_SUBPIXEL_ORDER_HORIZONTAL_RGB:
+ subpixel_string = "horizontal_rgb";
+ break;
+ case COGL_SUBPIXEL_ORDER_HORIZONTAL_BGR:
+ subpixel_string = "horizontal_bgr";
+ break;
+ case COGL_SUBPIXEL_ORDER_VERTICAL_RGB:
+ subpixel_string = "vertical_rgb";
+ break;
+ case COGL_SUBPIXEL_ORDER_VERTICAL_BGR:
+ subpixel_string = "vertical_bgr";
+ break;
+ }
+
+ COGL_NOTE (WINSYS,
+ " %10s: +%d+%dx%dx%d mm=%dx%d dpi=%.1fx%.1f "
+ "subpixel_order=%s refresh_rate=%.3f",
+ output->state->name,
+ output->state->x, output->state->y,
+ cogl_output_get_width (output),
+ cogl_output_get_height (output),
+ output->state->mm_width, output->state->mm_height,
+ cogl_output_get_width (output) / (output->state->mm_width / 25.4),
+ cogl_output_get_height (output) / (output->state->mm_height / 25.4),
+ subpixel_string,
+ cogl_output_get_refresh_rate (output));
+ }
+
+ if (winsys->renderer_outputs_changed)
+ winsys->renderer_outputs_changed (renderer);
+}