From 9d5f8d464ea31faa81f7b69312d77c344f9d8cba Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Sun, 2 Mar 2025 00:23:13 +0100 Subject: [PATCH] Revert "cogl: Drop Rendererer.set_driver" This reverts commit 6c22b7faba8112065a611921a538b9f66d9500bf. Part-of: --- cogl/cogl/cogl-renderer-private.h | 1 + cogl/cogl/cogl-renderer.c | 23 +++++++++++++++++++++++ cogl/cogl/cogl-renderer.h | 18 ++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/cogl/cogl/cogl-renderer-private.h b/cogl/cogl/cogl-renderer-private.h index bc7243c44..26de4fcf4 100644 --- a/cogl/cogl/cogl-renderer-private.h +++ b/cogl/cogl/cogl-renderer-private.h @@ -47,6 +47,7 @@ struct _CoglRenderer CoglDisplay *display; gboolean connected; + CoglDriverId driver_override; CoglDriver *driver; CoglTextureDriver *texture_driver; const CoglWinsysVtable *winsys_vtable; diff --git a/cogl/cogl/cogl-renderer.c b/cogl/cogl/cogl-renderer.c index bce026e00..de1e64cd9 100644 --- a/cogl/cogl/cogl-renderer.c +++ b/cogl/cogl/cogl-renderer.c @@ -277,6 +277,21 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer, invalid_override = driver_name; } + if (renderer->driver_override != COGL_DRIVER_ID_ANY) + { + if (driver_override != COGL_DRIVER_ID_ANY && + renderer->driver_override != driver_override) + { + g_set_error (error, COGL_RENDERER_ERROR, + COGL_RENDERER_ERROR_BAD_CONSTRAINT, + "Application driver selection conflicts with driver " + "specified in configuration"); + return FALSE; + } + + driver_override = renderer->driver_override; + } + if (driver_override != COGL_DRIVER_ID_ANY) { gboolean found = FALSE; @@ -536,6 +551,14 @@ cogl_renderer_get_proc_address (CoglRenderer *renderer, return winsys->renderer_get_proc_address (renderer, name); } +void +cogl_renderer_set_driver (CoglRenderer *renderer, + CoglDriverId driver) +{ + g_return_if_fail (!renderer->connected); + renderer->driver_override = driver; +} + CoglDriverId cogl_renderer_get_driver_id (CoglRenderer *renderer) { diff --git a/cogl/cogl/cogl-renderer.h b/cogl/cogl/cogl-renderer.h index 1e16bc9de..6de09e268 100644 --- a/cogl/cogl/cogl-renderer.h +++ b/cogl/cogl/cogl-renderer.h @@ -196,6 +196,24 @@ typedef enum COGL_DRIVER_ID_GLES2, } CoglDriverId; +/** + * cogl_renderer_set_driver: + * @renderer: An unconnected #CoglRenderer + * + * Requests that Cogl should try to use a specific underlying driver + * for rendering. + * + * If you select an unsupported driver then cogl_renderer_connect() + * will fail and report an error. Most applications should not + * explicitly select a driver and should rely on Cogl automatically + * choosing the driver. + * + * This may only be called on an un-connected #CoglRenderer. + */ +COGL_EXPORT void +cogl_renderer_set_driver (CoglRenderer *renderer, + CoglDriverId driver); + /** * cogl_renderer_get_driver_id: * @renderer: A connected #CoglRenderer