Fixed using uninitialized display data in iMX6 initialization
parent
24c86b5501
commit
2bfb3c3e82
|
@ -48,12 +48,12 @@ if (!egl_viv_data->NAME) \
|
||||||
/* EGL implementation of SDL OpenGL support */
|
/* EGL implementation of SDL OpenGL support */
|
||||||
|
|
||||||
int
|
int
|
||||||
MX6_GLES_LoadLibrary(_THIS, const char *egl_path) {
|
MX6_GLES_LoadLibrary(_THIS, const char *egl_path)
|
||||||
|
{
|
||||||
/* The definitions of egl_dll_handle and dll_handle were interchanged for some reason.
|
/* The definitions of egl_dll_handle and dll_handle were interchanged for some reason.
|
||||||
Just left them as is for compatibility */
|
Just left them as is for compatibility */
|
||||||
void *dll_handle = NULL, *egl_dll_handle = NULL;
|
void *dll_handle = NULL, *egl_dll_handle = NULL;
|
||||||
char *path = NULL;
|
char *path = NULL;
|
||||||
SDL_DisplayData *displaydata;
|
|
||||||
|
|
||||||
if (_this->egl_data) {
|
if (_this->egl_data) {
|
||||||
return SDL_SetError("OpenGL ES context already created");
|
return SDL_SetError("OpenGL ES context already created");
|
||||||
|
@ -75,7 +75,7 @@ MX6_GLES_LoadLibrary(_THIS, const char *egl_path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (egl_dll_handle == NULL) {
|
if (egl_dll_handle == NULL) {
|
||||||
if(_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) {
|
if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) {
|
||||||
if (_this->gl_config.major_version > 1) {
|
if (_this->gl_config.major_version > 1) {
|
||||||
path = DEFAULT_OGL_ES2;
|
path = DEFAULT_OGL_ES2;
|
||||||
egl_dll_handle = SDL_LoadObject(path);
|
egl_dll_handle = SDL_LoadObject(path);
|
||||||
|
@ -84,11 +84,11 @@ MX6_GLES_LoadLibrary(_THIS, const char *egl_path) {
|
||||||
path = DEFAULT_OGL_ES;
|
path = DEFAULT_OGL_ES;
|
||||||
egl_dll_handle = SDL_LoadObject(path);
|
egl_dll_handle = SDL_LoadObject(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
path = DEFAULT_OGL;
|
path = DEFAULT_OGL;
|
||||||
egl_dll_handle = SDL_LoadObject(path);
|
egl_dll_handle = SDL_LoadObject(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_this->egl_data->egl_dll_handle = egl_dll_handle;
|
_this->egl_data->egl_dll_handle = egl_dll_handle;
|
||||||
|
|
||||||
|
@ -98,8 +98,8 @@ MX6_GLES_LoadLibrary(_THIS, const char *egl_path) {
|
||||||
|
|
||||||
if (egl_path != NULL) {
|
if (egl_path != NULL) {
|
||||||
dll_handle = SDL_LoadObject(egl_path);
|
dll_handle = SDL_LoadObject(egl_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SDL_LoadFunction(dll_handle, "eglChooseConfig") == NULL) {
|
if (SDL_LoadFunction(dll_handle, "eglChooseConfig") == NULL) {
|
||||||
if (dll_handle != NULL) {
|
if (dll_handle != NULL) {
|
||||||
SDL_UnloadObject(dll_handle);
|
SDL_UnloadObject(dll_handle);
|
||||||
|
@ -148,20 +148,16 @@ MX6_GLES_LoadLibrary(_THIS, const char *egl_path) {
|
||||||
LOAD_VIV_FUNC(fbGetPixmapGeometry);
|
LOAD_VIV_FUNC(fbGetPixmapGeometry);
|
||||||
LOAD_VIV_FUNC(fbGetPixmapInfo);
|
LOAD_VIV_FUNC(fbGetPixmapInfo);
|
||||||
LOAD_VIV_FUNC(fbDestroyPixmap);
|
LOAD_VIV_FUNC(fbDestroyPixmap);
|
||||||
|
|
||||||
displaydata = SDL_GetDisplayDriverData(0);
|
|
||||||
|
|
||||||
_this->egl_data->egl_display = _this->egl_data->eglGetDisplay(displaydata->native_display);
|
_this->egl_data->egl_display = _this->egl_data->eglGetDisplay(egl_viv_data->fbGetDisplayByIndex(0));
|
||||||
if (!_this->egl_data->egl_display) {
|
if (!_this->egl_data->egl_display) {
|
||||||
return SDL_SetError("Could not get EGL display");
|
return SDL_SetError("Could not get EGL display");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) {
|
if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) {
|
||||||
return SDL_SetError("Could not initialize EGL");
|
return SDL_SetError("Could not initialize EGL");
|
||||||
}
|
}
|
||||||
|
|
||||||
displaydata->egl_display = _this->egl_data->egl_display;
|
|
||||||
|
|
||||||
_this->gl_config.driver_loaded = 1;
|
_this->gl_config.driver_loaded = 1;
|
||||||
|
|
||||||
if (path) {
|
if (path) {
|
||||||
|
@ -169,7 +165,7 @@ MX6_GLES_LoadLibrary(_THIS, const char *egl_path) {
|
||||||
} else {
|
} else {
|
||||||
*_this->gl_config.driver_path = '\0';
|
*_this->gl_config.driver_path = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +186,7 @@ MX6_GLES_UnloadLibrary(_THIS)
|
||||||
SDL_UnloadObject(_this->egl_data->egl_dll_handle);
|
SDL_UnloadObject(_this->egl_data->egl_dll_handle);
|
||||||
_this->egl_data->egl_dll_handle = NULL;
|
_this->egl_data->egl_dll_handle = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_free(_this->egl_data);
|
SDL_free(_this->egl_data);
|
||||||
_this->egl_data = NULL;
|
_this->egl_data = NULL;
|
||||||
|
|
||||||
|
|
|
@ -163,7 +163,7 @@ MX6_VideoInit(_THIS)
|
||||||
SDL_VideoDisplay display;
|
SDL_VideoDisplay display;
|
||||||
SDL_DisplayMode current_mode;
|
SDL_DisplayMode current_mode;
|
||||||
SDL_DisplayData *data;
|
SDL_DisplayData *data;
|
||||||
|
|
||||||
data = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData));
|
data = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData));
|
||||||
if (data == NULL) {
|
if (data == NULL) {
|
||||||
return SDL_OutOfMemory();
|
return SDL_OutOfMemory();
|
||||||
|
@ -181,9 +181,9 @@ MX6_VideoInit(_THIS)
|
||||||
}
|
}
|
||||||
MX6_UpdateDisplay(_this);
|
MX6_UpdateDisplay(_this);
|
||||||
|
|
||||||
#ifdef SDL_INPUT_LINUXEV
|
#ifdef SDL_INPUT_LINUXEV
|
||||||
SDL_EVDEV_Init();
|
SDL_EVDEV_Init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -191,9 +191,9 @@ MX6_VideoInit(_THIS)
|
||||||
void
|
void
|
||||||
MX6_VideoQuit(_THIS)
|
MX6_VideoQuit(_THIS)
|
||||||
{
|
{
|
||||||
#ifdef SDL_INPUT_LINUXEV
|
#ifdef SDL_INPUT_LINUXEV
|
||||||
SDL_EVDEV_Quit();
|
SDL_EVDEV_Quit();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -214,9 +214,9 @@ MX6_CreateWindow(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
SDL_DisplayData *displaydata;
|
SDL_DisplayData *displaydata;
|
||||||
SDL_WindowData *wdata;
|
SDL_WindowData *wdata;
|
||||||
|
|
||||||
displaydata = SDL_GetDisplayDriverData(0);
|
displaydata = SDL_GetDisplayDriverData(0);
|
||||||
|
|
||||||
/* Allocate window internal data */
|
/* Allocate window internal data */
|
||||||
wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData));
|
wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData));
|
||||||
if (wdata == NULL) {
|
if (wdata == NULL) {
|
||||||
|
@ -226,12 +226,12 @@ MX6_CreateWindow(_THIS, SDL_Window * window)
|
||||||
/* Setup driver data for this window */
|
/* Setup driver data for this window */
|
||||||
window->driverdata = wdata;
|
window->driverdata = wdata;
|
||||||
window->flags |= SDL_WINDOW_OPENGL;
|
window->flags |= SDL_WINDOW_OPENGL;
|
||||||
|
|
||||||
if (!_this->egl_data) {
|
if (!_this->egl_data) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
wdata->native_window = egl_viv_data->fbCreateWindow(displaydata->native_display, window->x, window->y, window->w, window->h);
|
wdata->native_window = egl_viv_data->fbCreateWindow(displaydata->native_display, window->x, window->y, window->w, window->h);
|
||||||
if (!wdata->native_window) {
|
if (!wdata->native_window) {
|
||||||
return SDL_SetError("MX6: Can't create native window");
|
return SDL_SetError("MX6: Can't create native window");
|
||||||
}
|
}
|
||||||
|
@ -249,7 +249,7 @@ void
|
||||||
MX6_DestroyWindow(_THIS, SDL_Window * window)
|
MX6_DestroyWindow(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
SDL_WindowData *wdata;
|
SDL_WindowData *wdata;
|
||||||
|
|
||||||
wdata = window->driverdata;
|
wdata = window->driverdata;
|
||||||
if (wdata) {
|
if (wdata) {
|
||||||
SDL_EGL_DestroySurface(_this, wdata->egl_surface);
|
SDL_EGL_DestroySurface(_this, wdata->egl_surface);
|
||||||
|
|
|
@ -34,7 +34,6 @@ typedef struct SDL_VideoData
|
||||||
typedef struct SDL_DisplayData
|
typedef struct SDL_DisplayData
|
||||||
{
|
{
|
||||||
EGLNativeDisplayType native_display;
|
EGLNativeDisplayType native_display;
|
||||||
EGLDisplay egl_display;
|
|
||||||
} SDL_DisplayData;
|
} SDL_DisplayData;
|
||||||
|
|
||||||
typedef struct SDL_WindowData
|
typedef struct SDL_WindowData
|
||||||
|
|
Loading…
Reference in New Issue