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"
44VIVANTE_Available(
void)
85 device->free = VIVANTE_Destroy;
101#if SDL_VIDEO_OPENGL_EGL
102 device->GL_LoadLibrary = VIVANTE_GLES_LoadLibrary;
103 device->GL_GetProcAddress = VIVANTE_GLES_GetProcAddress;
104 device->GL_UnloadLibrary = VIVANTE_GLES_UnloadLibrary;
105 device->GL_CreateContext = VIVANTE_GLES_CreateContext;
106 device->GL_MakeCurrent = VIVANTE_GLES_MakeCurrent;
107 device->GL_SetSwapInterval = VIVANTE_GLES_SetSwapInterval;
108 device->GL_GetSwapInterval = VIVANTE_GLES_GetSwapInterval;
109 device->GL_SwapWindow = VIVANTE_GLES_SwapWindow;
110 device->GL_DeleteContext = VIVANTE_GLES_DeleteContext;
114 device->Vulkan_LoadLibrary = VIVANTE_Vulkan_LoadLibrary;
115 device->Vulkan_UnloadLibrary = VIVANTE_Vulkan_UnloadLibrary;
116 device->Vulkan_GetInstanceExtensions = VIVANTE_Vulkan_GetInstanceExtensions;
117 device->Vulkan_CreateSurface = VIVANTE_Vulkan_CreateSurface;
127 "Vivante EGL Video Driver",
137VIVANTE_AddVideoDisplays(
_THIS)
143 int pitch = 0, bpp = 0;
152#if SDL_VIDEO_DRIVER_VIVANTE_VDK
153 data->native_display = vdkGetDisplay(videodata->vdk_private);
155 vdkGetDisplayInfo(
data->native_display, ¤t_mode.
w, ¤t_mode.
h, &
pixels, &pitch, &bpp);
157 data->native_display = videodata->fbGetDisplayByIndex(0);
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
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
347 vdkSetWindowTitle(
data->native_window,
window->title);
366#if SDL_VIDEO_DRIVER_VIVANTE_VDK
368 vdkShowWindow(
data->native_window);
377#if SDL_VIDEO_DRIVER_VIVANTE_VDK
379 vdkHideWindow(
data->native_window);
395 info->
info.vivante.
display = displaydata->native_display;
410#ifdef SDL_INPUT_LINUXEV
#define SDL_OutOfMemory()
void SDL_SetKeyboardFocus(SDL_Window *window)
void SDL_SetMouseFocus(SDL_Window *window)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
@ SDL_PIXELFORMAT_ARGB8888
void * SDL_GetDisplayDriverData(int displayIndex)
VideoBootStrap VIVANTE_bootstrap
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display)
SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
#define SDL_MINOR_VERSION
#define SDL_MAJOR_VERSION
static SDL_VideoDevice * _this
void VIVANTE_PumpEvents(_THIS)
void VIVANTE_VideoQuit(_THIS)
void VIVANTE_SetWindowPosition(_THIS, SDL_Window *window)
void VIVANTE_SetWindowSize(_THIS, SDL_Window *window)
int VIVANTE_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
int VIVANTE_VideoInit(_THIS)
void VIVANTE_ShowWindow(_THIS, SDL_Window *window)
SDL_bool VIVANTE_GetWindowWMInfo(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
void VIVANTE_SetWindowTitle(_THIS, SDL_Window *window)
void VIVANTE_HideWindow(_THIS, SDL_Window *window)
int VIVANTE_CreateWindow(_THIS, SDL_Window *window)
void VIVANTE_DestroyWindow(_THIS, SDL_Window *window)
void VIVANTE_GetDisplayModes(_THIS, SDL_VideoDisplay *display)
EGLSurface EGLNativeWindowType * window
#define SDL_INPUT_LINUXEV
static SDL_AudioDeviceID device
The structure that defines a display mode.
union SDL_SysWMinfo::@17 info
SDL_DisplayMode desktop_mode
SDL_DisplayMode current_mode
The type used to identify a window.