Some fies to resizing renderer, it still fails for horizontal screen

This commit is contained in:
pelya
2010-06-07 18:36:39 +03:00
parent 9f97bccd10
commit 4fb87d803a
2 changed files with 63 additions and 19 deletions

View File

@@ -32,6 +32,10 @@
#include "SDL_renderer_gles.h"
#include "SDL_renderer_sw.h"
#ifdef ANDROID
#include <android/log.h>
#endif
static int RESIZE_RenderDrawPoints(SDL_Renderer * renderer,
const SDL_Point * points, int count);
static int RESIZE_RenderDrawLines(SDL_Renderer * renderer,
@@ -88,11 +92,28 @@ RESIZE_CreateRenderer(SDL_Window * window)
realH /= 2;
fakeH /= 2;
}
while( (realW / 5) * 5 == realW && (fakeW / 5) * 5 == fakeW ) {
realW /= 5;
fakeW /= 5;
}
while( (realH / 5) * 5 == realH && (fakeH / 5) * 5 == fakeH ) {
realH /= 5;
fakeH /= 5;
}
if( realW > 255 || realH > 255 || fakeW > 255 || fakeH > 255 ||
realW == 0 || realH == 0 || fakeW == 0 || fakeH == 0 )
return -1;
#ifdef ANDROID
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Using resize renderer: from %dx%d to %dx%d",
window->w, window->h, window->display->current_mode.w, window->display->current_mode.h);
__android_log_print(ANDROID_LOG_INFO, "libSDL", "Resize renderer ratio: from %dx%d to %dx%d",
fakeW, fakeH, realW, realH );
#endif
#if SDL_VIDEO_RENDER_OGL_ES
if( !strcmp(window->renderer->info.name, "opengl_es") )
driverDataSize = GLES_RenderDataSize;
@@ -104,6 +125,8 @@ RESIZE_CreateRenderer(SDL_Window * window)
if( !strcmp(window->renderer->info.name, "software") )
driverDataSize = SW_RenderDataSize;
/* TODO: add other renderers */
if( !driverDataSize )
return -1;
@@ -163,15 +186,18 @@ RESIZE_RenderDrawPoints(SDL_Renderer * renderer, const SDL_Point * points,
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
int ret;
if( !data->renderer.RenderDrawPoints )
return -1;
SDL_Point * resized = SDL_stack_alloc( SDL_Point, count );
if( ! resized ) {
SDL_OutOfMemory();
return -1;
}
data->renderer.r = renderer->r;
data->renderer.g = renderer->g;
data->renderer.b = renderer->b;
data->renderer.a = renderer->a;
data->renderer.blendMode = renderer->blendMode;
RESIZE_resizePoints( data->realW, data->fakeW, data->realH, data->fakeH, points, resized, count );
ret = data->renderer.RenderDrawPoints(&data->renderer, resized, count);
@@ -188,14 +214,17 @@ RESIZE_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points,
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
int ret;
if( !data->renderer.RenderDrawLines )
return -1;
SDL_Point * resized = SDL_stack_alloc( SDL_Point, count * 2 );
if( ! resized ) {
SDL_OutOfMemory();
return -1;
}
data->renderer.r = renderer->r;
data->renderer.g = renderer->g;
data->renderer.b = renderer->b;
data->renderer.a = renderer->a;
data->renderer.blendMode = renderer->blendMode;
RESIZE_resizePoints( data->realW, data->fakeW, data->realH, data->fakeH, points, resized, count * 2 );
@@ -226,9 +255,6 @@ RESIZE_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
int i, ret;
if( !data->renderer.RenderDrawRects )
return -1;
SDL_Rect * resized = SDL_stack_alloc( SDL_Rect, count );
if( ! resized ) {
SDL_OutOfMemory();
@@ -244,9 +270,15 @@ RESIZE_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
for( i = 0; i < count; i++ ) {
resizedPtrs[i] = &(resized[i]);
}
RESIZE_resizeRects( data->realW, data->fakeW, data->realH, data->fakeH, rects, resized, count );
data->renderer.r = renderer->r;
data->renderer.g = renderer->g;
data->renderer.b = renderer->b;
data->renderer.a = renderer->a;
data->renderer.blendMode = renderer->blendMode;
ret = data->renderer.RenderDrawRects(&data->renderer, resizedPtrs, count);
SDL_stack_free(resizedPtrs);
@@ -262,9 +294,6 @@ RESIZE_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
int i, ret;
if( !data->renderer.RenderFillRects )
return -1;
SDL_Rect * resized = SDL_stack_alloc( SDL_Rect, count );
if( ! resized ) {
SDL_OutOfMemory();
@@ -283,6 +312,12 @@ RESIZE_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
RESIZE_resizeRects( data->realW, data->fakeW, data->realH, data->fakeH, rects, resized, count * 4 );
data->renderer.r = renderer->r;
data->renderer.g = renderer->g;
data->renderer.b = renderer->b;
data->renderer.a = renderer->a;
data->renderer.blendMode = renderer->blendMode;
ret = data->renderer.RenderFillRects(&data->renderer, resizedPtrs, count);
SDL_stack_free(resizedPtrs);
@@ -296,13 +331,22 @@ RESIZE_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
const SDL_Rect * srcrect, const SDL_Rect * dstrect)
{
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
SDL_Rect dest;
uint8_t realW = data->realW, fakeW = data->fakeW, realH = data->realH, fakeH = data->fakeH;
SDL_Rect dest;
dest.x = dstrect->x * realW / fakeW;
dest.w = dstrect->w * realW / fakeW;
dest.y = dstrect->y * realH / fakeH;
dest.h = dstrect->h * realH / fakeH;
dest.x = (dstrect->x * realW) / fakeW;
dest.w = (dstrect->w * realW) / fakeW;
dest.y = (dstrect->y * realH) / fakeH;
dest.h = (dstrect->h * realH) / fakeH;
/*
__android_log_print(ANDROID_LOG_INFO, "libSDL", "RESIZE_RenderCopy: from x%dy%dw%dh%d to x%dy%dw%dh%d rW%d/fW%d rH%d/fH%d",
dstrect->x, dstrect->y, dstrect->w, dstrect->h,
dest.x, dest.y, dest.w, dest.h,
realW, fakeW, realH, fakeH);
*/
/* HACK */
/* dest.y += 160; */
return data->renderer.RenderCopy(&data->renderer, texture, srcrect, &dest);
}

View File

@@ -190,7 +190,7 @@ void ANDROID_InitOSKeymap()
int i;
SDLKey defaultKeymap[SDL_NUM_SCANCODES];
SDL_GetDefaultKeymap(&defaultKeymap);
SDL_GetDefaultKeymap(defaultKeymap);
SDL_SetKeymap(0, defaultKeymap, SDL_NUM_SCANCODES);
// TODO: keys are mapped rather randomly