Commit 0b71a5d5 authored by Gerd Hoffmann's avatar Gerd Hoffmann
Browse files

sdl2: add support for display rendering using opengl.



Add new sdl2-gl.c file, with display
rendering functions using opengl.

Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
Reviewed-by: default avatarMax Reitz <mreitz@redhat.com>
parent 19dadfcc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -354,6 +354,7 @@ void surface_gl_setup_viewport(ConsoleGLState *gls,
#endif

/* sdl.c */
void sdl_display_early_init(int opengl);
void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);

/* cocoa.m */
+11 −0
Original line number Diff line number Diff line
@@ -17,6 +17,10 @@ struct sdl2_console {
    int last_vm_running; /* per console for caption reasons */
    int x, y;
    int hidden;
    int opengl;
    int updates;
    SDL_GLContext winctx;
    ConsoleGLState *gls;
};

void sdl2_window_create(struct sdl2_console *scon);
@@ -37,4 +41,11 @@ void sdl2_2d_redraw(struct sdl2_console *scon);
bool sdl2_2d_check_format(DisplayChangeListener *dcl,
                          pixman_format_code_t format);

void sdl2_gl_update(DisplayChangeListener *dcl,
                    int x, int y, int w, int h);
void sdl2_gl_switch(DisplayChangeListener *dcl,
                    DisplaySurface *new_surface);
void sdl2_gl_refresh(DisplayChangeListener *dcl);
void sdl2_gl_redraw(struct sdl2_console *scon);

#endif /* SDL2_H */
+3 −0
Original line number Diff line number Diff line
@@ -21,6 +21,9 @@ sdl.mo-objs := sdl.o sdl_zoom.o
endif
ifeq ($(CONFIG_SDLABI),2.0)
sdl.mo-objs := sdl2.o sdl2-input.o sdl2-2d.o
ifeq ($(CONFIG_OPENGL),y)
sdl.mo-objs += sdl2-gl.o
endif
endif
sdl.mo-cflags := $(SDL_CFLAGS)

+10 −0
Original line number Diff line number Diff line
@@ -908,6 +908,16 @@ static const DisplayChangeListenerOps dcl_ops = {
    .dpy_cursor_define    = sdl_mouse_define,
};

void sdl_display_early_init(int opengl)
{
    if (opengl == 1 /* on */) {
        fprintf(stderr,
                "SDL1 display code has no opengl support.\n"
                "Please recompile qemu with SDL2, using\n"
                "./configure --enable-sdl --with-sdlabi=2.0\n");
    }
}

void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)
{
    int flags;
+7 −0
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ void sdl2_2d_update(DisplayChangeListener *dcl,
    DisplaySurface *surf = qemu_console_surface(dcl->con);
    SDL_Rect rect;

    assert(!scon->opengl);

    if (!surf) {
        return;
    }
@@ -61,6 +63,8 @@ void sdl2_2d_switch(DisplayChangeListener *dcl,
    DisplaySurface *old_surface = scon->surface;
    int format = 0;

    assert(!scon->opengl);

    scon->surface = new_surface;

    if (scon->texture) {
@@ -101,12 +105,15 @@ void sdl2_2d_refresh(DisplayChangeListener *dcl)
{
    struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl);

    assert(!scon->opengl);
    graphic_hw_update(dcl->con);
    sdl2_poll_events(scon);
}

void sdl2_2d_redraw(struct sdl2_console *scon)
{
    assert(!scon->opengl);

    if (!scon->surface) {
        return;
    }
Loading