diff --git a/Makefile.common b/Makefile.common index ed3f35036a..dbeb65b5d7 100644 --- a/Makefile.common +++ b/Makefile.common @@ -1299,6 +1299,12 @@ else ifeq ($(HAVE_SDL), 1) OBJ += gfx/drivers/sdl_gfx.o DEF_FLAGS += $(SDL_CFLAGS) LIBS += $(SDL_LIBS) +else ifeq ($(HAVE_SDL_DINGUX), 1) + HAVE_SDL_COMMON = 1 + DEFINES += -DHAVE_SDL -DHAVE_SDL_DINGUX + OBJ += gfx/drivers/sdl_dingux_gfx.o + DEF_FLAGS += $(SDL_DINGUX_CFLAGS) + LIBS += $(SDL_DINGUX_LIBS) endif ifeq ($(HAVE_SDL_COMMON), 1) diff --git a/Makefile.dingux b/Makefile.dingux new file mode 100644 index 0000000000..01d0d176f4 --- /dev/null +++ b/Makefile.dingux @@ -0,0 +1,189 @@ +CC = /opt/gcw0-toolchain/usr/bin/mipsel-gcw0-linux-uclibc-gcc +CXX = /opt/gcw0-toolchain/usr/bin/mipsel-gcw0-linux-uclibc-g++ +PACKAGE_NAME = retroarch + +HAVE_7ZIP = 1 +HAVE_AL = 1 +# this freezes when switching back from menu +HAVE_ALSA = 0 +HAVE_BUILTINMBEDTLS = 1 +HAVE_BUILTINZLIB = 1 +HAVE_C99 = 1 +HAVE_CC = 1 +HAVE_CC_RESAMPLER = 1 +HAVE_CHD = 1 +HAVE_CHEEVOS = 1 +HAVE_COMMAND = 1 +HAVE_CXX = 1 +HAVE_DR_MP3 = 1 +HAVE_DYNAMIC = 1 +HAVE_EGL = 1 +HAVE_FREETYPE = 1 +HAVE_GDI = 1 +HAVE_GETADDRINFO = 1 +HAVE_GETOPT_LONG = 1 +HAVE_GLSL = 1 +HAVE_HID = 1 +HAVE_IBXM = 1 +HAVE_IMAGEVIEWER = 1 +HAVE_LANGEXTRA = 1 +HAVE_LIBRETRODB = 1 +HAVE_MENU = 1 +HAVE_MENU_COMMON = 1 +HAVE_MENU_WIDGETS = 1 +HAVE_MMAP = 1 +HAVE_NETWORKING = 1 +HAVE_OPENDINGUX_FBDEV = 1 +HAVE_OPENGL = 1 +HAVE_OPENGL1 = 0 +HAVE_OPENGLES = 1 +HAVE_OPENGLES3 = 0 +HAVE_OPENGL_CORE = 0 +HAVE_OPENSSL = 1 +HAVE_OVERLAY = 1 +HAVE_RBMP = 1 +HAVE_RJPEG = 1 +HAVE_RPILED = 1 +HAVE_RPNG = 1 +HAVE_RUNAHEAD = 1 +HAVE_SDL_DINGUX = 1 +HAVE_SHADERPIPELINE = 1 +HAVE_STB_FONT = 1 +HAVE_STB_IMAGE = 1 +HAVE_STB_VORBIS = 1 +HAVE_STDIN_CMD = 1 +HAVE_STRCASESTR = 1 +HAVE_THREADS = 1 +HAVE_TRANSLATE = 1 +HAVE_UDEV = 1 +HAVE_VIDEO_LAYOUT = 1 +HAVE_XMB = 1 +HAVE_ZLIB = 1 + +OS = Linux +TARGET = retroarch +OPK_NAME = retroarch.opk + +OBJ := +LINK := $(CXX) +DEF_FLAGS := -march=mips32 -mtune=mips32r2 -mhard-float -ffast-math -fomit-frame-pointer -fdata-sections +DEF_FLAGS += -I. -Ideps -Ideps/stb -DDINGUX=1 -MMD +DEF_FLAGS += -Wall -Wno-unused-variable +DEF_FLAGS += -std=gnu99 -D_GNU_SOURCE +LIBS := -ldl -lz -lrt -lcrypto -lssl -ludev -pthread +CFLAGS := +CXXFLAGS := -fno-exceptions -fno-rtti -std=c++11 -D__STDC_CONSTANT_MACROS +ASFLAGS := +LDFLAGS := -flto +INCLUDE_DIRS = -I/opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/include +LIBRARY_DIRS = -L/opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/lib +DEFINES := -DRARCH_INTERNAL -D_FILE_OFFSET_BITS=64 -UHAVE_STATIC_DUMMY +DEFINES += -DHAVE_C99=1 -DHAVE_CXX=1 -DHAVE_OPENDINGUX_FBDEV=1 +DEFINES += -DHAVE_GETOPT_LONG=1 -DHAVE_STRCASESTR=1 -DHAVE_DYNAMIC=1 +DEFINES += -DHAVE_AL=1 +DEFINES += -DHAVE_ONLINE_UPDATER=1 +DEFINES += -DHAVE_UPDATE_ASSETS=1 +DEFINES += -DHAVE_UDEV=1 + +SDL_DINGUX_CFLAGS := $(shell /opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/bin/sdl-config --cflags) +SDL_DINGUX_LIBS := $(shell /opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/bin/sdl-config --libs) +FREETYPE_CFLAGS := $(shell /opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/bin/freetype-config --cflags) +FREETYPE_LIBS := $(shell /opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/bin/freetype-config --libs) +AL_LIBS := -lopenal +OPENGLES_CFLAGS := -DMESA_EGL_NO_X11_HEADERS +OPENGLES_LIBS := -lGLESv2 -lEGL +MMAP_LIBS = -lc + +OBJDIR_BASE := obj-unix + +ifeq ($(DEBUG), 1) + OBJDIR := $(OBJDIR_BASE)/debug + CFLAGS ?= -O0 -g + CXXFLAGS ?= -O0 -g + DEFINES += -DDEBUG -D_DEBUG +else + OBJDIR := $(OBJDIR_BASE)/release + CFLAGS ?= -O2 + CXXFLAGS ?= -O2 +endif + +include Makefile.common + +DEF_FLAGS += $(INCLUDE_DIRS) +CFLAGS += $(DEF_FLAGS) +CXXFLAGS += $(DEF_FLAGS) + +HEADERS = $(wildcard */*/*.h) $(wildcard */*.h) $(wildcard *.h) + +Q := @ + +RARCH_OBJ := $(addprefix $(OBJDIR)/,$(OBJ)) + +define DESKTOP_ENTRY +[Desktop Entry] +Name=retroarch +Comment=Retroarch +Exec=retroarch +Terminal=false +Type=Application +StartupNotify=true +Icon=retroarch +Categories=emulators; +X-OD-NeedsDownscaling=true +endef +export DESKTOP_ENTRY + +all: $(TARGET) opk + +-include $(RARCH_OBJ:.o=.d) + +SYMBOL_MAP := -Wl,-Map=output.map + +$(TARGET): $(RARCH_OBJ) + @$(if $(Q), $(shell echo echo LD $@),) + $(LINK) -o $@ $(RARCH_OBJ) $(LIBS) $(LDFLAGS) $(LIBRARY_DIRS) + +$(OBJDIR)/%.o: %.c + @mkdir -p $(dir $@) + @$(if $(Q), $(shell echo echo CC $<),) + $(CC) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -c -o $@ $< + +$(OBJDIR)/%.o: %.cpp + @mkdir -p $(dir $@) + @$(if $(Q), $(shell echo echo CXX $<),) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) -MMD -c -o $@ $< + +$(OBJDIR)/%.o: %.m + @mkdir -p $(dir $@) + @$(if $(Q), $(shell echo echo OBJC $<),) + $(CXX) $(OBJCFLAGS) $(DEFINES) -MMD -c -o $@ $< + +.FORCE: + +$(OBJDIR)/git_version.o: git_version.c .FORCE + @mkdir -p $(dir $@) + @$(if $(Q), $(shell echo echo CC $<),) + $(CC) $(CFLAGS) $(DEFINES) -MMD -c -o $@ $< + +$(OBJDIR)/%.o: %.S $(HEADERS) + @mkdir -p $(dir $@) + @$(if $(Q), $(shell echo echo AS $<),) + $(CC) $(CFLAGS) $(ASFLAGS) $(DEFINES) -c -o $@ $< + +clean: + rm -rf $(OBJDIR_BASE) + rm -f $(TARGET) + rm -f *.d + rm -rf $(OPK_NAME) + +opk: $(TARGET) + echo "$$DESKTOP_ENTRY" > default.gcw0.desktop + rm -f $(OPK_NAME) + cp media/ico_src/icon32.png retroarch.png + mksquashfs retroarch default.gcw0.desktop retroarch.png $(OPK_NAME) -all-root -no-xattrs -noappend -no-exports + rm -f default.gcw0.desktop retroarch.png + +.PHONY: all clean opk + +print-%: + @echo '$*=$($*)' diff --git a/config.def.h b/config.def.h index 9a10753805..366bcd0b18 100644 --- a/config.def.h +++ b/config.def.h @@ -89,6 +89,8 @@ #define DEFAULT_MAX_PADS 4 #elif defined(HAVE_XINPUT) && !defined(HAVE_DINPUT) #define DEFAULT_MAX_PADS 4 +#elif defined(DINGUX) +#define DEFAULT_MAX_PADS 2 #else #define DEFAULT_MAX_PADS 16 #endif @@ -592,7 +594,7 @@ static bool default_savefiles_in_content_dir = false; static bool default_systemfiles_in_content_dir = false; static bool default_screenshots_in_content_dir = false; -#if defined(__CELLOS_LV2__) || defined(_XBOX1) || defined(_XBOX360) +#if defined(__CELLOS_LV2__) || defined(_XBOX1) || defined(_XBOX360) || defined(DINGUX) static unsigned menu_toggle_gamepad_combo = INPUT_TOGGLE_L3_R3; #elif defined(PS2) || defined(PSP) static unsigned menu_toggle_gamepad_combo = INPUT_TOGGLE_HOLD_START; @@ -631,7 +633,12 @@ static unsigned input_backtouch_toggle = false; #define DEFAULT_CROP_OVERSCAN true /* Font size for on-screen messages. */ +#if defined(DINGUX) +#define DEFAULT_FONT_SIZE 12 +#else #define DEFAULT_FONT_SIZE 32 +#endif + /* Offset for where messages will be placed on-screen. * Values are in range [0.0, 1.0]. */ @@ -1045,7 +1052,7 @@ static const bool content_runtime_log_aggregate = false; #if defined(__QNX__) || defined(_XBOX1) || defined(_XBOX360) || defined(__CELLOS_LV2__) || (defined(__MACH__) && defined(IOS)) || defined(ANDROID) || defined(WIIU) || defined(HAVE_NEON) || defined(GEKKO) || defined(__ARM_NEON__) static enum resampler_quality audio_resampler_quality_level = RESAMPLER_QUALITY_LOWER; -#elif defined(PSP) || defined(_3DS) || defined(VITA) || defined(PS2) +#elif defined(PSP) || defined(_3DS) || defined(VITA) || defined(PS2) || defined(DINGUX) static enum resampler_quality audio_resampler_quality_level = RESAMPLER_QUALITY_LOWEST; #else static enum resampler_quality audio_resampler_quality_level = RESAMPLER_QUALITY_NORMAL; diff --git a/config.def.keybinds.h b/config.def.keybinds.h index 791f4c071c..5271b3a068 100644 --- a/config.def.keybinds.h +++ b/config.def.keybinds.h @@ -105,6 +105,88 @@ static const struct retro_keybind retro_keybinds_1[] = { { true, RARCH_RECORDING_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_RECORDING_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, { true, RARCH_STREAMING_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_STREAMING_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, { true, RARCH_AI_SERVICE, MENU_ENUM_LABEL_VALUE_INPUT_META_AI_SERVICE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, +#elif defined(DINGUX) + { true, RETRO_DEVICE_ID_JOYPAD_B, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B, RETROK_LALT, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_Y, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y, RETROK_LSHIFT, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_SELECT, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_SELECT, RETROK_ESCAPE, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_START, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_START, RETROK_RETURN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_UP, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_UP, RETROK_UP, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_DOWN, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_DOWN, RETROK_DOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_LEFT, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_LEFT, RETROK_LEFT, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_RIGHT, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_RIGHT, RETROK_RIGHT, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_A, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A, RETROK_LCTRL, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_X, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X, RETROK_SPACE, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_L, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L, RETROK_TAB, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_R, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R, RETROK_BACKSPACE, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_L2, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L2, RETROK_PAGEUP, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_R2, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R2, RETROK_PAGEDOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_L3, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L3, RETROK_KP_DIVIDE, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RETRO_DEVICE_ID_JOYPAD_R3, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R3, RETROK_KP_PERIOD, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + + { true, RARCH_ANALOG_LEFT_X_PLUS, MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_PLUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_ANALOG_LEFT_X_MINUS, MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_MINUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_ANALOG_LEFT_Y_PLUS, MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_PLUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_ANALOG_LEFT_Y_MINUS, MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_MINUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_ANALOG_RIGHT_X_PLUS, MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_PLUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_ANALOG_RIGHT_X_MINUS, MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_MINUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_ANALOG_RIGHT_Y_PLUS, MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_PLUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_ANALOG_RIGHT_Y_MINUS, MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_MINUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + + { true, RARCH_LIGHTGUN_TRIGGER, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_TRIGGER, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_RELOAD, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_RELOAD, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_AUX_A, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_AUX_A, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_AUX_B, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_AUX_B, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_AUX_C, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_AUX_C, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_START, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_START, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_SELECT, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_SELECT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_DPAD_UP, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_DPAD_UP, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_DPAD_DOWN, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_DPAD_DOWN, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_DPAD_LEFT, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_DPAD_LEFT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LIGHTGUN_DPAD_RIGHT, MENU_ENUM_LABEL_VALUE_INPUT_LIGHTGUN_DPAD_RIGHT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + + { true, RARCH_TURBO_ENABLE, MENU_ENUM_LABEL_VALUE_INPUT_TURBO_ENABLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + + { true, RARCH_FAST_FORWARD_KEY, MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_FAST_FORWARD_HOLD_KEY, MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_SLOWMOTION_KEY, MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION_KEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_SLOWMOTION_HOLD_KEY, MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION_KEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_LOAD_STATE_KEY, MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_SAVE_STATE_KEY, MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_FULLSCREEN_TOGGLE_KEY, MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_QUIT_KEY, MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_STATE_SLOT_PLUS, MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_PLUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_STATE_SLOT_MINUS, MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_MINUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_REWIND, MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_BSV_RECORD_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_BSV_RECORD_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_PAUSE_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_FRAMEADVANCE, MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_RESET, MENU_ENUM_LABEL_VALUE_INPUT_META_RESET, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_SHADER_NEXT, MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_SHADER_PREV, MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_PREV, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_CHEAT_INDEX_PLUS, MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_PLUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_CHEAT_INDEX_MINUS, MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_MINUS, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_CHEAT_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_SCREENSHOT, MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_MUTE, MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_OSK, MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_FPS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_SEND_DEBUG_INFO, MENU_ENUM_LABEL_VALUE_INPUT_META_SEND_DEBUG_INFO, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_NETPLAY_HOST_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_HOST_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_NETPLAY_GAME_WATCH, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_ENABLE_HOTKEY, MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_VOLUME_UP, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_VOLUME_DOWN, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_OVERLAY_NEXT, MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_DISK_EJECT_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_EJECT_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_DISK_NEXT, MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_DISK_PREV, MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_GRAB_MOUSE_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_GAME_FOCUS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_UI_COMPANION_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_UI_COMPANION_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_MENU_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, RETROK_HOME, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_RECORDING_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_RECORDING_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_STREAMING_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_STREAMING_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, + { true, RARCH_AI_SERVICE, MENU_ENUM_LABEL_VALUE_INPUT_META_AI_SERVICE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, #else { true, RETRO_DEVICE_ID_JOYPAD_B, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B, RETROK_z, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, { true, RETRO_DEVICE_ID_JOYPAD_Y, MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y, RETROK_a, NO_BTN, NO_BTN, 0, AXIS_NONE, AXIS_NONE, AXIS_NONE, NULL, NULL }, diff --git a/config.features.h b/config.features.h index 3fb618a332..9f9bec8df0 100644 --- a/config.features.h +++ b/config.features.h @@ -50,7 +50,7 @@ #define SUPPORTS_LIBUSB false #endif -#ifdef HAVE_SDL +#if defined(HAVE_SDL) #define SUPPORTS_SDL true #else #define SUPPORTS_SDL false diff --git a/configuration.c b/configuration.c index 7ab3ba0d36..7f3ed3fe31 100644 --- a/configuration.c +++ b/configuration.c @@ -144,6 +144,7 @@ enum video_driver_enum VIDEO_XVIDEO, VIDEO_SDL, VIDEO_SDL2, + VIDEO_SDL_DINGUX, VIDEO_EXT, VIDEO_WII, VIDEO_WIIU, @@ -357,10 +358,12 @@ static enum video_driver_enum VIDEO_DEFAULT_DRIVER = VIDEO_CTR; static enum video_driver_enum VIDEO_DEFAULT_DRIVER = VIDEO_SWITCH; #elif defined(HAVE_XVIDEO) static enum video_driver_enum VIDEO_DEFAULT_DRIVER = VIDEO_XVIDEO; -#elif defined(HAVE_SDL) +#elif defined(HAVE_SDL) && !defined(HAVE_SDL_DINGUX) static enum video_driver_enum VIDEO_DEFAULT_DRIVER = VIDEO_SDL; #elif defined(HAVE_SDL2) static enum video_driver_enum VIDEO_DEFAULT_DRIVER = VIDEO_SDL2; +#elif defined(HAVE_SDL_DINGUX) +static enum video_driver_enum VIDEO_DEFAULT_DRIVER = VIDEO_SDL_DINGUX; #elif defined(_WIN32) && !defined(_XBOX) static enum video_driver_enum VIDEO_DEFAULT_DRIVER = VIDEO_GDI; #elif defined(DJGPP) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index f0b8aaed03..d2dfa0e85a 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -3629,7 +3629,10 @@ static void *gl2_init(const video_info_t *video, RARCH_LOG("[GL]: Found GL context: %s\n", ctx_driver->ident); video_context_driver_get_video_size(&mode); - +#if defined(DINGUX) + mode.width = 320; + mode.height = 240; +#endif full_x = mode.width; full_y = mode.height; mode.width = 0; @@ -3774,6 +3777,10 @@ static void *gl2_init(const video_info_t *video, video_context_driver_get_video_size(&mode); +#if defined(DINGUX) + mode.width = 320; + mode.height = 240; +#endif temp_width = mode.width; temp_height = mode.height; mode.width = 0; diff --git a/gfx/drivers/sdl_dingux_gfx.c b/gfx/drivers/sdl_dingux_gfx.c new file mode 100644 index 0000000000..b1b18a9bec --- /dev/null +++ b/gfx/drivers/sdl_dingux_gfx.c @@ -0,0 +1,359 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2017 - Daniel De Matteis + * Copyright (C) 2011-2017 - Higor Euripedes + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include + +#include +#include +#include +#include "../../verbosity.h" + +#ifdef HAVE_CONFIG_H +#include "../../config.h" +#endif + +#ifdef HAVE_MENU +#include "../../menu/menu_driver.h" +#endif + +#include +#include + +#include "../../configuration.h" +#include "../../retroarch.h" + +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) + +#define VERBOSE 0 + +typedef struct sdl_dingux_video +{ + SDL_Surface *screen; + bool rgb; + bool menu_active; + bool was_in_menu; + bool quitting; + char menu_frame[320*240*32]; + +} sdl_dingux_video_t; + +static void sdl_dingux_gfx_free(void *data) +{ + sdl_dingux_video_t *vid = (sdl_dingux_video_t*)data; + if (!vid) + return; + + SDL_QuitSubSystem(SDL_INIT_VIDEO); + + free(vid); +} + +static void *sdl_dingux_gfx_init(const video_info_t *video, + input_driver_t **input, void **input_data) +{ + sdl_dingux_video_t *vid = NULL; + settings_t *settings = config_get_ptr(); + + FILE* f = fopen("/sys/devices/platform/jz-lcd.0/allow_downscaling", "w"); + if (f) { + fprintf(f, "%d", 1); + fclose(f); + } + + if (SDL_WasInit(0) == 0) + { + if (SDL_Init(SDL_INIT_VIDEO) < 0) + return NULL; + } + else if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) + return NULL; + + vid = (sdl_dingux_video_t*)calloc(1, sizeof(*vid)); + if (!vid) + return NULL; + +#ifdef VERBOSE + printf("sdl_dingux_gfx_init video %dx%d rgb32 %d smooth %d input_scale %u force_aspect %d fullscreen %d\n", + video->width, video->height, video->rgb32, video->smooth, video->input_scale, video->force_aspect, video->fullscreen); +#endif + + vid->screen = SDL_SetVideoMode(320, 240, video->rgb32 ? 32 : 16, SDL_HWSURFACE | SDL_TRIPLEBUF | SDL_FULLSCREEN); + if (!vid->screen) + { + RARCH_ERR("[SDL1]: Failed to init SDL surface: %s\n", SDL_GetError()); + goto error; + } + + vid->rgb = video->rgb32; + vid->menu_active = false; + vid->was_in_menu = false; + + SDL_ShowCursor(SDL_DISABLE); + + if (input && input_data) + { + void *sdl_input = input_sdl.init(settings->arrays.input_joypad_driver); + + if (sdl_input) + { + *input = &input_sdl; + *input_data = sdl_input; + } + else + { + *input = NULL; + *input_data = NULL; + } + } + + return vid; + +error: + sdl_dingux_gfx_free(vid); + return NULL; +} + +static void clear_screen(void* data) +{ + sdl_dingux_video_t* vid = (sdl_dingux_video_t*)data; + SDL_FillRect(vid->screen, 0, 0); + SDL_Flip(vid->screen); + SDL_FillRect(vid->screen, 0, 0); + SDL_Flip(vid->screen); + SDL_FillRect(vid->screen, 0, 0); + SDL_Flip(vid->screen); +} + +static void set_output(sdl_dingux_video_t* vid, int width, int height, int pitch, bool rgb) +{ +#ifdef VERBOSE + printf("set_output current w %d h %d pitch %d new_w %d new_h %d pitch %d rgb %d\n", + vid->screen->w, vid->screen->h, vid->screen->pitch, width, height, pitch, (int)vid->rgb); +#endif + + vid->screen = SDL_SetVideoMode(width, height, rgb ? 32 : 16, SDL_HWSURFACE | SDL_TRIPLEBUF | SDL_FULLSCREEN); + if (!vid->screen) + RARCH_ERR("[SDL1]: Failed to init SDL surface: %s\n", SDL_GetError()); +} + +static void blit(uint32_t* d, uint32_t* s, int width, int height, int pitch) +{ + int skip = pitch/4 - width; + for (int i = 0; i < height; i++) + { + for (int j = 0; j < width; j++) + *(d++) = *(s++); + s += skip; + } +} + +static bool sdl_dingux_gfx_frame(void *data, const void *frame, unsigned width, + unsigned height, uint64_t frame_count, + unsigned pitch, const char *msg, video_frame_info_t *video_info) +{ +// printf("sdl_gfx_frame width %d height %d pitch %d frame_count %lu\n", width, height, pitch, frame_count); + sdl_dingux_video_t* vid = (sdl_dingux_video_t*)data; + + if (unlikely(!frame)) + return true; + + if (unlikely((vid->screen->w != width || vid->screen->h != height) && !vid->menu_active)) + { + set_output(vid, width, height, pitch, vid->rgb); + } + + menu_driver_frame(video_info); + + if (likely(!vid->menu_active)) + { + blit((uint32_t*)vid->screen->pixels, (uint32_t*)frame, vid->rgb ? width : width/2, height, pitch); + if (unlikely(vid->was_in_menu)) + vid->was_in_menu = false; + } + else + { + if (!vid->was_in_menu) + { + set_output(vid, 320, 240, 320*2, false); + vid->was_in_menu = true; + } + memcpy(vid->screen->pixels, vid->menu_frame, 320*240*2); + } + + SDL_Flip(vid->screen); + + return true; +} + +static void sdl_dingux_set_texture_enable(void *data, bool state, bool full_screen) +{ + sdl_dingux_video_t *vid = (sdl_dingux_video_t*)data; + (void)full_screen; + + if (vid->menu_active != state) + { + vid->menu_active = state; + } +} + +static void sdl_dingux_set_texture_frame(void *data, const void *frame, bool rgb32, + unsigned width, unsigned height, float alpha) +{ + sdl_dingux_video_t *vid = (sdl_dingux_video_t*)data; + + int len = width * height * 2; + memcpy(vid->menu_frame, frame, len); +} + + +static void sdl_dingux_gfx_set_nonblock_state(void *data, bool state) +{ + (void)data; /* Can SDL even do this? */ + (void)state; +} + +static void sdl_dingux_gfx_check_window(sdl_dingux_video_t *vid) +{ + SDL_Event event; + + SDL_PumpEvents(); + while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_QUITMASK)) + { + if (event.type != SDL_QUIT) + continue; + + vid->quitting = true; + break; + } +} + +static bool sdl_dingux_gfx_alive(void *data) +{ + sdl_dingux_video_t *vid = (sdl_dingux_video_t*)data; + sdl_dingux_gfx_check_window(vid); + return !vid->quitting; +} + +static bool sdl_dingux_gfx_focus(void *data) +{ + (void)data; + return true; +} + +static bool sdl_dingux_gfx_suppress_screensaver(void *data, bool enable) +{ + (void)data; + (void)enable; + return false; +} + +static bool sdl_dingux_gfx_has_windowed(void *data) +{ + (void)data; + return false; +} + +static void sdl_dingux_gfx_viewport_info(void *data, struct video_viewport *vp) +{ + sdl_dingux_video_t *vid = (sdl_dingux_video_t*)data; + vp->x = 0; + vp->y = 0; + vp->width = vp->full_width = vid->screen->w; + vp->height = vp->full_height = vid->screen->h; +} + +static void sdl_dingux_set_filtering(void *data, unsigned index, bool smooth) +{ + (void)data; +} + +static void sdl_dingux_apply_state_changes(void *data) +{ + (void)data; +} + +static uint32_t sdl_dingux_get_flags(void *data) +{ + (void)data; + return 0; +} + +static const video_poke_interface_t sdl_dingux_poke_interface = { + sdl_dingux_get_flags, + NULL, + NULL, + NULL, + NULL, /* get_refresh_rate */ + sdl_dingux_set_filtering, + NULL, /* get_video_output_size */ + NULL, /* get_video_output_prev */ + NULL, /* get_video_output_next */ + NULL, /* get_current_framebuffer */ + NULL, /* get_proc_address */ + NULL, + sdl_dingux_apply_state_changes, + sdl_dingux_set_texture_frame, + sdl_dingux_set_texture_enable, + NULL, + NULL,//sdl_show_mouse, + NULL,//sdl_grab_mouse_toggle, + NULL, /* get_current_shader */ + NULL, /* get_current_software_framebuffer */ + NULL /* get_hw_render_interface */ +}; + +static void sdl_dingux_get_poke_interface(void *data, const video_poke_interface_t **iface) +{ + (void)data; + *iface = &sdl_dingux_poke_interface; +} + +static bool sdl_dingux_gfx_set_shader(void *data, + enum rarch_shader_type type, const char *path) +{ + (void)data; + (void)type; + (void)path; + return false; +} + +video_driver_t video_sdl_dingux = { + sdl_dingux_gfx_init, + sdl_dingux_gfx_frame, + sdl_dingux_gfx_set_nonblock_state, + sdl_dingux_gfx_alive, + sdl_dingux_gfx_focus, + sdl_dingux_gfx_suppress_screensaver, + sdl_dingux_gfx_has_windowed, + sdl_dingux_gfx_set_shader, + sdl_dingux_gfx_free, + "sdl_dingux", + NULL, + NULL, /* set_rotation */ + sdl_dingux_gfx_viewport_info, + NULL, /* read_viewport */ + NULL, /* read_frame_raw */ +#ifdef HAVE_OVERLAY + NULL, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, +#endif + sdl_dingux_get_poke_interface +}; diff --git a/gfx/drivers_context/opendingux_fbdev_ctx.c b/gfx/drivers_context/opendingux_fbdev_ctx.c index 6db8c4abf3..fd01e66e2a 100644 --- a/gfx/drivers_context/opendingux_fbdev_ctx.c +++ b/gfx/drivers_context/opendingux_fbdev_ctx.c @@ -15,6 +15,7 @@ */ #include +#include #ifdef HAVE_CONFIG_H #include "../../config.h" @@ -97,8 +98,8 @@ static void *gfx_ctx_opendingux_init(video_frame_info_t *video_info, void *video return viv; -error: #ifdef HAVE_EGL +error: RARCH_ERR("[opendingux fbdev]: EGL error: %d.\n", eglGetError()); #endif gfx_ctx_opendingux_destroy(viv); @@ -122,7 +123,6 @@ static void gfx_ctx_opendingux_check_window(void *data, bool *quit, #ifdef HAVE_EGL egl_get_video_size(&viv->egl, &new_width, &new_height); -#endif if (new_width != *width || new_height != *height) { @@ -130,6 +130,7 @@ static void gfx_ctx_opendingux_check_window(void *data, bool *quit, *height = new_height; *resize = true; } +#endif *quit = (bool)frontend_driver_get_signal_handler_state(); } @@ -170,8 +171,8 @@ static bool gfx_ctx_opendingux_set_video_mode(void *data, return true; -error: #ifdef HAVE_EGL +error: RARCH_ERR("[opendingux fbdev]: EGL error: %d.\n", eglGetError()); #endif gfx_ctx_opendingux_destroy(data); @@ -235,12 +236,12 @@ static void gfx_ctx_opendingux_set_swap_interval( #endif } +#ifdef HAVE_EGL static gfx_ctx_proc_t gfx_ctx_opendingux_get_proc_address(const char *symbol) { -#ifdef HAVE_EGL return egl_get_proc_address(symbol); -#endif } +#endif static void gfx_ctx_opendingux_bind_hw_render(void *data, bool enable) { @@ -287,7 +288,11 @@ const gfx_ctx_driver_t gfx_ctx_opendingux_fbdev = { false, /* has_windowed */ gfx_ctx_opendingux_swap_buffers, gfx_ctx_opendingux_input_driver, +#ifdef HAVE_EGL gfx_ctx_opendingux_get_proc_address, +#else + NULL, +#endif NULL, NULL, NULL, diff --git a/retroarch.c b/retroarch.c index d331514cc1..20dcc909c5 100644 --- a/retroarch.c +++ b/retroarch.c @@ -29,6 +29,12 @@ #endif #endif +#if defined(DINGUX) +#include +#include +#include +#endif + #if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) #ifndef LEGACY_WIN32 #define LEGACY_WIN32 @@ -389,12 +395,15 @@ static const video_driver_t *video_drivers[] = { #ifdef SWITCH &video_switch, #endif -#ifdef HAVE_SDL +#if defined(HAVE_SDL) && !defined(HAVE_SDL_DINGUX) &video_sdl, #endif #ifdef HAVE_SDL2 &video_sdl2, #endif +#ifdef HAVE_SDL_DINGUX + &video_sdl_dingux, +#endif #ifdef HAVE_XVIDEO &video_xvideo, #endif diff --git a/retroarch.h b/retroarch.h index 2d94072136..8560dec790 100644 --- a/retroarch.h +++ b/retroarch.h @@ -1886,6 +1886,7 @@ extern video_driver_t video_xenon360; extern video_driver_t video_xvideo; extern video_driver_t video_sdl; extern video_driver_t video_sdl2; +extern video_driver_t video_sdl_dingux; extern video_driver_t video_vg; extern video_driver_t video_omap; extern video_driver_t video_exynos;