diff options
| author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2023-02-15 18:29:29 +0400 |
|---|---|---|
| committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2023-03-13 23:48:45 +0400 |
| commit | da3f7a3ab9ea0091955b58f8909dfcee01f4043e (patch) | |
| tree | 2a3f88520350ee69cb37c2ce760a68bb50eb275c /ui/sdl2.c | |
| parent | 82f483dd22c15277cea6047fd46671467eb289a9 (diff) | |
| download | focaccia-qemu-da3f7a3ab9ea0091955b58f8909dfcee01f4043e.tar.gz focaccia-qemu-da3f7a3ab9ea0091955b58f8909dfcee01f4043e.zip | |
ui/sdl: try to instantiate the matching opengl renderer
-display sdl,gl=es didn't actually use OpenGL ES. Using OpenGL ES allows to use ANGLE, which works generally better than Windows/OEM OpenGL driver. (note: users can still bypass the QEMU choice with SDL_RENDER_DRIVER environment variable) (note: for some reason, specifying a driver disables batching and breaks rendering, so enable it explicitly) Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'ui/sdl2.c')
| -rw-r--r-- | ui/sdl2.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/ui/sdl2.c b/ui/sdl2.c index 221cdced60..35c58c1104 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -58,6 +58,11 @@ static Notifier mouse_mode_notifier; #define SDL2_MAX_IDLE_COUNT (2 * GUI_REFRESH_INTERVAL_DEFAULT \ / SDL2_REFRESH_INTERVAL_BUSY + 1) +/* introduced in SDL 2.0.10 */ +#ifndef SDL_HINT_RENDER_BATCHING +#define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING" +#endif + static void sdl_update_caption(struct sdl2_console *scon); static struct sdl2_console *get_scon_from_window(uint32_t window_id) @@ -99,7 +104,18 @@ void sdl2_window_create(struct sdl2_console *scon) surface_width(scon->surface), surface_height(scon->surface), flags); + if (scon->opengl) { + const char *driver = "opengl"; + + if (scon->opts->gl == DISPLAYGL_MODE_ES) { + driver = "opengles2"; + } + + SDL_SetHint(SDL_HINT_RENDER_DRIVER, driver); + SDL_SetHint(SDL_HINT_RENDER_BATCHING, "1"); + } scon->real_renderer = SDL_CreateRenderer(scon->real_window, -1, 0); + if (scon->opengl) { scon->winctx = SDL_GL_CreateContext(scon->real_window); } |