Revert "cogl: Drop Rendererer.set_driver"

This reverts commit 6c22b7faba8112065a611921a538b9f66d9500bf.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4312>
This commit is contained in:
Robert Mader 2025-03-02 00:23:13 +01:00 committed by Marge Bot
parent a623a839fd
commit 9d5f8d464e
3 changed files with 42 additions and 0 deletions

View File

@ -47,6 +47,7 @@ struct _CoglRenderer
CoglDisplay *display;
gboolean connected;
CoglDriverId driver_override;
CoglDriver *driver;
CoglTextureDriver *texture_driver;
const CoglWinsysVtable *winsys_vtable;

View File

@ -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)
{

View File

@ -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