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