Some fies to resizing renderer, it still fails for horizontal screen
This commit is contained in:
@@ -32,6 +32,10 @@
|
|||||||
#include "SDL_renderer_gles.h"
|
#include "SDL_renderer_gles.h"
|
||||||
#include "SDL_renderer_sw.h"
|
#include "SDL_renderer_sw.h"
|
||||||
|
|
||||||
|
#ifdef ANDROID
|
||||||
|
#include <android/log.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static int RESIZE_RenderDrawPoints(SDL_Renderer * renderer,
|
static int RESIZE_RenderDrawPoints(SDL_Renderer * renderer,
|
||||||
const SDL_Point * points, int count);
|
const SDL_Point * points, int count);
|
||||||
static int RESIZE_RenderDrawLines(SDL_Renderer * renderer,
|
static int RESIZE_RenderDrawLines(SDL_Renderer * renderer,
|
||||||
@@ -88,11 +92,28 @@ RESIZE_CreateRenderer(SDL_Window * window)
|
|||||||
realH /= 2;
|
realH /= 2;
|
||||||
fakeH /= 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 ||
|
if( realW > 255 || realH > 255 || fakeW > 255 || fakeH > 255 ||
|
||||||
realW == 0 || realH == 0 || fakeW == 0 || fakeH == 0 )
|
realW == 0 || realH == 0 || fakeW == 0 || fakeH == 0 )
|
||||||
return -1;
|
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 SDL_VIDEO_RENDER_OGL_ES
|
||||||
if( !strcmp(window->renderer->info.name, "opengl_es") )
|
if( !strcmp(window->renderer->info.name, "opengl_es") )
|
||||||
driverDataSize = GLES_RenderDataSize;
|
driverDataSize = GLES_RenderDataSize;
|
||||||
@@ -104,6 +125,8 @@ RESIZE_CreateRenderer(SDL_Window * window)
|
|||||||
if( !strcmp(window->renderer->info.name, "software") )
|
if( !strcmp(window->renderer->info.name, "software") )
|
||||||
driverDataSize = SW_RenderDataSize;
|
driverDataSize = SW_RenderDataSize;
|
||||||
|
|
||||||
|
/* TODO: add other renderers */
|
||||||
|
|
||||||
if( !driverDataSize )
|
if( !driverDataSize )
|
||||||
return -1;
|
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));
|
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if( !data->renderer.RenderDrawPoints )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
SDL_Point * resized = SDL_stack_alloc( SDL_Point, count );
|
SDL_Point * resized = SDL_stack_alloc( SDL_Point, count );
|
||||||
if( ! resized ) {
|
if( ! resized ) {
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
return -1;
|
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 );
|
RESIZE_resizePoints( data->realW, data->fakeW, data->realH, data->fakeH, points, resized, count );
|
||||||
|
|
||||||
ret = data->renderer.RenderDrawPoints(&data->renderer, 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));
|
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if( !data->renderer.RenderDrawLines )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
SDL_Point * resized = SDL_stack_alloc( SDL_Point, count * 2 );
|
SDL_Point * resized = SDL_stack_alloc( SDL_Point, count * 2 );
|
||||||
if( ! resized ) {
|
if( ! resized ) {
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
return -1;
|
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 );
|
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));
|
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
|
||||||
if( !data->renderer.RenderDrawRects )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
SDL_Rect * resized = SDL_stack_alloc( SDL_Rect, count );
|
SDL_Rect * resized = SDL_stack_alloc( SDL_Rect, count );
|
||||||
if( ! resized ) {
|
if( ! resized ) {
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
@@ -244,9 +270,15 @@ RESIZE_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
|
|||||||
for( i = 0; i < count; i++ ) {
|
for( i = 0; i < count; i++ ) {
|
||||||
resizedPtrs[i] = &(resized[i]);
|
resizedPtrs[i] = &(resized[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
RESIZE_resizeRects( data->realW, data->fakeW, data->realH, data->fakeH, rects, resized, count );
|
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);
|
ret = data->renderer.RenderDrawRects(&data->renderer, resizedPtrs, count);
|
||||||
|
|
||||||
SDL_stack_free(resizedPtrs);
|
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));
|
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
|
||||||
if( !data->renderer.RenderFillRects )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
SDL_Rect * resized = SDL_stack_alloc( SDL_Rect, count );
|
SDL_Rect * resized = SDL_stack_alloc( SDL_Rect, count );
|
||||||
if( ! resized ) {
|
if( ! resized ) {
|
||||||
SDL_OutOfMemory();
|
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 );
|
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);
|
ret = data->renderer.RenderFillRects(&data->renderer, resizedPtrs, count);
|
||||||
|
|
||||||
SDL_stack_free(resizedPtrs);
|
SDL_stack_free(resizedPtrs);
|
||||||
@@ -296,13 +331,22 @@ RESIZE_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
|
|||||||
const SDL_Rect * srcrect, const SDL_Rect * dstrect)
|
const SDL_Rect * srcrect, const SDL_Rect * dstrect)
|
||||||
{
|
{
|
||||||
RESIZE_RenderData *data = (RESIZE_RenderData *) (renderer->driverdata - sizeof(RESIZE_RenderData));
|
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;
|
uint8_t realW = data->realW, fakeW = data->fakeW, realH = data->realH, fakeH = data->fakeH;
|
||||||
|
SDL_Rect dest;
|
||||||
|
|
||||||
dest.x = dstrect->x * realW / fakeW;
|
dest.x = (dstrect->x * realW) / fakeW;
|
||||||
dest.w = dstrect->w * realW / fakeW;
|
dest.w = (dstrect->w * realW) / fakeW;
|
||||||
dest.y = dstrect->y * realH / fakeH;
|
dest.y = (dstrect->y * realH) / fakeH;
|
||||||
dest.h = dstrect->h * 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);
|
return data->renderer.RenderCopy(&data->renderer, texture, srcrect, &dest);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ void ANDROID_InitOSKeymap()
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
SDLKey defaultKeymap[SDL_NUM_SCANCODES];
|
SDLKey defaultKeymap[SDL_NUM_SCANCODES];
|
||||||
SDL_GetDefaultKeymap(&defaultKeymap);
|
SDL_GetDefaultKeymap(defaultKeymap);
|
||||||
SDL_SetKeymap(0, defaultKeymap, SDL_NUM_SCANCODES);
|
SDL_SetKeymap(0, defaultKeymap, SDL_NUM_SCANCODES);
|
||||||
|
|
||||||
// TODO: keys are mapped rather randomly
|
// TODO: keys are mapped rather randomly
|
||||||
|
|||||||
Reference in New Issue
Block a user