Brought back software cursor, since several Mali based platforms show no cursor at all in GUI otherwise

This commit is contained in:
Dimitris Panokostas 2019-09-15 16:30:46 +02:00
parent 6e95d62ae9
commit a635fe62a0
2 changed files with 57 additions and 9 deletions

View file

@ -89,7 +89,7 @@ else ifeq ($(PLATFORM),$(filter $(PLATFORM),rpi1-sdl2 rpi2-sdl2 rpi3-sdl2 rpi4-s
else ifeq ($(PLATFORM),orangepi-pc)
USE_SDL2 = 1
CPUFLAGS = -mcpu=cortex-a7 -mfpu=neon-vfpv4
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DNO_CUSTOM_CURSOR -DUSE_RENDER_THREAD
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DSOFTWARE_CURSOR -DUSE_RENDER_THREAD
HAVE_NEON = 1
ifdef DEBUG
# Otherwise we'll get compilation errors, check https://tls.mbed.org/kb/development/arm-thumb-error-r7-cannot-be-used-in-asm-here
@ -101,7 +101,7 @@ USE_SDL2 = 1
else ifeq ($(PLATFORM),xu4)
USE_SDL2 = 1
CPUFLAGS += -mcpu=cortex-a15.cortex-a7 -mfpu=neon-vfpv4
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DNO_CUSTOM_CURSOR -DUSE_RENDER_THREAD -DFASTERCYCLES
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DSOFTWARE_CURSOR -DUSE_RENDER_THREAD -DFASTERCYCLES
HAVE_NEON = 1
ifdef DEBUG
# Otherwise we'll get compilation errors, check https://tls.mbed.org/kb/development/arm-thumb-error-r7-cannot-be-used-in-asm-here
@ -113,7 +113,7 @@ else ifeq ($(PLATFORM),xu4)
else ifeq ($(PLATFORM),c1)
USE_SDL2 = 1
CPUFLAGS += -mcpu=cortex-a5 -mfpu=neon-vfpv4
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DNO_CUSTOM_CURSOR -DUSE_RENDER_THREAD -DFASTERCYCLES
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DSOFTWARE_CURSOR -DUSE_RENDER_THREAD -DFASTERCYCLES
HAVE_NEON = 1
ifdef DEBUG
# Otherwise we'll get compilation errors, check https://tls.mbed.org/kb/development/arm-thumb-error-r7-cannot-be-used-in-asm-here
@ -125,7 +125,7 @@ else ifeq ($(PLATFORM),c1)
else ifeq ($(PLATFORM),n2)
USE_SDL2 = 1
CPUFLAGS += -mcpu=cortex-a72.cortex-a53
CPPFLAGS += -DCPU_AARCH64 -D_FILE_OFFSET_BITS=64 -DUSE_SDL2 -DNO_CUSTOM_CURSOR -DFASTERCYCLES
CPPFLAGS += -DCPU_AARCH64 -D_FILE_OFFSET_BITS=64 -DUSE_SDL2 -DSOFTWARE_CURSOR -DFASTERCYCLES
AARCH64 = 1
# Raspberry Pi 3/4 (SDL2 64-bit)
@ -140,7 +140,7 @@ else ifeq ($(PLATFORM),vero4k)
USE_SDL2 = 1
CPUFLAGS = -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
CFLAGS += -ftree-vectorize -funsafe-math-optimizations
CPPFLAGS += -I/opt/vero3/include -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DNO_CUSTOM_CURSOR -DUSE_RENDER_THREAD -DFASTERCYCLES
CPPFLAGS += -I/opt/vero3/include -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DSOFTWARE_CURSOR -DUSE_RENDER_THREAD -DFASTERCYCLES
LDFLAGS += -L/opt/vero3/lib
HAVE_NEON = 1
@ -148,7 +148,7 @@ USE_SDL2 = 1
else ifneq (,$(findstring AMLG,$(PLATFORM)))
USE_SDL2 = 1
CPUFLAGS += -mfloat-abi=hard -mfpu=neon-fp-armv8
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DNO_CUSTOM_CURSOR -DFASTERCYCLES
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DSOFTWARE_CURSOR -DFASTERCYCLES
HAVE_NEON = 1
ifneq (,$(findstring AMLG12,$(PLATFORM)))
@ -167,7 +167,7 @@ USE_SDL2 = 1
# Rockchip RK3288 e.g. Asus Tinker Board / RK3328 e.g. PINE64 Rock64 / RK3399 e.g. PINE64 RockPro64 - 32-bit userspace
else ifneq (,$(findstring RK,$(PLATFORM)))
USE_SDL2 = 1
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DFASTERCYCLES -DUSE_RENDER_THREAD -DNO_CUSTOM_CURSOR
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DFASTERCYCLES -DUSE_RENDER_THREAD -DSOFTWARE_CURSOR
HAVE_NEON = 1
ifneq (,$(findstring RK33,$(PLATFORM)))
@ -185,7 +185,7 @@ USE_SDL2 = 1
else ifeq ($(PLATFORM),sun8i)
USE_SDL2 = 1
CPUFLAGS += -mcpu=cortex-a7 -mfpu=neon-vfpv4
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DNO_CUSTOM_CURSOR -DUSE_RENDER_THREAD
CPPFLAGS += -DARMV6_ASSEMBLY -D_FILE_OFFSET_BITS=64 -DARMV6T2 -DUSE_ARMNEON -DARM_HAS_DIV -DUSE_SDL2 -DSOFTWARE_CURSOR -DUSE_RENDER_THREAD
HAVE_NEON = 1
NAME = amiberry-sun8i
ifdef DEBUG

View file

@ -107,6 +107,11 @@ SDL_Event gui_event;
SDL_Texture* gui_texture;
SDL_Cursor* cursor;
SDL_Surface* cursor_surface;
#ifdef SOFTWARE_CURSOR
SDL_Texture* swcursor_texture = NULL;
static SDL_DisplayMode physmode;
static double mscalex, mscaley;
#endif // SOFTWARE_CURSOR
#endif
/*
@ -225,6 +230,35 @@ static void ShowHelpRequested()
}
}
#ifdef SOFTWARE_CURSOR
static SDL_Rect dst;
void swcursor(bool op) {
if (op == -1) {
SDL_DestroyTexture(swcursor_texture);
swcursor_texture = NULL;
}
else if (op == 0) {
cursor_surface = SDL_LoadBMP("data/cursor.bmp");
swcursor_texture = SDL_CreateTextureFromSurface(renderer, cursor_surface);
// Hide real cursor
SDL_SetCursor(SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW));
SDL_ShowCursor(0);
// Set cursor width,height to that of loaded bmp
dst.w = cursor_surface->w;
dst.h = cursor_surface->h;
SDL_FreeSurface(cursor_surface);
}
else {
SDL_GetMouseState(&dst.x, &dst.y);
dst.x *= mscalex * 1.03;
dst.y *= mscaley * 1.005;
SDL_RenderCopy(renderer, swcursor_texture, nullptr, &dst);
}
}
#endif
void UpdateGuiScreen()
{
#ifdef USE_SDL1
@ -233,6 +267,9 @@ void UpdateGuiScreen()
#elif USE_SDL2
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, gui_texture, nullptr, nullptr);
#ifdef SOFTWARE_CURSOR
swcursor(1);
#endif
SDL_RenderPresent(renderer);
#endif
}
@ -298,7 +335,11 @@ namespace sdl
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
SDL_ShowCursor(SDL_ENABLE);
#elif USE_SDL2
#ifdef NO_CUSTOM_CURSOR
#ifdef SOFTWARE_CURSOR
swcursor(0);
SDL_GetCurrentDisplayMode(0, &physmode);
mscalex = ((double)GUI_WIDTH / (double)physmode.w);
mscaley = ((double)GUI_HEIGHT / (double)physmode.h);
#else
setup_cursor();
#endif
@ -378,6 +419,13 @@ namespace sdl
cursor = nullptr;
}
#ifdef SOFTWARE_CURSOR
if (cursor_surface)
{
SDL_FreeSurface(cursor_surface);
cursor_surface = nullptr;
}
#endif
// Clear the screen
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);