Mercurial > sdl-ios-xcode
changeset 3218:81773a1eac83
Patch from David Carre:
I fixed a bug in the "SDL_DestroyRenderer()" function in the pandora x11 renderer (in fact the bug was in the "X11_GLES_MakeCurrent()" function) that was causing a crash when exiting SDL.
There was a problem while terminating the x11 egl window, that was preventing to quit/close SDL/SDL-window then reload SDL/SDL-window inside the same application.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 30 Jul 2009 14:53:57 +0000 |
parents | 26ce0b98f2fb |
children | b91354fa65a2 |
files | Makefile.pandora src/haptic/linux/SDL_syshaptic.c src/video/x11/SDL_x11opengles.c src/video/x11/SDL_x11video.c |
diffstat | 4 files changed, 36 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile.pandora Sun Jul 19 08:04:59 2009 +0000 +++ b/Makefile.pandora Thu Jul 30 14:53:57 2009 +0000 @@ -8,7 +8,7 @@ CFLAGS = -O3 -march=armv7-a -mcpu=cortex-a8 -mtune=cortex-a8 -mfloat-abi=softfp \ -mfpu=neon -ftree-vectorize -ffast-math -fomit-frame-pointer -fno-strict-aliasing -fsingle-precision-constant \ - -I./include -I$(PNDSDK)/usr/include + -I./include -I$(PNDSDK)/usr/include -DSDL_REVISION=0 TARGET = libSDL.a @@ -24,14 +24,13 @@ OBJECTS = $(shell echo $(SOURCES) | sed -e 's,\.c,\.o,g') +CONFIG_H = $(shell cp include/SDL_config_pandora.h include/SDL_config.h && touch include/SDL_revision.h) + all: $(TARGET) $(TARGET): $(CONFIG_H) $(OBJECTS) $(AR) crv $@ $^ $(RANLIB) $@ -$(CONFIG_H): - cp include/SDL_config_pandora.h include/SDL_config.h - clean: rm -f $(TARGET) $(OBJECTS)
--- a/src/haptic/linux/SDL_syshaptic.c Sun Jul 19 08:04:59 2009 +0000 +++ b/src/haptic/linux/SDL_syshaptic.c Thu Jul 30 14:53:57 2009 +0000 @@ -35,6 +35,7 @@ #include <limits.h> /* INT_MAX */ #include <errno.h> /* errno, strerror */ #include <math.h> /* atan2 */ +#include <sys/stat.h> /* stat */ /* Just in case. */ #ifndef M_PI
--- a/src/video/x11/SDL_x11opengles.c Sun Jul 19 08:04:59 2009 +0000 +++ b/src/video/x11/SDL_x11opengles.c Thu Jul 30 14:53:57 2009 +0000 @@ -298,8 +298,8 @@ { int retval; - SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - Display *display = data->videodata->display; +// SDL_WindowData *data = (SDL_WindowData *) window->driverdata; +// Display *display = data->videodata->display; retval = 1; if (!_this->gles_data->eglMakeCurrent(_this->gles_data->egl_display, @@ -309,7 +309,7 @@ SDL_SetError("Unable to make EGL context current"); retval = -1; } - XSync(display, False); +// XSync(display, False); return (retval); } @@ -359,6 +359,10 @@ } } _this->gles_data->egl_active = 0; + +/* crappy fix */ + X11_GLES_UnloadLibrary(_this); + } #endif /* SDL_VIDEO_OPENGL_ES */
--- a/src/video/x11/SDL_x11video.c Sun Jul 19 08:04:59 2009 +0000 +++ b/src/video/x11/SDL_x11video.c Thu Jul 30 14:53:57 2009 +0000 @@ -28,6 +28,9 @@ #include "SDL_x11video.h" +#if SDL_VIDEO_DRIVER_PANDORA +#include "SDL_x11opengles.h" +#endif /* Initialization/Query functions */ static int X11_VideoInit(_THIS); @@ -101,6 +104,9 @@ } SDL_free(data->windowlist); SDL_free(device->driverdata); +#if SDL_VIDEO_DRIVER_PANDORA + SDL_free(device->gles_data); +#endif SDL_free(device); SDL_X11_UnloadSymbols(); @@ -131,6 +137,14 @@ } device->driverdata = data; +#if SDL_VIDEO_DRIVER_PANDORA + device->gles_data = (struct SDL_PrivateGLESData *) SDL_calloc(1, sizeof(SDL_PrivateGLESData)); + if (!device->gles_data) { + SDL_OutOfMemory(); + return NULL; + } +#endif + /* FIXME: Do we need this? if ( (SDL_strncmp(XDisplayName(display), ":", 1) == 0) || (SDL_strncmp(XDisplayName(display), "unix:", 5) == 0) ) { @@ -198,6 +212,17 @@ device->GL_SwapWindow = X11_GL_SwapWindow; device->GL_DeleteContext = X11_GL_DeleteContext; #endif +#if SDL_VIDEO_DRIVER_PANDORA + device->GL_LoadLibrary = X11_GLES_LoadLibrary; + device->GL_GetProcAddress = X11_GLES_GetProcAddress; + device->GL_UnloadLibrary = X11_GLES_UnloadLibrary; + device->GL_CreateContext = X11_GLES_CreateContext; + device->GL_MakeCurrent = X11_GLES_MakeCurrent; + device->GL_SetSwapInterval = X11_GLES_SetSwapInterval; + device->GL_GetSwapInterval = X11_GLES_GetSwapInterval; + device->GL_SwapWindow = X11_GLES_SwapWindow; + device->GL_DeleteContext = X11_GLES_DeleteContext; +#endif device->free = X11_DeleteDevice;