Hi

On Thu, Jun 1, 2023 at 6:30 PM Antonio Caggiano <quic_acagg...@quicinc.com>
wrote:

> SDL renderer creates an OpenGL 2.1 context while QEMU expects minimum
> OpenGL version 3.3 or ES 3.0. To fix this we create an OpenGL context
> directly, ignoring the SDL renderer when OpenGL is enabled.
>
> Signed-off-by: Antonio Caggiano <quic_acagg...@quicinc.com>
> ---
>  ui/sdl2.c | 34 ++++++++++++++++++++++++++--------
>  1 file changed, 26 insertions(+), 8 deletions(-)
>
> diff --git a/ui/sdl2.c b/ui/sdl2.c
> index 9d703200bf..42512588b5 100644
> --- a/ui/sdl2.c
> +++ b/ui/sdl2.c
> @@ -104,7 +104,24 @@ void sdl2_window_create(struct sdl2_console *scon)
>                                           surface_width(scon->surface),
>                                           surface_height(scon->surface),
>                                           flags);
> +
>      if (scon->opengl) {
> +        /* Set the minimum version required by the texture blit shaders */
> +        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
> +        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
> +
> +        if (scon->opts->gl == DISPLAYGL_MODE_ES) {
> +            SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,
> +                                SDL_GL_CONTEXT_PROFILE_ES);
> +            SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
> +        }
> +
> +        scon->winctx = SDL_GL_CreateContext(scon->real_window);
> +    } else {
> +        /*
> +         * The SDL renderer is only used by sdl2 2D callbacks, when
> OpenGL is
> +         * disabled at configuration time
> +         */
>

"configuration" time usually means during compilation configuration. Here I
guess you also mean during runtime configuration.

I suggest you simply drop "at configuation time", as it is confusing imho.



>          const char *driver = "opengl";
>
>          if (scon->opts->gl == DISPLAYGL_MODE_ES) {
> @@ -113,11 +130,8 @@ void sdl2_window_create(struct sdl2_console *scon)
>
>          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);
> +        scon->real_renderer = SDL_CreateRenderer(scon->real_window, -1,
> 0);
>      }
>      sdl_update_caption(scon);
>  }
> @@ -128,10 +142,14 @@ void sdl2_window_destroy(struct sdl2_console *scon)
>          return;
>      }
>
> -    SDL_GL_DeleteContext(scon->winctx);
> -    scon->winctx = NULL;
> -    SDL_DestroyRenderer(scon->real_renderer);
> -    scon->real_renderer = NULL;
> +    if (scon->winctx) {
> +        SDL_GL_DeleteContext(scon->winctx);
> +        scon->winctx = NULL;
> +    }
> +    if (scon->real_renderer) {
> +        SDL_DestroyRenderer(scon->real_renderer);
> +        scon->real_renderer = NULL;
> +    }
>      SDL_DestroyWindow(scon->real_window);
>      scon->real_window = NULL;
>  }
> --
> 2.40.0
>
>
Have you checked the behaviour on Windows?

thanks

Reply via email to