15d0fe650SGerd Hoffmann #ifndef SDL2_H 25d0fe650SGerd Hoffmann #define SDL2_H 35d0fe650SGerd Hoffmann 419dadfccSGerd Hoffmann /* Avoid compiler warning because macro is redefined in SDL_syswm.h. */ 519dadfccSGerd Hoffmann #undef WIN32_LEAN_AND_MEAN 619dadfccSGerd Hoffmann 719dadfccSGerd Hoffmann #include <SDL.h> 8021e3fa3SDaniel P. Berrangé 9021e3fa3SDaniel P. Berrangé /* with Alpine / muslc SDL headers pull in directfb headers 10021e3fa3SDaniel P. Berrangé * which in turn trigger warning about redundant decls for 11021e3fa3SDaniel P. Berrangé * direct_waitqueue_deinit. 12021e3fa3SDaniel P. Berrangé */ 13021e3fa3SDaniel P. Berrangé #pragma GCC diagnostic push 14021e3fa3SDaniel P. Berrangé #pragma GCC diagnostic ignored "-Wredundant-decls" 15021e3fa3SDaniel P. Berrangé 1619dadfccSGerd Hoffmann #include <SDL_syswm.h> 17021e3fa3SDaniel P. Berrangé 18021e3fa3SDaniel P. Berrangé #pragma GCC diagnostic pop 19021e3fa3SDaniel P. Berrangé 20a442fe2fSDaniel P. Berrangé #ifdef CONFIG_SDL_IMAGE 21a442fe2fSDaniel P. Berrangé # include <SDL_image.h> 22a442fe2fSDaniel P. Berrangé #endif 2319dadfccSGerd Hoffmann 2407333e1cSGerd Hoffmann #include "ui/kbd-state.h" 25371c4ef6SGerd Hoffmann #ifdef CONFIG_OPENGL 26371c4ef6SGerd Hoffmann # include "ui/egl-helpers.h" 27371c4ef6SGerd Hoffmann #endif 28371c4ef6SGerd Hoffmann 295d0fe650SGerd Hoffmann struct sdl2_console { 305e79d516SMarc-André Lureau DisplayGLCtx dgc; 315d0fe650SGerd Hoffmann DisplayChangeListener dcl; 325d0fe650SGerd Hoffmann DisplaySurface *surface; 33844fd50dSElie Tournier DisplayOptions *opts; 345d0fe650SGerd Hoffmann SDL_Texture *texture; 355d0fe650SGerd Hoffmann SDL_Window *real_window; 365d0fe650SGerd Hoffmann SDL_Renderer *real_renderer; 375d0fe650SGerd Hoffmann int idx; 385d0fe650SGerd Hoffmann int last_vm_running; /* per console for caption reasons */ 39cb47dc9aSGerd Hoffmann int x, y, w, h; 405d0fe650SGerd Hoffmann int hidden; 410b71a5d5SGerd Hoffmann int opengl; 420b71a5d5SGerd Hoffmann int updates; 4356bdd4b6SJindřich Makovička int idle_counter; 44849bbe60SJindrich Makovicka int ignore_hotkeys; 45*eaea8031SVolker Rümelin bool gui_keysym; 460b71a5d5SGerd Hoffmann SDL_GLContext winctx; 4707333e1cSGerd Hoffmann QKbdState *kbd; 48cb47dc9aSGerd Hoffmann #ifdef CONFIG_OPENGL 4946e19e14SGerd Hoffmann QemuGLShader *gls; 50371c4ef6SGerd Hoffmann egl_fb guest_fb; 51371c4ef6SGerd Hoffmann egl_fb win_fb; 52cb47dc9aSGerd Hoffmann bool y0_top; 53cb47dc9aSGerd Hoffmann bool scanout_mode; 54cb47dc9aSGerd Hoffmann #endif 555d0fe650SGerd Hoffmann }; 565d0fe650SGerd Hoffmann 572c3056f1SGerd Hoffmann void sdl2_window_create(struct sdl2_console *scon); 582c3056f1SGerd Hoffmann void sdl2_window_destroy(struct sdl2_console *scon); 592c3056f1SGerd Hoffmann void sdl2_window_resize(struct sdl2_console *scon); 6063ed4907SGerd Hoffmann void sdl2_poll_events(struct sdl2_console *scon); 612c3056f1SGerd Hoffmann 628fc1a3f5SGerd Hoffmann void sdl2_process_key(struct sdl2_console *scon, 638fc1a3f5SGerd Hoffmann SDL_KeyboardEvent *ev); 64df3c610fSVolker Rümelin void sdl2_release_modifiers(struct sdl2_console *scon); 658fc1a3f5SGerd Hoffmann 66f1ddebd8SGerd Hoffmann void sdl2_2d_update(DisplayChangeListener *dcl, 67f1ddebd8SGerd Hoffmann int x, int y, int w, int h); 682c3056f1SGerd Hoffmann void sdl2_2d_switch(DisplayChangeListener *dcl, 692c3056f1SGerd Hoffmann DisplaySurface *new_surface); 7062959ffeSGerd Hoffmann void sdl2_2d_refresh(DisplayChangeListener *dcl); 710d01b7ceSGerd Hoffmann void sdl2_2d_redraw(struct sdl2_console *scon); 72877417d9SGerd Hoffmann bool sdl2_2d_check_format(DisplayChangeListener *dcl, 73877417d9SGerd Hoffmann pixman_format_code_t format); 74f1ddebd8SGerd Hoffmann 750b71a5d5SGerd Hoffmann void sdl2_gl_update(DisplayChangeListener *dcl, 760b71a5d5SGerd Hoffmann int x, int y, int w, int h); 770b71a5d5SGerd Hoffmann void sdl2_gl_switch(DisplayChangeListener *dcl, 780b71a5d5SGerd Hoffmann DisplaySurface *new_surface); 790b71a5d5SGerd Hoffmann void sdl2_gl_refresh(DisplayChangeListener *dcl); 800b71a5d5SGerd Hoffmann void sdl2_gl_redraw(struct sdl2_console *scon); 810b71a5d5SGerd Hoffmann 825e79d516SMarc-André Lureau QEMUGLContext sdl2_gl_create_context(DisplayGLCtx *dgc, 83cb47dc9aSGerd Hoffmann QEMUGLParams *params); 845e79d516SMarc-André Lureau void sdl2_gl_destroy_context(DisplayGLCtx *dgc, QEMUGLContext ctx); 855e79d516SMarc-André Lureau int sdl2_gl_make_context_current(DisplayGLCtx *dgc, 86cb47dc9aSGerd Hoffmann QEMUGLContext ctx); 87cb47dc9aSGerd Hoffmann 88db6cdfbeSGerd Hoffmann void sdl2_gl_scanout_disable(DisplayChangeListener *dcl); 89f4c36bdaSGerd Hoffmann void sdl2_gl_scanout_texture(DisplayChangeListener *dcl, 90f4c36bdaSGerd Hoffmann uint32_t backing_id, 91f4c36bdaSGerd Hoffmann bool backing_y_0_top, 92f4c36bdaSGerd Hoffmann uint32_t backing_width, 93f4c36bdaSGerd Hoffmann uint32_t backing_height, 94cb47dc9aSGerd Hoffmann uint32_t x, uint32_t y, 95bf41ab61SMarc-André Lureau uint32_t w, uint32_t h, 96bf41ab61SMarc-André Lureau void *d3d_tex2d); 97cb47dc9aSGerd Hoffmann void sdl2_gl_scanout_flush(DisplayChangeListener *dcl, 98cb47dc9aSGerd Hoffmann uint32_t x, uint32_t y, uint32_t w, uint32_t h); 99cb47dc9aSGerd Hoffmann 1005d0fe650SGerd Hoffmann #endif /* SDL2_H */ 101