22 #include "../../SDL_internal.h"
24 #if SDL_VIDEO_DRIVER_RPI
34 #include "../SDL_sysvideo.h"
39 #include "../../events/SDL_mouse_c.h"
40 #include "../../events/SDL_keyboard_c.h"
43 #ifdef SDL_INPUT_LINUXEV
44 #include "../../core/linux/SDL_evdev.h"
69 TV_DISPLAY_STATE_T tvstate;
70 if (vc_tv_get_display_state( &tvstate ) == 0) {
73 HDMI_PROPERTY_PARAM_T property;
74 property.property = HDMI_PROPERTY_PIXEL_CLOCK_TYPE;
75 vc_tv_hdmi_get_property(&property);
76 return property.param1 == HDMI_PIXEL_CLOCK_TYPE_NTSC ?
77 tvstate.display.hdmi.frame_rate * (1000.0f/1001.0f) :
78 tvstate.display.hdmi.frame_rate;
110 device->
free = RPI_Destroy;
173 if (graphics_get_display_size( 0, &w, &h) < 0) {
201 #ifdef SDL_INPUT_LINUXEV
202 if (SDL_EVDEV_Init() < 0) {
215 #ifdef SDL_INPUT_LINUXEV
234 RPI_vsync_callback(DISPMANX_UPDATE_HANDLE_T u,
void *data)
251 VC_DISPMANX_ALPHA_T dispman_alpha;
252 DISPMANX_UPDATE_HANDLE_T dispman_update;
257 dispman_alpha.flags = DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS;
258 dispman_alpha.opacity = 0xFF;
259 dispman_alpha.mask = 0;
279 dst_rect.width = window->
w;
280 dst_rect.height = window->
h;
284 src_rect.width = window->
w << 16;
285 src_rect.height = window->
h << 16;
292 dispman_update = vc_dispmanx_update_start( 0 );
293 wdata->
dispman_window.element = vc_dispmanx_element_add (dispman_update,
299 DISPMANX_PROTECTION_NONE,
305 vc_dispmanx_update_submit_sync(dispman_update);
307 if (!
_this->egl_data) {
315 return SDL_SetError(
"Could not create GLES window surface");
324 vc_dispmanx_vsync_callback(displaydata->
dispman_display, RPI_vsync_callback, (
void*)wdata);
358 #if SDL_VIDEO_OPENGL_EGL