mirror of
https://github.com/libretro/RetroArch
synced 2025-03-01 16:13:40 +00:00
Merged upstream and german language files
Signed-off-by: CoalaJoe <dominik.mueller@gibmit.ch>
This commit is contained in:
commit
d668cf7c21
@ -32,7 +32,7 @@ addons:
|
||||
- curl
|
||||
- pkg-config
|
||||
- libglu1-mesa-dev
|
||||
- freeglut3-mesa
|
||||
- freeglut3-dev
|
||||
- mesa-common-dev
|
||||
- libsdl1.2-dev
|
||||
- libsdl-image1.2-dev
|
||||
|
1
Makefile
1
Makefile
@ -1,4 +1,5 @@
|
||||
HAVE_FILE_LOGGER=1
|
||||
HAVE_CC_RESAMPLER=1
|
||||
NEED_CXX_LINKER=0
|
||||
MISSING_DECLS =0
|
||||
|
||||
|
@ -199,7 +199,7 @@ OBJ += frontend/frontend.o \
|
||||
managers/cheat_manager.o \
|
||||
core_info.o \
|
||||
$(LIBRETRO_COMM_DIR)/file/config_file.o \
|
||||
config_file_userdata.o \
|
||||
$(LIBRETRO_COMM_DIR)/file/config_file_userdata.o \
|
||||
tasks/task_screenshot.o \
|
||||
$(LIBRETRO_COMM_DIR)/gfx/scaler/scaler.o \
|
||||
gfx/drivers_shader/shader_null.o \
|
||||
@ -210,12 +210,11 @@ OBJ += frontend/frontend.o \
|
||||
$(LIBRETRO_COMM_DIR)/gfx/scaler/scaler_filter.o \
|
||||
gfx/font_driver.o \
|
||||
gfx/video_filter.o \
|
||||
audio/audio_resampler_driver.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/resampler/audio_resampler.o \
|
||||
audio/audio_dsp_filter.o \
|
||||
audio/drivers_resampler/sinc_resampler.o \
|
||||
audio/drivers_resampler/nearest_resampler.o \
|
||||
audio/drivers_resampler/null_resampler.o \
|
||||
audio/drivers_resampler/cc_resampler.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/resampler/drivers/sinc_resampler.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/resampler/drivers/nearest_resampler.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/resampler/drivers/null_resampler.o \
|
||||
location/drivers/nulllocation.o \
|
||||
camera/drivers/nullcamera.o \
|
||||
wifi/drivers/nullwifi.o \
|
||||
@ -232,6 +231,11 @@ OBJ += frontend/frontend.o \
|
||||
performance_counters.o \
|
||||
verbosity.o
|
||||
|
||||
ifeq ($(HAVE_CC_RESAMPLER), 1)
|
||||
DEFINES += -DHAVE_CC_RESAMPLER
|
||||
OBJ += audio/drivers_resampler/cc_resampler.o
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_LANGEXTRA), 1)
|
||||
DEFINES += -DHAVE_LANGEXTRA
|
||||
DEFINES += -finput-charset=UTF-8
|
||||
@ -272,8 +276,13 @@ endif
|
||||
|
||||
# Qt
|
||||
|
||||
ifeq ($(HAVE_QT_WRAPPER), 1)
|
||||
OBJ += ui/drivers/ui_qt.o
|
||||
LIBS += -lQt5Quick -lQt5Widgets -lQt5Gui -lQt5Qml -lQt5Network -lQt5Core -L./ui/drivers/qt/build/release/
|
||||
LIBS += -lwrapper
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_QT), 1)
|
||||
HAVE_QT_WRAPPER=0
|
||||
OBJ += ui/drivers/ui_qt.o \
|
||||
ui/drivers/qt/ui_qt_application.o \
|
||||
ui/drivers/qt/ui_qt_window.o \
|
||||
@ -283,13 +292,6 @@ OBJ += ui/drivers/ui_qt.o \
|
||||
ifneq ($(findstring Linux,$(OS)),)
|
||||
DEFINES += -I/usr/include/qt -fPIC
|
||||
endif
|
||||
|
||||
# TODO/FIXME - figure out which libraries we need to link against
|
||||
LIBS += -lQt5Quick -lQt5Widgets -lQt5Gui -lQt5Qml -lQt5Network -lQt5Core -L./ui/drivers/qt/wrapper/build/release
|
||||
|
||||
ifeq ($(HAVE_QT_WRAPPER), 1)
|
||||
LIBS += -lwrapper
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_SSA),1)
|
||||
@ -418,7 +420,7 @@ endif
|
||||
# Audio Resamplers
|
||||
|
||||
ifeq ($(HAVE_NEON),1)
|
||||
OBJ += audio/drivers_resampler/sinc_resampler_neon.o \
|
||||
OBJ += $(LIBRETRO_COMM_DIR)/audio/resampler/drivers/sinc_resampler_neon.o \
|
||||
audio/drivers_resampler/cc_resampler_neon.o
|
||||
# When compiled without this, tries to attempt to compile sinc lerp,
|
||||
# which will error out
|
||||
@ -429,12 +431,12 @@ ifeq ($(HAVE_NEON),1)
|
||||
DEFINES += -DSINC_LOWER_QUALITY
|
||||
endif
|
||||
|
||||
OBJ += $(LIBRETRO_COMM_DIR)/conversion/s16_to_float.o \
|
||||
$(LIBRETRO_COMM_DIR)/conversion/float_to_s16.o
|
||||
OBJ += $(LIBRETRO_COMM_DIR)/audio/conversion/s16_to_float.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/conversion/float_to_s16.o
|
||||
|
||||
ifeq ($(HAVE_NEON),1)
|
||||
OBJ += $(LIBRETRO_COMM_DIR)/conversion/s16_to_float_neon.o \
|
||||
$(LIBRETRO_COMM_DIR)/conversion/float_to_s16_neon.o
|
||||
OBJ += $(LIBRETRO_COMM_DIR)/audio/conversion/s16_to_float_neon.o \
|
||||
$(LIBRETRO_COMM_DIR)/audio/conversion/float_to_s16_neon.o
|
||||
endif
|
||||
|
||||
ifneq ($(findstring Win32,$(OS)),)
|
||||
@ -518,6 +520,7 @@ ifeq ($(HAVE_MENU_COMMON), 1)
|
||||
menu/menu_navigation.o \
|
||||
menu/menu_setting.o \
|
||||
menu/menu_shader.o \
|
||||
menu/widgets/menu_filebrowser.o \
|
||||
menu/widgets/menu_dialog.o \
|
||||
menu/widgets/menu_input_dialog.o \
|
||||
menu/widgets/menu_input_bind_dialog.o \
|
||||
|
@ -44,9 +44,10 @@ endif
|
||||
DEFINES :=
|
||||
ifeq ($(GRIFFIN_BUILD), 1)
|
||||
OBJ += griffin/griffin.o
|
||||
DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_MENU -DHAVE_RGUI -DHAVE_XMB -DHAVE_MATERIALUI -DHAVE_LIBRETRODB
|
||||
DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_MENU -DHAVE_RGUI -DHAVE_XMB -DHAVE_MATERIALUI -DHAVE_LIBRETRODB -DHAVE_CC_RESAMPLER
|
||||
DEFINES += -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DWANT_ZLIB
|
||||
else
|
||||
HAVE_CC_RESAMPLER = 1
|
||||
HAVE_MENU_COMMON = 1
|
||||
HAVE_RTGA = 1
|
||||
HAVE_RPNG = 1
|
||||
|
@ -9,6 +9,7 @@ OBJ :=
|
||||
DEFINES := -DRARCH_INTERNAL -DHAVE_OVERLAY -DHAVE_MAIN -s USE_PTHREADS=$(PTHREAD)
|
||||
DEFINES += -DHAVE_OPENGL -DHAVE_OPENGLES -DHAVE_OPENGLES2 -DHAVE_EGL -DHAVE_OVERLAY -DHAVE_GLSL -DHAVE_FILTERS_BUILTIN
|
||||
|
||||
HAVE_CC_RESAMPLER = 1
|
||||
HAVE_EGL = 1
|
||||
HAVE_OPENGLES = 1
|
||||
HAVE_RJPEG = 0
|
||||
|
@ -1,6 +1,7 @@
|
||||
DEBUG = 0
|
||||
HAVE_LOGGER = 0
|
||||
HAVE_FILE_LOGGER = 0
|
||||
HAVE_CC_RESAMPLER = 1
|
||||
WHOLE_ARCHIVE_LINK = 0
|
||||
BIG_STACK = 1
|
||||
PC_DEVELOPMENT_IP_ADDRESS = 255.255.255.255
|
||||
@ -218,18 +219,19 @@ else ifeq ($(platform), vita)
|
||||
-lScePower_stub -lSceRtc_stub -lSceCommonDialog_stub -lScePgf_stub \
|
||||
-lSceMotion_stub -lSceAppMgr_stub -lpng -lm -lc
|
||||
|
||||
PLATEXTRA := deps/libvita2d/shader/compiled/clear_v_gxp.o \
|
||||
deps/libvita2d/shader/compiled/clear_f_gxp.o \
|
||||
deps/libvita2d/shader/compiled/color_v_gxp.o \
|
||||
deps/libvita2d/shader/compiled/color_f_gxp.o \
|
||||
deps/libvita2d/shader/compiled/texture_v_gxp.o \
|
||||
deps/libvita2d/shader/compiled/texture_f_gxp.o \
|
||||
deps/libvita2d/shader/compiled/texture_tint_f_gxp.o
|
||||
PLATOBJS += libretro-common/conversion/s16_to_float_neon.o \
|
||||
libretro-common/conversion/float_to_s16_neon.o \
|
||||
memory/neon/memcpy-neon.o \
|
||||
audio/drivers_resampler/sinc_resampler_neon.o \
|
||||
audio/drivers_resampler/cc_resampler_neon.o
|
||||
PLATEXTRA := deps/libvita2d/shader/compiled/clear_v_gxp.o \
|
||||
deps/libvita2d/shader/compiled/clear_f_gxp.o \
|
||||
deps/libvita2d/shader/compiled/color_v_gxp.o \
|
||||
deps/libvita2d/shader/compiled/color_f_gxp.o \
|
||||
deps/libvita2d/shader/compiled/texture_v_gxp.o \
|
||||
deps/libvita2d/shader/compiled/texture_f_gxp.o \
|
||||
deps/libvita2d/shader/compiled/texture_tint_f_gxp.o
|
||||
PLATOBJS += \
|
||||
libretro-common/audio/conversion/s16_to_float_neon.o \
|
||||
libretro-common/audio/conversion/float_to_s16_neon.o \
|
||||
memory/neon/memcpy-neon.o \
|
||||
libretro-common/audio/resampler/drivers/sinc_resampler_neon.o \
|
||||
audio/drivers_resampler/cc_resampler_neon.o
|
||||
|
||||
LIBDIRS += -L.
|
||||
LDFLAGS += -Wl,-q
|
||||
|
@ -68,7 +68,7 @@ ifeq ($(HAVE_RLAUNCH), 1)
|
||||
DEFINES += -DHAVE_RLAUNCH
|
||||
endif
|
||||
|
||||
DEFINES += -DHAVE_MENU -DHAVE_RGUI -DHAVE_XMB -DHAVE_LIBRETRODB -DHAVE_MATERIALUI -DHAVE_SHADERPIPELINE -DRARCH_INTERNAL -DMSB_FIRST -DHAVE_OVERLAY
|
||||
DEFINES += -DHAVE_MENU -DHAVE_RGUI -DHAVE_XMB -DHAVE_LIBRETRODB -DHAVE_MATERIALUI -DHAVE_SHADERPIPELINE -DRARCH_INTERNAL -DMSB_FIRST -DHAVE_OVERLAY -DHAVE_CC_RESAMPLER
|
||||
|
||||
ifeq ($(HAVE_GCMGL), 1)
|
||||
DEFINES += -DHAVE_GCMGL
|
||||
|
@ -89,7 +89,7 @@ ifeq ($(HAVE_FILE_LOGGER), 1)
|
||||
CFLAGS += -DHAVE_FILE_LOGGER
|
||||
endif
|
||||
|
||||
SHARED_FLAGS := -DRARCH_CONSOLE -DHAVE_OPENGL -DHAVE_OVERLAY -DHAVE_HEADSET -DHAVE_OPENGLES -DHAVE_OPENGLES1 -DHAVE_PSGL -DHAVE_CG -DHAVE_CG_RUNTIME_COMPILER -DHAVE_GCMGL -DHAVE_FBO -DHAVE_SYSMODULES -DHAVE_SYSUTILS -DHAVE_RARCH_EXEC -DHAVE_MOUSE -DHAVE_ZLIB -DHAVE_RPNG -DWANT_ZLIB -DHAVE_GRIFFIN=1 -DHAVE_NETWORKING=1 -DHAVE_SOCKET_LEGACY=1 -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT) -Wno-char-subscripts
|
||||
SHARED_FLAGS := -DRARCH_CONSOLE -DHAVE_OPENGL -DHAVE_OVERLAY -DHAVE_HEADSET -DHAVE_OPENGLES -DHAVE_OPENGLES1 -DHAVE_PSGL -DHAVE_CG -DHAVE_CG_RUNTIME_COMPILER -DHAVE_GCMGL -DHAVE_FBO -DHAVE_SYSMODULES -DHAVE_SYSUTILS -DHAVE_RARCH_EXEC -DHAVE_MOUSE -DHAVE_ZLIB -DHAVE_RPNG -DWANT_ZLIB -DHAVE_GRIFFIN=1 -DHAVE_NETWORKING=1 -DHAVE_SOCKET_LEGACY=1 -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT) -Wno-char-subscripts -DHAVE_CC_RESAMPLER
|
||||
CFLAGS += -std=gnu99 $(SHARED_FLAGS)
|
||||
CXXFLAGS += $(SHARED_FLAGS)
|
||||
|
||||
|
@ -23,7 +23,7 @@ INCDIR = deps/zlib deps/7zip libretro-common/include
|
||||
CFLAGS = $(OPTIMIZE_LV) -G0 -std=gnu99 -ffast-math
|
||||
ASFLAGS = $(CFLAGS)
|
||||
|
||||
RARCH_DEFINES = -DPSP -D_MIPS_ARCH_ALLEGREX -DHAVE_LANGEXTRA -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DWANT_ZLIB -DHAVE_GRIFFIN=1 -DRARCH_INTERNAL -DRARCH_CONSOLE -DHAVE_MENU -DHAVE_RGUI -DSINC_LOWEST_QUALITY -DHAVE_FILTERS_BUILTIN -DHAVE_7ZIP
|
||||
RARCH_DEFINES = -DPSP -D_MIPS_ARCH_ALLEGREX -DHAVE_LANGEXTRA -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DWANT_ZLIB -DHAVE_GRIFFIN=1 -DRARCH_INTERNAL -DRARCH_CONSOLE -DHAVE_MENU -DHAVE_RGUI -DSINC_LOWEST_QUALITY -DHAVE_FILTERS_BUILTIN -DHAVE_7ZIP -DHAVE_CC_RESAMPLER
|
||||
|
||||
LIBDIR =
|
||||
LDFLAGS =
|
||||
|
@ -20,7 +20,7 @@ DEFINES :=
|
||||
ifeq ($(GRIFFIN_BUILD), 1)
|
||||
OBJ += griffin/griffin.o
|
||||
DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_MENU -DHAVE_RGUI -DHAVE_LIBRETRODB
|
||||
DEFINES += -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DWANT_ZLIB
|
||||
DEFINES += -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DWANT_ZLIB -DHAVE_CC_RESAMPLER
|
||||
# DEFINES += -DHAVE_XMB -DHAVE_MATERIALUI
|
||||
else
|
||||
HAVE_MENU_COMMON = 1
|
||||
|
@ -32,6 +32,7 @@ HAVE_CG := 1
|
||||
HAVE_LIBXML2 := 0
|
||||
HAVE_ZLIB := 1
|
||||
WANT_ZLIB := 1
|
||||
HAVE_CC_RESAMPLER := 1
|
||||
|
||||
ifeq ($(HAVE_CG), 1)
|
||||
CG_LIBS := -lcg -lcgGL
|
||||
|
54
README.md
54
README.md
@ -1,8 +1,5 @@
|
||||
[](https://travis-ci.org/libretro/RetroArch)
|
||||
<a href="https://scan.coverity.com/projects/retroarch">
|
||||
<img alt="Coverity Scan Build Status"
|
||||
src="https://scan.coverity.com/projects/8936/badge.svg"/>
|
||||
</a>
|
||||
[](https://scan.coverity.com/projects/retroarch)
|
||||
|
||||
# RetroArch
|
||||
|
||||
@ -24,11 +21,11 @@ interface to include support for emulators and/or game engines. libretro is comp
|
||||
|
||||
## Binaries
|
||||
|
||||
Latest Windows binaries are currently hosted on the buildbot -(http://buildbot.libretro.com/).
|
||||
Latest Windows binaries are currently hosted on the [buildbot](http://buildbot.libretro.com/).
|
||||
|
||||
## Support
|
||||
|
||||
To reach developers, either make an issue here on Github, make a thread on the [forum](http://www.libretro.com/forums/),
|
||||
To reach developers, either make an issue here on GitHub, make a thread on the [forum](http://www.libretro.com/forums/),
|
||||
or visit our IRC channel: #retroarch @ irc.freenode.org.
|
||||
|
||||
## Documentation
|
||||
@ -119,10 +116,11 @@ A sample configuration file is installed to /etc/retroarch.cfg. This is the syst
|
||||
RetroArch will on startup create a config file in $XDG\_CONFIG\_HOME/retroarch/retroarch.cfg if doesn't exist.
|
||||
Users only need to configure a certain option if the desired value deviates from the value defined in config.def.h.
|
||||
|
||||
To configure joypads, use the built-in menu or the <tt>retroarch-joyconfig</tt> command-line tool.
|
||||
To configure joypads, use the built-in menu or the `retroarch-joyconfig` command-line tool.
|
||||
|
||||
## Compiling and installing
|
||||
<b>Linux</b><br/>
|
||||
**Linux**
|
||||
|
||||
- Prerequisites:
|
||||
```bash
|
||||
sudo apt-get install -y make git-core curl g++ pkg-config libglu1-mesa-dev freeglut3-dev mesa-common-dev libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev
|
||||
@ -133,7 +131,8 @@ sudo apt-get install -y make git-core curl g++ pkg-config libglu1-mesa-dev freeg
|
||||
make
|
||||
```
|
||||
|
||||
<b>Mac</b><br/>
|
||||
**Mac**
|
||||
|
||||
- Prerequisites: [XCode](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fxcode%2Fid497799835%3Fmt%3D12&ei=ZmfeVNPtIILVoASBnoCYBw&usg=AFQjCNGrxKmVtXUdvUU3MhqZhP4MHT6Gtg&sig2=RIXKsWQ79YTQBt_lK5fdKA&bvm=bv.85970519,d.cGU), [Cg](https://developer.nvidia.com/cg-toolkit-download).
|
||||
- You can open the project (**pkg/apple/RetroArch.xcodeproj**) in the Xcode IDE and build (**⌘-B**) and run (**⌘-R**) it there. Or you can use the command line...
|
||||
- Debug:
|
||||
@ -151,62 +150,63 @@ xcodebuild -target RetroArch -configuration Release -project pkg/apple/RetroArch
|
||||
open ./pkg/apple/build/Release/RetroArch.app/
|
||||
```
|
||||
|
||||
<b>PC</b><br/>
|
||||
**PC**
|
||||
|
||||
Instructions for compiling on PC can be found in the [wiki](https://github.com/Themaister/RetroArch/wiki).
|
||||
|
||||
<b>PlayStation 3</b><br/>
|
||||
**PlayStation 3**
|
||||
|
||||
RetroArch PS3 needs to be compiled in the following order:
|
||||
|
||||
1) Compile RetroArch Salamander
|
||||
|
||||
<tt>make -f Makefile.ps3.salamander</tt>
|
||||
make -f Makefile.ps3.salamander
|
||||
|
||||
2) Finally, compile RetroArch packed together with the GUI:
|
||||
|
||||
<tt>make -f Makefile.ps3</tt>
|
||||
make -f Makefile.ps3
|
||||
|
||||
<b>PlayStation 3 - Creating a PKG installable file</b><br />
|
||||
**PlayStation 3 - Creating a PKG installable file**
|
||||
|
||||
You can add `pkg` as a parameter in order to make a PKG file - for example:
|
||||
|
||||
<tt>make -f Makefile.ps3 pkg</tt>
|
||||
make -f Makefile.ps3 pkg
|
||||
|
||||
This creates an NPDRM package. This can be installed on debug PS3s.
|
||||
|
||||
To make a non-NPDRM package that can be installed on a jailbroken/CFW PS3 (such as PSGroove or PS3 CFWs and other 3.55 CFW derivatives), do:
|
||||
|
||||
<tt>make -f Makefile.ps3 pkg-signed</tt>
|
||||
make -f Makefile.ps3 pkg-signed
|
||||
|
||||
If you're using Kmeaw 3.55 firmware, the package needs to be signed:
|
||||
|
||||
<tt>make -f Makefile.ps3 pkg-signed-cfw</tt>
|
||||
make -f Makefile.ps3 pkg-signed-cfw
|
||||
|
||||
NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch PS3. This file needs to be called <em><b>`libretro_ps3.a`</b></em>.
|
||||
NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch PS3. This file needs to be called ***`libretro_ps3.a`***.
|
||||
|
||||
<b> Xbox 360 (XeXDK)</b><br />
|
||||
**Xbox 360 (XeXDK)**
|
||||
|
||||
You will need Microsoft Visual Studio 2010 installed (or higher) in order to compile RetroArch 360.
|
||||
|
||||
The solution file can be found at the following location:
|
||||
|
||||
<tt>pkg/msvc-360/RetroArch-360.sln</tt>
|
||||
pkg/msvc-360/RetroArch-360.sln
|
||||
|
||||
NOTE: A pre-existing libretro library needs to be present in the `pkg/msvc-360/RetroArch-360/Release` directory in order to link RetroArch 360. This file needs to be
|
||||
called <em><b>`libretro_xdk360.lib`</b></em>.
|
||||
called ***`libretro_xdk360.lib`***.
|
||||
|
||||
<b> Xbox 360 (Libxenon)</b><br />
|
||||
**Xbox 360 (Libxenon)**
|
||||
|
||||
You will need to have the libxenon libraries and a working Devkit Xenon toolchain installed in order to compile RetroArch 360 Libxenon.
|
||||
|
||||
<tt>make -f Makefile.xenon</tt>
|
||||
make -f Makefile.xenon
|
||||
|
||||
NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch 360 Libxenon. This file needs to be called <em><b>`libretro_xenon360.a`</b></em>.
|
||||
NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch 360 Libxenon. This file needs to be called ***`libretro_xenon360.a`***.
|
||||
|
||||
<b> Wii</b><br >
|
||||
**Wii**
|
||||
|
||||
You will need to have the libogc libraries and a working Devkit PPC toolchain installed in order to compile RetroArch Wii.
|
||||
|
||||
<tt>make -f Makefile.griffin platform=wii</tt>
|
||||
make -f Makefile.griffin platform=wii
|
||||
|
||||
NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch Wii. This file needs to be called <em><b>`libretro_wii.a`</b></em>.
|
||||
NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch Wii. This file needs to be called ***`libretro_wii.a`***.
|
||||
|
@ -19,8 +19,9 @@
|
||||
#include <retro_assert.h>
|
||||
|
||||
#include <lists/string_list.h>
|
||||
#include <conversion/float_to_s16.h>
|
||||
#include <conversion/s16_to_float.h>
|
||||
#include <audio/conversion/float_to_s16.h>
|
||||
#include <audio/conversion/s16_to_float.h>
|
||||
#include <audio/audio_resampler.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "../config.h"
|
||||
@ -28,13 +29,8 @@
|
||||
|
||||
#include "audio_driver.h"
|
||||
#include "audio_dsp_filter.h"
|
||||
#include "audio_resampler_driver.h"
|
||||
#include "../record/record_driver.h"
|
||||
#include "audio_thread_wrapper.h"
|
||||
|
||||
#ifdef HAVE_NETWORKING
|
||||
#include "../network/netplay/netplay.h"
|
||||
#endif
|
||||
#include "../record/record_driver.h"
|
||||
|
||||
#include "../command.h"
|
||||
#include "../driver.h"
|
||||
@ -852,13 +848,6 @@ bool audio_driver_deinit(void)
|
||||
bool audio_driver_set_callback(const void *data)
|
||||
{
|
||||
const struct retro_audio_callback *cb = (const struct retro_audio_callback*)data;
|
||||
#ifdef HAVE_NETWORKING
|
||||
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL))
|
||||
return false;
|
||||
#endif
|
||||
|
||||
if (recording_driver_get_data_ptr()) /* A/V sync is a must. */
|
||||
return false;
|
||||
|
||||
if (cb)
|
||||
audio_callback = *cb;
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <dynamic/dylib.h>
|
||||
|
||||
#include <file/file_path.h>
|
||||
#include <file/config_file_userdata.h>
|
||||
#include <lists/dir_list.h>
|
||||
#include <features/features_cpu.h>
|
||||
#include <string/stdstring.h>
|
||||
@ -29,7 +30,6 @@
|
||||
#include "audio_dsp_filter.h"
|
||||
#include "audio_filters/dspfilter.h"
|
||||
|
||||
#include "../config_file_userdata.h"
|
||||
#include "../frontend/frontend_driver.h"
|
||||
#include "../performance_counters.h"
|
||||
#include "../dynamic.h"
|
||||
|
@ -125,6 +125,7 @@ static void stream_latency_update_cb(pa_stream *s, void *data)
|
||||
|
||||
static void underrun_update_cb(pa_stream *s, void *data)
|
||||
{
|
||||
#if 0
|
||||
pa_t *pa = (pa_t*)data;
|
||||
|
||||
(void)s;
|
||||
@ -132,6 +133,7 @@ static void underrun_update_cb(pa_stream *s, void *data)
|
||||
RARCH_LOG("[PulseAudio]: Underrun (Buffer: %u, Writable size: %u).\n",
|
||||
(unsigned)pa->buffer_size,
|
||||
(unsigned)pa_stream_writable_size(pa->stream));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void buffer_attr_cb(pa_stream *s, void *data)
|
||||
@ -141,7 +143,9 @@ static void buffer_attr_cb(pa_stream *s, void *data)
|
||||
if (server_attr)
|
||||
pa->buffer_size = server_attr->tlength;
|
||||
|
||||
#if 0
|
||||
RARCH_LOG("[PulseAudio]: Got new buffer size %u.\n", (unsigned)pa->buffer_size);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void *pulse_init(const char *device, unsigned rate, unsigned latency)
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include <memalign.h>
|
||||
#include <math/float_minmax.h>
|
||||
|
||||
#include "../audio_resampler_driver.h"
|
||||
#include <audio/audio_resampler.h>
|
||||
|
||||
/* Since SSE and NEON don't provide support for trigonometric functions
|
||||
* we approximate those with polynoms
|
||||
|
@ -1,66 +0,0 @@
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#if defined(__ARM_NEON__)
|
||||
|
||||
#ifndef __MACH__
|
||||
.arm
|
||||
#endif
|
||||
.align 4
|
||||
.globl process_sinc_neon_asm
|
||||
#ifndef __MACH__
|
||||
.type process_sinc_neon_asm, %function
|
||||
#endif
|
||||
.globl _process_sinc_neon_asm
|
||||
#ifndef __MACH__
|
||||
.type _process_sinc_neon_asm, %function
|
||||
#endif
|
||||
# void process_sinc_neon(float *out, const float *left, const float *right, const float *coeff, unsigned taps)
|
||||
# Assumes taps is >= 8, and a multiple of 8.
|
||||
process_sinc_neon_asm:
|
||||
_process_sinc_neon_asm:
|
||||
|
||||
push {r4, lr}
|
||||
vmov.f32 q0, #0.0
|
||||
vmov.f32 q8, #0.0
|
||||
|
||||
# Taps argument (r4) goes on stack in armeabi.
|
||||
ldr r4, [sp, #8]
|
||||
|
||||
1:
|
||||
# Left
|
||||
vld1.f32 {q2-q3}, [r1]!
|
||||
# Right
|
||||
vld1.f32 {q10-q11}, [r2]!
|
||||
# Coeff
|
||||
vld1.f32 {q12-q13}, [r3, :128]!
|
||||
|
||||
# Left / Right
|
||||
vmla.f32 q0, q2, q12
|
||||
vmla.f32 q8, q10, q12
|
||||
vmla.f32 q0, q3, q13
|
||||
vmla.f32 q8, q11, q13
|
||||
|
||||
subs r4, r4, #8
|
||||
bne 1b
|
||||
|
||||
# Add everything together
|
||||
vadd.f32 d0, d0, d1
|
||||
vadd.f32 d16, d16, d17
|
||||
vpadd.f32 d0, d0, d16
|
||||
vst1.f32 d0, [r0]
|
||||
|
||||
pop {r4, pc}
|
||||
|
||||
#endif
|
22
command.c
22
command.c
@ -294,7 +294,7 @@ static const struct cmd_map map[] = {
|
||||
{ "DISK_NEXT", RARCH_DISK_NEXT },
|
||||
{ "DISK_PREV", RARCH_DISK_PREV },
|
||||
{ "GRAB_MOUSE_TOGGLE", RARCH_GRAB_MOUSE_TOGGLE },
|
||||
{ "GAME_FOCUS_TOGGLE", RARCH_GAME_FOCUS_TOGGLE },
|
||||
{ "GAME_FOCUS_TOGGLE", RARCH_GAME_FOCUS_TOGGLE },
|
||||
{ "MENU_TOGGLE", RARCH_MENU_TOGGLE },
|
||||
{ "MENU_UP", RETRO_DEVICE_ID_JOYPAD_UP },
|
||||
{ "MENU_DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN },
|
||||
@ -1920,6 +1920,7 @@ bool command_event(enum event_command cmd, void *data)
|
||||
#ifdef HAVE_MENU
|
||||
menu_driver_ctl(RARCH_MENU_CTL_SYSTEM_INFO_DEINIT, NULL);
|
||||
#endif
|
||||
path_clear(RARCH_PATH_CORE);
|
||||
#else
|
||||
core_unload_game();
|
||||
core_unload();
|
||||
@ -2500,7 +2501,7 @@ bool command_event(enum event_command cmd, void *data)
|
||||
case CMD_EVENT_GAME_FOCUS_TOGGLE:
|
||||
{
|
||||
static bool game_focus_state = false;
|
||||
long int mode = (long int)data;
|
||||
long int mode = (long int)data;
|
||||
|
||||
/* mode = -1: restores current game focus state
|
||||
* mode = 1: force set game focus, instead of toggling
|
||||
@ -2515,20 +2516,25 @@ bool command_event(enum event_command cmd, void *data)
|
||||
"Game focus is: ",
|
||||
game_focus_state ? "on" : "off");
|
||||
|
||||
if (game_focus_state) {
|
||||
if (game_focus_state)
|
||||
{
|
||||
input_driver_grab_mouse();
|
||||
video_driver_hide_mouse();
|
||||
input_driver_set_hotkey_block();
|
||||
input_driver_keyboard_mapping_set_block(1);
|
||||
runloop_msg_queue_push(msg_hash_to_str(MSG_GAME_FOCUS_ON),
|
||||
1, 120, true);
|
||||
} else {
|
||||
if (mode != -1)
|
||||
runloop_msg_queue_push(msg_hash_to_str(MSG_GAME_FOCUS_ON),
|
||||
1, 120, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
input_driver_ungrab_mouse();
|
||||
video_driver_show_mouse();
|
||||
input_driver_unset_hotkey_block();
|
||||
input_driver_keyboard_mapping_set_block(0);
|
||||
runloop_msg_queue_push(msg_hash_to_str(MSG_GAME_FOCUS_OFF),
|
||||
1, 120, true);
|
||||
if (mode != -1)
|
||||
runloop_msg_queue_push(msg_hash_to_str(MSG_GAME_FOCUS_OFF),
|
||||
1, 120, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -917,7 +917,7 @@ static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/apple/
|
||||
#elif defined(_WIN32) && !defined(_XBOX)
|
||||
#if defined(__x86_64__)
|
||||
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/win-x86_64/latest/";
|
||||
#elif defined(__i386__) || defined(__i486__) || defined(__i686__)
|
||||
#elif defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(_M_IX86) || defined(_M_IA64)
|
||||
static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/win-x86/latest/";
|
||||
#endif
|
||||
#elif defined(__linux__)
|
||||
|
@ -773,6 +773,7 @@ static int populate_settings_bool(settings_t *settings, struct config_bool_setti
|
||||
SETTING_BOOL("video_vfilter", &settings->video.vfilter, true, video_vfilter, false);
|
||||
#endif
|
||||
#ifdef HAVE_MENU
|
||||
SETTING_BOOL("menu_unified_controls", &settings->menu.unified_controls, true, false, false);
|
||||
#ifdef HAVE_THREADS
|
||||
SETTING_BOOL("threaded_data_runloop_enable", &settings->threaded_data_runloop_enable, true, threaded_data_runloop_enable, false);
|
||||
#endif
|
||||
@ -2173,6 +2174,7 @@ static bool config_load_file(const char *path, bool set_defaults,
|
||||
{
|
||||
if (!check_shader_compatibility((enum file_path_enum)i))
|
||||
{
|
||||
/* TODO/FIXME - this check is always triggered even with an empty shader path */
|
||||
RARCH_LOG("Incompatible shader for backend %s, clearing...\n", settings->video.driver);
|
||||
settings->path.shader[0] = '\0';
|
||||
break;
|
||||
@ -2347,18 +2349,16 @@ bool config_unload_override(void)
|
||||
retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_STATE_PATH, NULL);
|
||||
retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_SAVE_PATH, NULL);
|
||||
|
||||
if (config_load_file(path_get(RARCH_PATH_CONFIG), false, config_get_ptr()))
|
||||
{
|
||||
RARCH_LOG("[overrides] configuration overrides unloaded, original configuration restored.\n");
|
||||
if (!config_load_file(path_get(RARCH_PATH_CONFIG), false, config_get_ptr()))
|
||||
return false;
|
||||
|
||||
/* Reset save paths */
|
||||
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_STATE_PATH, NULL);
|
||||
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_SAVE_PATH, NULL);
|
||||
RARCH_LOG("[overrides] configuration overrides unloaded, original configuration restored.\n");
|
||||
|
||||
return true;
|
||||
}
|
||||
/* Reset save paths */
|
||||
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_STATE_PATH, NULL);
|
||||
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_SAVE_PATH, NULL);
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -204,6 +204,8 @@ typedef struct settings
|
||||
{
|
||||
unsigned menu_color_theme;
|
||||
} materialui;
|
||||
|
||||
bool unified_controls;
|
||||
} menu;
|
||||
#endif
|
||||
|
||||
|
@ -390,7 +390,10 @@ bool core_run(void)
|
||||
#ifdef HAVE_NETWORKING
|
||||
if (!netplay_driver_ctl(RARCH_NETPLAY_CTL_PRE_FRAME, NULL))
|
||||
{
|
||||
/* Paused due to Netplay */
|
||||
/* Paused due to netplay. We must poll and display something so that a
|
||||
* netplay peer pausing doesn't just hang. */
|
||||
input_poll();
|
||||
video_driver_cached_frame();
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
390
core_info.c
390
core_info.c
@ -22,6 +22,8 @@
|
||||
#include <lists/dir_list.h>
|
||||
#include <file/archive_file.h>
|
||||
|
||||
#include <retro_stat.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@ -87,10 +89,7 @@ static void core_info_list_resolve_all_firmware(
|
||||
core_info_t *info = (core_info_t*)&core_info_list->list[i];
|
||||
config_file_t *config = (config_file_t*)info->config_data;
|
||||
|
||||
if (!config)
|
||||
continue;
|
||||
|
||||
if (!config_get_uint(config, "firmware_count", &count))
|
||||
if (!config || !config_get_uint(config, "firmware_count", &count))
|
||||
continue;
|
||||
|
||||
info->firmware = (core_info_firmware_t*)
|
||||
@ -101,17 +100,31 @@ static void core_info_list_resolve_all_firmware(
|
||||
|
||||
for (c = 0; c < count; c++)
|
||||
{
|
||||
char path_key[64] = {0};
|
||||
char desc_key[64] = {0};
|
||||
char opt_key[64] = {0};
|
||||
char path_key[64];
|
||||
char desc_key[64];
|
||||
char opt_key[64];
|
||||
bool tmp_bool = false;
|
||||
char *tmp = NULL;
|
||||
path_key[0] = desc_key[0] = opt_key[0] = '\0';
|
||||
|
||||
snprintf(path_key, sizeof(path_key), "firmware%u_path", c);
|
||||
snprintf(desc_key, sizeof(desc_key), "firmware%u_desc", c);
|
||||
snprintf(opt_key, sizeof(opt_key), "firmware%u_opt", c);
|
||||
|
||||
config_get_string(config, path_key, &info->firmware[c].path);
|
||||
config_get_string(config, desc_key, &info->firmware[c].desc);
|
||||
config_get_bool(config, opt_key , &info->firmware[c].optional);
|
||||
if (config_get_string(config, path_key, &tmp))
|
||||
{
|
||||
info->firmware[c].path = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
if (config_get_string(config, desc_key, &tmp))
|
||||
{
|
||||
info->firmware[c].desc = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
if (config_get_bool(config, opt_key , &tmp_bool))
|
||||
info->firmware[c].optional = tmp_bool;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -127,6 +140,9 @@ static void core_info_list_free(core_info_list_t *core_info_list)
|
||||
{
|
||||
core_info_t *info = (core_info_t*)&core_info_list->list[i];
|
||||
|
||||
if (!info)
|
||||
continue;
|
||||
|
||||
free(info->path);
|
||||
free(info->core_name);
|
||||
free(info->systemname);
|
||||
@ -139,8 +155,7 @@ static void core_info_list_free(core_info_list_t *core_info_list)
|
||||
free(info->categories);
|
||||
free(info->databases);
|
||||
free(info->notes);
|
||||
if (info->supported_extensions_list)
|
||||
string_list_free(info->supported_extensions_list);
|
||||
string_list_free(info->supported_extensions_list);
|
||||
string_list_free(info->authors_list);
|
||||
string_list_free(info->note_list);
|
||||
string_list_free(info->permissions_list);
|
||||
@ -162,21 +177,26 @@ static void core_info_list_free(core_info_list_t *core_info_list)
|
||||
free(core_info_list);
|
||||
}
|
||||
|
||||
static config_file_t *core_info_list_iterate(
|
||||
static bool core_info_list_iterate(
|
||||
char *s, size_t len,
|
||||
struct string_list *contents, size_t i)
|
||||
{
|
||||
char info_path_base[PATH_MAX_LENGTH] = {0};
|
||||
char info_path[PATH_MAX_LENGTH] = {0};
|
||||
char info_path_base[PATH_MAX_LENGTH];
|
||||
#if defined(RARCH_MOBILE) || (defined(RARCH_CONSOLE) && !defined(PSP) && !defined(_3DS) && !defined(VITA))
|
||||
char *substr = NULL;
|
||||
#endif
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if (!contents->elems[i].data)
|
||||
return NULL;
|
||||
if (!contents || !contents->elems[i].data)
|
||||
return false;
|
||||
|
||||
info_path_base[0] = '\0';
|
||||
|
||||
fill_pathname_base_noext(info_path_base, contents->elems[i].data,
|
||||
sizeof(info_path_base));
|
||||
|
||||
#if defined(RARCH_MOBILE) || (defined(RARCH_CONSOLE) && !defined(PSP) && !defined(_3DS) && !defined(VITA))
|
||||
char *substr = strrchr(info_path_base, '_');
|
||||
substr = strrchr(info_path_base, '_');
|
||||
if (substr)
|
||||
*substr = '\0';
|
||||
#endif
|
||||
@ -185,28 +205,21 @@ static config_file_t *core_info_list_iterate(
|
||||
file_path_str(FILE_PATH_CORE_INFO_EXTENSION),
|
||||
sizeof(info_path_base));
|
||||
|
||||
fill_pathname_join(info_path,
|
||||
fill_pathname_join(s,
|
||||
(!string_is_empty(settings->path.libretro_info)) ?
|
||||
settings->path.libretro_info : settings->directory.libretro,
|
||||
info_path_base, sizeof(info_path));
|
||||
info_path_base, len);
|
||||
|
||||
return config_file_new(info_path);
|
||||
return true;
|
||||
}
|
||||
|
||||
static core_info_list_t *core_info_list_new(void)
|
||||
static core_info_list_t *core_info_list_new(const char *path)
|
||||
{
|
||||
size_t i;
|
||||
core_info_t *core_info = NULL;
|
||||
core_info_list_t *core_info_list = NULL;
|
||||
struct string_list *contents = NULL;
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if (!settings)
|
||||
return NULL;
|
||||
|
||||
contents = dir_list_new_special(
|
||||
settings->directory.libretro,
|
||||
DIR_LIST_CORES, NULL);
|
||||
struct string_list *contents = dir_list_new_special(
|
||||
path, DIR_LIST_CORES, NULL);
|
||||
|
||||
if (!contents)
|
||||
return NULL;
|
||||
@ -219,69 +232,128 @@ static core_info_list_t *core_info_list_new(void)
|
||||
if (!core_info)
|
||||
goto error;
|
||||
|
||||
core_info_list->list = core_info;
|
||||
core_info_list->list = core_info;
|
||||
core_info_list->count = contents->size;
|
||||
|
||||
for (i = 0; i < contents->size; i++)
|
||||
{
|
||||
config_file_t *conf = core_info_list_iterate(contents, i);
|
||||
char info_path[PATH_MAX_LENGTH];
|
||||
|
||||
if (conf)
|
||||
info_path[0] = '\0';
|
||||
|
||||
if (
|
||||
core_info_list_iterate(info_path, sizeof(info_path),
|
||||
contents, i)
|
||||
&& path_is_valid(info_path))
|
||||
{
|
||||
bool tmp_bool = false;
|
||||
unsigned count = 0;
|
||||
char *tmp = NULL;
|
||||
bool tmp_bool = false;
|
||||
unsigned count = 0;
|
||||
config_file_t *conf = config_file_new(info_path);
|
||||
|
||||
if (!conf)
|
||||
continue;
|
||||
|
||||
if (config_get_string(conf, "display_name", &tmp))
|
||||
{
|
||||
core_info[i].display_name = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
if (config_get_string(conf, "corename", &tmp))
|
||||
{
|
||||
core_info[i].core_name = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "systemname", &tmp))
|
||||
{
|
||||
core_info[i].systemname = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "manufacturer", &tmp))
|
||||
{
|
||||
core_info[i].system_manufacturer = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
config_get_string(conf, "display_name",
|
||||
&core_info[i].display_name);
|
||||
config_get_string(conf, "corename",
|
||||
&core_info[i].core_name);
|
||||
config_get_string(conf, "systemname",
|
||||
&core_info[i].systemname);
|
||||
config_get_string(conf, "manufacturer",
|
||||
&core_info[i].system_manufacturer);
|
||||
config_get_uint(conf, "firmware_count", &count);
|
||||
|
||||
core_info[i].firmware_count = count;
|
||||
if (config_get_string(conf, "supported_extensions",
|
||||
&core_info[i].supported_extensions) &&
|
||||
core_info[i].supported_extensions)
|
||||
|
||||
if (config_get_string(conf, "supported_extensions", &tmp))
|
||||
{
|
||||
core_info[i].supported_extensions = strdup(tmp);
|
||||
core_info[i].supported_extensions_list =
|
||||
string_split(core_info[i].supported_extensions, "|");
|
||||
|
||||
if (config_get_string(conf, "authors",
|
||||
&core_info[i].authors) &&
|
||||
core_info[i].authors)
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "authors", &tmp))
|
||||
{
|
||||
core_info[i].authors = strdup(tmp);
|
||||
core_info[i].authors_list =
|
||||
string_split(core_info[i].authors, "|");
|
||||
|
||||
if (config_get_string(conf, "permissions",
|
||||
&core_info[i].permissions) &&
|
||||
core_info[i].permissions)
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "permissions", &tmp))
|
||||
{
|
||||
core_info[i].permissions = strdup(tmp);
|
||||
core_info[i].permissions_list =
|
||||
string_split(core_info[i].permissions, "|");
|
||||
|
||||
if (config_get_string(conf, "license",
|
||||
&core_info[i].licenses) &&
|
||||
core_info[i].licenses)
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "license", &tmp))
|
||||
{
|
||||
core_info[i].licenses = strdup(tmp);
|
||||
core_info[i].licenses_list =
|
||||
string_split(core_info[i].licenses, "|");
|
||||
|
||||
if (config_get_string(conf, "categories",
|
||||
&core_info[i].categories) &&
|
||||
core_info[i].categories)
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "categories", &tmp))
|
||||
{
|
||||
core_info[i].categories = strdup(tmp);
|
||||
core_info[i].categories_list =
|
||||
string_split(core_info[i].categories, "|");
|
||||
|
||||
if (config_get_string(conf, "database",
|
||||
&core_info[i].databases) &&
|
||||
core_info[i].databases)
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "database", &tmp))
|
||||
{
|
||||
core_info[i].databases = strdup(tmp);
|
||||
core_info[i].databases_list =
|
||||
string_split(core_info[i].databases, "|");
|
||||
|
||||
if (config_get_string(conf, "notes",
|
||||
&core_info[i].notes) &&
|
||||
core_info[i].notes)
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "notes", &tmp))
|
||||
{
|
||||
core_info[i].notes = strdup(tmp);
|
||||
core_info[i].note_list = string_split(core_info[i].notes, "|");
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_bool(conf, "supports_no_game",
|
||||
&tmp_bool))
|
||||
core_info[i].supports_no_game = tmp_bool;
|
||||
@ -354,8 +426,11 @@ static bool core_info_does_support_any_file(const core_info_t *core,
|
||||
static bool core_info_does_support_file(
|
||||
const core_info_t *core, const char *path)
|
||||
{
|
||||
if (!path || !core || !core->supported_extensions_list)
|
||||
if (!core || !core->supported_extensions_list)
|
||||
return false;
|
||||
if (string_is_empty(path))
|
||||
return false;
|
||||
|
||||
return string_list_find_elem_prefix(
|
||||
core->supported_extensions_list, ".", path_get_extension(path));
|
||||
}
|
||||
@ -388,7 +463,7 @@ static core_info_t *core_info_find_internal(
|
||||
{
|
||||
core_info_t *info = core_info_get(list, i);
|
||||
|
||||
if (!info)
|
||||
if (!info || !info->path)
|
||||
continue;
|
||||
if (string_is_equal(info->path, core))
|
||||
return info;
|
||||
@ -403,20 +478,22 @@ static bool core_info_list_update_missing_firmware_internal(
|
||||
const char *systemdir)
|
||||
{
|
||||
size_t i;
|
||||
char path[PATH_MAX_LENGTH] = {0};
|
||||
char path[PATH_MAX_LENGTH];
|
||||
core_info_t *info = NULL;
|
||||
|
||||
if (!core_info_list || !core)
|
||||
return false;
|
||||
|
||||
info = core_info_find_internal(core_info_list, core);
|
||||
path[0] = '\0';
|
||||
info = core_info_find_internal(core_info_list, core);
|
||||
|
||||
if (!info)
|
||||
return false;
|
||||
|
||||
runloop_ctl(RUNLOOP_CTL_UNSET_MISSING_BIOS, NULL);
|
||||
for (i = 0; i < info->firmware_count; i++)
|
||||
{
|
||||
if (!info->firmware[i].path)
|
||||
if (string_is_empty(info->firmware[i].path))
|
||||
continue;
|
||||
|
||||
fill_pathname_join(path, systemdir,
|
||||
@ -452,16 +529,18 @@ static void core_info_list_get_missing_firmware(
|
||||
const core_info_firmware_t **firmware, size_t *num_firmware)
|
||||
{
|
||||
size_t i;
|
||||
char path[PATH_MAX_LENGTH] = {0};
|
||||
char path[PATH_MAX_LENGTH];
|
||||
core_info_t *info = NULL;
|
||||
|
||||
if (!core_info_list || !core)
|
||||
return;
|
||||
|
||||
path[0] = '\0';
|
||||
*firmware = NULL;
|
||||
*num_firmware = 0;
|
||||
info = core_info_find_internal(core_info_list, core);
|
||||
|
||||
if (!(info = core_info_find_internal(core_info_list, core)))
|
||||
if (!info)
|
||||
return;
|
||||
|
||||
*firmware = info->firmware;
|
||||
@ -511,7 +590,10 @@ void core_info_deinit_list(void)
|
||||
|
||||
bool core_info_init_list(void)
|
||||
{
|
||||
core_info_curr_list = core_info_list_new();
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if (settings)
|
||||
core_info_curr_list = core_info_list_new(settings->directory.libretro);
|
||||
|
||||
if (!core_info_curr_list)
|
||||
return false;
|
||||
@ -625,58 +707,49 @@ void core_info_list_get_supported_cores(core_info_list_t *core_info_list,
|
||||
void core_info_get_name(const char *path, char *s, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
core_info_t *core_info = NULL;
|
||||
core_info_list_t *core_info_list = NULL;
|
||||
struct string_list *contents = NULL;
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if (!settings)
|
||||
return;
|
||||
|
||||
contents = dir_list_new_special(
|
||||
struct string_list *contents = dir_list_new_special(
|
||||
settings->directory.libretro,
|
||||
DIR_LIST_CORES, NULL);
|
||||
|
||||
if (!contents)
|
||||
return;
|
||||
|
||||
core_info_list = (core_info_list_t*)calloc(1, sizeof(*core_info_list));
|
||||
if (!core_info_list)
|
||||
goto error;
|
||||
|
||||
core_info = (core_info_t*)calloc(contents->size, sizeof(*core_info));
|
||||
if (!core_info)
|
||||
goto error;
|
||||
|
||||
core_info_list->list = core_info;
|
||||
core_info_list->count = contents->size;
|
||||
|
||||
for (i = 0; i < contents->size; i++)
|
||||
{
|
||||
config_file_t *conf = NULL;
|
||||
char info_path[PATH_MAX_LENGTH];
|
||||
config_file_t *conf = NULL;
|
||||
char *new_core_name = NULL;
|
||||
|
||||
info_path[0] = '\0';
|
||||
|
||||
if (!string_is_equal(contents->elems[i].data, path))
|
||||
continue;
|
||||
|
||||
conf = core_info_list_iterate(contents, i);
|
||||
if (!core_info_list_iterate(info_path,
|
||||
sizeof(info_path), contents, i)
|
||||
&& path_is_valid(info_path))
|
||||
continue;
|
||||
|
||||
if (conf)
|
||||
conf = config_file_new(info_path);
|
||||
|
||||
if (!conf)
|
||||
continue;
|
||||
|
||||
if (config_get_string(conf, "corename",
|
||||
&new_core_name))
|
||||
{
|
||||
config_get_string(conf, "corename",
|
||||
&core_info[i].core_name);
|
||||
core_info[i].config_data = (void*)conf;
|
||||
strlcpy(s, new_core_name, len);
|
||||
free(new_core_name);
|
||||
}
|
||||
|
||||
core_info[i].path = strdup(contents->elems[i].data);
|
||||
|
||||
strlcpy(s, core_info[i].core_name, len);
|
||||
config_file_free(conf);
|
||||
break;
|
||||
}
|
||||
|
||||
error:
|
||||
if (contents)
|
||||
dir_list_free(contents);
|
||||
contents = NULL;
|
||||
core_info_list_free(core_info_list);
|
||||
}
|
||||
|
||||
size_t core_info_list_num_info_files(core_info_list_t *core_info_list)
|
||||
@ -699,10 +772,8 @@ size_t core_info_list_num_info_files(core_info_list_t *core_info_list)
|
||||
bool core_info_unsupported_content_path(const char *path)
|
||||
{
|
||||
size_t i;
|
||||
const char *delim;
|
||||
const char *archive_path = NULL;
|
||||
|
||||
delim = path_get_archive_delim(path);
|
||||
const char *delim = path_get_archive_delim(path);
|
||||
|
||||
if (delim)
|
||||
archive_path = delim - 1;
|
||||
@ -718,18 +789,19 @@ bool core_info_unsupported_content_path(const char *path)
|
||||
{
|
||||
const core_info_t *info = &core_info_curr_list->list[i];
|
||||
|
||||
if (string_list_find_elem(info->supported_extensions_list, "zip") ||
|
||||
string_list_find_elem(info->supported_extensions_list, "7z"))
|
||||
return false;
|
||||
if ( !string_list_find_elem(info->supported_extensions_list, "zip")
|
||||
&& !string_list_find_elem(info->supported_extensions_list, "7z"))
|
||||
continue;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < core_info_curr_list->count; i++)
|
||||
{
|
||||
const core_info_t *info = &core_info_curr_list->list[i];
|
||||
bool path_in_ext_list = string_list_find_elem(info->supported_extensions_list, path_get_extension(path));
|
||||
|
||||
if (path_in_ext_list)
|
||||
if (string_list_find_elem(info->supported_extensions_list, path_get_extension(path)))
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -739,8 +811,8 @@ bool core_info_unsupported_content_path(const char *path)
|
||||
bool core_info_database_supports_content_path(const char *database_path, const char *path)
|
||||
{
|
||||
size_t i;
|
||||
char *database;
|
||||
const char *delim;
|
||||
char *database = NULL;
|
||||
const char *delim = NULL;
|
||||
const char *archive_path = NULL;
|
||||
|
||||
if (!core_info_curr_list)
|
||||
@ -763,31 +835,30 @@ bool core_info_database_supports_content_path(const char *database_path, const c
|
||||
{
|
||||
const core_info_t *info = &core_info_curr_list->list[i];
|
||||
|
||||
if (string_list_find_elem(info->databases_list, database))
|
||||
{
|
||||
if (string_list_find_elem(info->supported_extensions_list, "zip") ||
|
||||
string_list_find_elem(info->supported_extensions_list, "7z"))
|
||||
{
|
||||
free(database);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (!string_list_find_elem(info->databases_list, database))
|
||||
continue;
|
||||
|
||||
if ( !string_list_find_elem(info->supported_extensions_list, "zip")
|
||||
&& !string_list_find_elem(info->supported_extensions_list, "7z"))
|
||||
continue;
|
||||
|
||||
free(database);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < core_info_curr_list->count; i++)
|
||||
{
|
||||
const core_info_t *info = &core_info_curr_list->list[i];
|
||||
bool path_in_ext_list = string_list_find_elem(info->supported_extensions_list, path_get_extension(path));
|
||||
|
||||
if (path_in_ext_list)
|
||||
{
|
||||
if (string_list_find_elem(info->databases_list, database))
|
||||
{
|
||||
free(database);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (!string_list_find_elem(info->supported_extensions_list, path_get_extension(path)))
|
||||
continue;
|
||||
|
||||
if (!string_list_find_elem(info->databases_list, database))
|
||||
continue;
|
||||
|
||||
free(database);
|
||||
return true;
|
||||
}
|
||||
|
||||
free(database);
|
||||
@ -805,12 +876,15 @@ bool core_info_list_get_display_name(core_info_list_t *core_info_list,
|
||||
for (i = 0; i < core_info_list->count; i++)
|
||||
{
|
||||
const core_info_t *info = &core_info_list->list[i];
|
||||
if (string_is_equal(path_basename(info->path), path_basename(path))
|
||||
&& info->display_name)
|
||||
{
|
||||
strlcpy(s, info->display_name, len);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!string_is_equal(path_basename(info->path), path_basename(path)))
|
||||
continue;
|
||||
|
||||
if (!info->display_name)
|
||||
continue;
|
||||
|
||||
strlcpy(s, info->display_name, len);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -818,40 +892,24 @@ bool core_info_list_get_display_name(core_info_list_t *core_info_list,
|
||||
|
||||
bool core_info_get_display_name(const char *path, char *s, size_t len)
|
||||
{
|
||||
char *core_name = NULL;
|
||||
char *display_name = NULL;
|
||||
config_file_t *conf = NULL;
|
||||
|
||||
if (!path_file_exists(path))
|
||||
return false;
|
||||
|
||||
conf = config_file_new(path);
|
||||
bool ret = true;
|
||||
char *tmp = NULL;
|
||||
config_file_t *conf = config_file_new(path);
|
||||
|
||||
if (!conf)
|
||||
return false;
|
||||
|
||||
config_get_string(conf, "corename",
|
||||
&core_name);
|
||||
config_get_string(conf, "display_name",
|
||||
&display_name);
|
||||
|
||||
if (!core_name || !display_name)
|
||||
{
|
||||
ret = false;
|
||||
goto error;
|
||||
}
|
||||
|
||||
config_file_free(conf);
|
||||
|
||||
snprintf(s, len,"%s",display_name);
|
||||
|
||||
free(core_name);
|
||||
free(display_name);
|
||||
|
||||
return true;
|
||||
if (config_get_string(conf, "display_name", &tmp))
|
||||
{
|
||||
snprintf(s, len, "%s", tmp);
|
||||
free(tmp);
|
||||
}
|
||||
|
||||
error:
|
||||
config_file_free(conf);
|
||||
if (core_name)
|
||||
free(core_name);
|
||||
if (display_name)
|
||||
free(display_name);
|
||||
return false;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -425,8 +425,8 @@ database_info_handle_t *database_info_dir_init(const char *dir,
|
||||
|
||||
if (path_is_compressed_file(path) && !path_contains_compressed_file(path))
|
||||
{
|
||||
struct string_list *archive_list =
|
||||
file_archive_get_file_list(path, NULL);
|
||||
struct string_list *archive_list = path_is_compressed_file(path) ?
|
||||
file_archive_get_file_list(path, NULL) : NULL;
|
||||
|
||||
if (archive_list && archive_list->size > 0)
|
||||
{
|
||||
@ -487,8 +487,8 @@ database_info_handle_t *database_info_file_init(const char *path,
|
||||
|
||||
if (path_is_compressed_file(path))
|
||||
{
|
||||
struct string_list *archive_list =
|
||||
file_archive_get_file_list(path, NULL);
|
||||
struct string_list *archive_list =path_is_compressed_file(path) ?
|
||||
file_archive_get_file_list(path, NULL) : NULL;
|
||||
|
||||
if (archive_list && archive_list->size > 0)
|
||||
{
|
||||
|
2
deps/SPIRV-Cross
vendored
2
deps/SPIRV-Cross
vendored
@ -1 +1 @@
|
||||
Subproject commit cc207e32c8668bfe5a5cc514394e7df8f020ecf6
|
||||
Subproject commit 2f48065ec190d676e9c80c18a208da1ad59dcf9e
|
2
deps/glslang/glslang
vendored
2
deps/glslang/glslang
vendored
@ -1 +1 @@
|
||||
Subproject commit 2eb0986f10392a4c2365869b17b59ad79226c440
|
||||
Subproject commit be8462149a3c150fc89db84e57ef06de3ab90d47
|
3
driver.c
3
driver.c
@ -18,6 +18,8 @@
|
||||
#include <compat/posix_string.h>
|
||||
#include <string/stdstring.h>
|
||||
|
||||
#include <audio/audio_resampler.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@ -30,7 +32,6 @@
|
||||
#include "msg_hash.h"
|
||||
|
||||
#include "audio/audio_driver.h"
|
||||
#include "audio/audio_resampler_driver.h"
|
||||
#include "camera/camera_driver.h"
|
||||
#include "record/record_driver.h"
|
||||
#include "location/location_driver.h"
|
||||
|
49
dynamic.c
49
dynamic.c
@ -36,6 +36,10 @@
|
||||
#include "cheevos.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NETWORKING
|
||||
#include "network/netplay/netplay.h"
|
||||
#endif
|
||||
|
||||
#include "dynamic.h"
|
||||
#include "command.h"
|
||||
|
||||
@ -239,16 +243,17 @@ static bool load_dynamic_core(void)
|
||||
RARCH_LOG("Loading dynamic libretro core from: \"%s\"\n",
|
||||
path_get(RARCH_PATH_CORE));
|
||||
lib_handle = dylib_load(path_get(RARCH_PATH_CORE));
|
||||
if (!lib_handle)
|
||||
{
|
||||
RARCH_ERR("Failed to open libretro core: \"%s\"\n",
|
||||
path_get(RARCH_PATH_CORE));
|
||||
RARCH_ERR("Error(s): %s\n", dylib_error());
|
||||
runloop_msg_queue_push(msg_hash_to_str(MSG_FAILED_TO_OPEN_LIBRETRO_CORE), 1, 180, true);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
if (lib_handle)
|
||||
return true;
|
||||
|
||||
RARCH_ERR("Failed to open libretro core: \"%s\"\n",
|
||||
path_get(RARCH_PATH_CORE));
|
||||
RARCH_ERR("Error(s): %s\n", dylib_error());
|
||||
|
||||
runloop_msg_queue_push(msg_hash_to_str(MSG_FAILED_TO_OPEN_LIBRETRO_CORE), 1, 180, true);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static dylib_t libretro_get_system_info_lib(const char *path,
|
||||
@ -344,16 +349,19 @@ bool libretro_get_system_info(const char *path,
|
||||
{
|
||||
#ifdef HAVE_DYNAMIC
|
||||
struct retro_system_info dummy_info = {0};
|
||||
dylib_t lib = libretro_get_system_info_lib(path,
|
||||
&dummy_info, load_no_content);
|
||||
dylib_t lib = libretro_get_system_info_lib(
|
||||
path, &dummy_info, load_no_content);
|
||||
|
||||
if (!lib)
|
||||
return false;
|
||||
|
||||
memcpy(info, &dummy_info, sizeof(*info));
|
||||
info->library_name = strdup(dummy_info.library_name);
|
||||
info->library_version = strdup(dummy_info.library_version);
|
||||
info->library_name = strdup(dummy_info.library_name);
|
||||
info->library_version = strdup(dummy_info.library_version);
|
||||
|
||||
if (dummy_info.valid_extensions)
|
||||
info->valid_extensions = strdup(dummy_info.valid_extensions);
|
||||
|
||||
dylib_close(lib);
|
||||
#else
|
||||
if (!libretro_get_system_info_static(info, load_no_content))
|
||||
@ -804,11 +812,13 @@ static bool mmap_preprocess_descriptors(rarch_memory_descriptor_t *first, unsign
|
||||
if ((desc->core.len & (desc->core.len - 1)) != 0)
|
||||
return false;
|
||||
|
||||
desc->core.select = top_addr & ~mmap_inflate(mmap_add_bits_down(desc->core.len - 1), desc->core.disconnect);
|
||||
desc->core.select = top_addr & ~mmap_inflate(mmap_add_bits_down(desc->core.len - 1),
|
||||
desc->core.disconnect);
|
||||
}
|
||||
|
||||
if (desc->core.len == 0)
|
||||
desc->core.len = mmap_add_bits_down(mmap_reduce(top_addr & ~desc->core.select, desc->core.disconnect)) + 1;
|
||||
desc->core.len = mmap_add_bits_down(mmap_reduce(top_addr & ~desc->core.select,
|
||||
desc->core.disconnect)) + 1;
|
||||
|
||||
if (desc->core.start & ~desc->core.select)
|
||||
return false;
|
||||
@ -975,7 +985,8 @@ bool rarch_environment_cb(unsigned cmd, void *data)
|
||||
{
|
||||
struct retro_variable *var = (struct retro_variable*)data;
|
||||
|
||||
if (var) {
|
||||
if (var)
|
||||
{
|
||||
RARCH_LOG("Environ GET_VARIABLE %s: not implemented.\n", var->key);
|
||||
var->value = NULL;
|
||||
}
|
||||
@ -1286,6 +1297,12 @@ bool rarch_environment_cb(unsigned cmd, void *data)
|
||||
#ifdef HAVE_THREADS
|
||||
{
|
||||
RARCH_LOG("Environ SET_AUDIO_CALLBACK.\n");
|
||||
#ifdef HAVE_NETWORKING
|
||||
if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_ENABLED, NULL))
|
||||
return false;
|
||||
#endif
|
||||
if (recording_driver_get_data_ptr()) /* A/V sync is a must. */
|
||||
return false;
|
||||
audio_driver_set_callback(data);
|
||||
}
|
||||
#endif
|
||||
|
@ -80,7 +80,7 @@ void fill_pathname_expand_special(char *out_path,
|
||||
application_dir[0] = '\0';
|
||||
|
||||
fill_pathname_application_path(application_dir, sizeof(application_dir));
|
||||
path_basedir(application_dir);
|
||||
path_basedir_wrapper(application_dir);
|
||||
|
||||
src_size = strlcpy(out_path, application_dir, size);
|
||||
retro_assert(src_size < size);
|
||||
@ -122,7 +122,7 @@ void fill_pathname_abbreviate_special(char *out_path,
|
||||
notations [2] = NULL;
|
||||
|
||||
fill_pathname_application_path(application_dir, sizeof(application_dir));
|
||||
path_basedir(application_dir);
|
||||
path_basedir_wrapper(application_dir);
|
||||
|
||||
for (i = 0; candidates[i]; i++)
|
||||
{
|
||||
@ -458,3 +458,79 @@ void fill_pathname_application_special(char *s, size_t len, enum application_spe
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fill_short_pathname_representation:
|
||||
* @out_rep : output representation
|
||||
* @in_path : input path
|
||||
* @size : size of output representation
|
||||
*
|
||||
* Generates a short representation of path. It should only
|
||||
* be used for displaying the result; the output representation is not
|
||||
* binding in any meaningful way (for a normal path, this is the same as basename)
|
||||
* In case of more complex URLs, this should cut everything except for
|
||||
* the main image file.
|
||||
*
|
||||
* E.g.: "/path/to/game.img" -> game.img
|
||||
* "/path/to/myarchive.7z#folder/to/game.img" -> game.img
|
||||
*/
|
||||
void fill_short_pathname_representation_wrapper(char* out_rep,
|
||||
const char *in_path, size_t size)
|
||||
{
|
||||
char path_short[PATH_MAX_LENGTH];
|
||||
#ifdef HAVE_COMPRESSION
|
||||
char *last_slash = NULL;
|
||||
#endif
|
||||
|
||||
path_short[0] = '\0';
|
||||
|
||||
fill_pathname(path_short, path_basename(in_path), "",
|
||||
sizeof(path_short));
|
||||
|
||||
#ifdef HAVE_COMPRESSION
|
||||
last_slash = find_last_slash(path_short);
|
||||
if (last_slash != NULL)
|
||||
{
|
||||
/* We handle paths like:
|
||||
* /path/to/file.7z#mygame.img
|
||||
* short_name: mygame.img:
|
||||
*
|
||||
* We check whether something is actually
|
||||
* after the hash to avoid going over the buffer.
|
||||
*/
|
||||
retro_assert(strlen(last_slash) > 1);
|
||||
strlcpy(out_rep, last_slash + 1, size);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
fill_short_pathname_representation(out_rep, in_path, size);
|
||||
}
|
||||
|
||||
/**
|
||||
* path_basedir:
|
||||
* @path : path
|
||||
*
|
||||
* Extracts base directory by mutating path.
|
||||
* Keeps trailing '/'.
|
||||
**/
|
||||
void path_basedir_wrapper(char *path)
|
||||
{
|
||||
char *last = NULL;
|
||||
if (strlen(path) < 2)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_COMPRESSION
|
||||
/* We want to find the directory with the archive in basedir. */
|
||||
last = (char*)path_get_archive_delim(path);
|
||||
if (last)
|
||||
*last = '\0';
|
||||
#endif
|
||||
|
||||
last = find_last_slash(path);
|
||||
|
||||
if (last)
|
||||
last[1] = '\0';
|
||||
else
|
||||
snprintf(path, 3, ".%s", path_default_slash());
|
||||
}
|
||||
|
@ -100,6 +100,33 @@ enum application_special_type
|
||||
APPLICATION_SPECIAL_DIRECTORY_ASSETS_ZARCH_ICONS
|
||||
};
|
||||
|
||||
/**
|
||||
* fill_short_pathname_representation:
|
||||
* @out_rep : output representation
|
||||
* @in_path : input path
|
||||
* @size : size of output representation
|
||||
*
|
||||
* Generates a short representation of path. It should only
|
||||
* be used for displaying the result; the output representation is not
|
||||
* binding in any meaningful way (for a normal path, this is the same as basename)
|
||||
* In case of more complex URLs, this should cut everything except for
|
||||
* the main image file.
|
||||
*
|
||||
* E.g.: "/path/to/game.img" -> game.img
|
||||
* "/path/to/myarchive.7z#folder/to/game.img" -> game.img
|
||||
*/
|
||||
void fill_short_pathname_representation_wrapper(char* out_rep,
|
||||
const char *in_path, size_t size);
|
||||
|
||||
/**
|
||||
* path_basedir:
|
||||
* @path : path
|
||||
*
|
||||
* Extracts base directory by mutating path.
|
||||
* Keeps trailing '/'.
|
||||
**/
|
||||
void path_basedir_wrapper(char *path);
|
||||
|
||||
const char *file_path_str(enum file_path_enum enum_idx);
|
||||
|
||||
bool fill_pathname_application_data(char *s, size_t len);
|
||||
|
@ -390,7 +390,10 @@ static int frontend_ctr_parse_drive_list(void *data)
|
||||
return -1;
|
||||
|
||||
menu_entries_append_enum(list,
|
||||
"sdmc:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"sdmc:/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
@ -640,9 +640,14 @@ static int frontend_darwin_parse_drive_list(void *data)
|
||||
CFSearchPathForDirectoriesInDomains(CFDocumentDirectory, CFUserDomainMask, 1, home_dir_buf, sizeof(home_dir_buf));
|
||||
|
||||
menu_entries_append_enum(list,
|
||||
home_dir_buf, "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
menu_entries_append_enum(list, "/", "",
|
||||
MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
home_dir_buf,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list, "/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
|
||||
ret = 0;
|
||||
|
||||
|
@ -472,14 +472,26 @@ static int frontend_gx_parse_drive_list(void *data)
|
||||
file_list_t *list = (file_list_t*)data;
|
||||
#ifdef HW_RVL
|
||||
menu_entries_append_enum(list,
|
||||
"sd:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"sd:/",
|
||||
msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"usb:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"usb:/",
|
||||
msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#endif
|
||||
menu_entries_append_enum(list,
|
||||
"carda:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"carda:/",
|
||||
msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"cardb:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"cardb:/",
|
||||
msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
@ -58,9 +58,11 @@
|
||||
#include "../../defaults.h"
|
||||
#include "../../retroarch.h"
|
||||
#include "../../verbosity.h"
|
||||
#include "../../paths.h"
|
||||
#include "platform_linux.h"
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
#include "../../menu/menu_driver.h"
|
||||
#include "../../menu/menu_display.h"
|
||||
#include "../../menu/menu_entries.h"
|
||||
#endif
|
||||
@ -1857,24 +1859,29 @@ static int frontend_linux_parse_drive_list(void *data)
|
||||
menu_entries_append_enum(list,
|
||||
app_dir,
|
||||
msg_hash_to_str(MSG_APPLICATION_DIR),
|
||||
MSG_APPLICATION_DIR, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
internal_storage_app_path,
|
||||
msg_hash_to_str(MSG_EXTERNAL_APPLICATION_DIR),
|
||||
MSG_EXTERNAL_APPLICATION_DIR,
|
||||
FILE_TYPE_DIRECTORY, 0, 0);
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
internal_storage_path,
|
||||
msg_hash_to_str(MSG_INTERNAL_STORAGE),
|
||||
MSG_INTERNAL_STORAGE, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/storage",
|
||||
msg_hash_to_str(MSG_REMOVABLE_STORAGE),
|
||||
MSG_REMOVABLE_STORAGE, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#endif
|
||||
|
||||
menu_entries_append_enum(list, "/", "",
|
||||
MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
menu_entries_append_enum(list, "/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
@ -1901,7 +1908,7 @@ static bool frontend_linux_set_fork(enum frontend_fork fork_mode)
|
||||
{
|
||||
char executable_path[PATH_MAX_LENGTH] = {0};
|
||||
fill_pathname_application_path(executable_path, sizeof(executable_path));
|
||||
config_set_active_core_path(executable_path);
|
||||
path_set(RARCH_PATH_CORE, executable_path);
|
||||
}
|
||||
command_event(CMD_EVENT_QUIT, NULL);
|
||||
break;
|
||||
|
@ -497,29 +497,65 @@ static int frontend_ps3_parse_drive_list(void *data)
|
||||
file_list_t *list = (file_list_t*)data;
|
||||
|
||||
menu_entries_append_enum(list,
|
||||
"/app_home/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/app_home/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_hdd0/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_hdd0/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_hdd1/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_hdd1/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_bdvd/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_bdvd/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/host_root/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/host_root/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_usb000/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_usb000/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_usb001/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_usb001/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_usb002/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_usb002/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_usb003/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_usb003/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_usb004/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_usb004/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_usb005/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_usb005/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"/dev_usb006/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"/dev_usb006/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
@ -468,18 +468,36 @@ static int frontend_psp_parse_drive_list(void *data)
|
||||
|
||||
#ifdef VITA
|
||||
menu_entries_append_enum(list,
|
||||
"app0:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"app0:/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"ur0:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"ur0:/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"ux0:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"ux0:/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#else
|
||||
menu_entries_append_enum(list,
|
||||
"ms0:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"ms0:/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"ef0:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"ef0:/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"host0:/", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"host0:/",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -138,8 +138,10 @@ static int frontend_wiiu_parse_drive_list(void *data)
|
||||
if (!list)
|
||||
return -1;
|
||||
|
||||
menu_entries_append_enum(list,
|
||||
WIIU_SD_PATH, "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
menu_entries_append_enum(list, WIIU_SD_PATH,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -236,7 +236,10 @@ static int frontend_win32_parse_drive_list(void *data)
|
||||
drive[0] = 'A' + i;
|
||||
if (drives & (1 << i))
|
||||
menu_entries_append_enum(list,
|
||||
drive, "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
drive,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1373,18 +1373,36 @@ static int frontend_xdk_parse_drive_list(void *data)
|
||||
|
||||
#if defined(_XBOX1)
|
||||
menu_entries_append_enum(list,
|
||||
"C:", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"C:",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"D:", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"D:",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"E:", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"E:",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"F:", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"F:",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
menu_entries_append_enum(list,
|
||||
"G:", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"G:",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#elif defined(_XBOX360)
|
||||
menu_entries_append_enum(list,
|
||||
"game:", "", MSG_UNKNOWN, FILE_TYPE_DIRECTORY, 0, 0);
|
||||
"game:",
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
|
||||
MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR,
|
||||
MENU_SETTING_ACTION, 0, 0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
#include <gfx/math/matrix_4x4.h>
|
||||
#include <gfx/gl_capabilities.h>
|
||||
|
||||
#include "../drivers/gl_symlinks.h"
|
||||
#include "../video_coord_array.h"
|
||||
@ -49,3 +50,53 @@ void gl_ff_matrix(const math_matrix_4x4 *mat)
|
||||
glLoadMatrixf(ident.data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* This function should only be used without mipmaps
|
||||
and when data == NULL */
|
||||
void gl_load_texture_image(GLenum target,
|
||||
GLint level,
|
||||
GLint internalFormat,
|
||||
GLsizei width,
|
||||
GLsizei height,
|
||||
GLint border,
|
||||
GLenum format,
|
||||
GLenum type,
|
||||
const GLvoid * data)
|
||||
{
|
||||
#ifndef HAVE_PSGL
|
||||
#ifdef HAVE_OPENGLES2
|
||||
if (gl_check_capability(GL_CAPS_TEX_STORAGE_EXT))
|
||||
{
|
||||
switch (internalFormat)
|
||||
{
|
||||
case GL_RGB:
|
||||
internalFormat = GL_RGB565;
|
||||
break;
|
||||
case GL_RGBA:
|
||||
internalFormat = GL_RGBA8_OES;
|
||||
break;
|
||||
case GL_BGRA_EXT:
|
||||
internalFormat = GL_BGRA8_EXT;
|
||||
break;
|
||||
}
|
||||
glTexStorage2DEXT(target, 1, internalFormat, width, height);
|
||||
}
|
||||
#else
|
||||
if (gl_check_capability(GL_CAPS_TEX_STORAGE))
|
||||
{
|
||||
switch (internalFormat)
|
||||
{
|
||||
case GL_RGB:
|
||||
internalFormat = GL_RGB565;
|
||||
break;
|
||||
case GL_RGBA:
|
||||
internalFormat = GL_RGBA8;
|
||||
break;
|
||||
}
|
||||
glTexStorage2D(target, 1, internalFormat, width, height);
|
||||
}
|
||||
#endif
|
||||
else
|
||||
#endif
|
||||
glTexImage2D(target, level, internalFormat, width, height, border, format, type, data);
|
||||
}
|
||||
|
@ -177,5 +177,14 @@ static INLINE unsigned gl_wrap_type_to_enum(enum gfx_wrap_type type)
|
||||
bool gl_query_core_context_in_use(void);
|
||||
void gl_ff_vertex(const struct video_coords *coords);
|
||||
void gl_ff_matrix(const math_matrix_4x4 *mat);
|
||||
void gl_load_texture_image(GLenum target,
|
||||
GLint level,
|
||||
GLint internalFormat,
|
||||
GLsizei width,
|
||||
GLsizei height,
|
||||
GLint border,
|
||||
GLenum format,
|
||||
GLenum type,
|
||||
const GLvoid * data);
|
||||
|
||||
#endif
|
||||
|
@ -46,6 +46,8 @@ static bool g_x11_has_focus = false;
|
||||
static bool g_x11_true_full = false;
|
||||
Display *g_x11_dpy = NULL;
|
||||
|
||||
unsigned g_x11_screen = 0;
|
||||
|
||||
Colormap g_x11_cmap;
|
||||
Window g_x11_win;
|
||||
|
||||
@ -57,8 +59,6 @@ static Atom g_x11_quit_atom;
|
||||
static XIM g_x11_xim;
|
||||
static XIC g_x11_xic;
|
||||
|
||||
unsigned g_x11_screen;
|
||||
|
||||
#define XA_INIT(x) XA##x = XInternAtom(dpy, #x, False)
|
||||
#define _NET_WM_STATE_ADD 1
|
||||
#define MOVERESIZE_GRAVITY_CENTER 5
|
||||
|
@ -606,14 +606,9 @@ static void gl_init_textures_reference(gl_t *gl, unsigned i,
|
||||
if (gl->egl_images)
|
||||
return;
|
||||
|
||||
#ifndef HAVE_OPENGLES2
|
||||
if (gl_check_capability(GL_CAPS_TEX_STORAGE))
|
||||
glTexStorage2D(GL_TEXTURE_2D, 1, internal_fmt, gl->tex_w, gl->tex_h);
|
||||
else
|
||||
#endif
|
||||
glTexImage2D(GL_TEXTURE_2D,
|
||||
0, internal_fmt, gl->tex_w, gl->tex_h, 0, texture_type,
|
||||
texture_fmt, gl->empty_buf ? gl->empty_buf : NULL);
|
||||
gl_load_texture_image(GL_TEXTURE_2D,
|
||||
0, internal_fmt, gl->tex_w, gl->tex_h, 0, texture_type,
|
||||
texture_fmt, gl->empty_buf ? gl->empty_buf : NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -647,7 +642,7 @@ static void gl_init_textures(gl_t *gl, const video_info_t *video)
|
||||
texture_fmt = gl->texture_fmt;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OPENGLES
|
||||
#ifdef HAVE_OPENGLES2
|
||||
/* GLES is picky about which format we use here.
|
||||
* Without extensions, we can *only* render to 16-bit FBOs. */
|
||||
|
||||
@ -655,12 +650,7 @@ static void gl_init_textures(gl_t *gl, const video_info_t *video)
|
||||
{
|
||||
if (gl_check_capability(GL_CAPS_ARGB8))
|
||||
{
|
||||
#if !defined(HAVE_PSGL)
|
||||
if (gl_check_capability(GL_CAPS_GLES3_SUPPORTED))
|
||||
internal_fmt = GL_RGBA8_OES;
|
||||
else
|
||||
#endif
|
||||
internal_fmt = GL_RGBA;
|
||||
internal_fmt = GL_RGBA;
|
||||
texture_type = GL_RGBA;
|
||||
texture_fmt = GL_UNSIGNED_BYTE;
|
||||
}
|
||||
|
@ -163,18 +163,12 @@ static bool gl_recreate_fbo(
|
||||
glDeleteTextures(1, texture);
|
||||
glGenTextures(1, texture);
|
||||
glBindTexture(GL_TEXTURE_2D, *texture);
|
||||
#if !defined(HAVE_OPENGLES2) && !defined(HAVE_PSGL)
|
||||
if (gl_check_capability(GL_CAPS_TEX_STORAGE))
|
||||
glTexStorage2D(GL_TEXTURE_2D, 1, RARCH_GL_INTERNAL_FORMAT32,
|
||||
fbo_rect->width, fbo_rect->height);
|
||||
else
|
||||
#endif
|
||||
glTexImage2D(GL_TEXTURE_2D,
|
||||
0, RARCH_GL_INTERNAL_FORMAT32,
|
||||
fbo_rect->width,
|
||||
fbo_rect->height,
|
||||
0, RARCH_GL_TEXTURE_TYPE32,
|
||||
RARCH_GL_FORMAT32, NULL);
|
||||
gl_load_texture_image(GL_TEXTURE_2D,
|
||||
0, RARCH_GL_INTERNAL_FORMAT32,
|
||||
fbo_rect->width,
|
||||
fbo_rect->height,
|
||||
0, RARCH_GL_TEXTURE_TYPE32,
|
||||
RARCH_GL_FORMAT32, NULL);
|
||||
|
||||
glFramebufferTexture2D(RARCH_GL_FRAMEBUFFER,
|
||||
RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
|
||||
@ -232,14 +226,16 @@ void gl_check_fbo_dimensions(gl_t *gl)
|
||||
/* Check if we have to recreate our FBO textures. */
|
||||
for (i = 0; i < gl->fbo_pass; i++)
|
||||
{
|
||||
bool update_feedback = gl->fbo_feedback_enable
|
||||
&& (unsigned)i == gl->fbo_feedback_pass;
|
||||
struct video_fbo_rect *fbo_rect = &gl->fbo_rect[i];
|
||||
bool check_dimensions =
|
||||
(fbo_rect->max_img_width > fbo_rect->width) ||
|
||||
(fbo_rect->max_img_height > fbo_rect->height);
|
||||
if (fbo_rect && check_dimensions)
|
||||
gl_check_fbo_dimension(gl, i, update_feedback);
|
||||
if (fbo_rect)
|
||||
{
|
||||
bool update_feedback = gl->fbo_feedback_enable
|
||||
&& (unsigned)i == gl->fbo_feedback_pass;
|
||||
|
||||
if ((fbo_rect->max_img_width > fbo_rect->width) ||
|
||||
(fbo_rect->max_img_height > fbo_rect->height))
|
||||
gl_check_fbo_dimension(gl, i, update_feedback);
|
||||
}
|
||||
}
|
||||
}
|
||||
void gl_renderchain_render(gl_t *gl,
|
||||
@ -528,15 +524,9 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture)
|
||||
if (fp_fbo && gl->has_fp_fbo)
|
||||
{
|
||||
RARCH_LOG("[GL]: FBO pass #%d is floating-point.\n", i);
|
||||
#if !defined(HAVE_PSGL)
|
||||
if (gl_check_capability(GL_CAPS_TEX_STORAGE))
|
||||
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA32F,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height);
|
||||
else
|
||||
#endif
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height,
|
||||
0, GL_RGBA, GL_FLOAT, NULL);
|
||||
gl_load_texture_image(GL_TEXTURE_2D, 0, GL_RGBA32F,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height,
|
||||
0, GL_RGBA, GL_FLOAT, NULL);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -565,14 +555,10 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture)
|
||||
gl->has_srgb_fbo_gles3 ? GL_RGBA : GL_SRGB_ALPHA_EXT,
|
||||
GL_UNSIGNED_BYTE, NULL);
|
||||
#else
|
||||
if (gl_check_capability(GL_CAPS_TEX_STORAGE))
|
||||
glTexStorage2D(GL_TEXTURE_2D, 1, GL_SRGB8_ALPHA8,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height);
|
||||
else
|
||||
glTexImage2D(GL_TEXTURE_2D,
|
||||
0, GL_SRGB8_ALPHA8,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||
gl_load_texture_image(GL_TEXTURE_2D,
|
||||
0, GL_SRGB8_ALPHA8,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
@ -586,14 +572,10 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture)
|
||||
#else
|
||||
/* Avoid potential performance
|
||||
* reductions on particular platforms. */
|
||||
if (gl_check_capability(GL_CAPS_TEX_STORAGE))
|
||||
glTexStorage2D(GL_TEXTURE_2D, 1, RARCH_GL_INTERNAL_FORMAT32,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height);
|
||||
else
|
||||
glTexImage2D(GL_TEXTURE_2D,
|
||||
0, RARCH_GL_INTERNAL_FORMAT32,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0,
|
||||
RARCH_GL_TEXTURE_TYPE32, RARCH_GL_FORMAT32, NULL);
|
||||
gl_load_texture_image(GL_TEXTURE_2D,
|
||||
0, RARCH_GL_INTERNAL_FORMAT32,
|
||||
gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0,
|
||||
RARCH_GL_TEXTURE_TYPE32, RARCH_GL_FORMAT32, NULL);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -1,65 +1,69 @@
|
||||
#include "shaders_common.h"
|
||||
|
||||
static const char *stock_fragment_xmb_snow = GLSL(
|
||||
uniform float time;
|
||||
vec2 res = vec2(1920*3, 1080*3);
|
||||
static const char* stock_fragment_xmb_snow = GLSL(
|
||||
uniform float time;
|
||||
uniform vec2 OutputSize;
|
||||
|
||||
// High quality = larger patterns
|
||||
// quality * 84 is the number of seconds in a loop
|
||||
float quality = 8.0;
|
||||
float baseScale = 3.5; // [1.0 .. 10.0]
|
||||
float density = 0.7; // [0.01 .. 1.0]
|
||||
float speed = 0.25; // [0.1 .. 1.0]
|
||||
|
||||
float Cellular2D(vec2 P) {
|
||||
// https://github.com/BrianSharpe/Wombat/blob/master/Cellular2D.glsl
|
||||
vec2 Pi = floor(P);
|
||||
vec2 Pf = P - Pi;
|
||||
vec4 Pt = vec4( Pi.xy, Pi.xy + 1.0 );
|
||||
Pt = Pt - floor(Pt * ( 1.0 / 71.0 )) * 71.0;
|
||||
Pt += vec2( 26.0, 161.0 ).xyxy;
|
||||
Pt *= Pt;
|
||||
Pt = Pt.xzxz * Pt.yyww;
|
||||
vec4 hash_x = fract( Pt * ( 1.0 / 951.135664 ) );
|
||||
vec4 hash_y = fract( Pt * ( 1.0 / 642.949883 ) );
|
||||
hash_x = hash_x * 2.0 - 1.0;
|
||||
hash_y = hash_y * 2.0 - 1.0;
|
||||
const float JITTER_WINDOW = 0.25;
|
||||
hash_x = ( ( hash_x * hash_x * hash_x ) - sign( hash_x ) ) * JITTER_WINDOW + vec4( 0.0, 1.0, 0.0, 1.0 );
|
||||
hash_y = ( ( hash_y * hash_y * hash_y ) - sign( hash_y ) ) * JITTER_WINDOW + vec4( 0.0, 0.0, 1.0, 1.0 );
|
||||
vec4 dx = Pf.xxxx - hash_x;
|
||||
vec4 dy = Pf.yyyy - hash_y;
|
||||
vec4 d = dx * dx + dy * dy;
|
||||
d.xy = min(d.xy, d.zw);
|
||||
return min(d.x, d.y) * ( 1.0 / 1.125 );
|
||||
}
|
||||
float rand(vec2 co)
|
||||
{
|
||||
return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
|
||||
}
|
||||
|
||||
float snow(vec2 pos, float time, float scale) {
|
||||
// add wobble
|
||||
pos.x += cos(pos.y*4.0 + time*3.14159*2.0 + 1.0/scale)/(8.0/scale);
|
||||
// add gravity
|
||||
pos += time*scale*vec2(-0.5, 1.0);
|
||||
return max(
|
||||
1.0 - Cellular2D(mod(pos/scale, scale*quality)*16.0)*1024.0,
|
||||
0.0
|
||||
) * (scale*0.5 + 0.5);
|
||||
}
|
||||
float dist_func(vec2 distv)
|
||||
{
|
||||
float dist = sqrt((distv.x * distv.x) + (distv.y * distv.y)) * (40.0 / baseScale);
|
||||
dist = clamp(dist, 0.0, 1.0);
|
||||
return cos(dist * (3.14159265358 * 0.5)) * 0.5;
|
||||
}
|
||||
|
||||
void main( void ) {
|
||||
float winscale = max(res.x, res.y);
|
||||
float tim = mod(time/8.0, 84.0*quality);
|
||||
vec2 pos = gl_FragCoord.xy/winscale;
|
||||
float a = 0.0;
|
||||
// Each of these is a layer of snow
|
||||
// Remove some for better performance
|
||||
// Changing the scale (3rd value) will mess with the looping
|
||||
a += snow(pos, tim, 1.0);
|
||||
a += snow(pos, tim, 0.7);
|
||||
a += snow(pos, tim, 0.6);
|
||||
a += snow(pos, tim, 0.5);
|
||||
a += snow(pos, tim, 0.4);
|
||||
a += snow(pos, tim, 0.3);
|
||||
a += snow(pos, tim, 0.25);
|
||||
a += snow(pos, tim, 0.125);
|
||||
a = a * min(pos.y*4.0, 1.0);
|
||||
gl_FragColor = vec4(1.0, 1.0, 1.0, a);
|
||||
}
|
||||
float random_dots(vec2 co)
|
||||
{
|
||||
float part = 1.0 / 20.0;
|
||||
vec2 cd = floor(co / part);
|
||||
float p = rand(cd);
|
||||
|
||||
if (p > 0.005 * (density * 40.0))
|
||||
return 0.0;
|
||||
|
||||
vec2 dpos = (vec2(fract(p * 2.0) , p) + vec2(2.0, 2.0)) * 0.25;
|
||||
|
||||
vec2 cellpos = fract(co / part);
|
||||
vec2 distv = (cellpos - dpos);
|
||||
|
||||
return dist_func(distv);
|
||||
}
|
||||
|
||||
float snow(vec2 pos, float time, float scale)
|
||||
{
|
||||
// add wobble
|
||||
pos.x += cos(pos.y * 1.2 + time * 3.14159 * 2.0 + 1.0 / scale) / (8.0 / scale) * 4.0;
|
||||
// add gravity
|
||||
pos += time * scale * vec2(-0.5, 1.0) * 4.0;
|
||||
return random_dots(pos / scale) * (scale * 0.5 + 0.5);
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
float tim = time * 0.4 * speed;
|
||||
vec2 pos = gl_FragCoord.xy / OutputSize.xx;
|
||||
float a = 0.0;
|
||||
// Each of these is a layer of snow
|
||||
// Remove some for better performance
|
||||
// Changing the scale (3rd value) will mess with the looping
|
||||
a += snow(pos, tim, 1.0);
|
||||
a += snow(pos, tim, 0.7);
|
||||
a += snow(pos, tim, 0.6);
|
||||
a += snow(pos, tim, 0.5);
|
||||
a += snow(pos, tim, 0.4);
|
||||
a += snow(pos, tim, 0.3);
|
||||
a += snow(pos, tim, 0.25);
|
||||
a += snow(pos, tim, 0.125);
|
||||
a = a * min(pos.y * 4.0, 1.0);
|
||||
gl_FragColor = vec4(1.0, 1.0, 1.0, a);
|
||||
}
|
||||
|
||||
);
|
||||
|
@ -1,52 +1,69 @@
|
||||
#include "shaders_common.h"
|
||||
|
||||
static const char *stock_fragment_xmb_simple_snow = GLSL(
|
||||
uniform float time;
|
||||
vec2 res = vec2(1920*3, 1080*3);
|
||||
float quality = 8.0;
|
||||
uniform float time;
|
||||
uniform vec2 OutputSize;
|
||||
|
||||
float Cellular2D(vec2 P) {
|
||||
vec2 Pi = floor(P);
|
||||
vec2 Pf = P - Pi;
|
||||
vec2 Pt = vec2( Pi.x, Pi.y + 1.0 );
|
||||
Pt = Pt - floor(Pt * ( 1.0 / 71.0 )) * 71.0;
|
||||
Pt += vec2( 26.0, 161.0 );
|
||||
Pt *= Pt;
|
||||
Pt = Pt.xy * Pt.yx;
|
||||
float hash_x = fract( Pt.x * ( 1.0 / 951.135664 ) ) * 2.0 - 1.0;
|
||||
float hash_y = fract( Pt.y * ( 1.0 / 642.949883 ) ) * 2.0 - 1.0;
|
||||
const float JITTER_WINDOW = 0.25;
|
||||
hash_x = ( ( hash_x * hash_x * hash_x ) - sign( hash_x ) ) * JITTER_WINDOW;
|
||||
hash_y = ( ( hash_y * hash_y * hash_y ) - sign( hash_y ) ) * JITTER_WINDOW;
|
||||
vec2 dd = vec2(Pf.x - hash_x, Pf.y - hash_y);
|
||||
float d = dd.x * dd.x + dd.y * dd.y;
|
||||
return d * ( 1.0 / 1.125 );
|
||||
}
|
||||
float baseScale = 1.25; // [1.0 .. 10.0]
|
||||
float density = 0.5; // [0.01 .. 1.0]
|
||||
float speed = 0.15; // [0.1 .. 1.0]
|
||||
|
||||
float snow(vec2 pos, float time, float scale) {
|
||||
pos.x += cos(pos.y*4.0 + time*3.14159*2.0 + 1.0/scale)/(8.0/scale);
|
||||
pos += time*scale*vec2(-0.5, 1.0);
|
||||
return max(
|
||||
1.0 - Cellular2D(mod(pos/scale, scale*quality)*16.0)*1024.0,
|
||||
0.0
|
||||
) * (scale*0.5 + 0.5);
|
||||
}
|
||||
float rand(vec2 co)
|
||||
{
|
||||
return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
|
||||
}
|
||||
|
||||
void main( void ) {
|
||||
float winscale = max(res.x, res.y);
|
||||
float tim = mod(time/8.0, 84.0*quality);
|
||||
vec2 pos = gl_FragCoord.xy/winscale;
|
||||
float a = 0.0;
|
||||
a += snow(pos, tim, 1.0);
|
||||
a += snow(pos, tim, 0.7);
|
||||
a += snow(pos, tim, 0.6);
|
||||
a += snow(pos, tim, 0.5);
|
||||
a += snow(pos, tim, 0.4);
|
||||
a += snow(pos, tim, 0.3);
|
||||
a += snow(pos, tim, 0.25);
|
||||
a += snow(pos, tim, 0.125);
|
||||
a = a * min(pos.y*4.0, 1.0);
|
||||
gl_FragColor = vec4(1.0, 1.0, 1.0, a);
|
||||
}
|
||||
float dist_func(vec2 distv)
|
||||
{
|
||||
float dist = sqrt((distv.x * distv.x) + (distv.y * distv.y)) * (40.0 / baseScale);
|
||||
dist = clamp(dist, 0.0, 1.0);
|
||||
return cos(dist * (3.14159265358 * 0.5)) * 0.5;
|
||||
}
|
||||
|
||||
float random_dots(vec2 co)
|
||||
{
|
||||
float part = 1.0 / 20.0;
|
||||
vec2 cd = floor(co / part);
|
||||
float p = rand(cd);
|
||||
|
||||
if (p > 0.005 * (density * 40.0))
|
||||
return 0.0;
|
||||
|
||||
vec2 dpos = (vec2(fract(p * 2.0) , p) + vec2(2.0, 2.0)) * 0.25;
|
||||
|
||||
vec2 cellpos = fract(co / part);
|
||||
vec2 distv = (cellpos - dpos);
|
||||
|
||||
return dist_func(distv);
|
||||
}
|
||||
|
||||
float snow(vec2 pos, float time, float scale)
|
||||
{
|
||||
// add wobble
|
||||
pos.x += cos(pos.y * 1.2 + time * 3.14159 * 2.0 + 1.0 / scale) / (8.0 / scale) * 4.0;
|
||||
// add gravity
|
||||
pos += time * scale * vec2(-0.5, 1.0) * 4.0;
|
||||
return random_dots(pos / scale) * (scale * 0.5 + 0.5);
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
float tim = time * 0.4 * speed;
|
||||
vec2 pos = gl_FragCoord.xy / OutputSize.xx;
|
||||
float a = 0.0;
|
||||
// Each of these is a layer of snow
|
||||
// Remove some for better performance
|
||||
// Changing the scale (3rd value) will mess with the looping
|
||||
a += snow(pos, tim, 1.0);
|
||||
a += snow(pos, tim, 0.7);
|
||||
a += snow(pos, tim, 0.6);
|
||||
a += snow(pos, tim, 0.5);
|
||||
a += snow(pos, tim, 0.4);
|
||||
a += snow(pos, tim, 0.3);
|
||||
a += snow(pos, tim, 0.25);
|
||||
a += snow(pos, tim, 0.125);
|
||||
a = a * min(pos.y * 4.0, 1.0);
|
||||
gl_FragColor = vec4(1.0, 1.0, 1.0, a);
|
||||
}
|
||||
|
||||
);
|
||||
|
@ -118,6 +118,9 @@
|
||||
#ifndef GL_BGRA_EXT
|
||||
#define GL_BGRA_EXT 0x80E1
|
||||
#endif
|
||||
#ifndef GL_BGRA8_EXT
|
||||
#define GL_BGRA8_EXT 0x93A1
|
||||
#endif
|
||||
#ifdef IOS
|
||||
/* Stupid Apple. */
|
||||
#define RARCH_GL_INTERNAL_FORMAT32 GL_RGBA
|
||||
|
@ -208,20 +208,20 @@ static void vulkan_init_pipelines(
|
||||
#include "vulkan_shaders/font.frag.inc"
|
||||
;
|
||||
|
||||
static const uint32_t ribbon_vert[] =
|
||||
#include "vulkan_shaders/ribbon.vert.inc"
|
||||
static const uint32_t pipeline_ribbon_vert[] =
|
||||
#include "vulkan_shaders/pipeline_ribbon.vert.inc"
|
||||
;
|
||||
|
||||
static const uint32_t ribbon_frag[] =
|
||||
#include "vulkan_shaders/ribbon.frag.inc"
|
||||
static const uint32_t pipeline_ribbon_frag[] =
|
||||
#include "vulkan_shaders/pipeline_ribbon.frag.inc"
|
||||
;
|
||||
|
||||
static const uint32_t ribbon_simple_vert[] =
|
||||
#include "vulkan_shaders/ribbon_simple.vert.inc"
|
||||
static const uint32_t pipeline_ribbon_simple_vert[] =
|
||||
#include "vulkan_shaders/pipeline_ribbon_simple.vert.inc"
|
||||
;
|
||||
|
||||
static const uint32_t ribbon_simple_frag[] =
|
||||
#include "vulkan_shaders/ribbon_simple.frag.inc"
|
||||
static const uint32_t pipeline_ribbon_simple_frag[] =
|
||||
#include "vulkan_shaders/pipeline_ribbon_simple.frag.inc"
|
||||
;
|
||||
|
||||
unsigned i;
|
||||
@ -393,13 +393,13 @@ static void vulkan_init_pipelines(
|
||||
{
|
||||
if (i & 2)
|
||||
{
|
||||
module_info.codeSize = sizeof(ribbon_simple_vert);
|
||||
module_info.pCode = ribbon_simple_vert;
|
||||
module_info.codeSize = sizeof(pipeline_ribbon_simple_vert);
|
||||
module_info.pCode = pipeline_ribbon_simple_vert;
|
||||
}
|
||||
else
|
||||
{
|
||||
module_info.codeSize = sizeof(ribbon_vert);
|
||||
module_info.pCode = ribbon_vert;
|
||||
module_info.codeSize = sizeof(pipeline_ribbon_vert);
|
||||
module_info.pCode = pipeline_ribbon_vert;
|
||||
}
|
||||
|
||||
shader_stages[0].stage = VK_SHADER_STAGE_VERTEX_BIT;
|
||||
@ -409,13 +409,13 @@ static void vulkan_init_pipelines(
|
||||
|
||||
if (i & 2)
|
||||
{
|
||||
module_info.codeSize = sizeof(ribbon_simple_frag);
|
||||
module_info.pCode = ribbon_simple_frag;
|
||||
module_info.codeSize = sizeof(pipeline_ribbon_simple_frag);
|
||||
module_info.pCode = pipeline_ribbon_simple_frag;
|
||||
}
|
||||
else
|
||||
{
|
||||
module_info.codeSize = sizeof(ribbon_frag);
|
||||
module_info.pCode = ribbon_frag;
|
||||
module_info.codeSize = sizeof(pipeline_ribbon_frag);
|
||||
module_info.pCode = pipeline_ribbon_frag;
|
||||
}
|
||||
|
||||
shader_stages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||
@ -1282,7 +1282,7 @@ static void vulkan_set_rotation(void *data, unsigned rotation)
|
||||
if (!vk)
|
||||
return;
|
||||
|
||||
vk->rotation = 90 * rotation;
|
||||
vk->rotation = 270 * rotation;
|
||||
vulkan_set_projection(vk, &ortho, true);
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,77 @@
|
||||
#version 310 es
|
||||
|
||||
layout(location = 0) in vec3 VertexCoord;
|
||||
precision highp float;
|
||||
|
||||
layout(std140, set = 0, binding = 0) uniform UBO
|
||||
{
|
||||
vec4 OutputSize;
|
||||
float time;
|
||||
} constants;
|
||||
} global;
|
||||
|
||||
layout(location = 0) in vec2 vTexCoord;
|
||||
layout(location = 0) out vec4 FragColor;
|
||||
|
||||
float baseScale = 1.25; // [1.0 .. 10.0]
|
||||
float density = 0.5; // [0.01 .. 1.0]
|
||||
float speed = 0.15; // [0.1 .. 1.0]
|
||||
|
||||
float rand(vec2 co)
|
||||
{
|
||||
return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
|
||||
}
|
||||
|
||||
float dist_func(vec2 distv)
|
||||
{
|
||||
float dist = sqrt((distv.x * distv.x) + (distv.y * distv.y)) * (40.0 / baseScale);
|
||||
dist = clamp(dist, 0.0, 1.0);
|
||||
return cos(dist * (3.14159265358 * 0.5)) * 0.5;
|
||||
}
|
||||
|
||||
float random_dots(vec2 co)
|
||||
{
|
||||
float part = 1.0 / 20.0;
|
||||
vec2 cd = floor(co / vec2(part));
|
||||
float p = rand(cd);
|
||||
|
||||
if (p > 0.005 * (density * 40.0))
|
||||
return 0.0;
|
||||
|
||||
vec2 dpos = (vec2(fract(p * 2.0) , p) + vec2(2.0, 2.0)) * 0.25;
|
||||
|
||||
vec2 cellpos = fract(co / part);
|
||||
vec2 distv = (cellpos - dpos);
|
||||
|
||||
return dist_func(distv);
|
||||
}
|
||||
|
||||
float snow(vec2 pos, float time, float scale)
|
||||
{
|
||||
// add wobble
|
||||
pos.x += cos(pos.y * 1.2 + time * 3.14159 * 2.0 + 1.0 / scale) / (8.0 / scale) * 4.0;
|
||||
|
||||
// add gravity
|
||||
pos += time * scale * vec2(-0.5, 1.0) * 4.0;
|
||||
|
||||
return random_dots(pos / vec2(scale)) * (scale * 0.5 + 0.5);
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = MVPMatrix * vec4(VertexCoord, 0.0, 1.0);
|
||||
float tim = global.time * 0.4 * speed;
|
||||
vec2 pos = vTexCoord.xy / global.OutputSize.xx;
|
||||
float a = 0.0;
|
||||
|
||||
// Each of these is a layer of snow
|
||||
// Remove some for better performance
|
||||
// Changing the scale (3rd value) will mess with the looping
|
||||
a += snow(pos, tim, 1.0);
|
||||
a += snow(pos, tim, 0.7);
|
||||
a += snow(pos, tim, 0.6);
|
||||
a += snow(pos, tim, 0.5);
|
||||
a += snow(pos, tim, 0.4);
|
||||
a += snow(pos, tim, 0.3);
|
||||
a += snow(pos, tim, 0.25);
|
||||
a += snow(pos, tim, 0.125);
|
||||
a = a * min(pos.y * 4.0, 1.0);
|
||||
|
||||
FragColor = vec4(1.0, 1.0, 1.0, a);
|
||||
}
|
||||
|
408
gfx/drivers/vulkan_shaders/pipeline_snow_simple.frag.inc
Normal file
408
gfx/drivers/vulkan_shaders/pipeline_snow_simple.frag.inc
Normal file
@ -0,0 +1,408 @@
|
||||
{0x07230203,0x00010000,0x00080001,0x0000010e,
|
||||
0x00000000,0x00020011,0x00000001,0x0006000b,
|
||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,
|
||||
0x00000000,0x0003000e,0x00000000,0x00000001,
|
||||
0x0007000f,0x00000004,0x00000004,0x6e69616d,
|
||||
0x00000000,0x000000b7,0x0000010b,0x00030010,
|
||||
0x00000004,0x00000007,0x00030003,0x00000001,
|
||||
0x00000136,0x000a0004,0x475f4c47,0x4c474f4f,
|
||||
0x70635f45,0x74735f70,0x5f656c79,0x656e696c,
|
||||
0x7269645f,0x69746365,0x00006576,0x00080004,
|
||||
0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,
|
||||
0x69645f65,0x74636572,0x00657669,0x00040005,
|
||||
0x00000004,0x6e69616d,0x00000000,0x00050005,
|
||||
0x0000000b,0x646e6172,0x32667628,0x0000003b,
|
||||
0x00030005,0x0000000a,0x00006f63,0x00060005,
|
||||
0x0000000e,0x74736964,0x6e75665f,0x66762863,
|
||||
0x00003b32,0x00040005,0x0000000d,0x74736964,
|
||||
0x00000076,0x00070005,0x00000011,0x646e6172,
|
||||
0x645f6d6f,0x2873746f,0x3b326676,0x00000000,
|
||||
0x00030005,0x00000010,0x00006f63,0x00060005,
|
||||
0x00000018,0x776f6e73,0x32667628,0x3b31663b,
|
||||
0x003b3166,0x00030005,0x00000015,0x00736f70,
|
||||
0x00040005,0x00000016,0x656d6974,0x00000000,
|
||||
0x00040005,0x00000017,0x6c616373,0x00000065,
|
||||
0x00050005,0x0000001b,0x65736162,0x6c616353,
|
||||
0x00000065,0x00040005,0x0000001d,0x736e6564,
|
||||
0x00797469,0x00040005,0x0000001f,0x65657073,
|
||||
0x00000064,0x00040005,0x0000002c,0x74736964,
|
||||
0x00000000,0x00040005,0x0000004b,0x74726170,
|
||||
0x00000000,0x00030005,0x0000004d,0x00006463,
|
||||
0x00030005,0x00000053,0x00000070,0x00040005,
|
||||
0x00000054,0x61726170,0x0000006d,0x00040005,
|
||||
0x00000061,0x736f7064,0x00000000,0x00040005,
|
||||
0x0000006c,0x6c6c6563,0x00736f70,0x00040005,
|
||||
0x00000072,0x74736964,0x00000076,0x00040005,
|
||||
0x00000076,0x61726170,0x0000006d,0x00040005,
|
||||
0x0000009f,0x61726170,0x0000006d,0x00030005,
|
||||
0x000000a7,0x006d6974,0x00030005,0x000000a9,
|
||||
0x004f4255,0x00060006,0x000000a9,0x00000000,
|
||||
0x7074754f,0x69537475,0x0000657a,0x00050006,
|
||||
0x000000a9,0x00000001,0x656d6974,0x00000000,
|
||||
0x00040005,0x000000ab,0x626f6c67,0x00006c61,
|
||||
0x00030005,0x000000b5,0x00736f70,0x00050005,
|
||||
0x000000b7,0x78655476,0x726f6f43,0x00000064,
|
||||
0x00030005,0x000000bf,0x00000061,0x00040005,
|
||||
0x000000c0,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000c2,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000c4,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000c9,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000cb,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000cd,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000d2,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000d4,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000d6,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000da,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000dc,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000de,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000e2,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000e4,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000e6,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000eb,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000ed,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000ef,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000f3,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000f5,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000f7,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000fc,0x61726170,0x0000006d,0x00040005,
|
||||
0x000000fe,0x61726170,0x0000006d,0x00040005,
|
||||
0x00000100,0x61726170,0x0000006d,0x00050005,
|
||||
0x0000010b,0x67617246,0x6f6c6f43,0x00000072,
|
||||
0x00050048,0x000000a9,0x00000000,0x00000023,
|
||||
0x00000000,0x00050048,0x000000a9,0x00000001,
|
||||
0x00000023,0x00000010,0x00030047,0x000000a9,
|
||||
0x00000002,0x00040047,0x000000ab,0x00000022,
|
||||
0x00000000,0x00040047,0x000000ab,0x00000021,
|
||||
0x00000000,0x00040047,0x000000b7,0x0000001e,
|
||||
0x00000000,0x00040047,0x0000010b,0x0000001e,
|
||||
0x00000000,0x00020013,0x00000002,0x00030021,
|
||||
0x00000003,0x00000002,0x00030016,0x00000006,
|
||||
0x00000020,0x00040017,0x00000007,0x00000006,
|
||||
0x00000002,0x00040020,0x00000008,0x00000007,
|
||||
0x00000007,0x00040021,0x00000009,0x00000006,
|
||||
0x00000008,0x00040020,0x00000013,0x00000007,
|
||||
0x00000006,0x00060021,0x00000014,0x00000006,
|
||||
0x00000008,0x00000013,0x00000013,0x00040020,
|
||||
0x0000001a,0x00000006,0x00000006,0x0004003b,
|
||||
0x0000001a,0x0000001b,0x00000006,0x0004002b,
|
||||
0x00000006,0x0000001c,0x3fa00000,0x0004003b,
|
||||
0x0000001a,0x0000001d,0x00000006,0x0004002b,
|
||||
0x00000006,0x0000001e,0x3f000000,0x0004003b,
|
||||
0x0000001a,0x0000001f,0x00000006,0x0004002b,
|
||||
0x00000006,0x00000020,0x3e19999a,0x0004002b,
|
||||
0x00000006,0x00000022,0x414fd639,0x0004002b,
|
||||
0x00000006,0x00000023,0x429c774c,0x0005002c,
|
||||
0x00000007,0x00000024,0x00000022,0x00000023,
|
||||
0x0004002b,0x00000006,0x00000027,0x472aee8c,
|
||||
0x00040015,0x0000002d,0x00000020,0x00000000,
|
||||
0x0004002b,0x0000002d,0x0000002e,0x00000000,
|
||||
0x0004002b,0x0000002d,0x00000034,0x00000001,
|
||||
0x0004002b,0x00000006,0x0000003c,0x42200000,
|
||||
0x0004002b,0x00000006,0x00000041,0x00000000,
|
||||
0x0004002b,0x00000006,0x00000042,0x3f800000,
|
||||
0x0004002b,0x00000006,0x00000045,0x3fc90fdb,
|
||||
0x0004002b,0x00000006,0x0000004c,0x3d4ccccd,
|
||||
0x0004002b,0x00000006,0x00000058,0x3ba3d70a,
|
||||
0x00020014,0x0000005c,0x0004002b,0x00000006,
|
||||
0x00000063,0x40000000,0x0005002c,0x00000007,
|
||||
0x00000068,0x00000063,0x00000063,0x0004002b,
|
||||
0x00000006,0x0000006a,0x3e800000,0x0004002b,
|
||||
0x00000006,0x0000007d,0x3f99999a,0x0004002b,
|
||||
0x00000006,0x00000080,0x40490fd0,0x0004002b,
|
||||
0x00000006,0x00000088,0x41000000,0x0004002b,
|
||||
0x00000006,0x0000008c,0x40800000,0x0004002b,
|
||||
0x00000006,0x00000095,0xbf000000,0x0005002c,
|
||||
0x00000007,0x00000096,0x00000095,0x00000042,
|
||||
0x00040017,0x000000a8,0x00000006,0x00000004,
|
||||
0x0004001e,0x000000a9,0x000000a8,0x00000006,
|
||||
0x00040020,0x000000aa,0x00000002,0x000000a9,
|
||||
0x0004003b,0x000000aa,0x000000ab,0x00000002,
|
||||
0x00040015,0x000000ac,0x00000020,0x00000001,
|
||||
0x0004002b,0x000000ac,0x000000ad,0x00000001,
|
||||
0x00040020,0x000000ae,0x00000002,0x00000006,
|
||||
0x0004002b,0x00000006,0x000000b1,0x3ecccccd,
|
||||
0x00040020,0x000000b6,0x00000001,0x00000007,
|
||||
0x0004003b,0x000000b6,0x000000b7,0x00000001,
|
||||
0x0004002b,0x000000ac,0x000000b9,0x00000000,
|
||||
0x00040020,0x000000ba,0x00000002,0x000000a8,
|
||||
0x0004002b,0x00000006,0x000000c8,0x3f333333,
|
||||
0x0004002b,0x00000006,0x000000d1,0x3f19999a,
|
||||
0x0004002b,0x00000006,0x000000ea,0x3e99999a,
|
||||
0x0004002b,0x00000006,0x000000fb,0x3e000000,
|
||||
0x00040020,0x0000010a,0x00000003,0x000000a8,
|
||||
0x0004003b,0x0000010a,0x0000010b,0x00000003,
|
||||
0x00050036,0x00000002,0x00000004,0x00000000,
|
||||
0x00000003,0x000200f8,0x00000005,0x0004003b,
|
||||
0x00000013,0x000000a7,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000b5,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000bf,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000c0,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000c2,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000c4,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000c9,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000cb,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000cd,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000d2,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000d4,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000d6,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000da,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000dc,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000de,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000e2,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000e4,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000e6,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000eb,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000ed,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000ef,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000f3,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000f5,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000f7,0x00000007,0x0004003b,
|
||||
0x00000008,0x000000fc,0x00000007,0x0004003b,
|
||||
0x00000013,0x000000fe,0x00000007,0x0004003b,
|
||||
0x00000013,0x00000100,0x00000007,0x0003003e,
|
||||
0x0000001b,0x0000001c,0x0003003e,0x0000001d,
|
||||
0x0000001e,0x0003003e,0x0000001f,0x00000020,
|
||||
0x00050041,0x000000ae,0x000000af,0x000000ab,
|
||||
0x000000ad,0x0004003d,0x00000006,0x000000b0,
|
||||
0x000000af,0x00050085,0x00000006,0x000000b2,
|
||||
0x000000b0,0x000000b1,0x0004003d,0x00000006,
|
||||
0x000000b3,0x0000001f,0x00050085,0x00000006,
|
||||
0x000000b4,0x000000b2,0x000000b3,0x0003003e,
|
||||
0x000000a7,0x000000b4,0x0004003d,0x00000007,
|
||||
0x000000b8,0x000000b7,0x00050041,0x000000ba,
|
||||
0x000000bb,0x000000ab,0x000000b9,0x0004003d,
|
||||
0x000000a8,0x000000bc,0x000000bb,0x0007004f,
|
||||
0x00000007,0x000000bd,0x000000bc,0x000000bc,
|
||||
0x00000000,0x00000000,0x00050088,0x00000007,
|
||||
0x000000be,0x000000b8,0x000000bd,0x0003003e,
|
||||
0x000000b5,0x000000be,0x0003003e,0x000000bf,
|
||||
0x00000041,0x0004003d,0x00000007,0x000000c1,
|
||||
0x000000b5,0x0003003e,0x000000c0,0x000000c1,
|
||||
0x0004003d,0x00000006,0x000000c3,0x000000a7,
|
||||
0x0003003e,0x000000c2,0x000000c3,0x0003003e,
|
||||
0x000000c4,0x00000042,0x00070039,0x00000006,
|
||||
0x000000c5,0x00000018,0x000000c0,0x000000c2,
|
||||
0x000000c4,0x0004003d,0x00000006,0x000000c6,
|
||||
0x000000bf,0x00050081,0x00000006,0x000000c7,
|
||||
0x000000c6,0x000000c5,0x0003003e,0x000000bf,
|
||||
0x000000c7,0x0004003d,0x00000007,0x000000ca,
|
||||
0x000000b5,0x0003003e,0x000000c9,0x000000ca,
|
||||
0x0004003d,0x00000006,0x000000cc,0x000000a7,
|
||||
0x0003003e,0x000000cb,0x000000cc,0x0003003e,
|
||||
0x000000cd,0x000000c8,0x00070039,0x00000006,
|
||||
0x000000ce,0x00000018,0x000000c9,0x000000cb,
|
||||
0x000000cd,0x0004003d,0x00000006,0x000000cf,
|
||||
0x000000bf,0x00050081,0x00000006,0x000000d0,
|
||||
0x000000cf,0x000000ce,0x0003003e,0x000000bf,
|
||||
0x000000d0,0x0004003d,0x00000007,0x000000d3,
|
||||
0x000000b5,0x0003003e,0x000000d2,0x000000d3,
|
||||
0x0004003d,0x00000006,0x000000d5,0x000000a7,
|
||||
0x0003003e,0x000000d4,0x000000d5,0x0003003e,
|
||||
0x000000d6,0x000000d1,0x00070039,0x00000006,
|
||||
0x000000d7,0x00000018,0x000000d2,0x000000d4,
|
||||
0x000000d6,0x0004003d,0x00000006,0x000000d8,
|
||||
0x000000bf,0x00050081,0x00000006,0x000000d9,
|
||||
0x000000d8,0x000000d7,0x0003003e,0x000000bf,
|
||||
0x000000d9,0x0004003d,0x00000007,0x000000db,
|
||||
0x000000b5,0x0003003e,0x000000da,0x000000db,
|
||||
0x0004003d,0x00000006,0x000000dd,0x000000a7,
|
||||
0x0003003e,0x000000dc,0x000000dd,0x0003003e,
|
||||
0x000000de,0x0000001e,0x00070039,0x00000006,
|
||||
0x000000df,0x00000018,0x000000da,0x000000dc,
|
||||
0x000000de,0x0004003d,0x00000006,0x000000e0,
|
||||
0x000000bf,0x00050081,0x00000006,0x000000e1,
|
||||
0x000000e0,0x000000df,0x0003003e,0x000000bf,
|
||||
0x000000e1,0x0004003d,0x00000007,0x000000e3,
|
||||
0x000000b5,0x0003003e,0x000000e2,0x000000e3,
|
||||
0x0004003d,0x00000006,0x000000e5,0x000000a7,
|
||||
0x0003003e,0x000000e4,0x000000e5,0x0003003e,
|
||||
0x000000e6,0x000000b1,0x00070039,0x00000006,
|
||||
0x000000e7,0x00000018,0x000000e2,0x000000e4,
|
||||
0x000000e6,0x0004003d,0x00000006,0x000000e8,
|
||||
0x000000bf,0x00050081,0x00000006,0x000000e9,
|
||||
0x000000e8,0x000000e7,0x0003003e,0x000000bf,
|
||||
0x000000e9,0x0004003d,0x00000007,0x000000ec,
|
||||
0x000000b5,0x0003003e,0x000000eb,0x000000ec,
|
||||
0x0004003d,0x00000006,0x000000ee,0x000000a7,
|
||||
0x0003003e,0x000000ed,0x000000ee,0x0003003e,
|
||||
0x000000ef,0x000000ea,0x00070039,0x00000006,
|
||||
0x000000f0,0x00000018,0x000000eb,0x000000ed,
|
||||
0x000000ef,0x0004003d,0x00000006,0x000000f1,
|
||||
0x000000bf,0x00050081,0x00000006,0x000000f2,
|
||||
0x000000f1,0x000000f0,0x0003003e,0x000000bf,
|
||||
0x000000f2,0x0004003d,0x00000007,0x000000f4,
|
||||
0x000000b5,0x0003003e,0x000000f3,0x000000f4,
|
||||
0x0004003d,0x00000006,0x000000f6,0x000000a7,
|
||||
0x0003003e,0x000000f5,0x000000f6,0x0003003e,
|
||||
0x000000f7,0x0000006a,0x00070039,0x00000006,
|
||||
0x000000f8,0x00000018,0x000000f3,0x000000f5,
|
||||
0x000000f7,0x0004003d,0x00000006,0x000000f9,
|
||||
0x000000bf,0x00050081,0x00000006,0x000000fa,
|
||||
0x000000f9,0x000000f8,0x0003003e,0x000000bf,
|
||||
0x000000fa,0x0004003d,0x00000007,0x000000fd,
|
||||
0x000000b5,0x0003003e,0x000000fc,0x000000fd,
|
||||
0x0004003d,0x00000006,0x000000ff,0x000000a7,
|
||||
0x0003003e,0x000000fe,0x000000ff,0x0003003e,
|
||||
0x00000100,0x000000fb,0x00070039,0x00000006,
|
||||
0x00000101,0x00000018,0x000000fc,0x000000fe,
|
||||
0x00000100,0x0004003d,0x00000006,0x00000102,
|
||||
0x000000bf,0x00050081,0x00000006,0x00000103,
|
||||
0x00000102,0x00000101,0x0003003e,0x000000bf,
|
||||
0x00000103,0x0004003d,0x00000006,0x00000104,
|
||||
0x000000bf,0x00050041,0x00000013,0x00000105,
|
||||
0x000000b5,0x00000034,0x0004003d,0x00000006,
|
||||
0x00000106,0x00000105,0x00050085,0x00000006,
|
||||
0x00000107,0x00000106,0x0000008c,0x0007000c,
|
||||
0x00000006,0x00000108,0x00000001,0x00000025,
|
||||
0x00000107,0x00000042,0x00050085,0x00000006,
|
||||
0x00000109,0x00000104,0x00000108,0x0003003e,
|
||||
0x000000bf,0x00000109,0x0004003d,0x00000006,
|
||||
0x0000010c,0x000000bf,0x00070050,0x000000a8,
|
||||
0x0000010d,0x00000042,0x00000042,0x00000042,
|
||||
0x0000010c,0x0003003e,0x0000010b,0x0000010d,
|
||||
0x000100fd,0x00010038,0x00050036,0x00000006,
|
||||
0x0000000b,0x00000000,0x00000009,0x00030037,
|
||||
0x00000008,0x0000000a,0x000200f8,0x0000000c,
|
||||
0x0004003d,0x00000007,0x00000021,0x0000000a,
|
||||
0x00050094,0x00000006,0x00000025,0x00000021,
|
||||
0x00000024,0x0006000c,0x00000006,0x00000026,
|
||||
0x00000001,0x0000000d,0x00000025,0x00050085,
|
||||
0x00000006,0x00000028,0x00000026,0x00000027,
|
||||
0x0006000c,0x00000006,0x00000029,0x00000001,
|
||||
0x0000000a,0x00000028,0x000200fe,0x00000029,
|
||||
0x00010038,0x00050036,0x00000006,0x0000000e,
|
||||
0x00000000,0x00000009,0x00030037,0x00000008,
|
||||
0x0000000d,0x000200f8,0x0000000f,0x0004003b,
|
||||
0x00000013,0x0000002c,0x00000007,0x00050041,
|
||||
0x00000013,0x0000002f,0x0000000d,0x0000002e,
|
||||
0x0004003d,0x00000006,0x00000030,0x0000002f,
|
||||
0x00050041,0x00000013,0x00000031,0x0000000d,
|
||||
0x0000002e,0x0004003d,0x00000006,0x00000032,
|
||||
0x00000031,0x00050085,0x00000006,0x00000033,
|
||||
0x00000030,0x00000032,0x00050041,0x00000013,
|
||||
0x00000035,0x0000000d,0x00000034,0x0004003d,
|
||||
0x00000006,0x00000036,0x00000035,0x00050041,
|
||||
0x00000013,0x00000037,0x0000000d,0x00000034,
|
||||
0x0004003d,0x00000006,0x00000038,0x00000037,
|
||||
0x00050085,0x00000006,0x00000039,0x00000036,
|
||||
0x00000038,0x00050081,0x00000006,0x0000003a,
|
||||
0x00000033,0x00000039,0x0006000c,0x00000006,
|
||||
0x0000003b,0x00000001,0x0000001f,0x0000003a,
|
||||
0x0004003d,0x00000006,0x0000003d,0x0000001b,
|
||||
0x00050088,0x00000006,0x0000003e,0x0000003c,
|
||||
0x0000003d,0x00050085,0x00000006,0x0000003f,
|
||||
0x0000003b,0x0000003e,0x0003003e,0x0000002c,
|
||||
0x0000003f,0x0004003d,0x00000006,0x00000040,
|
||||
0x0000002c,0x0008000c,0x00000006,0x00000043,
|
||||
0x00000001,0x0000002b,0x00000040,0x00000041,
|
||||
0x00000042,0x0003003e,0x0000002c,0x00000043,
|
||||
0x0004003d,0x00000006,0x00000044,0x0000002c,
|
||||
0x00050085,0x00000006,0x00000046,0x00000044,
|
||||
0x00000045,0x0006000c,0x00000006,0x00000047,
|
||||
0x00000001,0x0000000e,0x00000046,0x00050085,
|
||||
0x00000006,0x00000048,0x00000047,0x0000001e,
|
||||
0x000200fe,0x00000048,0x00010038,0x00050036,
|
||||
0x00000006,0x00000011,0x00000000,0x00000009,
|
||||
0x00030037,0x00000008,0x00000010,0x000200f8,
|
||||
0x00000012,0x0004003b,0x00000013,0x0000004b,
|
||||
0x00000007,0x0004003b,0x00000008,0x0000004d,
|
||||
0x00000007,0x0004003b,0x00000013,0x00000053,
|
||||
0x00000007,0x0004003b,0x00000008,0x00000054,
|
||||
0x00000007,0x0004003b,0x00000008,0x00000061,
|
||||
0x00000007,0x0004003b,0x00000008,0x0000006c,
|
||||
0x00000007,0x0004003b,0x00000008,0x00000072,
|
||||
0x00000007,0x0004003b,0x00000008,0x00000076,
|
||||
0x00000007,0x0003003e,0x0000004b,0x0000004c,
|
||||
0x0004003d,0x00000007,0x0000004e,0x00000010,
|
||||
0x0004003d,0x00000006,0x0000004f,0x0000004b,
|
||||
0x00050050,0x00000007,0x00000050,0x0000004f,
|
||||
0x0000004f,0x00050088,0x00000007,0x00000051,
|
||||
0x0000004e,0x00000050,0x0006000c,0x00000007,
|
||||
0x00000052,0x00000001,0x00000008,0x00000051,
|
||||
0x0003003e,0x0000004d,0x00000052,0x0004003d,
|
||||
0x00000007,0x00000055,0x0000004d,0x0003003e,
|
||||
0x00000054,0x00000055,0x00050039,0x00000006,
|
||||
0x00000056,0x0000000b,0x00000054,0x0003003e,
|
||||
0x00000053,0x00000056,0x0004003d,0x00000006,
|
||||
0x00000057,0x00000053,0x0004003d,0x00000006,
|
||||
0x00000059,0x0000001d,0x00050085,0x00000006,
|
||||
0x0000005a,0x00000059,0x0000003c,0x00050085,
|
||||
0x00000006,0x0000005b,0x00000058,0x0000005a,
|
||||
0x000500ba,0x0000005c,0x0000005d,0x00000057,
|
||||
0x0000005b,0x000300f7,0x0000005f,0x00000000,
|
||||
0x000400fa,0x0000005d,0x0000005e,0x0000005f,
|
||||
0x000200f8,0x0000005e,0x000200fe,0x00000041,
|
||||
0x000200f8,0x0000005f,0x0004003d,0x00000006,
|
||||
0x00000062,0x00000053,0x00050085,0x00000006,
|
||||
0x00000064,0x00000062,0x00000063,0x0006000c,
|
||||
0x00000006,0x00000065,0x00000001,0x0000000a,
|
||||
0x00000064,0x0004003d,0x00000006,0x00000066,
|
||||
0x00000053,0x00050050,0x00000007,0x00000067,
|
||||
0x00000065,0x00000066,0x00050081,0x00000007,
|
||||
0x00000069,0x00000067,0x00000068,0x0005008e,
|
||||
0x00000007,0x0000006b,0x00000069,0x0000006a,
|
||||
0x0003003e,0x00000061,0x0000006b,0x0004003d,
|
||||
0x00000007,0x0000006d,0x00000010,0x0004003d,
|
||||
0x00000006,0x0000006e,0x0000004b,0x00050050,
|
||||
0x00000007,0x0000006f,0x0000006e,0x0000006e,
|
||||
0x00050088,0x00000007,0x00000070,0x0000006d,
|
||||
0x0000006f,0x0006000c,0x00000007,0x00000071,
|
||||
0x00000001,0x0000000a,0x00000070,0x0003003e,
|
||||
0x0000006c,0x00000071,0x0004003d,0x00000007,
|
||||
0x00000073,0x0000006c,0x0004003d,0x00000007,
|
||||
0x00000074,0x00000061,0x00050083,0x00000007,
|
||||
0x00000075,0x00000073,0x00000074,0x0003003e,
|
||||
0x00000072,0x00000075,0x0004003d,0x00000007,
|
||||
0x00000077,0x00000072,0x0003003e,0x00000076,
|
||||
0x00000077,0x00050039,0x00000006,0x00000078,
|
||||
0x0000000e,0x00000076,0x000200fe,0x00000078,
|
||||
0x00010038,0x00050036,0x00000006,0x00000018,
|
||||
0x00000000,0x00000014,0x00030037,0x00000008,
|
||||
0x00000015,0x00030037,0x00000013,0x00000016,
|
||||
0x00030037,0x00000013,0x00000017,0x000200f8,
|
||||
0x00000019,0x0004003b,0x00000008,0x0000009f,
|
||||
0x00000007,0x00050041,0x00000013,0x0000007b,
|
||||
0x00000015,0x00000034,0x0004003d,0x00000006,
|
||||
0x0000007c,0x0000007b,0x00050085,0x00000006,
|
||||
0x0000007e,0x0000007c,0x0000007d,0x0004003d,
|
||||
0x00000006,0x0000007f,0x00000016,0x00050085,
|
||||
0x00000006,0x00000081,0x0000007f,0x00000080,
|
||||
0x00050085,0x00000006,0x00000082,0x00000081,
|
||||
0x00000063,0x00050081,0x00000006,0x00000083,
|
||||
0x0000007e,0x00000082,0x0004003d,0x00000006,
|
||||
0x00000084,0x00000017,0x00050088,0x00000006,
|
||||
0x00000085,0x00000042,0x00000084,0x00050081,
|
||||
0x00000006,0x00000086,0x00000083,0x00000085,
|
||||
0x0006000c,0x00000006,0x00000087,0x00000001,
|
||||
0x0000000e,0x00000086,0x0004003d,0x00000006,
|
||||
0x00000089,0x00000017,0x00050088,0x00000006,
|
||||
0x0000008a,0x00000088,0x00000089,0x00050088,
|
||||
0x00000006,0x0000008b,0x00000087,0x0000008a,
|
||||
0x00050085,0x00000006,0x0000008d,0x0000008b,
|
||||
0x0000008c,0x00050041,0x00000013,0x0000008e,
|
||||
0x00000015,0x0000002e,0x0004003d,0x00000006,
|
||||
0x0000008f,0x0000008e,0x00050081,0x00000006,
|
||||
0x00000090,0x0000008f,0x0000008d,0x00050041,
|
||||
0x00000013,0x00000091,0x00000015,0x0000002e,
|
||||
0x0003003e,0x00000091,0x00000090,0x0004003d,
|
||||
0x00000006,0x00000092,0x00000016,0x0004003d,
|
||||
0x00000006,0x00000093,0x00000017,0x00050085,
|
||||
0x00000006,0x00000094,0x00000092,0x00000093,
|
||||
0x0005008e,0x00000007,0x00000097,0x00000096,
|
||||
0x00000094,0x0005008e,0x00000007,0x00000098,
|
||||
0x00000097,0x0000008c,0x0004003d,0x00000007,
|
||||
0x00000099,0x00000015,0x00050081,0x00000007,
|
||||
0x0000009a,0x00000099,0x00000098,0x0003003e,
|
||||
0x00000015,0x0000009a,0x0004003d,0x00000007,
|
||||
0x0000009b,0x00000015,0x0004003d,0x00000006,
|
||||
0x0000009c,0x00000017,0x00050050,0x00000007,
|
||||
0x0000009d,0x0000009c,0x0000009c,0x00050088,
|
||||
0x00000007,0x0000009e,0x0000009b,0x0000009d,
|
||||
0x0003003e,0x0000009f,0x0000009e,0x00050039,
|
||||
0x00000006,0x000000a0,0x00000011,0x0000009f,
|
||||
0x0004003d,0x00000006,0x000000a1,0x00000017,
|
||||
0x00050085,0x00000006,0x000000a2,0x000000a1,
|
||||
0x0000001e,0x00050081,0x00000006,0x000000a3,
|
||||
0x000000a2,0x0000001e,0x00050085,0x00000006,
|
||||
0x000000a4,0x000000a0,0x000000a3,0x000200fe,
|
||||
0x000000a4,0x00010038}
|
@ -1,66 +1,15 @@
|
||||
#version 310 es
|
||||
precision highp float;
|
||||
layout(location = 0) in vec4 Position;
|
||||
layout(location = 1) in vec2 TexCoord;
|
||||
layout(location = 0) out vec2 vTexCoord;
|
||||
|
||||
layout(std140, set = 0, binding = 0) uniform UBO
|
||||
{
|
||||
float time;
|
||||
} constants;
|
||||
|
||||
layout(location = 0) out vec4 FragColor;
|
||||
|
||||
vec2 res = vec2(1920*3, 1080*3);
|
||||
|
||||
// High quality = larger patterns
|
||||
// quality * 84 is the number of seconds in a loop
|
||||
float quality = 8.0;
|
||||
|
||||
float Cellular2D(vec2 P) {
|
||||
// https://github.com/BrianSharpe/Wombat/blob/master/Cellular2D.glsl
|
||||
vec2 Pi = floor(P);
|
||||
vec2 Pf = P - Pi;
|
||||
vec2 Pt = vec2( Pi.x, Pi.y + 1.0 );
|
||||
Pt = Pt - floor(Pt * ( 1.0 / 71.0 )) * 71.0;
|
||||
Pt += vec2( 26.0, 161.0 ).xy;
|
||||
Pt *= Pt;
|
||||
Pt = Pt.xy * Pt.yx;
|
||||
float hash_x = fract( Pt * ( 1.0 / 951.135664 ) ).x * 2.0 - 1.0;
|
||||
float hash_y = fract( Pt * ( 1.0 / 642.949883 ) ).y * 2.0 - 1.0;
|
||||
const float JITTER_WINDOW = 0.25;
|
||||
hash_x = ( ( hash_x * hash_x * hash_x ) - sign( hash_x ) ) * JITTER_WINDOW;
|
||||
hash_y = ( ( hash_y * hash_y * hash_y ) - sign( hash_y ) ) * JITTER_WINDOW;
|
||||
vec2 dd = vec2(Pf.x - hash_x, Pf.y - hash_y);
|
||||
float d = dd.x * dd.x + dd.y * dd.y;
|
||||
return d * ( 1.0 / 1.125 );
|
||||
}
|
||||
|
||||
float snow(vec2 pos, float time, float scale) {
|
||||
// add wobble
|
||||
pos.x += cos(pos.y*4.0 + time*3.14159*2.0 + 1.0/scale)/(8.0/scale);
|
||||
// add gravity
|
||||
pos += time*scale*vec2(-0.5, 1.0);
|
||||
return max(
|
||||
1.0 - Cellular2D(mod(pos/scale, scale*quality)*16.0)*1024.0,
|
||||
0.0
|
||||
) * (scale*0.5 + 0.5);
|
||||
}
|
||||
mat4 MVP;
|
||||
} global;
|
||||
|
||||
void main()
|
||||
{
|
||||
float winscale = max(res.x, res.y);
|
||||
float tim = mod(constants.time/800.0, 84.0*quality);
|
||||
vec2 pos = gl_FragCoord.xy/winscale;
|
||||
float a = 0.0;
|
||||
// Each of these is a layer of snow
|
||||
// Remove some for better performance
|
||||
// Changing the scale (3rd value) will mess with the looping
|
||||
a += snow(pos, tim, 1.0);
|
||||
a += snow(pos, tim, 0.7);
|
||||
a += snow(pos, tim, 0.6);
|
||||
a += snow(pos, tim, 0.5);
|
||||
a += snow(pos, tim, 0.4);
|
||||
a += snow(pos, tim, 0.3);
|
||||
a += snow(pos, tim, 0.25);
|
||||
a += snow(pos, tim, 0.125);
|
||||
a = a * min(pos.y*4.0, 1.0);
|
||||
FragColor = vec4(1.0, 1.0, 1.0, a);
|
||||
gl_Position = global.MVP * vec4(TexCoord, 0.0, 1.0);
|
||||
vTexCoord = TexCoord;
|
||||
}
|
||||
|
75
gfx/drivers/vulkan_shaders/pipeline_snow_simple.vert.inc
Normal file
75
gfx/drivers/vulkan_shaders/pipeline_snow_simple.vert.inc
Normal file
@ -0,0 +1,75 @@
|
||||
{0x07230203,0x00010000,0x00080001,0x00000025,
|
||||
0x00000000,0x00020011,0x00000001,0x0006000b,
|
||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,
|
||||
0x00000000,0x0003000e,0x00000000,0x00000001,
|
||||
0x0009000f,0x00000000,0x00000004,0x6e69616d,
|
||||
0x00000000,0x0000000a,0x00000016,0x00000021,
|
||||
0x00000024,0x00030003,0x00000001,0x00000136,
|
||||
0x000a0004,0x475f4c47,0x4c474f4f,0x70635f45,
|
||||
0x74735f70,0x5f656c79,0x656e696c,0x7269645f,
|
||||
0x69746365,0x00006576,0x00080004,0x475f4c47,
|
||||
0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,
|
||||
0x74636572,0x00657669,0x00040005,0x00000004,
|
||||
0x6e69616d,0x00000000,0x00060005,0x00000008,
|
||||
0x505f6c67,0x65567265,0x78657472,0x00000000,
|
||||
0x00060006,0x00000008,0x00000000,0x505f6c67,
|
||||
0x7469736f,0x006e6f69,0x00070006,0x00000008,
|
||||
0x00000001,0x505f6c67,0x746e696f,0x657a6953,
|
||||
0x00000000,0x00030005,0x0000000a,0x00000000,
|
||||
0x00030005,0x0000000e,0x004f4255,0x00040006,
|
||||
0x0000000e,0x00000000,0x0050564d,0x00040005,
|
||||
0x00000010,0x626f6c67,0x00006c61,0x00050005,
|
||||
0x00000016,0x43786554,0x64726f6f,0x00000000,
|
||||
0x00050005,0x00000021,0x78655476,0x726f6f43,
|
||||
0x00000064,0x00050005,0x00000024,0x69736f50,
|
||||
0x6e6f6974,0x00000000,0x00050048,0x00000008,
|
||||
0x00000000,0x0000000b,0x00000000,0x00050048,
|
||||
0x00000008,0x00000001,0x0000000b,0x00000001,
|
||||
0x00030047,0x00000008,0x00000002,0x00040048,
|
||||
0x0000000e,0x00000000,0x00000005,0x00050048,
|
||||
0x0000000e,0x00000000,0x00000023,0x00000000,
|
||||
0x00050048,0x0000000e,0x00000000,0x00000007,
|
||||
0x00000010,0x00030047,0x0000000e,0x00000002,
|
||||
0x00040047,0x00000010,0x00000022,0x00000000,
|
||||
0x00040047,0x00000010,0x00000021,0x00000000,
|
||||
0x00040047,0x00000016,0x0000001e,0x00000001,
|
||||
0x00040047,0x00000021,0x0000001e,0x00000000,
|
||||
0x00040047,0x00000024,0x0000001e,0x00000000,
|
||||
0x00020013,0x00000002,0x00030021,0x00000003,
|
||||
0x00000002,0x00030016,0x00000006,0x00000020,
|
||||
0x00040017,0x00000007,0x00000006,0x00000004,
|
||||
0x0004001e,0x00000008,0x00000007,0x00000006,
|
||||
0x00040020,0x00000009,0x00000003,0x00000008,
|
||||
0x0004003b,0x00000009,0x0000000a,0x00000003,
|
||||
0x00040015,0x0000000b,0x00000020,0x00000001,
|
||||
0x0004002b,0x0000000b,0x0000000c,0x00000000,
|
||||
0x00040018,0x0000000d,0x00000007,0x00000004,
|
||||
0x0003001e,0x0000000e,0x0000000d,0x00040020,
|
||||
0x0000000f,0x00000002,0x0000000e,0x0004003b,
|
||||
0x0000000f,0x00000010,0x00000002,0x00040020,
|
||||
0x00000011,0x00000002,0x0000000d,0x00040017,
|
||||
0x00000014,0x00000006,0x00000002,0x00040020,
|
||||
0x00000015,0x00000001,0x00000014,0x0004003b,
|
||||
0x00000015,0x00000016,0x00000001,0x0004002b,
|
||||
0x00000006,0x00000018,0x00000000,0x0004002b,
|
||||
0x00000006,0x00000019,0x3f800000,0x00040020,
|
||||
0x0000001e,0x00000003,0x00000007,0x00040020,
|
||||
0x00000020,0x00000003,0x00000014,0x0004003b,
|
||||
0x00000020,0x00000021,0x00000003,0x00040020,
|
||||
0x00000023,0x00000001,0x00000007,0x0004003b,
|
||||
0x00000023,0x00000024,0x00000001,0x00050036,
|
||||
0x00000002,0x00000004,0x00000000,0x00000003,
|
||||
0x000200f8,0x00000005,0x00050041,0x00000011,
|
||||
0x00000012,0x00000010,0x0000000c,0x0004003d,
|
||||
0x0000000d,0x00000013,0x00000012,0x0004003d,
|
||||
0x00000014,0x00000017,0x00000016,0x00050051,
|
||||
0x00000006,0x0000001a,0x00000017,0x00000000,
|
||||
0x00050051,0x00000006,0x0000001b,0x00000017,
|
||||
0x00000001,0x00070050,0x00000007,0x0000001c,
|
||||
0x0000001a,0x0000001b,0x00000018,0x00000019,
|
||||
0x00050091,0x00000007,0x0000001d,0x00000013,
|
||||
0x0000001c,0x00050041,0x0000001e,0x0000001f,
|
||||
0x0000000a,0x0000000c,0x0003003e,0x0000001f,
|
||||
0x0000001d,0x0004003d,0x00000014,0x00000022,
|
||||
0x00000016,0x0003003e,0x00000021,0x00000022,
|
||||
0x000100fd,0x00010038}
|
@ -13,6 +13,7 @@
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
|
@ -332,7 +332,9 @@ static bool gfx_ctx_x_set_resize(void *data,
|
||||
|
||||
static void *gfx_ctx_x_init(void *data)
|
||||
{
|
||||
int nelements, major, minor;
|
||||
int nelements = 0;
|
||||
int major = 0;
|
||||
int minor = 0;
|
||||
#ifdef HAVE_OPENGL
|
||||
static const int visual_attribs[] = {
|
||||
GLX_X_RENDERABLE , True,
|
||||
|
@ -1941,9 +1941,6 @@ void video_viewport_get_scaled_integer(struct video_viewport *vp,
|
||||
int padding_y = 0;
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if (!vp)
|
||||
return;
|
||||
|
||||
if (settings->video.aspect_ratio_idx == ASPECT_RATIO_CUSTOM)
|
||||
{
|
||||
struct video_viewport *custom = video_viewport_get_custom();
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <file/file_path.h>
|
||||
#include <file/config_file_userdata.h>
|
||||
#include <lists/dir_list.h>
|
||||
#include <dynamic/dylib.h>
|
||||
#include <features/features_cpu.h>
|
||||
@ -28,7 +29,6 @@
|
||||
#endif
|
||||
|
||||
#include "../frontend/frontend_driver.h"
|
||||
#include "../config_file_userdata.h"
|
||||
#include "../dynamic.h"
|
||||
#include "../performance_counters.h"
|
||||
#include "../verbosity.h"
|
||||
|
@ -122,7 +122,7 @@ CONFIG FILE
|
||||
#endif
|
||||
|
||||
#include "../libretro-common/file/config_file.c"
|
||||
#include "../config_file_userdata.c"
|
||||
#include "../libretro-common/file/config_file_userdata.c"
|
||||
#include "../managers/core_option_manager.c"
|
||||
|
||||
/*============================================================
|
||||
@ -556,11 +556,13 @@ FIFO BUFFER
|
||||
/*============================================================
|
||||
AUDIO RESAMPLER
|
||||
============================================================ */
|
||||
#include "../audio/audio_resampler_driver.c"
|
||||
#include "../audio/drivers_resampler/sinc_resampler.c"
|
||||
#include "../audio/drivers_resampler/nearest_resampler.c"
|
||||
#include "../audio/drivers_resampler/null_resampler.c"
|
||||
#include "../libretro-common/audio/resampler/audio_resampler.c"
|
||||
#include "../libretro-common/audio/resampler/drivers/sinc_resampler.c"
|
||||
#include "../libretro-common/audio/resampler/drivers/nearest_resampler.c"
|
||||
#include "../libretro-common/audio/resampler/drivers/null_resampler.c"
|
||||
#ifdef HAVE_CC_RESAMPLER
|
||||
#include "../audio/drivers_resampler/cc_resampler.c"
|
||||
#endif
|
||||
|
||||
/*============================================================
|
||||
CAMERA
|
||||
@ -933,6 +935,7 @@ MENU
|
||||
#include "../menu/menu_cbs.c"
|
||||
#include "../menu/menu_content.c"
|
||||
#include "../menu/widgets/menu_entry.c"
|
||||
#include "../menu/widgets/menu_filebrowser.c"
|
||||
#include "../menu/widgets/menu_dialog.c"
|
||||
#include "../menu/widgets/menu_input_dialog.c"
|
||||
#include "../menu/widgets/menu_input_bind_dialog.c"
|
||||
@ -1078,8 +1081,8 @@ XML
|
||||
/*============================================================
|
||||
AUDIO UTILS
|
||||
============================================================ */
|
||||
#include "../libretro-common/conversion/s16_to_float.c"
|
||||
#include "../libretro-common/conversion/float_to_s16.c"
|
||||
#include "../libretro-common/audio/conversion/s16_to_float.c"
|
||||
#include "../libretro-common/audio/conversion/float_to_s16.c"
|
||||
|
||||
/*============================================================
|
||||
LIBRETRODB
|
||||
|
@ -160,6 +160,10 @@ UI
|
||||
#include "../ui/drivers/qt/ui_qt_application.cpp"
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_QT_WRAPPER)
|
||||
#include "../ui/drivers/ui_qt.cpp"
|
||||
#endif
|
||||
|
||||
/*============================================================
|
||||
VIDEO DRIVER
|
||||
============================================================ */
|
||||
|
@ -116,6 +116,14 @@ int32_t pad_connection_pad_init(joypad_connection_t *joyconn,
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//We failed to find a matching pad, set up one without an iface
|
||||
if (!s->connected)
|
||||
{
|
||||
s->iface = NULL;
|
||||
s->data = data;
|
||||
s->connected = true;
|
||||
}
|
||||
}
|
||||
|
||||
return pad;
|
||||
|
@ -642,6 +642,7 @@ static void handle_hotplug(android_input_data_t *android_data,
|
||||
char device_name[256];
|
||||
char device_model[256];
|
||||
char name_buf[256];
|
||||
autoconfig_params_t params = {{0}};
|
||||
int vendorId = 0;
|
||||
int productId = 0;
|
||||
settings_t *settings = config_get_ptr();
|
||||
@ -889,25 +890,14 @@ static void handle_hotplug(android_input_data_t *android_data,
|
||||
if (*port < 0)
|
||||
*port = android_data->pads_connected;
|
||||
|
||||
if (settings->input.autodetect_enable)
|
||||
{
|
||||
autoconfig_params_t params = {{0}};
|
||||
strlcpy(params.name, name_buf, sizeof(params.name));
|
||||
|
||||
RARCH_LOG("Pads Connected: %d Port: %d\n %s VID/PID: %d/%d\n",
|
||||
android_data->pads_connected, *port, name_buf,
|
||||
params.vid, params.pid);
|
||||
params.idx = *port;
|
||||
params.vid = vendorId;
|
||||
params.pid = productId;
|
||||
|
||||
strlcpy(params.name, name_buf, sizeof(params.name));
|
||||
|
||||
params.idx = *port;
|
||||
params.vid = vendorId;
|
||||
params.pid = productId;
|
||||
settings->input.pid[*port] = params.pid;
|
||||
settings->input.vid[*port] = params.vid;
|
||||
|
||||
strlcpy(params.driver, android_joypad.ident, sizeof(params.driver));
|
||||
input_autoconfigure_connect(¶ms);
|
||||
}
|
||||
strlcpy(params.driver, android_joypad.ident, sizeof(params.driver));
|
||||
input_autoconfigure_connect(¶ms);
|
||||
|
||||
if (!string_is_empty(name_buf))
|
||||
{
|
||||
@ -1031,7 +1021,8 @@ static bool android_input_key_pressed(void *data, int key)
|
||||
android_input_t *android = (android_input_t*)data;
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if(settings->input.binds[0][key].valid && android_keyboard_port_input_pressed(settings->input.binds[0],key))
|
||||
if( settings->input.binds[0][key].valid
|
||||
&& android_keyboard_port_input_pressed(settings->input.binds[0],key))
|
||||
return true;
|
||||
|
||||
if (settings->input.binds[0][key].valid &&
|
||||
|
@ -176,8 +176,7 @@ static void qnx_process_gamepad_event(
|
||||
static void qnx_input_autodetect_gamepad(qnx_input_t *qnx,
|
||||
qnx_input_device_t* controller, int port)
|
||||
{
|
||||
char name_buf[256] = {0};
|
||||
settings_t *settings = config_get_ptr();
|
||||
char name_buf[256];
|
||||
|
||||
if (!qnx)
|
||||
return;
|
||||
@ -210,9 +209,6 @@ static void qnx_input_autodetect_gamepad(qnx_input_t *qnx,
|
||||
{
|
||||
autoconfig_params_t params = {{0}};
|
||||
|
||||
strlcpy(settings->input.device_names[port],
|
||||
name_buf, sizeof(settings->input.device_names[port]));
|
||||
|
||||
strlcpy(params.name, name_buf, sizeof(params.name));
|
||||
|
||||
params.idx = port;
|
||||
|
@ -45,14 +45,13 @@ typedef struct sdl_input
|
||||
|
||||
static void *sdl_input_init(void)
|
||||
{
|
||||
settings_t *settings;
|
||||
sdl_input_t *sdl;
|
||||
input_keymaps_init_keyboard_lut(rarch_key_map_sdl);
|
||||
settings = config_get_ptr();
|
||||
sdl = (sdl_input_t*)calloc(1, sizeof(*sdl));
|
||||
settings_t *settings = config_get_ptr();
|
||||
sdl_input_t *sdl = (sdl_input_t*)calloc(1, sizeof(*sdl));
|
||||
if (!sdl)
|
||||
return NULL;
|
||||
|
||||
input_keymaps_init_keyboard_lut(rarch_key_map_sdl);
|
||||
|
||||
sdl->joypad = input_joypad_init_driver(settings->input.joypad_driver, sdl);
|
||||
|
||||
RARCH_LOG("[SDL]: Input driver initialized.\n");
|
||||
|
@ -1372,9 +1372,6 @@ static bool btstack_hid_joypad_button(void *data, unsigned port, uint16_t joykey
|
||||
{
|
||||
uint64_t buttons = btstack_hid_joypad_get_buttons(data, port);
|
||||
|
||||
if (joykey == NO_BTN)
|
||||
return false;
|
||||
|
||||
/* Check hat. */
|
||||
if (GET_HAT_DIR(joykey))
|
||||
return false;
|
||||
|
@ -21,11 +21,12 @@
|
||||
#include <IOKit/hid/IOHIDManager.h>
|
||||
#include <IOKit/hid/IOHIDKeys.h>
|
||||
|
||||
#include <retro_miscellaneous.h>
|
||||
|
||||
#include "../connect/joypad_connection.h"
|
||||
#include "../input_defines.h"
|
||||
#include "../../tasks/tasks_internal.h"
|
||||
#include "../input_hid_driver.h"
|
||||
#include "../../configuration.h"
|
||||
#include "../../verbosity.h"
|
||||
|
||||
typedef struct apple_hid
|
||||
@ -73,9 +74,6 @@ static bool iohidmanager_hid_joypad_button(void *data,
|
||||
iohidmanager_hid_joypad_get_buttons(data, port);
|
||||
iohidmanager_hid_t *hid = (iohidmanager_hid_t*)data;
|
||||
|
||||
if (joykey == NO_BTN)
|
||||
return false;
|
||||
|
||||
/* Check hat. */
|
||||
if (GET_HAT_DIR(joykey))
|
||||
return false;
|
||||
@ -306,7 +304,7 @@ static void iohidmanager_hid_device_add_autodetect(unsigned idx,
|
||||
params.vid = dev_vid;
|
||||
params.pid = dev_pid;
|
||||
|
||||
strlcpy(params.name, device_name, sizeof(params.name));
|
||||
strlcpy(params.name, device_name, sizeof(params.name));
|
||||
strlcpy(params.driver, driver_name, sizeof(params.driver));
|
||||
|
||||
input_autoconfigure_connect(¶ms);
|
||||
@ -319,8 +317,6 @@ static void iohidmanager_hid_device_add(void *data, IOReturn result,
|
||||
{
|
||||
IOReturn ret;
|
||||
uint16_t dev_vid, dev_pid;
|
||||
|
||||
settings_t *settings = config_get_ptr();
|
||||
iohidmanager_hid_t *hid = (iohidmanager_hid_t*)
|
||||
hid_driver_get_data();
|
||||
struct iohidmanager_hid_adapter *adapter = (struct iohidmanager_hid_adapter*)
|
||||
@ -370,9 +366,6 @@ static void iohidmanager_hid_device_add(void *data, IOReturn result,
|
||||
if (string_is_empty(adapter->name))
|
||||
goto error;
|
||||
|
||||
strlcpy(settings->input.device_names[adapter->slot],
|
||||
adapter->name, sizeof(settings->input.device_names[adapter->slot]));
|
||||
|
||||
iohidmanager_hid_device_add_autodetect(adapter->slot,
|
||||
adapter->name, iohidmanager_hid.ident, dev_vid, dev_pid);
|
||||
|
||||
|
@ -442,9 +442,6 @@ static bool libusb_hid_joypad_button(void *data,
|
||||
{
|
||||
uint64_t buttons = libusb_hid_joypad_get_buttons(data, port);
|
||||
|
||||
if (joykey == NO_BTN)
|
||||
return false;
|
||||
|
||||
/* Check hat. */
|
||||
if (GET_HAT_DIR(joykey))
|
||||
return false;
|
||||
|
@ -140,7 +140,6 @@ static void wiiusb_hid_device_add_autodetect(unsigned idx,
|
||||
uint16_t dev_vid, uint16_t dev_pid)
|
||||
{
|
||||
autoconfig_params_t params = {{0}};
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
params.idx = idx;
|
||||
params.vid = dev_vid;
|
||||
@ -149,9 +148,6 @@ static void wiiusb_hid_device_add_autodetect(unsigned idx,
|
||||
strlcpy(params.name, device_name, sizeof(params.name));
|
||||
strlcpy(params.driver, driver_name, sizeof(params.driver));
|
||||
|
||||
strlcpy(settings->input.device_names[idx], device_name,
|
||||
sizeof(settings->input.device_names[idx]));
|
||||
|
||||
input_autoconfigure_connect(¶ms);
|
||||
}
|
||||
|
||||
@ -493,9 +489,6 @@ static bool wiiusb_hid_joypad_button(void *data, unsigned port, uint16_t joykey)
|
||||
{
|
||||
uint64_t buttons = wiiusb_hid_joypad_get_buttons(data, port);
|
||||
|
||||
if (joykey == NO_BTN)
|
||||
return false;
|
||||
|
||||
/* Check hat. */
|
||||
if (GET_HAT_DIR(joykey))
|
||||
return false;
|
||||
|
@ -31,19 +31,22 @@ static bool android_joypad_init(void *data)
|
||||
|
||||
static bool android_joypad_button(unsigned port, uint16_t joykey)
|
||||
{
|
||||
uint8_t *buf = android_keyboard_state_get(port);
|
||||
unsigned hat_dir = 0;
|
||||
uint8_t *buf = android_keyboard_state_get(port);
|
||||
struct android_app *android_app = (struct android_app*)g_android;
|
||||
|
||||
if (port >= MAX_PADS)
|
||||
return false;
|
||||
|
||||
if (GET_HAT_DIR(joykey))
|
||||
hat_dir = GET_HAT_DIR(joykey);
|
||||
|
||||
if (hat_dir)
|
||||
{
|
||||
unsigned h = GET_HAT(joykey);
|
||||
if (h > 0)
|
||||
return false;
|
||||
|
||||
switch (GET_HAT_DIR(joykey))
|
||||
switch (hat_dir)
|
||||
{
|
||||
case HAT_LEFT_MASK:
|
||||
return android_app->hat_state[port][0] == -1;
|
||||
|
@ -45,13 +45,8 @@ static const char *ctr_joypad_name(unsigned pad)
|
||||
|
||||
static void ctr_joypad_autodetect_add(unsigned autoconf_pad)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
autoconfig_params_t params = {{0}};
|
||||
|
||||
strlcpy(settings->input.device_names[autoconf_pad],
|
||||
ctr_joypad_name(autoconf_pad),
|
||||
sizeof(settings->input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
params.idx = autoconf_pad;
|
||||
strlcpy(params.name, ctr_joypad_name(autoconf_pad), sizeof(params.name));
|
||||
|
@ -266,10 +266,6 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p)
|
||||
{
|
||||
autoconfig_params_t params = {{0}};
|
||||
|
||||
strlcpy(settings->input.device_names[g_joypad_cnt],
|
||||
dinput_joypad_name(g_joypad_cnt),
|
||||
sizeof(settings->input.device_names[g_joypad_cnt]));
|
||||
|
||||
strlcpy(params.name,
|
||||
dinput_joypad_name(g_joypad_cnt),
|
||||
sizeof(params.name));
|
||||
@ -285,9 +281,6 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p)
|
||||
params.pid = dinput_joypad_pid(g_joypad_cnt);
|
||||
|
||||
input_autoconfigure_connect(¶ms);
|
||||
|
||||
settings->input.pid[g_joypad_cnt] = params.pid;
|
||||
settings->input.vid[g_joypad_cnt] = params.vid;
|
||||
}
|
||||
|
||||
#ifdef HAVE_XINPUT
|
||||
@ -324,17 +317,16 @@ static bool dinput_joypad_init(void *data)
|
||||
|
||||
static bool dinput_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
{
|
||||
const struct dinput_joypad *pad = NULL;
|
||||
|
||||
if (joykey == NO_BTN)
|
||||
unsigned hat_dir = 0;
|
||||
const struct dinput_joypad *pad = &g_pads[port_num];
|
||||
if (!pad || !pad->joypad)
|
||||
return false;
|
||||
|
||||
pad = &g_pads[port_num];
|
||||
if (!pad->joypad)
|
||||
return false;
|
||||
hat_dir = GET_HAT_DIR(joykey);
|
||||
|
||||
/* Check hat. */
|
||||
if (GET_HAT_DIR(joykey))
|
||||
|
||||
if (hat_dir)
|
||||
{
|
||||
unsigned pov;
|
||||
unsigned hat = GET_HAT(joykey);
|
||||
@ -349,7 +341,7 @@ static bool dinput_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
/* Magic numbers I'm not sure where originate from. */
|
||||
if (pov < 36000)
|
||||
{
|
||||
switch (GET_HAT_DIR(joykey))
|
||||
switch (hat_dir)
|
||||
{
|
||||
case HAT_UP_MASK:
|
||||
return (pov >= 31500) || (pov <= 4500);
|
||||
|
@ -145,14 +145,6 @@ static void handle_hotplug(unsigned port, uint32_t ptype)
|
||||
if (ptype != WPAD_EXP_NOCONTROLLER)
|
||||
{
|
||||
autoconfig_params_t params = {{0}};
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if (!settings->input.autodetect_enable)
|
||||
return;
|
||||
|
||||
strlcpy(settings->input.device_names[port],
|
||||
gx_joypad_name(port),
|
||||
sizeof(settings->input.device_names[port]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
params.idx = port;
|
||||
@ -503,14 +495,18 @@ static bool gx_joypad_query_pad(unsigned pad)
|
||||
static void gx_joypad_destroy(void)
|
||||
{
|
||||
#ifdef HW_RVL
|
||||
#if 0
|
||||
int i;
|
||||
for (i = 0; i < MAX_PADS; i++)
|
||||
{
|
||||
// Commenting this out fixes the Wii remote not reconnecting after core load, exit, etc.
|
||||
// WPAD_Flush(i);
|
||||
// WPADDisconnect(i);
|
||||
/* Commenting this out fixes the Wii
|
||||
* remote not reconnecting after
|
||||
* core load, exit, etc. */
|
||||
WPAD_Flush(i);
|
||||
WPADDisconnect(i);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
input_device_driver_t gx_joypad = {
|
||||
|
@ -207,9 +207,6 @@ static void apple_gamecontroller_joypad_destroy(void)
|
||||
|
||||
static bool apple_gamecontroller_joypad_button(unsigned port, uint16_t joykey)
|
||||
{
|
||||
if (joykey == NO_BTN)
|
||||
return false;
|
||||
|
||||
/* Check hat. */
|
||||
if (GET_HAT_DIR(joykey))
|
||||
return false;
|
||||
|
@ -43,11 +43,7 @@ static const char *ps3_joypad_name(unsigned pad)
|
||||
|
||||
static void ps3_joypad_autodetect_add(unsigned autoconf_pad)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
autoconfig_params_t params = {{0}};
|
||||
strlcpy(settings->input.device_names[autoconf_pad],
|
||||
"SixAxis Controller",
|
||||
sizeof(settings->input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
params.idx = autoconf_pad;
|
||||
|
@ -72,13 +72,8 @@ static const char *psp_joypad_name(unsigned pad)
|
||||
|
||||
static void psp_joypad_autodetect_add(unsigned autoconf_pad)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
autoconfig_params_t params = {{0}};
|
||||
|
||||
strlcpy(settings->input.device_names[autoconf_pad],
|
||||
psp_joypad_name(autoconf_pad),
|
||||
sizeof(settings->input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
params.idx = autoconf_pad;
|
||||
strlcpy(params.name, psp_joypad_name(autoconf_pad), sizeof(params.name));
|
||||
|
@ -28,7 +28,6 @@ static const char *qnx_joypad_name(unsigned pad)
|
||||
static bool qnx_joypad_init(void *data)
|
||||
{
|
||||
unsigned autoconf_pad;
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
(void)data;
|
||||
|
||||
@ -36,9 +35,6 @@ static bool qnx_joypad_init(void *data)
|
||||
{
|
||||
autoconfig_params_t params = {{0}};
|
||||
|
||||
strlcpy(settings->input.device_names[autoconf_pad], "None",
|
||||
sizeof(settings->input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
params.idx = autoconf_pad;
|
||||
strlcpy(params.name, qnx_joypad_name(autoconf_pad), sizeof(params.name));
|
||||
|
@ -98,7 +98,6 @@ static void sdl_pad_connect(unsigned id)
|
||||
bool success = false;
|
||||
int32_t product = 0;
|
||||
int32_t vendor = 0;
|
||||
settings_t *settings = config_get_ptr();
|
||||
autoconfig_params_t params = {{0}};
|
||||
|
||||
#ifdef HAVE_SDL2
|
||||
@ -131,8 +130,6 @@ static void sdl_pad_connect(unsigned id)
|
||||
return;
|
||||
}
|
||||
|
||||
strlcpy(settings->input.device_names[id], sdl_pad_name(id), sizeof(settings->input.device_names[id]));
|
||||
|
||||
#ifdef HAVE_SDL2
|
||||
guid = SDL_JoystickGetGUID(pad->joypad);
|
||||
guid_ptr = (uint16_t*)guid.data;
|
||||
@ -202,7 +199,6 @@ static void sdl_pad_connect(unsigned id)
|
||||
|
||||
static void sdl_pad_disconnect(unsigned id)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
#ifdef HAVE_SDL2
|
||||
if (sdl_pads[id].haptic)
|
||||
SDL_HapticClose(sdl_pads[id].haptic);
|
||||
@ -220,8 +216,6 @@ static void sdl_pad_disconnect(unsigned id)
|
||||
input_autoconfigure_disconnect(id, sdl_joypad.ident);
|
||||
}
|
||||
|
||||
settings->input.device_names[id][0] = '\0';
|
||||
|
||||
memset(&sdl_pads[id], 0, sizeof(sdl_pads[id]));
|
||||
}
|
||||
|
||||
@ -289,25 +283,24 @@ error:
|
||||
|
||||
static bool sdl_joypad_button(unsigned port, uint16_t joykey)
|
||||
{
|
||||
sdl_joypad_t *pad = NULL;
|
||||
if (joykey == NO_BTN)
|
||||
return false;
|
||||
|
||||
pad = (sdl_joypad_t*)&sdl_pads[port];
|
||||
if (!pad->joypad)
|
||||
unsigned hat_dir = 0;
|
||||
sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[port];
|
||||
if (!pad || !pad->joypad)
|
||||
return false;
|
||||
|
||||
hat_dir = GET_HAT_DIR(joykey);
|
||||
/* Check hat. */
|
||||
if (GET_HAT_DIR(joykey))
|
||||
if (hat_dir)
|
||||
{
|
||||
uint8_t dir;
|
||||
uint16_t hat = GET_HAT(joykey);
|
||||
|
||||
if (hat >= pad->num_hats)
|
||||
return false;
|
||||
|
||||
dir = sdl_pad_get_hat(pad, hat);
|
||||
|
||||
switch (GET_HAT_DIR(joykey))
|
||||
switch (hat_dir)
|
||||
{
|
||||
case HAT_UP_MASK:
|
||||
return dir & SDL_HAT_UP;
|
||||
@ -333,7 +326,7 @@ static bool sdl_joypad_button(unsigned port, uint16_t joykey)
|
||||
static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
{
|
||||
sdl_joypad_t *pad;
|
||||
int16_t val;
|
||||
int16_t val = 0;
|
||||
|
||||
if (joyaxis == AXIS_NONE)
|
||||
return 0;
|
||||
@ -342,7 +335,6 @@ static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
if (!pad->joypad)
|
||||
return false;
|
||||
|
||||
val = 0;
|
||||
if (AXIS_NEG_GET(joyaxis) < pad->num_axes)
|
||||
{
|
||||
val = sdl_pad_get_axis(pad, AXIS_NEG_GET(joyaxis));
|
||||
@ -391,9 +383,9 @@ static void sdl_joypad_poll(void)
|
||||
#ifdef HAVE_SDL2
|
||||
static bool sdl_joypad_set_rumble(unsigned pad, enum retro_rumble_effect effect, uint16_t strength)
|
||||
{
|
||||
SDL_HapticEffect efx;
|
||||
sdl_joypad_t *joypad = (sdl_joypad_t*)&sdl_pads[pad];
|
||||
|
||||
SDL_HapticEffect efx;
|
||||
memset(&efx, 0, sizeof(efx));
|
||||
|
||||
if (!joypad->joypad || !joypad->haptic)
|
||||
|
@ -83,8 +83,8 @@ struct udev_joypad
|
||||
int32_t pid;
|
||||
};
|
||||
|
||||
static struct udev *udev_joypad_fd;
|
||||
static struct udev_monitor *udev_joypad_mon;
|
||||
static struct udev *udev_joypad_fd = NULL;
|
||||
static struct udev_monitor *udev_joypad_mon = NULL;
|
||||
static struct udev_joypad udev_pads[MAX_USERS];
|
||||
|
||||
static INLINE int16_t udev_compute_axis(const struct input_absinfo *info, int value)
|
||||
@ -286,11 +286,9 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char
|
||||
params.idx = p;
|
||||
params.vid = pad->vid;
|
||||
params.pid = pad->pid;
|
||||
settings->input.pid[p] = params.pid;
|
||||
settings->input.vid[p] = params.vid;
|
||||
|
||||
strlcpy(settings->input.device_names[p], params.name, sizeof(settings->input.device_names[p]));
|
||||
strlcpy(params.driver, udev_joypad.ident, sizeof(params.driver));
|
||||
strlcpy(params.driver, udev_joypad.ident,
|
||||
sizeof(params.driver));
|
||||
input_autoconfigure_connect(¶ms);
|
||||
|
||||
ret = 1;
|
||||
@ -304,7 +302,9 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char
|
||||
p, path);
|
||||
|
||||
if (ioctl(fd, EVIOCGEFFECTS, &pad->num_effects) >= 0)
|
||||
RARCH_LOG("[udev]: Pad #%u (%s) supports %d force feedback effects.\n", p, path, pad->num_effects);
|
||||
RARCH_LOG(
|
||||
"[udev]: Pad #%u (%s) supports %d force feedback effects.\n",
|
||||
p, path, pad->num_effects);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -324,7 +324,9 @@ static void udev_check_device(struct udev_device *dev, const char *path)
|
||||
{
|
||||
if (st.st_rdev == udev_pads[i].device)
|
||||
{
|
||||
RARCH_LOG("[udev]: Device ID %u is already plugged.\n", (unsigned)st.st_rdev);
|
||||
RARCH_LOG(
|
||||
"[udev]: Device ID %u is already plugged.\n",
|
||||
(unsigned)st.st_rdev);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -427,7 +429,8 @@ end:
|
||||
udev_device_unref(dev);
|
||||
}
|
||||
|
||||
static bool udev_set_rumble(unsigned i, enum retro_rumble_effect effect, uint16_t strength)
|
||||
static bool udev_set_rumble(unsigned i,
|
||||
enum retro_rumble_effect effect, uint16_t strength)
|
||||
{
|
||||
int old_effect;
|
||||
uint16_t old_strength;
|
||||
@ -530,7 +533,8 @@ static bool udev_joypad_init(void *data)
|
||||
udev_joypad_mon = udev_monitor_new_from_netlink(udev_joypad_fd, "udev");
|
||||
if (udev_joypad_mon)
|
||||
{
|
||||
udev_monitor_filter_add_match_subsystem_devtype(udev_joypad_mon, "input", NULL);
|
||||
udev_monitor_filter_add_match_subsystem_devtype(
|
||||
udev_joypad_mon, "input", NULL);
|
||||
udev_monitor_enable_receiving(udev_joypad_mon);
|
||||
}
|
||||
|
||||
@ -561,14 +565,15 @@ error:
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool udev_joypad_hat(const struct udev_joypad *pad, uint16_t hat)
|
||||
static bool udev_joypad_button_hat(const void *data, uint16_t joykey, unsigned hat_dir)
|
||||
{
|
||||
unsigned h = GET_HAT(hat);
|
||||
const struct udev_joypad *pad = (const struct udev_joypad*)data;
|
||||
unsigned h = GET_HAT(joykey);
|
||||
|
||||
if (h >= NUM_HATS)
|
||||
return false;
|
||||
|
||||
switch (GET_HAT_DIR(hat))
|
||||
switch (hat_dir)
|
||||
{
|
||||
case HAT_LEFT_MASK:
|
||||
return pad->hats[h][0] < 0;
|
||||
@ -586,9 +591,10 @@ static bool udev_joypad_hat(const struct udev_joypad *pad, uint16_t hat)
|
||||
static bool udev_joypad_button(unsigned port, uint16_t joykey)
|
||||
{
|
||||
const struct udev_joypad *pad = (const struct udev_joypad*)&udev_pads[port];
|
||||
unsigned hat_dir = GET_HAT_DIR(joykey);
|
||||
|
||||
if (GET_HAT_DIR(joykey))
|
||||
return udev_joypad_hat(pad, joykey);
|
||||
if (hat_dir)
|
||||
return udev_joypad_button_hat(pad, joykey, hat_dir);
|
||||
return joykey < UDEV_NUM_BUTTONS && BIT64_GET(pad->buttons, joykey);
|
||||
}
|
||||
|
||||
|
@ -47,16 +47,8 @@ static const char *wiiu_joypad_name(unsigned pad)
|
||||
|
||||
static void wiiu_joypad_autodetect_add(unsigned autoconf_pad)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
autoconfig_params_t params = {{0}};
|
||||
|
||||
if (!settings->input.autodetect_enable)
|
||||
return;
|
||||
|
||||
strlcpy(settings->input.device_names[autoconf_pad],
|
||||
wiiu_joypad_name(autoconf_pad),
|
||||
sizeof(settings->input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
params.idx = autoconf_pad;
|
||||
strlcpy(params.name, wiiu_joypad_name(autoconf_pad), sizeof(params.name));
|
||||
|
@ -47,10 +47,6 @@ static void xdk_joypad_autodetect_add(unsigned autoconf_pad)
|
||||
autoconfig_params_t params = {{0}};
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
strlcpy(settings->input.device_names[autoconf_pad],
|
||||
"XInput Controller",
|
||||
sizeof(settings->input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
params.idx = autoconf_pad;
|
||||
strlcpy(params.name, xdk_joypad_name(autoconf_pad), sizeof(params.name));
|
||||
|
@ -258,10 +258,6 @@ static bool xinput_joypad_init(void *data)
|
||||
{
|
||||
autoconfig_params_t params = {{0}};
|
||||
|
||||
strlcpy(settings->input.device_names[autoconf_pad],
|
||||
xinput_joypad_name(autoconf_pad),
|
||||
sizeof(settings->input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
params.idx = autoconf_pad;
|
||||
strlcpy(params.name, xinput_joypad_name(autoconf_pad), sizeof(params.name));
|
||||
@ -318,14 +314,11 @@ static const uint16_t button_index_to_bitmap_code[] = {
|
||||
|
||||
static bool xinput_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
{
|
||||
uint16_t btn_word;
|
||||
int xuser;
|
||||
uint16_t btn_word = 0;
|
||||
unsigned num_buttons = 0;
|
||||
unsigned hat_dir = 0;
|
||||
int xuser = pad_index_to_xuser_index(port_num);
|
||||
|
||||
if (joykey == NO_BTN)
|
||||
return false;
|
||||
|
||||
xuser = pad_index_to_xuser_index(port_num);
|
||||
if (xuser == -1)
|
||||
return dinput_joypad.button(port_num, joykey);
|
||||
|
||||
@ -333,10 +326,11 @@ static bool xinput_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
return false;
|
||||
|
||||
btn_word = g_xinput_states[xuser].xstate.Gamepad.wButtons;
|
||||
hat_dir = GET_HAT_DIR(joykey);
|
||||
|
||||
if (GET_HAT_DIR(joykey))
|
||||
if (hat_dir)
|
||||
{
|
||||
switch (GET_HAT_DIR(joykey))
|
||||
switch (hat_dir)
|
||||
{
|
||||
case HAT_UP_MASK:
|
||||
return btn_word & XINPUT_GAMEPAD_DPAD_UP;
|
||||
@ -347,6 +341,7 @@ static bool xinput_joypad_button(unsigned port_num, uint16_t joykey)
|
||||
case HAT_RIGHT_MASK:
|
||||
return btn_word & XINPUT_GAMEPAD_DPAD_RIGHT;
|
||||
}
|
||||
|
||||
return false; /* hat requested and no hat button down. */
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include <compat/strl.h>
|
||||
#include <file/file_path.h>
|
||||
#include <file/config_file.h>
|
||||
#include <string/stdstring.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -181,12 +182,13 @@ const char *input_config_bind_map_get_desc(unsigned i)
|
||||
return msg_hash_to_str(keybind->desc);
|
||||
}
|
||||
|
||||
void input_config_parse_key(config_file_t *conf,
|
||||
void input_config_parse_key(void *data,
|
||||
const char *prefix, const char *btn,
|
||||
struct retro_keybind *bind)
|
||||
{
|
||||
char tmp[64];
|
||||
char key[64];
|
||||
config_file_t *conf = (config_file_t*)data;
|
||||
|
||||
tmp[0] = key[0] = '\0';
|
||||
|
||||
@ -290,7 +292,7 @@ static void parse_hat(struct retro_keybind *bind, const char *str)
|
||||
bind->joykey = HAT_MAP(hat, hat_dir);
|
||||
}
|
||||
|
||||
void input_config_parse_joy_button(config_file_t *conf, const char *prefix,
|
||||
void input_config_parse_joy_button(void *data, const char *prefix,
|
||||
const char *btn, struct retro_keybind *bind)
|
||||
{
|
||||
char str[256];
|
||||
@ -298,6 +300,7 @@ void input_config_parse_joy_button(config_file_t *conf, const char *prefix,
|
||||
char key[64];
|
||||
char key_label[64] = {0};
|
||||
char *tmp_a = NULL;
|
||||
config_file_t *conf = (config_file_t*)data;
|
||||
|
||||
str[0] = tmp[0] = key[0] = '\0';
|
||||
|
||||
@ -329,14 +332,15 @@ void input_config_parse_joy_button(config_file_t *conf, const char *prefix,
|
||||
}
|
||||
}
|
||||
|
||||
void input_config_parse_joy_axis(config_file_t *conf, const char *prefix,
|
||||
void input_config_parse_joy_axis(void *data, const char *prefix,
|
||||
const char *axis, struct retro_keybind *bind)
|
||||
{
|
||||
char str[256];
|
||||
char tmp[64];
|
||||
char key[64];
|
||||
char key_label[64];
|
||||
char *tmp_a = NULL;
|
||||
char *tmp_a = NULL;
|
||||
config_file_t *conf = (config_file_t*)data;
|
||||
|
||||
str[0] = tmp[0] = key[0] = key_label[0] = '\0';
|
||||
|
||||
|
@ -19,8 +19,6 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <file/config_file.h>
|
||||
|
||||
#include "input_driver.h"
|
||||
|
||||
const char *input_config_bind_map_get_base(unsigned i);
|
||||
@ -59,14 +57,14 @@ const char *input_config_get_prefix(unsigned user, bool meta);
|
||||
**/
|
||||
unsigned input_config_translate_str_to_bind_id(const char *str);
|
||||
|
||||
void input_config_parse_key(config_file_t *conf,
|
||||
void input_config_parse_key(void *data,
|
||||
const char *prefix, const char *btn,
|
||||
struct retro_keybind *bind);
|
||||
|
||||
void input_config_parse_joy_button(config_file_t *conf, const char *prefix,
|
||||
void input_config_parse_joy_button(void *data, const char *prefix,
|
||||
const char *btn, struct retro_keybind *bind);
|
||||
|
||||
void input_config_parse_joy_axis(config_file_t *conf, const char *prefix,
|
||||
void input_config_parse_joy_axis(void *data, const char *prefix,
|
||||
const char *axis, struct retro_keybind *bind);
|
||||
|
||||
const struct retro_keybind *input_config_get_bind_auto(unsigned port, unsigned id);
|
||||
|
@ -499,6 +499,7 @@ static INLINE bool input_menu_keys_pressed_internal(unsigned i)
|
||||
{
|
||||
int port;
|
||||
int port_max = 1;
|
||||
|
||||
if (settings->input.all_users_control_menu)
|
||||
port_max = settings->input.max_users;
|
||||
|
||||
@ -509,16 +510,10 @@ static INLINE bool input_menu_keys_pressed_internal(unsigned i)
|
||||
const input_device_driver_t *sec = current_input->get_sec_joypad_driver
|
||||
? current_input->get_sec_joypad_driver(current_input_data) : NULL;
|
||||
|
||||
if (sec)
|
||||
{
|
||||
if (input_joypad_pressed(sec, port, settings->input.binds[0], i))
|
||||
return true;
|
||||
}
|
||||
if (first)
|
||||
{
|
||||
if (input_joypad_pressed(first, port, settings->input.binds[0], i))
|
||||
return true;
|
||||
}
|
||||
if (sec && input_joypad_pressed(sec, port, settings->input.binds[0], i))
|
||||
return true;
|
||||
if (first && input_joypad_pressed(first, port, settings->input.binds[0], i))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -585,6 +580,13 @@ uint64_t input_menu_keys_pressed(
|
||||
if (!current_input || !current_input_data)
|
||||
goto end;
|
||||
|
||||
if (settings->menu.unified_controls)
|
||||
return input_keys_pressed(
|
||||
old_input,
|
||||
last_input,
|
||||
trigger_input,
|
||||
runloop_paused);
|
||||
|
||||
for (i = 0; i < settings->input.max_users; i++)
|
||||
{
|
||||
struct retro_keybind *auto_binds = settings->input.autoconf_binds[i];
|
||||
@ -783,17 +785,17 @@ uint64_t input_keys_pressed(
|
||||
bool runloop_paused)
|
||||
{
|
||||
unsigned i;
|
||||
uint64_t ret = 0;
|
||||
settings_t *settings = config_get_ptr();
|
||||
const struct retro_keybind *binds = settings->input.binds[0];
|
||||
const struct retro_keybind *binds_auto = &settings->input.autoconf_binds[0][RARCH_ENABLE_HOTKEY];
|
||||
const struct retro_keybind *normal = &binds[RARCH_ENABLE_HOTKEY];
|
||||
uint64_t ret = 0;
|
||||
settings_t *settings = config_get_ptr();
|
||||
const struct retro_keybind *binds = settings->input.binds[0];
|
||||
const struct retro_keybind *binds_auto = &settings->input.autoconf_binds[0][RARCH_ENABLE_HOTKEY];
|
||||
const struct retro_keybind *normal = &binds[RARCH_ENABLE_HOTKEY];
|
||||
|
||||
const struct retro_keybind *focus_binds_auto = &settings->input.autoconf_binds[0][RARCH_GAME_FOCUS_TOGGLE];
|
||||
const struct retro_keybind *focus_normal = &binds[RARCH_GAME_FOCUS_TOGGLE];
|
||||
|
||||
input_driver_block_libretro_input = false;
|
||||
input_driver_block_hotkey = false;
|
||||
input_driver_block_libretro_input = false;
|
||||
input_driver_block_hotkey = false;
|
||||
|
||||
/* Don't block the check to RARCH_ENABLE_HOTKEY
|
||||
* unless we're really supposed to. */
|
||||
|
@ -250,7 +250,7 @@ bool input_joypad_pressed(
|
||||
uint64_t joykey = (binds[key].joykey != NO_BTN)
|
||||
? binds[key].joykey : auto_binds[key].joykey;
|
||||
|
||||
if (!drv->button(joy_idx, (uint16_t)joykey))
|
||||
if ((uint16_t)joykey == NO_BTN || !drv->button(joy_idx, (uint16_t)joykey))
|
||||
{
|
||||
uint32_t joyaxis = (binds[key].joyaxis != AXIS_NONE)
|
||||
? binds[key].joyaxis : auto_binds[key].joyaxis;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* RetroArch - A frontend for libretro.
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2011-2016 - Daniel De Matteis
|
||||
*
|
||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
||||
@ -23,6 +23,11 @@
|
||||
#include "../configuration.h"
|
||||
#include "../verbosity.h"
|
||||
|
||||
#if defined(_MSC_VER) && !defined(_XBOX)
|
||||
/* https://support.microsoft.com/en-us/kb/980263 */
|
||||
#pragma execution_character_set("utf-8")
|
||||
#endif
|
||||
|
||||
int menu_hash_get_help_chs_enum(enum msg_hash_enums msg, char *s, size_t len)
|
||||
{
|
||||
uint32_t driver_hash = 0;
|
||||
@ -2116,8 +2121,8 @@ const char *msg_hash_to_str_chs(enum msg_hash_enums msg)
|
||||
return "选择数据库";
|
||||
case MENU_ENUM_LABEL_VALUE_DELETE_ENTRY:
|
||||
return "移除";
|
||||
case MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST:
|
||||
return "选择文件并探测核心";
|
||||
case MENU_ENUM_LABEL_VALUE_FAVORITES:
|
||||
return "选择文件并探测核心"; /* TODO/FIXME - update */
|
||||
case MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT:
|
||||
return "<游戏内容目录>";
|
||||
case MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT:
|
||||
@ -2452,8 +2457,6 @@ const char *msg_hash_to_str_chs(enum msg_hash_enums msg)
|
||||
return "线性";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE:
|
||||
return "使用核心加载压缩包";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT:
|
||||
return "选择文件";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY:
|
||||
return "加载最近的游戏内容";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST:
|
||||
|
@ -103,24 +103,6 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MENU_ENUM_LABEL_LOAD_CONTENT:
|
||||
snprintf(s, len,
|
||||
"Lade Content. \n"
|
||||
"Suche nach Content. \n"
|
||||
" \n"
|
||||
"Um Content zu laden benötigst du den passenden \n"
|
||||
"Libretro-Core und die Content-Datei. \n"
|
||||
" \n"
|
||||
"Um einzustellen, welcher Ordner standardmäßig \n"
|
||||
"geöffnet wird, um nach Content zu suchen, solltest \n"
|
||||
"du das Content-Verzeichnis setzen. Wenn es nicht \n"
|
||||
"gesetzt ist, wird es im Root-Verzeichen starten. \n"
|
||||
" \n"
|
||||
"Der Browser wird nur Dateierweiterungen des \n"
|
||||
"zuletzt geladenen Cores zeigen und diesen Core \n"
|
||||
"nutzen, wenn Content geladen wird."
|
||||
);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY:
|
||||
snprintf(s, len,
|
||||
"Lade Content aus dem Verlauf. \n"
|
||||
|
@ -146,6 +146,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER,
|
||||
"Datenbankmanager")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY,
|
||||
"Von der Playlist löschen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES,
|
||||
"Lesezeichen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST,
|
||||
"Content laden (Core erkennen)") /* FIXME */
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
|
||||
@ -308,12 +310,16 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS,
|
||||
"Menü-Einstellungen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER,
|
||||
"Menühintergrund")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY,
|
||||
"Background opacity")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING,
|
||||
"Fehlt")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE,
|
||||
"...")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE,
|
||||
"Maus-Unterstützung")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS,
|
||||
"Media-Player-Einstellungen") /* UPDATE/FIXME */
|
||||
"Multimedia-Einstellungen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MUSIC_TAB,
|
||||
"Musik")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE,
|
||||
@ -322,26 +328,46 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND,
|
||||
"Navigation umbrechen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NEAREST,
|
||||
"Nächster")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY,
|
||||
"Netplay")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT, /* TODO, Original string changed */
|
||||
"Tausche Netplay-Eingabe")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES,
|
||||
"Verzögere Netplay-Frames")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT,
|
||||
"Disconnect")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE,
|
||||
"Aktiviere Netplay")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT,
|
||||
"Connect to Netplay host")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST,
|
||||
"Start hosting")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, /* TODO, Original string changed */
|
||||
"IP-Addresse für Netplay")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS,
|
||||
"Scan local network")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE,
|
||||
"Aktiviere Netplay-Client")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME,
|
||||
"Benutzername")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS,
|
||||
"Netplay settings")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE,
|
||||
"Aktiviere Netplay-Zuschauermodus")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT,
|
||||
"TCP/UDP-Port für Netplay")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NAT_TRAVERSAL,
|
||||
"Netplay NAT Traversal")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE,
|
||||
"Netzwerk-Befehle")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT,
|
||||
"Port für Netzwerk-Befehle")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION,
|
||||
"Network Information")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE,
|
||||
"Network Gamepad")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT,
|
||||
"Network Remote Base Port")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS,
|
||||
"Netzwerk-Einstellungen")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO,
|
||||
@ -350,6 +376,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NONE,
|
||||
"Keins")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE,
|
||||
"Nicht verfügbar")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY,
|
||||
"No achievements to display.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE,
|
||||
"Kein Core")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE,
|
||||
@ -358,22 +386,32 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE,
|
||||
"Keine Core-Informationen verfügbar.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE,
|
||||
"Keine Core-Optionen verfügbar.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY,
|
||||
"No entries to display.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE,
|
||||
"No history available.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE,
|
||||
"Keine Informationen verfügbar.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS,
|
||||
"Keine Einträge.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND,
|
||||
"No netplay hosts found.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND,
|
||||
"No networks found.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS,
|
||||
"Keine Leistungszähler.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS,
|
||||
"No playlists.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE,
|
||||
"Keine Wiedergabelisten-Eintrage verfügbar.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND,
|
||||
"Keine Einstellungen gefunden.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS,
|
||||
"Keine Shaderparameter")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_OFF, /* Don't change. Needed for XMB atm. (Would be, "AN") */
|
||||
"OFF")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_ON, /* Don't change. Needed for XMB atm. (Would be, "AUS") */
|
||||
"ON")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_OFF,
|
||||
"AN")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_ON,
|
||||
"AUS")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER,
|
||||
"Online-Aktualisierung")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS,
|
||||
@ -838,3 +876,17 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO,
|
||||
"Zeige Videos")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_YES,
|
||||
"Ja")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE,
|
||||
"Pause gameplay when window focus is lost.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION,
|
||||
"Enable or disable composition (Windows only).")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE,
|
||||
"Enable or disable recent playlist for games, images, music, and videos.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE,
|
||||
"Limit the number of entries in recent playlist for games, images, music, and videos.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS,
|
||||
"Unified Menu Controls")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS,
|
||||
"Use the same controls for both the menu and the game. Applies to the keyboard.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE,
|
||||
"Show onscreen messages.")
|
||||
|
@ -484,8 +484,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION,
|
||||
"Database Selection")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY,
|
||||
"Remove")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST,
|
||||
"Select File And Detect Core")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES,
|
||||
"Favorites")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
|
||||
"<Content dir>")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT,
|
||||
@ -571,7 +571,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU,
|
||||
"Horizontal Menu")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB,
|
||||
"Images")
|
||||
"Image")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION,
|
||||
"Information")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST,
|
||||
@ -818,8 +818,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR,
|
||||
"Linear")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE,
|
||||
"Load Archive With Core")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT,
|
||||
"Select File")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY,
|
||||
"Load Recent")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST,
|
||||
@ -869,9 +867,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS,
|
||||
"Menu")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER,
|
||||
"Menu Wallpaper")
|
||||
"Background")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY,
|
||||
"Wallpaper opacity")
|
||||
"Background opacity")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING,
|
||||
"Missing")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE,
|
||||
@ -1171,7 +1169,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION,
|
||||
"Screen Resolution")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SEARCH,
|
||||
"Search:")
|
||||
"Search")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS,
|
||||
"seconds")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS,
|
||||
@ -1601,7 +1599,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY,
|
||||
"Show History Tab")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES,
|
||||
"Show Images Tab")
|
||||
"Show Image Tab")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC,
|
||||
"Show Music Tab")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS,
|
||||
@ -1614,6 +1612,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_YES,
|
||||
"Yes")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO,
|
||||
"Shader Preset")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE,
|
||||
"Enable or disable achievements. For more information, visit http://retroachievements.org")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL,
|
||||
"Enable or disable unofficial achievements and/or beta features for testing purposes.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
|
||||
"Enable or disable savestates, cheats, rewind, fast-forward, pause, and slow-motion for all games.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS,
|
||||
@ -2233,3 +2235,17 @@ MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING,
|
||||
"Database - Filter : Edge Magazine Rating")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO,
|
||||
"Database Info")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE,
|
||||
"Pause gameplay when window focus is lost.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION,
|
||||
"Enable or disable composition (Windows only).")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE,
|
||||
"Enable or disable recent playlist for games, images, music, and videos.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE,
|
||||
"Limit the number of entries in recent playlist for games, images, music, and videos.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS,
|
||||
"Unified Menu Controls")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS,
|
||||
"Use the same controls for both the menu and the game. Applies to the keyboard.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE,
|
||||
"Show onscreen messages.")
|
||||
|
@ -1372,8 +1372,6 @@ const char *msg_hash_to_str_es(enum msg_hash_enums msg)
|
||||
return "Error:";
|
||||
case MSG_FAILED_TO_APPLY_SHADER:
|
||||
return "Error al aplicar shader.";
|
||||
case MSG_FAILED_TO_LOAD_CONTENT:
|
||||
return "Error al cargar el contenido";
|
||||
case MSG_FAILED_TO_LOAD_MOVIE_FILE:
|
||||
return "Error al cargar el archivo de película";
|
||||
case MSG_FAILED_TO_LOAD_OVERLAY:
|
||||
@ -1552,7 +1550,7 @@ const char *msg_hash_to_str_es(enum msg_hash_enums msg)
|
||||
case MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS:
|
||||
return "Sonido";
|
||||
case MENU_ENUM_LABEL_VALUE_AUDIO_SYNC:
|
||||
return "Activar sincronía de sonido";
|
||||
return "Sincronía de sonido";
|
||||
case MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME:
|
||||
return "Volumen de sonido (dB)";
|
||||
case MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL:
|
||||
@ -1655,8 +1653,8 @@ const char *msg_hash_to_str_es(enum msg_hash_enums msg)
|
||||
return "Proporción personalizada";
|
||||
case MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER:
|
||||
return "Gestor de bases de datos";
|
||||
case MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST:
|
||||
return "Seleccionar archivo y detectar núcleo";
|
||||
case MENU_ENUM_LABEL_VALUE_FAVORITES:
|
||||
return "Seleccionar archivo y detectar núcleo"; /* TODO/FIXME - update */
|
||||
case MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT:
|
||||
return "(Carpeta de contenido)";
|
||||
case MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT:
|
||||
@ -1794,8 +1792,6 @@ const char *msg_hash_to_str_es(enum msg_hash_enums msg)
|
||||
return "Nivel de registro del núcleo";
|
||||
case MENU_ENUM_LABEL_VALUE_LINEAR:
|
||||
return "Lineal";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT:
|
||||
return "Seleccionar archivo";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY:
|
||||
return "Cargar archivos recientes";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_STATE:
|
||||
|
@ -480,8 +480,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION,
|
||||
"Database Selection")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY,
|
||||
"Remove")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST,
|
||||
"Via les fichiers (détecter le coeur)")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES,
|
||||
"Via les fichiers") /* TODO/FIXME - update */
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
|
||||
"<Dossier de contenu>")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT,
|
||||
@ -567,7 +567,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU,
|
||||
"Horizontal Menu")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB,
|
||||
"Images")
|
||||
"Image")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION,
|
||||
"Information")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST,
|
||||
@ -812,8 +812,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR,
|
||||
"Linéaire")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE,
|
||||
"Charger l'archive")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT,
|
||||
"Via les fichiers")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY,
|
||||
"Récemment ouvert")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST,
|
||||
@ -865,7 +863,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER,
|
||||
"Fond d'écran")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY,
|
||||
"Wallpaper opacity")
|
||||
"Background opacity")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING,
|
||||
"Manquant")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE,
|
||||
@ -1569,7 +1567,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY,
|
||||
"Show History Tab")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES,
|
||||
"Show Images Tab")
|
||||
"Show Image Tab")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC,
|
||||
"Show Music Tab")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS,
|
||||
@ -1582,6 +1580,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_YES,
|
||||
"Oui")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO,
|
||||
"Shader Preset")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE,
|
||||
"Enable or disable achievements. For more information, visit http://retroachievements.org")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL,
|
||||
"Enable or disable unofficial achievements and/or beta features for testing purposes.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
|
||||
"Enable or disable savestates, cheats, rewind, fast-forward, pause, and slow-motion for all games.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS,
|
||||
@ -2199,3 +2201,17 @@ MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING,
|
||||
"Database - Filter : Edge Magazine Rating")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO,
|
||||
"Database Info")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE,
|
||||
"Pause gameplay when window focus is lost.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION,
|
||||
"Enable or disable composition (Windows only).")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE,
|
||||
"Enable or disable recent playlist for games, images, music, and videos.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE,
|
||||
"Limit the number of entries in recent playlist for games, images, music, and videos.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS,
|
||||
"Unified Menu Controls")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS,
|
||||
"Use the same controls for both the menu and the game. Applies to the keyboard.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE,
|
||||
"Show onscreen messages.")
|
||||
|
@ -1227,41 +1227,16 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg)
|
||||
return "Aggiorna le info dei core";
|
||||
case MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER:
|
||||
return "Usa Media Player interno";
|
||||
#if 0
|
||||
case MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU:
|
||||
return "Menú orizzontale";
|
||||
#else
|
||||
case MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU:
|
||||
return "Horizontal Menu";
|
||||
#endif
|
||||
#if 0
|
||||
case MENU_ENUM_LABEL_VALUE_SETTINGS_TAB:
|
||||
return "Settaggi scheda";
|
||||
#else
|
||||
case MENU_ENUM_LABEL_VALUE_SETTINGS_TAB:
|
||||
return "Settings tab";
|
||||
#endif
|
||||
#if 0
|
||||
case MENU_ENUM_LABEL_VALUE_HISTORY_TAB:
|
||||
return "Cronologia scheda";
|
||||
#else
|
||||
case MENU_ENUM_LABEL_VALUE_HISTORY_TAB:
|
||||
return "History tab";
|
||||
#endif
|
||||
#if 1
|
||||
case MENU_ENUM_LABEL_VALUE_ADD_TAB:
|
||||
return "Add tab";
|
||||
#else
|
||||
case MENU_ENUM_LABEL_VALUE_ADD_TAB:
|
||||
return "Aggiungi scheda";
|
||||
#endif
|
||||
#if 0
|
||||
case MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB:
|
||||
return "Scheda Playlist";
|
||||
#else
|
||||
case MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB:
|
||||
return "Playlists tab";
|
||||
#endif
|
||||
case MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND:
|
||||
return "Nessun settaggio trovato.";
|
||||
case MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS:
|
||||
@ -1392,10 +1367,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg)
|
||||
return "Directory Shader Video";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR:
|
||||
return "Directory Filtro Video";
|
||||
case MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY:
|
||||
return "Directory Overlay";
|
||||
case MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY:
|
||||
return "Directory Overlay OSK";
|
||||
case MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT:
|
||||
return "Giocatore 2 usa Controller 1 in rete";
|
||||
case MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE:
|
||||
@ -1532,10 +1503,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg)
|
||||
return "Intervallo di swap vsync";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES:
|
||||
return "Massimo swapchain di immagini";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC:
|
||||
return "VSync";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_THREADED:
|
||||
return "Threaded Video";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION:
|
||||
return "Rotazione";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT:
|
||||
@ -1644,8 +1611,8 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg)
|
||||
return "Abilita riavvolgi";
|
||||
case MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST:
|
||||
return "Collezione";
|
||||
case MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST:
|
||||
return "Seleziona il file ed intercetta il core";
|
||||
case MENU_ENUM_LABEL_VALUE_FAVORITES:
|
||||
return "Seleziona il file ed intercetta il core"; /* TODO/FIXME - update */
|
||||
case MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST:
|
||||
return "Scarica su directories";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY:
|
||||
@ -1659,7 +1626,7 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg)
|
||||
case MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME:
|
||||
return "Livello volume audio (dB)";
|
||||
case MENU_ENUM_LABEL_VALUE_AUDIO_SYNC:
|
||||
return "Abilita sincro audio";
|
||||
return "Sincro audio";
|
||||
case MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA:
|
||||
return "Delta di controllo frequenza audio";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES:
|
||||
@ -1762,8 +1729,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg)
|
||||
return "Nessun oggetto.";
|
||||
case MENU_ENUM_LABEL_VALUE_CORE_LIST:
|
||||
return "Carica Core";
|
||||
case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT:
|
||||
return "Seleziona contenuto";
|
||||
case MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT:
|
||||
return "Chiudi";
|
||||
case MENU_ENUM_LABEL_VALUE_MANAGEMENT:
|
||||
@ -1816,8 +1781,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg)
|
||||
return "Opzioni di rimappatura degli input del core";
|
||||
case MENU_ENUM_LABEL_VALUE_THUMBNAILS:
|
||||
return "Miniature";
|
||||
case MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS:
|
||||
return "Shaders";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS:
|
||||
return "Antemprima Parametri Shader";
|
||||
case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS:
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* RetroArch - A frontend for libretro.
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2011-2016 - Daniel De Matteis
|
||||
* Copyright (C) 2016 - Brad Parker
|
||||
*
|
||||
@ -24,6 +24,11 @@
|
||||
#include "../configuration.h"
|
||||
#include "../verbosity.h"
|
||||
|
||||
#if defined(_MSC_VER) && !defined(_XBOX)
|
||||
/* https://support.microsoft.com/en-us/kb/980263 */
|
||||
#pragma execution_character_set("utf-8")
|
||||
#endif
|
||||
|
||||
int menu_hash_get_help_jp_enum(enum msg_hash_enums msg, char *s, size_t len)
|
||||
{
|
||||
uint32_t driver_hash = 0;
|
||||
|
@ -1,3 +1,8 @@
|
||||
#if defined(_MSC_VER) && !defined(_XBOX)
|
||||
/* https://support.microsoft.com/en-us/kb/980263 */
|
||||
#pragma execution_character_set("utf-8")
|
||||
#endif
|
||||
|
||||
MSG_HASH(
|
||||
MSG_COMPILER,
|
||||
"コンパイラ"
|
||||
@ -209,7 +214,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_AUDIO_SYNC,
|
||||
"オーディオの同期を有効"
|
||||
"オーディオの同期"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME,
|
||||
@ -229,7 +234,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_AUTO_SHADERS_ENABLE,
|
||||
"Load Shader Presets Automatically"
|
||||
"シェーダーのプリセットを自動的にロード"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK,
|
||||
@ -261,7 +266,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD,
|
||||
"Toggle Keyboard" "キーボードに切り替え"
|
||||
"キーボードに切り替え"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU,
|
||||
@ -269,7 +274,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS,
|
||||
"Basic menu controls"
|
||||
"基本的なメニューコントルール"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_CONFIRM,
|
||||
@ -285,7 +290,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_SCROLL_UP,
|
||||
"Scroll Up"
|
||||
"上にスクロール"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_START,
|
||||
@ -493,19 +498,17 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO,
|
||||
"カスタム比")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER,
|
||||
"データーベースマネージャー")
|
||||
"データベースマネージャー")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION,
|
||||
"Database Selection")
|
||||
"データベース選択")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY,
|
||||
"削除")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST,
|
||||
"ファイルを選択とコア検出")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT,
|
||||
"<Content dir>")
|
||||
"<コンテンツフォルダ>")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT,
|
||||
"<Default>")
|
||||
"<デフォルト>")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE,
|
||||
"<None>")
|
||||
"<無し>")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND,
|
||||
"そのようなフォルダはありません。")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS,
|
||||
@ -515,13 +518,15 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND,
|
||||
"Disk Image Append")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_INDEX,
|
||||
"Disk Index")
|
||||
"ディスクインデックス")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS,
|
||||
"ディスク設定")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE,
|
||||
"Don't care")
|
||||
"なんでもいい")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST,
|
||||
"ダウンロード")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES,
|
||||
"お気に入り")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE,
|
||||
"コアをダウンロード...")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT,
|
||||
@ -647,7 +652,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS,
|
||||
"入力のホットキーバインド")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE,
|
||||
"Keyboard Gamepad Mapping Enable")
|
||||
"キーボードのゲームパッドマッピングを有効")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A,
|
||||
"Aボタン(右)")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B,
|
||||
@ -775,7 +780,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS,
|
||||
"入力")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE,
|
||||
"Small Keyboard Enable")
|
||||
"小さいキーボードを有効")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE,
|
||||
"タッチを有効")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_ENABLE,
|
||||
@ -834,8 +839,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR,
|
||||
"Linear")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE,
|
||||
"コアでアーカイブをロード")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT,
|
||||
"ファイル選択")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY,
|
||||
"最近のものをロード")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST,
|
||||
@ -945,7 +948,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE,
|
||||
"ネットワークゲームパッド")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT,
|
||||
"Network Remote Base Port")
|
||||
"ネットワークリモートのベースポート")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS,
|
||||
"ネットワーク")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NO,
|
||||
@ -1197,7 +1200,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION,
|
||||
"スクリーン解像度")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SEARCH,
|
||||
"検索:")
|
||||
"検索")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS,
|
||||
"秒")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS,
|
||||
@ -1399,11 +1402,11 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY,
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST,
|
||||
"サムネイルのアップデーター")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS,
|
||||
"Boxarts")
|
||||
"ボックスアート")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS,
|
||||
"スクリーンショット")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS,
|
||||
"Title Screens")
|
||||
"タイトルスクリーン")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE,
|
||||
"日付と時刻を表示")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_TITLE_COLOR,
|
||||
@ -1570,6 +1573,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC,
|
||||
"VSYNC")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN,
|
||||
"ウィンドウのフルスクリーンモード")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH,
|
||||
"ウィンドウの幅")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT,
|
||||
"ウィンドウの縦")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER,
|
||||
"Wi-Fiのドライバ")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS,
|
||||
@ -1636,6 +1643,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_YES,
|
||||
"はい")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO,
|
||||
"シェーダーのプリセット")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE,
|
||||
"Enable or disable achievements. For more information, visit http://retroachievements.org")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL,
|
||||
"Enable or disable unofficial achievements and/or beta features for testing purposes.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE,
|
||||
"保存状態、チート、巻き戻し、早送り、一時停止、スローモーションを全部のゲームに無効する。")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS,
|
||||
@ -2212,7 +2223,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_ENABLED,
|
||||
"Enabled"
|
||||
"有効"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_PATH,
|
||||
@ -2253,3 +2264,19 @@ MSG_HASH(MSG_NETPLAY_LAN_SCAN_COMPLETE,
|
||||
"ネットプレイスキャン完了。")
|
||||
MSG_HASH(MSG_NETPLAY_LAN_SCANNING,
|
||||
"ネットプレイホストをスキャン中")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE,
|
||||
"Pause gameplay when window focus is lost.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION,
|
||||
"Enable or disable composition (Windows only).")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE,
|
||||
"Enable or disable recent playlist for games, images, music, and videos.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE,
|
||||
"Limit the number of entries in recent playlist for games, images, music, and videos.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS,
|
||||
"統一的なメニューコントロール")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS,
|
||||
"Use the same controls for both the menu and the game. Applies to the keyboard.")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE,
|
||||
"OSDメッセージを表する。")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_USER_REMOTE_ENABLE,
|
||||
"ユーザー%dのリモートを有効")
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user