21 #include "../../SDL_internal.h" 23 #if SDL_VIDEO_DRIVER_VIVANTE 26 #include "../SDL_sysvideo.h" 31 #include "../../events/SDL_events_c.h" 33 #ifdef SDL_INPUT_LINUXEV 34 #include "../../core/linux/SDL_evdev.h" 44 VIVANTE_Available(
void)
85 device->
free = VIVANTE_Destroy;
101 #if SDL_VIDEO_OPENGL_EGL 127 "Vivante EGL Video Driver",
137 VIVANTE_AddVideoDisplays(
_THIS)
143 int pitch = 0, bpp = 0;
152 #if SDL_VIDEO_DRIVER_VIVANTE_VDK 155 vdkGetDisplayInfo(data->
native_display, ¤t_mode.
w, ¤t_mode.
h, &pixels, &pitch, &bpp);
159 videodata->fbGetDisplayInfo(data->
native_display, ¤t_mode.
w, ¤t_mode.
h, &pixels, &pitch, &bpp);
176 display.
name = VIVANTE_GetDisplayName(
_this);
189 #
if SDL_VIDEO_DRIVER_VIVANTE_VDK
190 videodata->vdk_private = vdkInitialize();
191 if (!videodata->vdk_private) {
202 #define LOAD_FUNC(NAME) \ 203 videodata->NAME = SDL_LoadFunction(videodata->egl_handle, #NAME); \ 204 if (!videodata->NAME) return -1; 206 LOAD_FUNC(fbGetDisplay);
207 LOAD_FUNC(fbGetDisplayByIndex);
208 LOAD_FUNC(fbGetDisplayGeometry);
209 LOAD_FUNC(fbGetDisplayInfo);
210 LOAD_FUNC(fbDestroyDisplay);
211 LOAD_FUNC(fbCreateWindow);
212 LOAD_FUNC(fbGetWindowGeometry);
213 LOAD_FUNC(fbGetWindowInfo);
214 LOAD_FUNC(fbDestroyWindow);
217 if (VIVANTE_SetupPlatform(
_this) < 0) {
221 if (VIVANTE_AddVideoDisplays(
_this) < 0) {
225 VIVANTE_UpdateDisplayScale(
_this);
227 #ifdef SDL_INPUT_LINUXEV 228 if (SDL_EVDEV_Init() < 0) {
245 VIVANTE_CleanupPlatform(
_this);
247 #if SDL_VIDEO_DRIVER_VIVANTE_VDK 248 if (videodata->vdk_private) {
249 vdkExit(videodata->vdk_private);
250 videodata->vdk_private =
NULL;
291 #if SDL_VIDEO_DRIVER_VIVANTE_VDK 292 data->native_window = vdkCreateWindow(displaydata->native_display, window->
x, window->
y, window->
w, window->
h);
294 data->native_window = videodata->fbCreateWindow(displaydata->native_display, window->
x, window->
y, window->
w, window->
h);
296 if (!data->native_window) {
297 return SDL_SetError(
"VIVANTE: Can't create native window");
300 #if SDL_VIDEO_OPENGL_EGL 302 data->egl_surface = SDL_EGL_CreateSurface(
_this, data->native_window);
304 return SDL_SetError(
"VIVANTE: Can't create EGL surface");
323 #if SDL_VIDEO_OPENGL_EGL 325 SDL_EGL_DestroySurface(
_this, data->egl_surface);
329 if (data->native_window) {
330 #if SDL_VIDEO_DRIVER_VIVANTE_VDK 331 vdkDestroyWindow(data->native_window);
333 videodata->fbDestroyWindow(data->native_window);
345 #if SDL_VIDEO_DRIVER_VIVANTE_VDK 366 #if SDL_VIDEO_DRIVER_VIVANTE_VDK 377 #if SDL_VIDEO_DRIVER_VIVANTE_VDK 395 info->
info.vivante.
display = displaydata->native_display;
410 #ifdef SDL_INPUT_LINUXEV int(* Vulkan_LoadLibrary)(_THIS, const char *path)
#define SDL_MINOR_VERSION
void VIVANTE_SetWindowTitle(_THIS, SDL_Window *window)
void VIVANTE_SetWindowPosition(_THIS, SDL_Window *window)
int VIVANTE_VideoInit(_THIS)
void SDL_SetKeyboardFocus(SDL_Window *window)
#define SDL_MAJOR_VERSION
void VIVANTE_ShowWindow(_THIS, SDL_Window *window)
void VIVANTE_PumpEvents(_THIS)
int(* GL_SetSwapInterval)(_THIS, int interval)
void(* ShowWindow)(_THIS, SDL_Window *window)
The structure that defines a display mode.
int VIVANTE_CreateWindow(_THIS, SDL_Window *window)
void(* SetWindowSize)(_THIS, SDL_Window *window)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
void SDL_SetMouseFocus(SDL_Window *window)
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display)
int(* GL_LoadLibrary)(_THIS, const char *path)
int(* SetDisplayMode)(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
void * SDL_GetDisplayDriverData(int displayIndex)
static SDL_VideoDevice * _this
void(* HideWindow)(_THIS, SDL_Window *window)
static SDL_AudioDeviceID device
SDL_bool(* Vulkan_GetInstanceExtensions)(_THIS, SDL_Window *window, unsigned *count, const char **names)
VideoBootStrap VIVANTE_bootstrap
#define SDL_INPUT_LINUXEV
SDL_bool(* GetWindowWMInfo)(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
SDL_bool(* Vulkan_CreateSurface)(_THIS, SDL_Window *window, VkInstance instance, VkSurfaceKHR *surface)
int(* GL_MakeCurrent)(_THIS, SDL_Window *window, SDL_GLContext context)
int VIVANTE_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
void(* Vulkan_UnloadLibrary)(_THIS)
SDL_DisplayMode current_mode
void(* DestroyWindow)(_THIS, SDL_Window *window)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
SDL_bool VIVANTE_GetWindowWMInfo(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
void(* GL_UnloadLibrary)(_THIS)
void(* GetDisplayModes)(_THIS, SDL_VideoDisplay *display)
int(* CreateSDLWindow)(_THIS, SDL_Window *window)
#define SDL_OutOfMemory()
SDL_DisplayMode desktop_mode
EGLSurface EGLNativeWindowType * window
void(* SetWindowPosition)(_THIS, SDL_Window *window)
void VIVANTE_SetWindowSize(_THIS, SDL_Window *window)
void VIVANTE_DestroyWindow(_THIS, SDL_Window *window)
int(* GL_SwapWindow)(_THIS, SDL_Window *window)
The type used to identify a window.
union SDL_SysWMinfo::@17 info
void VIVANTE_VideoQuit(_THIS)
SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
void(* GL_DeleteContext)(_THIS, SDL_GLContext context)
void(* SetWindowTitle)(_THIS, SDL_Window *window)
int(* GL_GetSwapInterval)(_THIS)
ANativeWindow * native_window
void *(* GL_GetProcAddress)(_THIS, const char *proc)
EGLNativeDisplayType native_display
void(* PumpEvents)(_THIS)
void VIVANTE_GetDisplayModes(_THIS, SDL_VideoDisplay *display)
void VIVANTE_HideWindow(_THIS, SDL_Window *window)