Mercurial > sdl-ios-xcode
changeset 4960:0ab2492f2e17
Fixed 2D video on Android
There was a dummy renderer left in there which was overriding the OpenGL ES renderer.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 04 Jan 2011 20:36:39 -0800 |
parents | 16fec41375a6 |
children | c92950635837 |
files | Makefile.android include/SDL_config_android.h src/video/android/SDL_androidrender.c src/video/android/SDL_androidrender.h src/video/android/SDL_androidvideo.c |
diffstat | 5 files changed, 15 insertions(+), 389 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile.android Tue Jan 04 20:30:54 2011 -0800 +++ b/Makefile.android Tue Jan 04 20:36:39 2011 -0800 @@ -28,6 +28,7 @@ src/video/*.c \ src/power/*.c \ src/audio/android/*.c \ + src/audio/dummy/*.c \ src/video/android/*.c \ src/joystick/android/*.c \ src/haptic/dummy/*.c \
--- a/include/SDL_config_android.h Tue Jan 04 20:30:54 2011 -0800 +++ b/include/SDL_config_android.h Tue Jan 04 20:36:39 2011 -0800 @@ -55,8 +55,6 @@ #define HAVE_SIGNAL_H 1 /* C library functions */ -#define HAVE_ATAN 1 -#define HAVE_ATAN2 1 #define HAVE_MALLOC 1 #define HAVE_CALLOC 1 #define HAVE_REALLOC 1 @@ -95,6 +93,9 @@ #define HAVE_SSCANF 1 #define HAVE_SNPRINTF 1 #define HAVE_VSNPRINTF 1 +#define HAVE_M_PI 1 +#define HAVE_ATAN 1 +#define HAVE_ATAN2 1 #define HAVE_CEIL 1 #define HAVE_COPYSIGN 1 #define HAVE_COS 1 @@ -117,15 +118,16 @@ typedef unsigned int size_t; //typedef unsigned long uintptr_t; +/* Enable various audio drivers */ #define SDL_AUDIO_DRIVER_ANDROID 1 - -#define SDL_CDROM_DISABLED 1 +#define SDL_AUDIO_DRIVER_DUMMY 1 -#define SDL_HAPTIC_DISABLED 1 +/* Enable various input drivers */ +#define SDL_JOYSTICK_ANDROID 1 +#define SDL_HAPTIC_DUMMY 1 -#define SDL_JOYSTICK_ANDROID 1 - -#define SDL_LOADSO_DISABLED 1 +/* Enable various shared object loading systems */ +#define SDL_LOADSO_DUMMY 1 /* Enable various threading systems */ #define SDL_THREAD_PTHREAD 1 @@ -134,14 +136,11 @@ /* Enable various timer systems */ #define SDL_TIMER_UNIX 1 +/* Enable various video drivers */ #define SDL_VIDEO_DRIVER_ANDROID 1 -#define HAVE_STDIO_H 1 -#define HAVE_SYS_TYPES_H 1 - -#define HAVE_M_PI 1 - -#define SDL_VIDEO_RENDER_OGL_ES 1 +/* Enable OpenGL ES */ +#define SDL_VIDEO_OPENGL_ES 1 +#define SDL_VIDEO_RENDER_OGL_ES 1 #endif /* _SDL_config_minimal_h */ -
--- a/src/video/android/SDL_androidrender.c Tue Jan 04 20:30:54 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,344 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2010 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -#include "SDL_video.h" -#include "../SDL_sysvideo.h" -#include "../SDL_yuv_sw_c.h" -#include "../SDL_renderer_sw.h" - - -/* SDL surface based renderer implementation */ - -static SDL_Renderer *Android_CreateRenderer(SDL_Window * window, - Uint32 flags); -static int Android_RenderDrawPoints(SDL_Renderer * renderer, - const SDL_Point * points, int count); -static int Android_RenderDrawLines(SDL_Renderer * renderer, - const SDL_Point * points, int count); -static int Android_RenderDrawRects(SDL_Renderer * renderer, - const SDL_Rect ** rects, int count); -static int Android_RenderFillRects(SDL_Renderer * renderer, - const SDL_Rect ** rects, int count); -static int Android_RenderCopy(SDL_Renderer * renderer, - SDL_Texture * texture, - const SDL_Rect * srcrect, - const SDL_Rect * dstrect); -static int Android_RenderReadPixels(SDL_Renderer * renderer, - const SDL_Rect * rect, - Uint32 format, - void * pixels, int pitch); -static int Android_RenderWritePixels(SDL_Renderer * renderer, - const SDL_Rect * rect, - Uint32 format, - const void * pixels, int pitch); -static void Android_RenderPresent(SDL_Renderer * renderer); -static void Android_DestroyRenderer(SDL_Renderer * renderer); - - -SDL_RenderDriver Android_RenderDriver = { - Android_CreateRenderer, - { - "dummy", - (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY | - SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTFLIP3 | - SDL_RENDERER_PRESENTDISCARD), - } -}; - -typedef struct -{ - int current_screen; - SDL_Surface *screens[3]; -} Android_RenderData; - -SDL_Renderer * -Android_CreateRenderer(SDL_Window * window, Uint32 flags) -{ - SDL_VideoDisplay *display = window->display; - SDL_DisplayMode *displayMode = &display->current_mode; - SDL_Renderer *renderer; - Android_RenderData *data; - int i, n; - int bpp; - Uint32 Rmask, Gmask, Bmask, Amask; - - if (!SDL_PixelFormatEnumToMasks - (displayMode->format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) { - SDL_SetError("Unknown display format"); - return NULL; - } - - renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer)); - if (!renderer) { - SDL_OutOfMemory(); - return NULL; - } - - data = (Android_RenderData *) SDL_malloc(sizeof(*data)); - if (!data) { - Android_DestroyRenderer(renderer); - SDL_OutOfMemory(); - return NULL; - } - SDL_zerop(data); - - renderer->RenderDrawPoints = Android_RenderDrawPoints; - renderer->RenderDrawLines = Android_RenderDrawLines; - renderer->RenderDrawRects = Android_RenderDrawRects; - renderer->RenderFillRects = Android_RenderFillRects; - renderer->RenderCopy = Android_RenderCopy; - renderer->RenderReadPixels = Android_RenderReadPixels; - renderer->RenderWritePixels = Android_RenderWritePixels; - renderer->RenderPresent = Android_RenderPresent; - renderer->DestroyRenderer = Android_DestroyRenderer; - renderer->info.name = Android_RenderDriver.info.name; - renderer->info.flags = 0; - renderer->window = window; - renderer->driverdata = data; - Setup_SoftwareRenderer(renderer); - - if (flags & SDL_RENDERER_PRESENTFLIP2) { - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2; - n = 2; - } else if (flags & SDL_RENDERER_PRESENTFLIP3) { - renderer->info.flags |= SDL_RENDERER_PRESENTFLIP3; - n = 3; - } else { - renderer->info.flags |= SDL_RENDERER_PRESENTCOPY; - n = 1; - } - for (i = 0; i < n; ++i) { - data->screens[i] = - SDL_CreateRGBSurface(0, window->w, window->h, bpp, Rmask, Gmask, - Bmask, Amask); - if (!data->screens[i]) { - Android_DestroyRenderer(renderer); - return NULL; - } - SDL_SetSurfacePalette(data->screens[i], display->palette); - } - data->current_screen = 0; - - return renderer; -} - -static int -Android_RenderDrawPoints(SDL_Renderer * renderer, - const SDL_Point * points, int count) -{ - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; - - if (renderer->blendMode == SDL_BLENDMODE_NONE || - renderer->blendMode == SDL_BLENDMODE_MASK) { - Uint32 color = SDL_MapRGBA(target->format, - renderer->r, renderer->g, renderer->b, - renderer->a); - - return SDL_DrawPoints(target, points, count, color); - } else { - return SDL_BlendPoints(target, points, count, renderer->blendMode, - renderer->r, renderer->g, renderer->b, - renderer->a); - } -} - -static int -Android_RenderDrawLines(SDL_Renderer * renderer, - const SDL_Point * points, int count) -{ - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; - - if (renderer->blendMode == SDL_BLENDMODE_NONE || - renderer->blendMode == SDL_BLENDMODE_MASK) { - Uint32 color = SDL_MapRGBA(target->format, - renderer->r, renderer->g, renderer->b, - renderer->a); - - return SDL_DrawLines(target, points, count, color); - } else { - return SDL_BlendLines(target, points, count, renderer->blendMode, - renderer->r, renderer->g, renderer->b, - renderer->a); - } -} - -static int -Android_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects, - int count) -{ - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; - - if (renderer->blendMode == SDL_BLENDMODE_NONE || - renderer->blendMode == SDL_BLENDMODE_MASK) { - Uint32 color = SDL_MapRGBA(target->format, - renderer->r, renderer->g, renderer->b, - renderer->a); - - return SDL_DrawRects(target, rects, count, color); - } else { - return SDL_BlendRects(target, rects, count, - renderer->blendMode, - renderer->r, renderer->g, renderer->b, - renderer->a); - } -} - -static int -Android_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, - int count) -{ - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; - - if (renderer->blendMode == SDL_BLENDMODE_NONE || - renderer->blendMode == SDL_BLENDMODE_MASK) { - Uint32 color = SDL_MapRGBA(target->format, - renderer->r, renderer->g, renderer->b, - renderer->a); - - return SDL_FillRects(target, rects, count, color); - } else { - return SDL_BlendFillRects(target, rects, count, - renderer->blendMode, - renderer->r, renderer->g, renderer->b, - renderer->a); - } -} - -static int -Android_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, - const SDL_Rect * srcrect, const SDL_Rect * dstrect) -{ - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - SDL_Window *window = renderer->window; - SDL_VideoDisplay *display = window->display; - - if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) { - SDL_Surface *target = data->screens[data->current_screen]; - void *pixels = - (Uint8 *) target->pixels + dstrect->y * target->pitch + - dstrect->x * target->format->BytesPerPixel; - return SDL_SW_CopyYUVToRGB((SDL_SW_YUVTexture *) texture->driverdata, - srcrect, display->current_mode.format, - dstrect->w, dstrect->h, pixels, - target->pitch); - } else { - SDL_Surface *surface = (SDL_Surface *) texture->driverdata; - SDL_Surface *target = data->screens[data->current_screen]; - SDL_Rect real_srcrect = *srcrect; - SDL_Rect real_dstrect = *dstrect; - - return SDL_LowerBlit(surface, &real_srcrect, target, &real_dstrect); - } -} - -static int -Android_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, - Uint32 format, void * pixels, int pitch) -{ - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - SDL_Window *window = renderer->window; - SDL_VideoDisplay *display = window->display; - SDL_Surface *screen = data->screens[data->current_screen]; - Uint32 screen_format = display->current_mode.format; - Uint8 *screen_pixels = (Uint8 *) screen->pixels + - rect->y * screen->pitch + - rect->x * screen->format->BytesPerPixel; - int screen_pitch = screen->pitch; - - return SDL_ConvertPixels(rect->w, rect->h, - screen_format, screen_pixels, screen_pitch, - format, pixels, pitch); -} - -static int -Android_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect, - Uint32 format, const void * pixels, int pitch) -{ - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - SDL_Window *window = renderer->window; - SDL_VideoDisplay *display = window->display; - SDL_Surface *screen = data->screens[data->current_screen]; - Uint32 screen_format = display->current_mode.format; - Uint8 *screen_pixels = (Uint8 *) screen->pixels + - rect->y * screen->pitch + - rect->x * screen->format->BytesPerPixel; - int screen_pitch = screen->pitch; - - return SDL_ConvertPixels(rect->w, rect->h, - format, pixels, pitch, - screen_format, screen_pixels, screen_pitch); -} - -static void -Android_RenderPresent(SDL_Renderer * renderer) -{ - static int frame_number; - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - - /* Send the data to the display */ - if (SDL_getenv("SDL_VIDEO_DUMMY_SAVE_FRAMES")) { - char file[128]; - SDL_snprintf(file, sizeof(file), "SDL_window%d-%8.8d.bmp", - renderer->window->id, ++frame_number); - SDL_SaveBMP(data->screens[data->current_screen], file); - } - - /* Update the flipping chain, if any */ - if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP2) { - data->current_screen = (data->current_screen + 1) % 2; - } else if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP3) { - data->current_screen = (data->current_screen + 1) % 3; - } -} - -static void -Android_DestroyRenderer(SDL_Renderer * renderer) -{ - Android_RenderData *data = - (Android_RenderData *) renderer->driverdata; - int i; - - if (data) { - for (i = 0; i < SDL_arraysize(data->screens); ++i) { - if (data->screens[i]) { - SDL_FreeSurface(data->screens[i]); - } - } - SDL_free(data); - } - SDL_free(renderer); -} - -/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/android/SDL_androidrender.h Tue Jan 04 20:30:54 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2010 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -/* SDL surface based renderer implementation */ - -extern SDL_RenderDriver Android_RenderDriver; - -/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/android/SDL_androidvideo.c Tue Jan 04 20:30:54 2011 -0800 +++ b/src/video/android/SDL_androidvideo.c Tue Jan 04 20:36:39 2011 -0800 @@ -32,7 +32,6 @@ #include "SDL_androidvideo.h" #include "SDL_androidevents.h" -#include "SDL_androidrender.h" #define ANDROID_VID_DRIVER_NAME "Android" @@ -133,7 +132,6 @@ if (SDL_AddBasicVideoDisplay(&mode) < 0) { return -1; } - SDL_AddRenderDriver(&_this->displays[0], &Android_RenderDriver); SDL_zero(mode); SDL_AddDisplayMode(&_this->displays[0], &mode);