diff --git a/Cores/Atari800/Atari800Core/Source/ATR800GameCore.m b/Cores/Atari800/Atari800Core/Source/ATR800GameCore.m index 5babd684bd..065fcd147d 100644 --- a/Cores/Atari800/Atari800Core/Source/ATR800GameCore.m +++ b/Cores/Atari800/Atari800Core/Source/ATR800GameCore.m @@ -816,6 +816,27 @@ int UI_SelectCartType(int k) } } + if([[_currentCore systemIdentifier] isEqualToString:@"com.provenance.atari8bit"]) + { + // TODO: improve detection using MD5 lookup + switch (k) + { + case 2: return CARTRIDGE_STD_2; + case 4: return CARTRIDGE_STD_4; + case 8: return CARTRIDGE_STD_8; + case 16: return CARTRIDGE_STD_16; + case 32: return CARTRIDGE_XEGS_32; + case 40: return CARTRIDGE_BBSB_40; + case 64: return CARTRIDGE_XEGS_07_64; + case 128: return CARTRIDGE_XEGS_128; + case 256: return CARTRIDGE_XEGS_256; + case 512: return CARTRIDGE_XEGS_512; + case 1024: return CARTRIDGE_ATMAX_1024; + default: + return CARTRIDGE_NONE; + } + } + if([[_currentCore systemIdentifier] isEqualToString:@"com.provenance.5200"]) { NSArray *One_Chip_16KB = @[@"a47fcb4eedab9418ea098bb431a407aa", // A.E. (Proto) diff --git a/Cores/Atari800/PVAtari800.xcodeproj/project.pbxproj b/Cores/Atari800/PVAtari800.xcodeproj/project.pbxproj index 5f000e4bcd..739af8fb26 100644 --- a/Cores/Atari800/PVAtari800.xcodeproj/project.pbxproj +++ b/Cores/Atari800/PVAtari800.xcodeproj/project.pbxproj @@ -319,101 +319,101 @@ 026953E91431737E003A07D4 /* atari800 */ = { isa = PBXGroup; children = ( - 9491E464198C11A10075135C /* act */, - 94DEA012171918D200073397 /* emuos.c */, + 026953E214317379003A07D4 /* afile.c */, + 0269541814317864003A07D4 /* antic.c */, + 9491E45C1989B1CA0075135C /* artifact.c */, + 026953E514317379003A07D4 /* atari.c */, + 026953F414317689003A07D4 /* binload.c */, + 026953EB14317649003A07D4 /* cartridge.c */, + 026953ED14317649003A07D4 /* cassette.c */, + 0269542B14317A53003A07D4 /* cfg.c */, + 0269544C14318515003A07D4 /* colours_external.c */, + 0269544E14318515003A07D4 /* colours_ntsc.c */, + 0269545014318515003A07D4 /* colours_pal.c */, + 0269545214318515003A07D4 /* colours.c */, + 0269543F14317B21003A07D4 /* compfile.c */, + 0269541B1431793F003A07D4 /* cpu.c */, 94DEA00F171918A200073397 /* crc32.c */, - 94DEA010171918A200073397 /* crc32.h */, + 9491E460198B0A8C0075135C /* cycle_map.c */, + 0269541E1431797A003A07D4 /* devices.c */, + 94DEA012171918D200073397 /* emuos.c */, + 02695421143179A2003A07D4 /* esc.c */, + 026953F7143176AE003A07D4 /* gtia.c */, + 02695425143179E9003A07D4 /* ide.c */, 94DEA0091719186E00073397 /* img_tape.c */, - 94DEA00A1719186E00073397 /* img_tape.h */, + 02E763C61431958E008050EA /* input.c */, + 02695412143177EF003A07D4 /* log.c */, + 026953F9143176AE003A07D4 /* memory.c */, + 0269543714317AC8003A07D4 /* monitor.c */, + 0269543C14317B11003A07D4 /* mzpokeysnd.c */, + 0269543114317A76003A07D4 /* pbi_bb.c */, + 0269542E14317A63003A07D4 /* pbi_mio.c */, + 0269543414317AAF003A07D4 /* pbi_scsi.c */, + 026953FD143176E6003A07D4 /* pbi.c */, + 0269542814317A43003A07D4 /* pia.c */, + 02695400143176F4003A07D4 /* pokey.c */, + 02695402143176F4003A07D4 /* pokeysnd.c */, + 0269544214317B42003A07D4 /* remez.c */, + 0269540F143177DF003A07D4 /* rtime.c */, + 02695449143184CD003A07D4 /* screen.c */, + 026954061431770E003A07D4 /* sio.c */, + 0269540C1431775C003A07D4 /* sndsave.c */, + 02669C741435806A0002A11B /* sound_oss.c */, + 9491E45A1989AF050075135C /* sound.c */, + 02E763AF143194CF008050EA /* statesav.c */, 94DEA00B1719186E00073397 /* sysrom.c */, - 94DEA00C1719186F00073397 /* sysrom.h */, - 026953EA143175F0003A07D4 /* config.h */, - 0269541814317864003A07D4 /* antic.c */, - 0269541914317864003A07D4 /* antic.h */, - 9491E45C1989B1CA0075135C /* artifact.c */, - 9491E45D1989B1CA0075135C /* artifact.h */, - 026953E214317379003A07D4 /* afile.c */, + 02E763C014319545008050EA /* ui_basic.c */, + 02E763C214319545008050EA /* ui.c */, + 026954091431771D003A07D4 /* util.c */, 026953E314317379003A07D4 /* afile.h */, 026953E414317379003A07D4 /* akey.h */, - 026953E514317379003A07D4 /* atari.c */, + 0269541914317864003A07D4 /* antic.h */, + 9491E45D1989B1CA0075135C /* artifact.h */, 026953E614317379003A07D4 /* atari.h */, - 026953F414317689003A07D4 /* binload.c */, 026953F514317689003A07D4 /* binload.h */, - 026953EB14317649003A07D4 /* cartridge.c */, 026953EC14317649003A07D4 /* cartridge.h */, - 026953ED14317649003A07D4 /* cassette.c */, 026953EE14317649003A07D4 /* cassette.h */, - 0269542B14317A53003A07D4 /* cfg.c */, 0269542C14317A53003A07D4 /* cfg.h */, - 0269544C14318515003A07D4 /* colours_external.c */, 0269544D14318515003A07D4 /* colours_external.h */, - 0269544E14318515003A07D4 /* colours_ntsc.c */, 0269544F14318515003A07D4 /* colours_ntsc.h */, - 0269545014318515003A07D4 /* colours_pal.c */, 0269545114318515003A07D4 /* colours_pal.h */, - 0269545214318515003A07D4 /* colours.c */, 0269545314318515003A07D4 /* colours.h */, - 0269543F14317B21003A07D4 /* compfile.c */, 0269544014317B21003A07D4 /* compfile.h */, - 0269541B1431793F003A07D4 /* cpu.c */, + 026953EA143175F0003A07D4 /* config.h */, 0269541C1431793F003A07D4 /* cpu.h */, - 9491E460198B0A8C0075135C /* cycle_map.c */, + 94DEA010171918A200073397 /* crc32.h */, 9491E461198B0A8C0075135C /* cycle_map.h */, - 0269541E1431797A003A07D4 /* devices.c */, 0269541F1431797A003A07D4 /* devices.h */, 02252B371437A377001F3BF4 /* emuos.h */, - 02695421143179A2003A07D4 /* esc.c */, 02695422143179A2003A07D4 /* esc.h */, - 026953F7143176AE003A07D4 /* gtia.c */, 026953F8143176AE003A07D4 /* gtia.h */, 02695424143179E9003A07D4 /* ide_internal.h */, - 02695425143179E9003A07D4 /* ide.c */, 02695426143179E9003A07D4 /* ide.h */, - 02E763C61431958E008050EA /* input.c */, + 94DEA00A1719186E00073397 /* img_tape.h */, 02E763C71431958E008050EA /* input.h */, - 02695412143177EF003A07D4 /* log.c */, 02695413143177EF003A07D4 /* log.h */, - 026953F9143176AE003A07D4 /* memory.c */, 026953FA143176AE003A07D4 /* memory.h */, - 0269543714317AC8003A07D4 /* monitor.c */, 0269543814317AC8003A07D4 /* monitor.h */, - 0269543C14317B11003A07D4 /* mzpokeysnd.c */, 0269543D14317B11003A07D4 /* mzpokeysnd.h */, - 026954061431770E003A07D4 /* sio.c */, - 026954071431770E003A07D4 /* sio.h */, - 02E763AF143194CF008050EA /* statesav.c */, - 02E763B0143194CF008050EA /* statesav.h */, - 026953FD143176E6003A07D4 /* pbi.c */, - 026953FE143176E6003A07D4 /* pbi.h */, - 0269543414317AAF003A07D4 /* pbi_scsi.c */, - 0269543514317AAF003A07D4 /* pbi_scsi.h */, - 0269543114317A76003A07D4 /* pbi_bb.c */, 0269543214317A76003A07D4 /* pbi_bb.h */, - 0269542E14317A63003A07D4 /* pbi_mio.c */, 0269542F14317A63003A07D4 /* pbi_mio.h */, - 0269542814317A43003A07D4 /* pia.c */, + 0269543514317AAF003A07D4 /* pbi_scsi.h */, + 026953FE143176E6003A07D4 /* pbi.h */, 0269542914317A43003A07D4 /* pia.h */, - 02695400143176F4003A07D4 /* pokey.c */, 02695401143176F4003A07D4 /* pokey.h */, - 02695402143176F4003A07D4 /* pokeysnd.c */, 02695403143176F4003A07D4 /* pokeysnd.h */, - 0269544214317B42003A07D4 /* remez.c */, 0269544314317B42003A07D4 /* remez.h */, - 0269540C1431775C003A07D4 /* sndsave.c */, - 0269540D1431775C003A07D4 /* sndsave.h */, - 02695449143184CD003A07D4 /* screen.c */, + 02695410143177DF003A07D4 /* rtime.h */, 0269544A143184CD003A07D4 /* screen.h */, - 02669C741435806A0002A11B /* sound_oss.c */, - 9491E45A1989AF050075135C /* sound.c */, + 026954071431770E003A07D4 /* sio.h */, + 0269540D1431775C003A07D4 /* sndsave.h */, 02669C751435806A0002A11B /* sound.h */, - 0269540F143177DF003A07D4 /* rtime.c */, - 02695410143177DF003A07D4 /* rtime.h */, - 02E763C014319545008050EA /* ui_basic.c */, + 02E763B0143194CF008050EA /* statesav.h */, + 94DEA00C1719186F00073397 /* sysrom.h */, 02E763C114319545008050EA /* ui_basic.h */, - 02E763C214319545008050EA /* ui.c */, 02E763C314319545008050EA /* ui.h */, - 026954091431771D003A07D4 /* util.c */, 0269540A1431771D003A07D4 /* util.h */, + 9491E464198C11A10075135C /* act */, ); name = atari800; sourceTree = ""; diff --git a/Cores/Atari800/PVAtari800/Core.plist b/Cores/Atari800/PVAtari800/Core.plist index c97140682e..8701ed01d2 100644 --- a/Cores/Atari800/PVAtari800/Core.plist +++ b/Cores/Atari800/PVAtari800/Core.plist @@ -9,6 +9,7 @@ PVSupportedSystems com.provenance.5200 + com.provenance.8bit PVProjectName Atari 800 diff --git a/Cores/Gambatte/GB/CoreOptions.swift b/Cores/Gambatte/GB/CoreOptions.swift index d2b8dc3ac3..65d8feac19 100644 --- a/Cores/Gambatte/GB/CoreOptions.swift +++ b/Cores/Gambatte/GB/CoreOptions.swift @@ -33,7 +33,7 @@ extension PVGBEmulatorCore: CoreOptional { public static var options: [CoreOption] = { var options = [CoreOption]() - let videoGroup = CoreOption.group(display: CoreOptionValueDisplay(title: "Video", + let videoGroup = CoreOption.group(.init(title: "Video", description: "Change the way Gambatte renders games."), subOptions: [paletteOption]) @@ -60,14 +60,12 @@ extension PVGBEmulatorCore: CoreOptional { "GameBoy Color - Grayscale" ]) - static var paletteOption: CoreOption = { - let palletteOption = CoreOption.multi(display: - CoreOptionValueDisplay( - title: "GameBoy (non color) Palette", - description: "The drawing palette to use"), - values: paletteValues) - return palletteOption - }() + static var paletteOption: CoreOption = { + .multi(.init( + title: "GameBoy (non color) Palette", + description: "The drawing palette to use"), + values: paletteValues) + }() } @objc extension PVGBEmulatorCore { diff --git a/Cores/Mednafen/MednafenGameCore.swift b/Cores/Mednafen/MednafenGameCore.swift index fab9992c4b..a1e9ba8494 100644 --- a/Cores/Mednafen/MednafenGameCore.swift +++ b/Cores/Mednafen/MednafenGameCore.swift @@ -80,9 +80,9 @@ extension MednafenGameCore: CoreOptional { public static var options: [CoreOption] = { var options = [CoreOption]() - let fastGroup = CoreOption.group(display: CoreOptionValueDisplay(title: "Fast Cores", - description: "Alternative versions of cores that trade accuracy for speed"), - subOptions: [pceFastOption, snesFastOption]) + let fastGroup:CoreOption = .group(.init(title: "Fast Cores", + description: "Alternative versions of cores that trade accuracy for speed"), + subOptions: [pceFastOption, snesFastOption]) options.append(fastGroup) @@ -92,20 +92,18 @@ extension MednafenGameCore: CoreOptional { static var pceFastOption: CoreOption = { - let pceFastOption = CoreOption.bool(display: .init( + .bool(.init( title: "PCE Fast", description: "Use a faster but possibly buggy PCEngine version.", requiresRestart: true), defaultValue: false) - return pceFastOption }() static var snesFastOption: CoreOption = { - let snesFastOption = CoreOption.bool(display: .init( + .bool(.init( title: "SNES Fast", description: "Use faster but maybe more buggy SNES core (default)", requiresRestart: true), defaultValue: true) - return snesFastOption }() } diff --git a/Cores/Mupen64Plus/Compatibility/SDL/SDLStubs.m b/Cores/Mupen64Plus/Compatibility/SDL/SDLStubs.m index 02af2ecd80..309f7031d2 100644 --- a/Cores/Mupen64Plus/Compatibility/SDL/SDLStubs.m +++ b/Cores/Mupen64Plus/Compatibility/SDL/SDLStubs.m @@ -84,6 +84,11 @@ Uint32 SDL_GetTicks(void) return MupenOEMonotonicTime(); } +void SDL_WasInit(UInt32 flags) +{ + NSLog(@"SDL_WasInit: %i", flags); +} + void SDL_Quit(void) { } diff --git a/Cores/Mupen64Plus/Compatibility/SDL/SDL_endian.h b/Cores/Mupen64Plus/Compatibility/SDL/SDL_endian.h new file mode 100644 index 0000000000..54d5d486d7 --- /dev/null +++ b/Cores/Mupen64Plus/Compatibility/SDL/SDL_endian.h @@ -0,0 +1,260 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2019 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_endian.h + * + * Functions for reading and writing endian-specific values + */ + +#ifndef SDL_endian_h_ +#define SDL_endian_h_ + +#include "SDL_stdinc.h" + +/** + * \name The two types of endianness + */ +/* @{ */ +#define SDL_LIL_ENDIAN 1234 +#define SDL_BIG_ENDIAN 4321 +/* @} */ + +#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +#ifdef __linux__ +#include +#define SDL_BYTEORDER __BYTE_ORDER +#else /* __linux__ */ +#if defined(__hppa__) || \ + defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ + (defined(__MIPS__) && defined(__MISPEB__)) || \ + defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ + defined(__sparc__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#endif +#endif /* __linux__ */ +#endif /* !SDL_BYTEORDER */ + + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_endian.h + */ +#if defined(__GNUC__) && defined(__i386__) && \ + !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); + return x; +} +#elif defined(__GNUC__) && defined(__x86_64__) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); + return x; +} +#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + int result; + + __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); + return (Uint16)result; +} +#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern _inline Uint16 SDL_Swap16(Uint16); +#pragma aux SDL_Swap16 = \ + "xchg al, ah" \ + parm [ax] \ + modify [ax]; +#else +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); +} +#endif + +#if defined(__GNUC__) && defined(__i386__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswap %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__GNUC__) && defined(__x86_64__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswapl %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + Uint32 result; + + __asm__("rlwimi %0,%2,24,16,23": "=&r"(result):"0"(x >> 24), "r"(x)); + __asm__("rlwimi %0,%2,8,8,15": "=&r"(result):"0"(result), "r"(x)); + __asm__("rlwimi %0,%2,24,0,7": "=&r"(result):"0"(result), "r"(x)); + return result; +} +#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern _inline Uint32 SDL_Swap32(Uint32); +#ifndef __SW_3 /* 486+ */ +#pragma aux SDL_Swap32 = \ + "bswap eax" \ + parm [eax] \ + modify [eax]; +#else /* 386-only */ +#pragma aux SDL_Swap32 = \ + "xchg al, ah" \ + "ror eax, 16" \ + "xchg al, ah" \ + parm [eax] \ + modify [eax]; +#endif +#else +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | + ((x >> 8) & 0x0000FF00) | (x >> 24))); +} +#endif + +#if defined(__GNUC__) && defined(__i386__) +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + union + { + struct + { + Uint32 a, b; + } s; + Uint64 u; + } v; + v.u = x; + __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r"(v.s.a), "=r"(v.s.b):"0"(v.s.a), + "1"(v.s. + b)); + return v.u; +} +#elif defined(__GNUC__) && defined(__x86_64__) +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + __asm__("bswapq %0": "=r"(x):"0"(x)); + return x; +} +#else +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + Uint32 hi, lo; + + /* Separate into high and low 32-bit values and swap them */ + lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x >>= 32; + hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x = SDL_Swap32(lo); + x <<= 32; + x |= SDL_Swap32(hi); + return (x); +} +#endif + + +SDL_FORCE_INLINE float +SDL_SwapFloat(float x) +{ + union + { + float f; + Uint32 ui32; + } swapper; + swapper.f = x; + swapper.ui32 = SDL_Swap32(swapper.ui32); + return swapper.f; +} + + +/** + * \name Swap to native + * Byteswap item from the specified endianness to the native endianness. + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SDL_SwapLE16(X) (X) +#define SDL_SwapLE32(X) (X) +#define SDL_SwapLE64(X) (X) +#define SDL_SwapFloatLE(X) (X) +#define SDL_SwapBE16(X) SDL_Swap16(X) +#define SDL_SwapBE32(X) SDL_Swap32(X) +#define SDL_SwapBE64(X) SDL_Swap64(X) +#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) +#else +#define SDL_SwapLE16(X) SDL_Swap16(X) +#define SDL_SwapLE32(X) SDL_Swap32(X) +#define SDL_SwapLE64(X) SDL_Swap64(X) +#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) +#define SDL_SwapBE16(X) (X) +#define SDL_SwapBE32(X) (X) +#define SDL_SwapBE64(X) (X) +#define SDL_SwapFloatBE(X) (X) +#endif +/* @} *//* Swap to native */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_endian_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Cores/Mupen64Plus/Compatibility/SDL/SDL_error.h b/Cores/Mupen64Plus/Compatibility/SDL/SDL_error.h new file mode 100644 index 0000000000..24416e6935 --- /dev/null +++ b/Cores/Mupen64Plus/Compatibility/SDL/SDL_error.h @@ -0,0 +1,76 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2019 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_error.h + * + * Simple error message routines for SDL. + */ + +#ifndef SDL_error_h_ +#define SDL_error_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Public functions */ +/* SDL_SetError() unconditionally returns -1. */ +extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); +extern DECLSPEC const char *SDLCALL SDL_GetError(void); +extern DECLSPEC void SDLCALL SDL_ClearError(void); + +/** + * \name Internal error functions + * + * \internal + * Private error reporting function - used internally. + */ +/* @{ */ +#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) +#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) +#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) +typedef enum +{ + SDL_ENOMEM, + SDL_EFREAD, + SDL_EFWRITE, + SDL_EFSEEK, + SDL_UNSUPPORTED, + SDL_LASTERROR +} SDL_errorcode; +/* SDL_Error() unconditionally returns -1. */ +extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); +/* @} *//* Internal error functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_error_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Cores/Mupen64Plus/Compatibility/SDL/SDL_stdinc.h b/Cores/Mupen64Plus/Compatibility/SDL/SDL_stdinc.h new file mode 100644 index 0000000000..28bb7b9619 --- /dev/null +++ b/Cores/Mupen64Plus/Compatibility/SDL/SDL_stdinc.h @@ -0,0 +1,607 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2019 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL_stdinc.h + * + * This is a general header that includes C language support. + */ + +#ifndef SDL_stdinc_h_ +#define SDL_stdinc_h_ + +#include "SDL_config.h" + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#if defined(STDC_HEADERS) +# include +# include +# include +#else +# if defined(HAVE_STDLIB_H) +# include +# elif defined(HAVE_MALLOC_H) +# include +# endif +# if defined(HAVE_STDDEF_H) +# include +# endif +# if defined(HAVE_STDARG_H) +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_WCHAR_H +# include +#endif +#if defined(HAVE_INTTYPES_H) +# include +#elif defined(HAVE_STDINT_H) +# include +#endif +#ifdef HAVE_CTYPE_H +# include +#endif +#ifdef HAVE_MATH_H +# if defined(__WINRT__) +/* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on + WinRT. See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx + for more information. +*/ +# define _USE_MATH_DEFINES +# endif +# include +#endif +#ifdef HAVE_FLOAT_H +# include +#endif +#if defined(HAVE_ALLOCA) && !defined(alloca) +# if defined(HAVE_ALLOCA_H) +# include +# elif defined(__GNUC__) +# define alloca __builtin_alloca +# elif defined(_MSC_VER) +# include +# define alloca _alloca +# elif defined(__WATCOMC__) +# include +# elif defined(__BORLANDC__) +# include +# elif defined(__DMC__) +# include +# elif defined(__AIX__) +#pragma alloca +# elif defined(__MRC__) +void *alloca(unsigned); +# else +char *alloca(); +# endif +#endif + +/** + * The number of elements in an array. + */ +#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) +#define SDL_TABLESIZE(table) SDL_arraysize(table) + +/** + * Macro useful for building other macros with strings in them + * + * e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") + */ +#define SDL_STRINGIFY_ARG(arg) #arg + +/** + * \name Cast operators + * + * Use proper C++ casts when compiled as C++ to be compatible with the option + * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). + */ +/* @{ */ +#ifdef __cplusplus +#define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) +#define SDL_static_cast(type, expression) static_cast(expression) +#define SDL_const_cast(type, expression) const_cast(expression) +#else +#define SDL_reinterpret_cast(type, expression) ((type)(expression)) +#define SDL_static_cast(type, expression) ((type)(expression)) +#define SDL_const_cast(type, expression) ((type)(expression)) +#endif +/* @} *//* Cast operators */ + +/* Define a four character code as a Uint32 */ +#define SDL_FOURCC(A, B, C, D) \ + ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) + +/** + * \name Basic data types + */ +/* @{ */ + +#ifdef __CC_ARM +/* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */ +#define SDL_FALSE 0 +#define SDL_TRUE 1 +typedef int SDL_bool; +#else +typedef enum +{ + SDL_FALSE = 0, + SDL_TRUE = 1 +} SDL_bool; +#endif + +/** + * \brief A signed 8-bit integer type. + */ +#define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */ +#define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */ +typedef int8_t Sint8; +/** + * \brief An unsigned 8-bit integer type. + */ +#define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */ +#define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */ +typedef uint8_t Uint8; +/** + * \brief A signed 16-bit integer type. + */ +#define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */ +#define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */ +typedef int16_t Sint16; +/** + * \brief An unsigned 16-bit integer type. + */ +#define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */ +#define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */ +typedef uint16_t Uint16; +/** + * \brief A signed 32-bit integer type. + */ +#define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */ +#define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */ +typedef int32_t Sint32; +/** + * \brief An unsigned 32-bit integer type. + */ +#define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */ +#define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */ +typedef uint32_t Uint32; + +/** + * \brief A signed 64-bit integer type. + */ +#define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */ +#define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */ +typedef int64_t Sint64; +/** + * \brief An unsigned 64-bit integer type. + */ +#define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */ +#define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */ +typedef uint64_t Uint64; + +/* @} *//* Basic data types */ + +/* Make sure we have macros for printing 64 bit values. + * should define these but this is not true all platforms. + * (for example win32) */ +#ifndef SDL_PRIs64 +#ifdef PRIs64 +#define SDL_PRIs64 PRIs64 +#elif defined(__WIN32__) +#define SDL_PRIs64 "I64d" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIs64 "ld" +#else +#define SDL_PRIs64 "lld" +#endif +#endif +#ifndef SDL_PRIu64 +#ifdef PRIu64 +#define SDL_PRIu64 PRIu64 +#elif defined(__WIN32__) +#define SDL_PRIu64 "I64u" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIu64 "lu" +#else +#define SDL_PRIu64 "llu" +#endif +#endif +#ifndef SDL_PRIx64 +#ifdef PRIx64 +#define SDL_PRIx64 PRIx64 +#elif defined(__WIN32__) +#define SDL_PRIx64 "I64x" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIx64 "lx" +#else +#define SDL_PRIx64 "llx" +#endif +#endif +#ifndef SDL_PRIX64 +#ifdef PRIX64 +#define SDL_PRIX64 PRIX64 +#elif defined(__WIN32__) +#define SDL_PRIX64 "I64X" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIX64 "lX" +#else +#define SDL_PRIX64 "llX" +#endif +#endif + +/* Annotations to help code analysis tools */ +#ifdef SDL_DISABLE_ANALYZE_MACROS +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ +#include + +#define SDL_IN_BYTECAP(x) _In_bytecount_(x) +#define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) +#define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) +#define SDL_OUT_CAP(x) _Out_cap_(x) +#define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) +#define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) + +#define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ +#define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ +#else +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#endif +#if defined(__GNUC__) +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) +#else +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#endif +#endif /* SDL_DISABLE_ANALYZE_MACROS */ + +#define SDL_COMPILE_TIME_ASSERT(name, x) \ + typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1] +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); +SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); +SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); +SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); +SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); +SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); +SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); +SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +/* Check to make sure enums are the size of ints, for structure packing. + For both Watcom C/C++ and Borland C/C++ the compiler option that makes + enums having the size of an int must be enabled. + This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). +*/ + +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +#if !defined(__ANDROID__) + /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ +typedef enum +{ + DUMMY_ENUM_VALUE +} SDL_DUMMY_ENUM; + +SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); +#endif +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_ALLOCA +#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) +#define SDL_stack_free(data) +#else +#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) +#define SDL_stack_free(data) SDL_free(data) +#endif + +extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); +extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); +extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); +extern DECLSPEC void SDLCALL SDL_free(void *mem); + +typedef void *(SDLCALL *SDL_malloc_func)(size_t size); +typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size); +typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size); +typedef void (SDLCALL *SDL_free_func)(void *mem); + +/** + * \brief Get the current set of SDL memory functions + */ +extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func, + SDL_calloc_func *calloc_func, + SDL_realloc_func *realloc_func, + SDL_free_func *free_func); + +/** + * \brief Replace SDL's memory allocation functions with a custom set + * + * \note If you are replacing SDL's memory functions, you should call + * SDL_GetNumAllocations() and be very careful if it returns non-zero. + * That means that your free function will be called with memory + * allocated by the previous memory allocation functions. + */ +extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func, + SDL_calloc_func calloc_func, + SDL_realloc_func realloc_func, + SDL_free_func free_func); + +/** + * \brief Get the number of outstanding (unfreed) allocations + */ +extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void); + +extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); +extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); + +extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); + +extern DECLSPEC int SDLCALL SDL_abs(int x); + +/* !!! FIXME: these have side effects. You probably shouldn't use them. */ +/* !!! FIXME: Maybe we do forceinline functions of SDL_mini, SDL_minf, etc? */ +#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) +#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) + +extern DECLSPEC int SDLCALL SDL_isdigit(int x); +extern DECLSPEC int SDLCALL SDL_isspace(int x); +extern DECLSPEC int SDLCALL SDL_toupper(int x); +extern DECLSPEC int SDLCALL SDL_tolower(int x); + +extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); + +#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) +#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) + +/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ +SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) +{ +#if defined(__GNUC__) && defined(i386) + int u0, u1, u2; + __asm__ __volatile__ ( + "cld \n\t" + "rep ; stosl \n\t" + : "=&D" (u0), "=&a" (u1), "=&c" (u2) + : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) + : "memory" + ); +#else + size_t _n = (dwords + 3) / 4; + Uint32 *_p = SDL_static_cast(Uint32 *, dst); + Uint32 _val = (val); + if (dwords == 0) + return; + switch (dwords % 4) + { + case 0: do { *_p++ = _val; /* fallthrough */ + case 3: *_p++ = _val; /* fallthrough */ + case 2: *_p++ = _val; /* fallthrough */ + case 1: *_p++ = _val; /* fallthrough */ + } while ( --_n ); + } +#endif +} + +extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); +extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); + +extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr); +extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); +extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2); + +extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); +extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); +extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); +extern DECLSPEC char *SDLCALL SDL_strrev(char *str); +extern DECLSPEC char *SDLCALL SDL_strupr(char *str); +extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); +extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); +extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str); + +extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); + +extern DECLSPEC int SDLCALL SDL_atoi(const char *str); +extern DECLSPEC double SDLCALL SDL_atof(const char *str); +extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); +extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); +extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); +extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); +extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); + +extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); + +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); +extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap); + +#ifndef HAVE_M_PI +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288 /**< pi */ +#endif +#endif + +extern DECLSPEC double SDLCALL SDL_acos(double x); +extern DECLSPEC float SDLCALL SDL_acosf(float x); +extern DECLSPEC double SDLCALL SDL_asin(double x); +extern DECLSPEC float SDLCALL SDL_asinf(float x); +extern DECLSPEC double SDLCALL SDL_atan(double x); +extern DECLSPEC float SDLCALL SDL_atanf(float x); +extern DECLSPEC double SDLCALL SDL_atan2(double x, double y); +extern DECLSPEC float SDLCALL SDL_atan2f(float x, float y); +extern DECLSPEC double SDLCALL SDL_ceil(double x); +extern DECLSPEC float SDLCALL SDL_ceilf(float x); +extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); +extern DECLSPEC float SDLCALL SDL_copysignf(float x, float y); +extern DECLSPEC double SDLCALL SDL_cos(double x); +extern DECLSPEC float SDLCALL SDL_cosf(float x); +extern DECLSPEC double SDLCALL SDL_exp(double x); +extern DECLSPEC float SDLCALL SDL_expf(float x); +extern DECLSPEC double SDLCALL SDL_fabs(double x); +extern DECLSPEC float SDLCALL SDL_fabsf(float x); +extern DECLSPEC double SDLCALL SDL_floor(double x); +extern DECLSPEC float SDLCALL SDL_floorf(float x); +extern DECLSPEC double SDLCALL SDL_fmod(double x, double y); +extern DECLSPEC float SDLCALL SDL_fmodf(float x, float y); +extern DECLSPEC double SDLCALL SDL_log(double x); +extern DECLSPEC float SDLCALL SDL_logf(float x); +extern DECLSPEC double SDLCALL SDL_log10(double x); +extern DECLSPEC float SDLCALL SDL_log10f(float x); +extern DECLSPEC double SDLCALL SDL_pow(double x, double y); +extern DECLSPEC float SDLCALL SDL_powf(float x, float y); +extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); +extern DECLSPEC float SDLCALL SDL_scalbnf(float x, int n); +extern DECLSPEC double SDLCALL SDL_sin(double x); +extern DECLSPEC float SDLCALL SDL_sinf(float x); +extern DECLSPEC double SDLCALL SDL_sqrt(double x); +extern DECLSPEC float SDLCALL SDL_sqrtf(float x); +extern DECLSPEC double SDLCALL SDL_tan(double x); +extern DECLSPEC float SDLCALL SDL_tanf(float x); + +/* The SDL implementation of iconv() returns these error codes */ +#define SDL_ICONV_ERROR (size_t)-1 +#define SDL_ICONV_E2BIG (size_t)-2 +#define SDL_ICONV_EILSEQ (size_t)-3 +#define SDL_ICONV_EINVAL (size_t)-4 + +/* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ +typedef struct _SDL_iconv_t *SDL_iconv_t; +extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, + const char *fromcode); +extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); +extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, + size_t * inbytesleft, char **outbuf, + size_t * outbytesleft); +/** + * This function converts a string between encodings in one pass, returning a + * string that must be freed with SDL_free() or NULL on error. + */ +extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, + const char *fromcode, + const char *inbuf, + size_t inbytesleft); +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) + +/* force builds using Clang's static analysis tools to use literal C runtime + here, since there are possibly tests that are ineffective otherwise. */ +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_malloc malloc +#define SDL_calloc calloc +#define SDL_realloc realloc +#define SDL_free free +#define SDL_memset memset +#define SDL_memcpy memcpy +#define SDL_memmove memmove +#define SDL_memcmp memcmp +#define SDL_strlen strlen +#define SDL_strlcpy strlcpy +#define SDL_strlcat strlcat +#define SDL_strdup strdup +#define SDL_strchr strchr +#define SDL_strrchr strrchr +#define SDL_strstr strstr +#define SDL_strcmp strcmp +#define SDL_strncmp strncmp +#define SDL_strcasecmp strcasecmp +#define SDL_strncasecmp strncasecmp +#define SDL_sscanf sscanf +#define SDL_vsscanf vsscanf +#define SDL_snprintf snprintf +#define SDL_vsnprintf vsnprintf +#endif + +SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) +{ + return SDL_memcpy(dst, src, dwords * 4); +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_stdinc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Cores/Mupen64Plus/Compatibility/SDL/SDL_timer.h b/Cores/Mupen64Plus/Compatibility/SDL/SDL_timer.h new file mode 100644 index 0000000000..2a47b043aa --- /dev/null +++ b/Cores/Mupen64Plus/Compatibility/SDL/SDL_timer.h @@ -0,0 +1,115 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2019 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_timer_h_ +#define SDL_timer_h_ + +/** + * \file SDL_timer.h + * + * Header for the SDL time management routines. + */ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief Get the number of milliseconds since the SDL library initialization. + * + * \note This value wraps if the program runs for more than ~49 days. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); + +/** + * \brief Compare SDL ticks values, and return true if A has passed B + * + * e.g. if you want to wait 100 ms, you could do this: + * Uint32 timeout = SDL_GetTicks() + 100; + * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { + * ... do work until timeout has elapsed + * } + */ +#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) + +/** + * \brief Get the current value of the high resolution counter + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); + +/** + * \brief Get the count per second of the high resolution counter + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); + +/** + * \brief Wait a specified number of milliseconds before returning. + */ +extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); + +/** + * Function prototype for the timer callback function. + * + * The callback function is passed the current timer interval and returns + * the next timer interval. If the returned value is the same as the one + * passed in, the periodic alarm continues, otherwise a new alarm is + * scheduled. If the callback returns 0, the periodic alarm is cancelled. + */ +typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); + +/** + * Definition of the timer ID type. + */ +typedef int SDL_TimerID; + +/** + * \brief Add a new timer to the pool of timers already running. + * + * \return A timer ID, or 0 when an error occurs. + */ +extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, + SDL_TimerCallback callback, + void *param); + +/** + * \brief Remove a timer knowing its ID. + * + * \return A boolean value indicating success or failure. + * + * \warning It is not safe to remove a timer multiple times. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_timer_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Cores/Mupen64Plus/Compatibility/SDL/begin_code.h b/Cores/Mupen64Plus/Compatibility/SDL/begin_code.h new file mode 100644 index 0000000000..22c997c416 --- /dev/null +++ b/Cores/Mupen64Plus/Compatibility/SDL/begin_code.h @@ -0,0 +1,170 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2019 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file begin_code.h + * + * This file sets things up for C dynamic library function definitions, + * static inlined functions, and structures aligned at 4-byte alignment. + * If you don't like ugly C preprocessor code, don't look at this file. :) + */ + +/* This shouldn't be nested -- included it around code only. */ +#ifdef _begin_code_h +#error Nested inclusion of begin_code.h +#endif +#define _begin_code_h + +#ifndef SDL_DEPRECATED +# if (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ +# define SDL_DEPRECATED __attribute__((deprecated)) +# else +# define SDL_DEPRECATED +# endif +#endif + +#ifndef SDL_UNUSED +# ifdef __GNUC__ +# define SDL_UNUSED __attribute__((unused)) +# else +# define SDL_UNUSED +# endif +#endif + +/* Some compilers use a special export keyword */ +#ifndef DECLSPEC +# if defined(__WIN32__) || defined(__WINRT__) +# ifdef __BORLANDC__ +# ifdef BUILD_SDL +# define DECLSPEC +# else +# define DECLSPEC __declspec(dllimport) +# endif +# else +# define DECLSPEC __declspec(dllexport) +# endif +# elif defined(__OS2__) +# ifdef BUILD_SDL +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# else +# if defined(__GNUC__) && __GNUC__ >= 4 +# define DECLSPEC __attribute__ ((visibility("default"))) +# else +# define DECLSPEC +# endif +# endif +#endif + +/* By default SDL uses the C calling convention */ +#ifndef SDLCALL +#if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__) +#define SDLCALL __cdecl +#elif defined(__OS2__) || defined(__EMX__) +#define SDLCALL _System +# if defined (__GNUC__) && !defined(_System) +# define _System /* for old EMX/GCC compat. */ +# endif +#else +#define SDLCALL +#endif +#endif /* SDLCALL */ + +/* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ +#ifdef __SYMBIAN32__ +#undef DECLSPEC +#define DECLSPEC +#endif /* __SYMBIAN32__ */ + +/* Force structure packing at 4 byte alignment. + This is necessary if the header is included in code which has structure + packing set to an alternate value, say for loading structures from disk. + The packing is reset to the previous value in close_code.h + */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef _MSC_VER +#pragma warning(disable: 4103) +#endif +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wpragma-pack" +#endif +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#ifdef _M_X64 +/* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ +#pragma pack(push,8) +#else +#pragma pack(push,4) +#endif +#endif /* Compiler needs structure packing set */ + +#ifndef SDL_INLINE +#if defined(__GNUC__) +#define SDL_INLINE __inline__ +#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ + defined(__DMC__) || defined(__SC__) || \ + defined(__WATCOMC__) || defined(__LCC__) || \ + defined(__DECC) || defined(__CC_ARM) +#define SDL_INLINE __inline +#ifndef __inline__ +#define __inline__ __inline +#endif +#else +#define SDL_INLINE inline +#ifndef __inline__ +#define __inline__ inline +#endif +#endif +#endif /* SDL_INLINE not defined */ + +#ifndef SDL_FORCE_INLINE +#if defined(_MSC_VER) +#define SDL_FORCE_INLINE __forceinline +#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) +#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ +#else +#define SDL_FORCE_INLINE static SDL_INLINE +#endif +#endif /* SDL_FORCE_INLINE not defined */ + +#ifndef SDL_NORETURN +#if defined(__GNUC__) +#define SDL_NORETURN __attribute__((noreturn)) +#elif defined(_MSC_VER) +#define SDL_NORETURN __declspec(noreturn) +#else +#define SDL_NORETURN +#endif +#endif /* SDL_NORETURN not defined */ + +/* Apparently this is needed by several Windows compilers */ +#if !defined(__MACH__) +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 +#else +#define NULL ((void *)0) +#endif +#endif /* NULL */ +#endif /* ! Mac OS X - breaks precompiled headers */ diff --git a/Cores/Mupen64Plus/Compatibility/SDL/close_code.h b/Cores/Mupen64Plus/Compatibility/SDL/close_code.h new file mode 100644 index 0000000000..8e4cac3daf --- /dev/null +++ b/Cores/Mupen64Plus/Compatibility/SDL/close_code.h @@ -0,0 +1,40 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2019 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file close_code.h + * + * This file reverses the effects of begin_code.h and should be included + * after you finish any function and structure declarations in your headers + */ + +#ifndef _begin_code_h +#error close_code.h included without matching begin_code.h +#endif +#undef _begin_code_h + +/* Reset structure packing at previous byte alignment */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#pragma pack(pop) +#endif /* Compiler needs structure packing set */ diff --git a/Cores/Mupen64Plus/Compatibility/eventloop.m b/Cores/Mupen64Plus/Compatibility/eventloop.m index e37876f188..88be2c5070 100644 --- a/Cores/Mupen64Plus/Compatibility/eventloop.m +++ b/Cores/Mupen64Plus/Compatibility/eventloop.m @@ -25,7 +25,8 @@ */ #import "osd/osd.h" -#import "osd/screenshot.h" +#import "main/screenshot.h" +#import "../MupenGameCore.h" int event_set_core_defaults(void) { @@ -46,9 +47,13 @@ void event_sdl_keyup(int keysym, int keymod) int event_gameshark_active(void) { - return 0; + GET_CURRENT_OR_RETURN(0); + + return current.isGamesharkActive; } void event_set_gameshark(int active) { + GET_CURRENT_OR_RETURN(); + current.isGamesharkActive = active; } diff --git a/Cores/Mupen64Plus/Compatibility/osd.m b/Cores/Mupen64Plus/Compatibility/osd.m index 3209550e56..01142e23d6 100644 --- a/Cores/Mupen64Plus/Compatibility/osd.m +++ b/Cores/Mupen64Plus/Compatibility/osd.m @@ -33,5 +33,9 @@ osd_message_t * osd_message_valid(osd_message_t *m) { - return NULL; +#if DEBUG + return m; +#else + return nil; +#endif } diff --git a/Cores/Mupen64Plus/Compatibility/screenshot.m b/Cores/Mupen64Plus/Compatibility/screenshot.m index ab1e548f74..3c5ca80f2c 100644 --- a/Cores/Mupen64Plus/Compatibility/screenshot.m +++ b/Cores/Mupen64Plus/Compatibility/screenshot.m @@ -25,7 +25,7 @@ */ #import "osd/osd.h" -#import "osd/screenshot.h" +#import "main/screenshot.h" void ScreenshotRomOpen(void) { diff --git a/Cores/Mupen64Plus/Compatibility/vidext.m b/Cores/Mupen64Plus/Compatibility/vidext.m index 3513da2f86..5134032cdc 100644 --- a/Cores/Mupen64Plus/Compatibility/vidext.m +++ b/Cores/Mupen64Plus/Compatibility/vidext.m @@ -108,7 +108,7 @@ EXPORT m64p_error CALL VidExt_ToggleFullScreen(void) return M64ERR_UNSUPPORTED; } -EXPORT void * CALL VidExt_GL_GetProcAddress(const char* Proc) +EXPORT m64p_function CALL VidExt_GL_GetProcAddress(const char* Proc) { return dlsym(RTLD_NEXT, Proc); } diff --git a/Cores/Mupen64Plus/Core.plist b/Cores/Mupen64Plus/Core.plist index f4708f95ae..8c17685e5b 100644 --- a/Cores/Mupen64Plus/Core.plist +++ b/Cores/Mupen64Plus/Core.plist @@ -15,6 +15,6 @@ PVProjectURL https://github.com/mupen64plus PVProjectVersion - 2.5 + 2.5.9 diff --git a/Cores/Mupen64Plus/MupenGameCore.h b/Cores/Mupen64Plus/MupenGameCore.h index 36f1e5ab6f..258fefcf39 100644 --- a/Cores/Mupen64Plus/MupenGameCore.h +++ b/Cores/Mupen64Plus/MupenGameCore.h @@ -51,6 +51,7 @@ __attribute__((visibility("default"))) @property (nonatomic, assign) int videoWidth; @property (nonatomic, assign) int videoHeight; @property (nonatomic, assign) int videoBitDepth; +@property (nonatomic, assign) BOOL isGamesharkActive; - (void) videoInterrupt; - (void) swapBuffers; diff --git a/Cores/Mupen64Plus/MupenGameCore.m b/Cores/Mupen64Plus/MupenGameCore.m index d6d84f111d..91ecd18cde 100644 --- a/Cores/Mupen64Plus/MupenGameCore.m +++ b/Cores/Mupen64Plus/MupenGameCore.m @@ -75,7 +75,7 @@ #define N64_ANALOG_MAX 80 -#if TARGET_OS_MAC +#if TARGET_OS_MACCATALYST @interface MupenGameCore () #else @interface MupenGameCore () @@ -404,7 +404,7 @@ static void MupenControllerCommand(int Control, unsigned char *Command) } } -- (void)pollController:(GCController* _Nullable)controller forIndedx:(NSInteger)playerIndex { +- (void)pollController:(GCController* _Nullable)controller forIndex:(NSInteger)playerIndex { if (!controller) { return; } @@ -507,39 +507,38 @@ - (void)pollController:(GCController* _Nullable)controller forIndedx:(NSInteger) } - (void)pollControllers { -#define con(num) [self.controller##num capture] -//#define con(num) self.controller##num - -#if 0 - [self pollController:con(1) forIndedx:0]; - [self pollController:con(2) forIndedx:1]; - [self pollController:con(3) forIndedx:2]; - [self pollController:con(4) forIndedx:3]; +#define USE_CAPTURE 1 +#define USE_QUEUE 1 + +#if USE_CAPTURE +#define controllerForNum(num) [self.controller##num capture] #else -// const NSOperationQueue *queue = [NSOperationQueue currentQueue]; - [_inputQueue cancelAllOperations]; - NSArray* ops = @[ - [NSBlockOperation blockOperationWithBlock:^{ - if(!self.controller1) { return; } - [self pollController:con(1) forIndedx:0]; - }], - [NSBlockOperation blockOperationWithBlock:^{ - if(!self.controller2) { return; } - [self pollController:con(2) forIndedx:1]; - }], - [NSBlockOperation blockOperationWithBlock:^{ - if(!self.controller3) { return; } - [self pollController:con(3) forIndedx:2]; - }], - [NSBlockOperation blockOperationWithBlock:^{ - if(!self.controller4) { return; } - [self pollController:con(4) forIndedx:3]; - }] - ]; -// [[NSOperationQueue currentQueue] addOperations:ops waitUntilFinished:NO]; - [_inputQueue addOperations:ops waitUntilFinished:NO]; +#define controllerForNum(num) self.controller##num +#endif + +#if USE_QUEUE + // const NSOperationQueue *queue = [NSOperationQueue currentQueue]; + [_inputQueue cancelAllOperations]; + NSMutableArray* ops = [NSMutableArray arrayWithCapacity:4]; + #define CHECK_CONTROLLER(num) \ + if(self.controller##num) [ops addObject:[NSBlockOperation blockOperationWithBlock:^{[self pollController:controllerForNum(num) forIndex:(num - 1)];}]] + + CHECK_CONTROLLER(1); + CHECK_CONTROLLER(2); + CHECK_CONTROLLER(3); + CHECK_CONTROLLER(4); + + [_inputQueue addOperations:ops waitUntilFinished:NO]; +#else +#define CHECK_CONTROLLER(num) if(self.controller##num) [self pollController:controllerForNum(num) forIndex:(num - 1)] + + CHECK_CONTROLLER(1); + CHECK_CONTROLLER(2); + CHECK_CONTROLLER(3); + CHECK_CONTROLLER(4); #endif -#undef con +#undef CHECK_CONTROLLER +#undef controllerForNum } static AUDIO_INFO AudioInfo; @@ -569,7 +568,7 @@ static void MupenAudioLenChanged() { GET_CURRENT_AND_RETURN(); - int LenReg = *AudioInfo.AI_LEN_REG; + const int LenReg = *AudioInfo.AI_LEN_REG; uint8_t *ptr = (uint8_t*)(AudioInfo.RDRAM + (*AudioInfo.AI_DRAM_ADDR_REG & 0xFFFFFF)); // Swap channels @@ -651,7 +650,8 @@ static void ConfigureCore(NSString *romFolder) { ConfigSetParameter(config, "SharedDataPath", M64TYPE_STRING, romFolder.fileSystemRepresentation); // Use Pure Interpreter if 0, Cached Interpreter if 1, or Dynamic Recompiler if 2 or more" - int emulator = 1; + int emulator = [MupenGameCore intForOption:@"CPU Mode"]; + printf("emulator %i", emulator); ConfigSetParameter(config, "R4300Emulator", M64TYPE_INT, &emulator); ConfigSaveSection("Core"); @@ -697,15 +697,15 @@ static void ConfigureGLideN64(NSString *romFolder) { ConfigOpenSection("Video-GLideN64", &gliden64); // 0 = stretch, 1 = 4:3, 2 = 16:9, 3 = adjust - int aspectRatio = 1; - - if(RESIZE_TO_FULLSCREEN) { - #if TARGET_OS_TV - aspectRatio = 1; - #else - aspectRatio = 3; - #endif - } + int aspectRatio = [MupenGameCore boolForOption:@"Aspect Ratio"]; + +// if(RESIZE_TO_FULLSCREEN) { +// #if TARGET_OS_TV +// aspectRatio = 1; +// #else +// aspectRatio = 3; +// #endif +// } ConfigSetParameter(gliden64, "AspectRatio", M64TYPE_INT, &aspectRatio); @@ -715,7 +715,7 @@ static void ConfigureGLideN64(NSString *romFolder) { // HiRez & texture options // txHiresEnable, "Use high-resolution texture packs if available." - int txHiresEnable = 1; //RESIZE_TO_FULLSCREEN ? 1 : 0; + int txHiresEnable = [MupenGameCore boolForOption:@"Enable HiRes Texture packs"]; ConfigSetParameter(gliden64, "txHiresEnable", M64TYPE_BOOL, &txHiresEnable); // Path to folder with hi-res texture packs. @@ -725,31 +725,31 @@ static void ConfigureGLideN64(NSString *romFolder) { // Path to folder where plugin saves dumped textures. ConfigSetParameter(gliden64, "txDumpPath", M64TYPE_STRING, [romFolder stringByAppendingPathComponent:@"/texture_dump/"].fileSystemRepresentation); - if(RESIZE_TO_FULLSCREEN) { - // "txFilterMode", - // "Texture filter (0=none, 1=Smooth filtering 1, 2=Smooth filtering 2, 3=Smooth filtering 3, 4=Smooth filtering 4, 5=Sharp filtering 1, 6=Sharp filtering 2)" - int txFilterMode = 6; - ConfigSetParameter(gliden64, "txFilterMode", M64TYPE_INT, &txFilterMode); - - // "txEnhancementMode", config.textureFilter.txEnhancementMode, - // "Texture Enhancement (0=none, 1=store as is, 2=X2, 3=X2SAI, 4=HQ2X, 5=HQ2XS, 6=LQ2X, 7=LQ2XS, 8=HQ4X, 9=2xBRZ, 10=3xBRZ, 11=4xBRZ, 12=5xBRZ), 13=6xBRZ" - int txEnhancementMode = 11; - ConfigSetParameter(gliden64, "txEnhancementMode", M64TYPE_INT, &txEnhancementMode); - - // "txCacheCompression", config.textureFilter.txCacheCompression, "Zip textures cache." - int txCacheCompression = 0; - ConfigSetParameter(gliden64, "txCacheCompression", M64TYPE_BOOL, &txCacheCompression); - - // "txSaveCache", config.textureFilter.txSaveCache, - // "Save texture cache to hard disk." - int txSaveCache = 1; - ConfigSetParameter(gliden64, "txSaveCache", M64TYPE_BOOL, &txSaveCache); - - // Warning, anything other than 0 crashes shader compilation - // "MultiSampling", config.video.multisampling, "Enable/Disable MultiSampling (0=off, 2,4,8,16=quality)" - int MultiSampling = 0; - ConfigSetParameter(gliden64, "MultiSampling", M64TYPE_INT, &MultiSampling); - } +// if(RESIZE_TO_FULLSCREEN) { + // "txFilterMode", + // "Texture filter (0=none, 1=Smooth filtering 1, 2=Smooth filtering 2, 3=Smooth filtering 3, 4=Smooth filtering 4, 5=Sharp filtering 1, 6=Sharp filtering 2)" + int txFilterMode = [MupenGameCore intForOption:@"Texture Filter Mode"]; + ConfigSetParameter(gliden64, "txFilterMode", M64TYPE_INT, &txFilterMode); + + // "txEnhancementMode", config.textureFilter.txEnhancementMode, + // "Texture Enhancement (0=none, 1=store as is, 2=X2, 3=X2SAI, 4=HQ2X, 5=HQ2XS, 6=LQ2X, 7=LQ2XS, 8=HQ4X, 9=2xBRZ, 10=3xBRZ, 11=4xBRZ, 12=5xBRZ), 13=6xBRZ" + int txEnhancementMode = [MupenGameCore intForOption:@"Texture Enhancement Mode"]; + ConfigSetParameter(gliden64, "txEnhancementMode", M64TYPE_INT, &txEnhancementMode); + + // "txCacheCompression", config.textureFilter.txCacheCompression, "Zip textures cache." + int txCacheCompression = [MupenGameCore boolForOption:@"Compress texture cache"]; + ConfigSetParameter(gliden64, "txCacheCompression", M64TYPE_BOOL, &txCacheCompression); + + // "txSaveCache", config.textureFilter.txSaveCache, + // "Save texture cache to hard disk." + int txSaveCache = [MupenGameCore boolForOption:@"Save texture cache"]; + ConfigSetParameter(gliden64, "txSaveCache", M64TYPE_BOOL, &txSaveCache); + + // Warning, anything other than 0 crashes shader compilation + // "MultiSampling", config.video.multisampling, "Enable/Disable MultiSampling (0=off, 2,4,8,16=quality)" + int MultiSampling = [MupenGameCore intForOption:@"Multi Sampling"]; + ConfigSetParameter(gliden64, "MultiSampling", M64TYPE_INT, &MultiSampling); +// } //#Gamma correction settings @@ -759,24 +759,30 @@ static void ConfigureGLideN64(NSString *romFolder) { // assert(res == M64ERR_SUCCESS); /* - "txDeposterize", config.textureFilter.txDeposterize, "Deposterize texture before enhancement." - "txFilterIgnoreBG", config.textureFilter.txFilterIgnoreBG, "Don't filter background textures." "txCacheSize", config.textureFilter.txCacheSize/ gc_uMegabyte, "Size of filtered textures cache in megabytes." - "txDump", config.textureFilter.txDump, "Enable dump of loaded N64 textures." - "txForce16bpp", config.textureFilter.txForce16bpp, "Force use 16bit texture formats for HD textures." */ + int txDump = [MupenGameCore boolForOption:@"Texture Dump"]; + ConfigSetParameter(gliden64, "txDump", M64TYPE_BOOL, &txDump); + + int txFilterIgnoreBG = [MupenGameCore boolForOption:@"Ignore BG Textures"]; + ConfigSetParameter(gliden64, "txFilterIgnoreBG", M64TYPE_BOOL, &txFilterIgnoreBG); + + + int txForce16bpp = [MupenGameCore boolForOption:@"Force 16bpp textures"]; + ConfigSetParameter(gliden64, "txForce16bpp", M64TYPE_BOOL, &txForce16bpp); + // "txHresAltCRC", config.textureFilter.txHresAltCRC, "Use alternative method of paletted textures CRC calculation." - int txHresAltCRC = 0; + int txHresAltCRC = [MupenGameCore boolForOption:@"HiRes Alt CRC"]; ConfigSetParameter(gliden64, "txHresAltCRC", M64TYPE_BOOL, &txHresAltCRC); // "txHiresFullAlphaChannel", "Allow to use alpha channel of high-res texture fully." - int txHiresFullAlphaChannel = 1; + int txHiresFullAlphaChannel = [MupenGameCore boolForOption:@"HiRes Full Alpha"];; ConfigSetParameter(gliden64, "txHiresFullAlphaChannel", M64TYPE_BOOL, &txHiresFullAlphaChannel); // Draw on-screen display if True, otherwise don't draw OSD - int osd = 0; + int osd = [MupenGameCore boolForOption:@"Debug OSD"]; ConfigSetParameter(gliden64, "OnScreenDisplay", M64TYPE_BOOL, &osd); ConfigSetParameter(gliden64, "ShowFPS", M64TYPE_BOOL, &osd); // Show FPS counter. ConfigSetParameter(gliden64, "ShowVIS", M64TYPE_BOOL, &osd); // Show VI/S counter. diff --git a/Cores/Mupen64Plus/MupenOptions.swift b/Cores/Mupen64Plus/MupenOptions.swift index 43599eb9fd..22e7d7cc6c 100644 --- a/Cores/Mupen64Plus/MupenOptions.swift +++ b/Cores/Mupen64Plus/MupenOptions.swift @@ -17,30 +17,244 @@ extension MupenGameCore: CoreOptional { public static var options: [CoreOption] { var options = [CoreOption]() - let glidenOption = CoreOption.multi(display: CoreOptionValueDisplay(title: "GFX Plugin", - description: "GlideN64 is newer but slower. Try Rice for older devices."), - values: [ - CoreOptionMultiValue(title: "GlideN64", description: "Newer, GLES3 GFX Driver"), - CoreOptionMultiValue(title: "Rice Video", description: "Older, faster, less feature rich GFX Driver.") - ]) - - let rspOptions = CoreOption.multi(display: CoreOptionValueDisplay(title: "RSP Plugin", - description: nil), - values: [ - CoreOptionMultiValue(title: "RSPHLE", description: "Faster, default RSP"), - CoreOptionMultiValue(title: "CXD4", description: "Slower. More features for some games, breaks others.") - ]) - let plugins = CoreOption.group(display: CoreOptionValueDisplay(title: "Plugins", description: nil), subOptions: [glidenOption, rspOptions]) - - let hwLighting = CoreOption.bool(display: CoreOptionValueDisplay(title: "HW Lighting", description: "Per-pixel lighting"), defaultValue: false) - let videoOptions = CoreOption.group(display: CoreOptionValueDisplay(title: "Video"), subOptions: [hwLighting]) - options.append(contentsOf: [plugins, videoOptions]) + // MARK: -- Plugins + + let glidenOption = CoreOption.multi(.init(title: "GFX Plugin", + description: "GlideN64 is newer but slower. Try Rice for older devices."), values: [ + .init(title: "GlideN64", description: "Newer, GLES3 GFX Driver"), + .init(title: "Rice Video", description: "Older, faster, less feature rich GFX Driver.")]) + + let rspOptions = CoreOption.multi(.init(title: "RSP Plugin", description: nil), values: [ + .init(title: "RSPHLE", description: "Faster, default RSP"), + .init(title: "CXD4", description: "Slower. More features for some games, breaks others.")]) + + let plugins = CoreOption.group(.init(title: "Plugins", description: nil), + subOptions: [glidenOption, rspOptions]) + + // MARK: -- Core + var glidenOptions = [CoreOption]() + + // MARK: R4300Emulator + // Use Pure Interpreter if 0, Cached Interpreter if 1, or Dynamic Recompiler if 2 or more + glidenOptions.append(.multi(.init(title: "CPU Mode", + description: nil, + requiresRestart: true), + values:[ + .init(title: "Pure Interpreter", description: "Slowest"), + .init(title: "Cached Interpreter", description: "Default"), + .init(title: "Dynamic Recompiler", description: "Fastest but bequires JIT or will crash")])) + + // MARK: -- GLideN64 + #warning("Maybe make an enum type for core options?") + // MARK: AspectRatio + // 0 = stretch, 1 = 4:3, 2 = 16:9, 3 = adjust + glidenOptions.append(.enumeration(.init(title: "Aspect Ratio", + description: nil, + requiresRestart: true), + values:[ + .init(title: "Stretch", description: "Slowest"), + .init(title: "4:3", description: "Default"), + .init(title: "16:9", description: "Fastest but bequires JIT or will crash"), + .init(title: "Adjust", description: "Default")])) + + + // MARK: EnableHWLighting + glidenOptions.append(.bool(.init(title: "Hardware Lighting", description: "Per-pixel lighting", requiresRestart: true), defaultValue: false)) + // MARK: fullscreenRefresh + + // MARK: MultiSampling + // "Enable/Disable MultiSampling (0=off, 2,4,8,16=quality + // WARNING: anything other than 0 crashes shader compilation + glidenOptions.append(.enumeration(.init(title: "Multi Sampling", + description: "Anything other than Off will probably crash. You've been warned.", + requiresRestart: true), + values:[ + .init(title: "Off", description: ""), + .init(title: "2x", description: ""), + .init(title: "4x", description: ""), + .init(title: "8x", description: ""), + .init(title: "16x", description: "")])) + + // MARK: ForceGammaCorrection + glidenOptions.append(.bool(.init(title: "Force Gamma Correction", description: nil, requiresRestart: true), defaultValue: false)) + + // MARK: gammaCorrection + glidenOptions.append(.rangef(.init(title: "Gamma Correction", description: "Stength of gamma correction", requiresRestart: true), range: CoreOptionRange(defaultValue: 0.5, min: 0, max: 1), defaultValue: 0.5)) + + // MARK: --- Textures + + // MARK: txSaveCache + glidenOptions.append(.bool(.init(title: "Save texture cache", description: "Save textures to cache for faster loading later", requiresRestart: true), defaultValue: true)) + + // MARK: txCacheCompression + glidenOptions.append(.bool(.init(title: "Compress texture cache", description: "Compress Texture Cache", requiresRestart: true), defaultValue: true)) + + // MARK: txEnhancementMode + // 0=none, 1=store as is, 2=X2, 3=X2SAI, 4=HQ2X, 5=HQ2XS, 6=LQ2X, 7=LQ2XS, 8=HQ4X, 9=2xBRZ, 10=3xBRZ, 11=4xBRZ, 12=5xBRZ), 13=6xBRZ + glidenOptions.append(.enumeration(.init(title: "Texture Enhancement Mode", + description: nil, + requiresRestart: true), + values:[ + .init(title: "None", description: ""), + .init(title: "Store as-is", description: ""), + .init(title: "X2", description: ""), + .init(title: "X2SAI", description: ""), + .init(title: "HQ2X", description: ""), + .init(title: "HQ2XS", description: ""), + .init(title: "LQ2X", description: ""), + .init(title: "LQXS", description: ""), + .init(title: "HQ4X", description: ""), + .init(title: "2xBRZ", description: ""), + .init(title: "3xBZ", description: ""), + .init(title: "4xBRZ", description: ""), + .init(title: "5xBRZ", description: ""), + .init(title: "6xBRZ", description: ""), + + ])) + + // MARK: txFilterMode + // Texture filter (0=none, 1=Smooth filtering 1, 2=Smooth filtering 2, 3=Smooth filtering 3, 4=Smooth filtering 4, 5=Sharp filtering 1, 6=Sharp filtering 2) + glidenOptions.append(.enumeration(.init(title: "Texture Filter Mode", + description: nil, + requiresRestart: true), + values:[ + .init(title: "None", description: ""), + .init(title: "Smooth 1", description: ""), + .init(title: "Smooth 2", description: ""), + .init(title: "Smooth 3", description: ""), + .init(title: "Smooth 4", description: ""), + .init(title: "Sharp 1", description: ""), + .init(title: "Sharp 2", description: ""), + ])) + + + + // MARK: txFilterIgnoreBG + // "Don't filter background textures." + glidenOptions.append(.bool(.init(title: "Ignore BG Textures", description: "Don't filter background textures.", requiresRestart: true), defaultValue: false)) + + // MARK: txCacheSize + // MARK: txDump + // "Enable dump of loaded N64 textures. + glidenOptions.append(.bool(.init(title: "Texture Dump", description: "Enable dump of loaded N64 textures.", requiresRestart: true), defaultValue: false)) + + // MARK: txForce16bpp + // "Force use 16bit texture formats for HD textures." + glidenOptions.append(.bool(.init(title: "Force 16bpp textures", description: "Force use 16bit texture formats for HD textures.", requiresRestart: true), defaultValue: false)) + + // MARK: ---- HiRes + // MARK: txHiresEnable + glidenOptions.append(.bool(.init(title: "Enable HiRes Texture packs", description: "These must be installed seperately. Refer to our WIKI for HD textures.", requiresRestart: true), defaultValue: false)) + + // MARK: txHresAltCRC + // "Use alternative method of paletted textures CRC calculation." + glidenOptions.append(.bool(.init(title: "HiRes Alt CRC", description: "Use alternative method of paletted textures CRC calculation.", requiresRestart: true), defaultValue: false)) + + // MARK: txHiresFullAlphaChannel + // "Allow to use alpha channel of high-res texture fully." + glidenOptions.append(.bool(.init(title: "HiRes Full Alpha", description: "Allow to use alpha channel of high-res texture fully.", requiresRestart: true), defaultValue: true)) + + // MARK: --- DEBUG + // MARK: OSD + // Draw on-screen display if True, otherwise don't draw OSD + glidenOptions.append(.bool(.init(title: "Debug OSD", description: "Draw on-screen display if True, otherwise don't draw OSD", requiresRestart: true), defaultValue: false)) + + // MARK: --- Bloom + glidenOptions.append(.bool(.init(title: "Bloom filter", description: nil, requiresRestart: true), defaultValue: false)) + // TODO: Add another sub-group, auto disable if off (maybe more work than worth) + +// [bloomFilter] +// enable=0 +// thresholdLevel=4 +// blendMode=0 +// blurAmount=10 +// blurStrength=20 + + let glidenGroup:CoreOption = .group(.init(title: "GLideN64", description: "Options specific to the GLideN64 video plugin"), + subOptions: glidenOptions) + + // MARK: -- RICE + var riceOptions = [CoreOption]() + + riceOptions.append(.bool(.init(title: "Fast Texture Loading", description: "Use a faster algorithm to speed up texture loading and CRC computation", requiresRestart: true), defaultValue: false)) + + riceOptions.append(.bool(.init(title: "DoubleSizeForSmallTxtrBuf", description: "Enable this option to have better render-to-texture quality", requiresRestart: true), defaultValue: false)) + + riceOptions.append(.bool(.init(title: "FullTMEMEmulation", description: "N64 Texture Memory Full Emulation (may fix some games, may break others)", requiresRestart: true), defaultValue: false)) + + riceOptions.append(.bool(.init(title: "SkipFrame", description: "If this option is enabled, the plugin will skip every other frame. Breaks some games in my testing ", requiresRestart: true), defaultValue: false)) + + riceOptions.append(.bool(.init(title: "LoadHiResTextures", description: "Enable hi-resolution texture file loading", requiresRestart: true), defaultValue: false)) + +/* + + // Use fullscreen mode if True, or windowed mode if False + int fullscreen = 1; + ConfigSetParameter(rice, "Fullscreen", M64TYPE_BOOL, &fullscreen); + + // Use Mipmapping? 0=no, 1=nearest, 2=bilinear, 3=trilinear + int mipmapping = 0; + ConfigSetParameter(rice, "Mipmapping", M64TYPE_INT, &mipmapping); + + // Enable/Disable Anisotropic Filtering for Mipmapping (0=no filtering, 2-16=quality). + // This is uneffective if Mipmapping is 0. If the given value is to high to be supported by your graphic card, the value will be the highest value your graphic card can support. Better result with Trilinear filtering + int anisotropicFiltering = 16; + ConfigSetParameter(rice, "AnisotropicFiltering", M64TYPE_INT, &anisotropicFiltering); + + // Enable, Disable or Force fog generation (0=Disable, 1=Enable n64 choose, 2=Force Fog) + int fogMethod = 0; + ConfigSetParameter(rice, "FogMethod", M64TYPE_INT, &fogMethod); + + // Color bit depth to use for textures (0=default, 1=32 bits, 2=16 bits) + // 16 bit breaks some games like GoldenEye + int textureQuality = 0; + ConfigSetParameter(rice, "TextureQuality", M64TYPE_INT, &textureQuality); + + // Enable/Disable MultiSampling (0=off, 2,4,8,16=quality) + int multiSampling = RESIZE_TO_FULLSCREEN ? 4 : 0; + ConfigSetParameter(rice, "MultiSampling", M64TYPE_INT, &multiSampling); + + // Color bit depth for rendering window (0=32 bits, 1=16 bits) + int colorQuality = 0; + ConfigSetParameter(rice, "ColorQuality", M64TYPE_INT, &colorQuality); + */ + // MARK: ColorQuality + // 0 = 32 bits, 1 = 16 bits + riceOptions.append(.multi(.init(title: "Color Quality", + description: "Color bit depth for rendering window", + requiresRestart: true), + values:[ + .init(title: "32 Bits", description: ""), + .init(title: "16 Bits", description: "")])) + + let riceGroup:CoreOption = .group(.init(title: "RICE", description: "Options specific to the RICE video plugin"), + subOptions: riceOptions) + + + + // MARK: -- Video (Globa) +// let videoGroup = CoreOption.group(.init(title: "Video"), +// subOptions: [glidenGroup, riceGroup]) + + options.append(contentsOf: [plugins, /*videoGroup,*/ glidenGroup, riceGroup]) return options } } @objc extension MupenGameCore { + // TODO: move these generall accessors somewhere global, maybe use dynamicC + @objc + static public func bool(forOption option: String) -> Bool { + return valueForOption(Bool.self, option) ?? false + } + + @objc + static public func int(forOption option: String) -> Int { + let value = valueForOption(Int.self, option) + return value ?? 0 + } + public static var useRice: Bool { return valueForOption(String.self, "GFX Plugin") == "Rice Video" } @@ -50,6 +264,6 @@ extension MupenGameCore { } public static var perPixelLighting: Bool { - return valueForOption(Bool.self, "HW Lighting") ?? false + return valueForOption(Bool.self, "Hardware Lighting") ?? false } } diff --git a/Cores/Mupen64Plus/PVMupen64Plus.xcodeproj/project.pbxproj b/Cores/Mupen64Plus/PVMupen64Plus.xcodeproj/project.pbxproj index 3b625435a2..c4f0b0f4b0 100644 --- a/Cores/Mupen64Plus/PVMupen64Plus.xcodeproj/project.pbxproj +++ b/Cores/Mupen64Plus/PVMupen64Plus.xcodeproj/project.pbxproj @@ -56,8 +56,6 @@ B35B31C9206C9AAC00AEAF88 /* opengl_CachedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6037C2038AE7C001E70F1 /* opengl_CachedFunctions.cpp */; }; B35B31CC206CA65A00AEAF88 /* CRC_OPT_NEON.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B35B31CB206CA65900AEAF88 /* CRC_OPT_NEON.cpp */; }; B35B31CD206CA65A00AEAF88 /* CRC_OPT_NEON.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B35B31CB206CA65900AEAF88 /* CRC_OPT_NEON.cpp */; }; - B35B31CE206CA72800AEAF88 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = DFB6032F2038AE7B001E70F1 /* xxhash.c */; }; - B35B31CF206CA72A00AEAF88 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = DFB6032F2038AE7B001E70F1 /* xxhash.c */; }; B369B0DF21A3D7F90064EDCA /* MupenOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35E6C3B207EE3750040709A /* MupenOptions.swift */; }; B369B0E021A3D7FB0064EDCA /* MupenOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35E6C3B207EE3750040709A /* MupenOptions.swift */; }; B37263B326EA161100E95488 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37263A326EA0D6700E95488 /* libz.tbd */; }; @@ -89,7 +87,6 @@ B38010092085234000FA03B8 /* TxReSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6031C2038AE7B001E70F1 /* TxReSample.cpp */; }; B380100A2085234000FA03B8 /* TxTexCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB602F62038AE7B001E70F1 /* TxTexCache.cpp */; }; B380100B2085234000FA03B8 /* TxUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603112038AE7B001E70F1 /* TxUtil.cpp */; }; - B380100C2085234000FA03B8 /* txWidestringWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603022038AE7B001E70F1 /* txWidestringWrapper.cpp */; }; B3801011208545D900FA03B8 /* libpng-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B3303E4C1DED23C600896D96 /* libpng-iOS.a */; }; B380101420854EAA00FA03B8 /* TxDbg_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = B380101320854EAA00FA03B8 /* TxDbg_ios.mm */; }; B38010152085586900FA03B8 /* libglidenhq-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B3800FF5208522DC00FA03B8 /* libglidenhq-iOS.a */; }; @@ -98,6 +95,109 @@ B3962AED26FBD8A500FAEFC0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3962AEB26FBD89A00FAEFC0 /* OpenGL.framework */; platformFilter = maccatalyst; }; B3962AEE26FBD8F100FAEFC0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3962AEB26FBD89A00FAEFC0 /* OpenGL.framework */; platformFilter = maccatalyst; }; B39E8CB62053B53100380DCD /* Core.plist in Resources */ = {isa = PBXBuildFile; fileRef = B39E8CB52053B53100380DCD /* Core.plist */; }; + B39EF5782740DB7D00EAD1F9 /* netplay.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5752740DB7D00EAD1F9 /* netplay.h */; }; + B39EF5792740DB7D00EAD1F9 /* netplay.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5752740DB7D00EAD1F9 /* netplay.h */; }; + B39EF59F2740DD2E00EAD1F9 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5862740DBFF00EAD1F9 /* ioapi.c */; }; + B39EF5A02740DD2E00EAD1F9 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5842740DBFF00EAD1F9 /* unzip.c */; }; + B39EF5A12740DD2E00EAD1F9 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5852740DBFF00EAD1F9 /* zip.c */; }; + B39EF5A22740DD3900EAD1F9 /* libminizip-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B39EF5952740DD2700EAD1F9 /* libminizip-iOS.a */; }; + B39EF5B32740DF0B00EAD1F9 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF57F2740DBFF00EAD1F9 /* md5.c */; }; + B39EF5B42740DF1500EAD1F9 /* libmd5-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B39EF5B22740DEF600EAD1F9 /* libmd5-iOS.a */; }; + B39EF5BC2740DF5C00EAD1F9 /* dd_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5B82740DF5C00EAD1F9 /* dd_controller.h */; }; + B39EF5BD2740DF5C00EAD1F9 /* dd_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5B82740DF5C00EAD1F9 /* dd_controller.h */; }; + B39EF5BE2740DF5C00EAD1F9 /* disk.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5B92740DF5C00EAD1F9 /* disk.h */; }; + B39EF5BF2740DF5C00EAD1F9 /* disk.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5B92740DF5C00EAD1F9 /* disk.h */; }; + B39EF5C02740DF5C00EAD1F9 /* dd_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5BA2740DF5C00EAD1F9 /* dd_controller.c */; }; + B39EF5C12740DF5C00EAD1F9 /* dd_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5BA2740DF5C00EAD1F9 /* dd_controller.c */; }; + B39EF5C22740DF5C00EAD1F9 /* disk.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5BB2740DF5C00EAD1F9 /* disk.c */; }; + B39EF5C32740DF5C00EAD1F9 /* disk.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5BB2740DF5C00EAD1F9 /* disk.c */; }; + B39EF5C62740DF8F00EAD1F9 /* is_viewer.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5C42740DF8F00EAD1F9 /* is_viewer.c */; }; + B39EF5C72740DF8F00EAD1F9 /* is_viewer.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5C42740DF8F00EAD1F9 /* is_viewer.c */; }; + B39EF5C82740DF8F00EAD1F9 /* is_viewer.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5C52740DF8F00EAD1F9 /* is_viewer.h */; }; + B39EF5C92740DF8F00EAD1F9 /* is_viewer.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5C52740DF8F00EAD1F9 /* is_viewer.h */; }; + B39EF5CC2740DFD400EAD1F9 /* biopak.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5CA2740DFD400EAD1F9 /* biopak.c */; }; + B39EF5CD2740DFD400EAD1F9 /* biopak.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5CA2740DFD400EAD1F9 /* biopak.c */; }; + B39EF5CE2740DFD400EAD1F9 /* biopak.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5CB2740DFD400EAD1F9 /* biopak.h */; }; + B39EF5CF2740DFD400EAD1F9 /* biopak.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5CB2740DFD400EAD1F9 /* biopak.h */; }; + B39EF5D62740E23D00EAD1F9 /* video_capture_backend.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5D42740E23D00EAD1F9 /* video_capture_backend.c */; }; + B39EF5D72740E23D00EAD1F9 /* video_capture_backend.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5D42740E23D00EAD1F9 /* video_capture_backend.c */; }; + B39EF5D82740E23D00EAD1F9 /* video_capture_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5D52740E23D00EAD1F9 /* video_capture_backend.h */; }; + B39EF5D92740E23D00EAD1F9 /* video_capture_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF5D52740E23D00EAD1F9 /* video_capture_backend.h */; }; + B39EF5DC2740E29B00EAD1F9 /* dummy_video_capture.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5DA2740E29B00EAD1F9 /* dummy_video_capture.c */; }; + B39EF5DD2740E29B00EAD1F9 /* dummy_video_capture.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5DA2740E29B00EAD1F9 /* dummy_video_capture.c */; }; + B39EF5E82740EF5F00EAD1F9 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5842740DBFF00EAD1F9 /* unzip.c */; }; + B39EF5E92740EF5F00EAD1F9 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5852740DBFF00EAD1F9 /* zip.c */; }; + B39EF5EA2740EF5F00EAD1F9 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF5862740DBFF00EAD1F9 /* ioapi.c */; }; + B39EF5F62740EF6800EAD1F9 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF57F2740DBFF00EAD1F9 /* md5.c */; }; + B39EF5FF2740EF9800EAD1F9 /* libmd5-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B39EF5FE2740EF6800EAD1F9 /* libmd5-tvOS.a */; }; + B39EF6022740EF9800EAD1F9 /* libminizip-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B39EF5F32740EF6000EAD1F9 /* libminizip-tvOS.a */; }; + B39EF6052740EFA700EAD1F9 /* libdl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37263B626EA164E00E95488 /* libdl.tbd */; }; + B39EF6072740F38800EAD1F9 /* hvqm.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6062740F38800EAD1F9 /* hvqm.c */; }; + B39EF6082740F38800EAD1F9 /* hvqm.c in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6062740F38800EAD1F9 /* hvqm.c */; }; + B39EF60A2740F64000EAD1F9 /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6092740F64000EAD1F9 /* opengl_ContextImpl.cpp */; }; + B39EF60B2740F64000EAD1F9 /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6092740F64000EAD1F9 /* opengl_ContextImpl.cpp */; }; + B39EF60F2740F92600EAD1F9 /* TxHiResLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF60C2740F92600EAD1F9 /* TxHiResLoader.cpp */; }; + B39EF6102740F92600EAD1F9 /* TxHiResLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF60C2740F92600EAD1F9 /* TxHiResLoader.cpp */; }; + B39EF6112740F92600EAD1F9 /* TxHiResNoCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF60D2740F92600EAD1F9 /* TxHiResNoCache.cpp */; }; + B39EF6122740F92600EAD1F9 /* TxHiResNoCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF60D2740F92600EAD1F9 /* TxHiResNoCache.cpp */; }; + B39EF6132740F92600EAD1F9 /* TxHiResLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF60E2740F92600EAD1F9 /* TxHiResLoader.h */; }; + B39EF6142740F92600EAD1F9 /* TxHiResLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF60E2740F92600EAD1F9 /* TxHiResLoader.h */; }; + B39EF6232740FA7000EAD1F9 /* opengl_WrappedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6162740FA7000EAD1F9 /* opengl_WrappedFunctions.cpp */; }; + B39EF6242740FA7000EAD1F9 /* opengl_WrappedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6162740FA7000EAD1F9 /* opengl_WrappedFunctions.cpp */; }; + B39EF6252740FA7000EAD1F9 /* RingBufferPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6172740FA7000EAD1F9 /* RingBufferPool.cpp */; }; + B39EF6262740FA7000EAD1F9 /* RingBufferPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6172740FA7000EAD1F9 /* RingBufferPool.cpp */; }; + B39EF6272740FA7000EAD1F9 /* readerwriterqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6182740FA7000EAD1F9 /* readerwriterqueue.h */; }; + B39EF6282740FA7000EAD1F9 /* readerwriterqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6182740FA7000EAD1F9 /* readerwriterqueue.h */; }; + B39EF6292740FA7000EAD1F9 /* opengl_ObjectPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6192740FA7000EAD1F9 /* opengl_ObjectPool.cpp */; }; + B39EF62A2740FA7000EAD1F9 /* opengl_ObjectPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6192740FA7000EAD1F9 /* opengl_ObjectPool.cpp */; }; + B39EF62B2740FA7000EAD1F9 /* RingBufferPool.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61A2740FA7000EAD1F9 /* RingBufferPool.h */; }; + B39EF62C2740FA7000EAD1F9 /* RingBufferPool.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61A2740FA7000EAD1F9 /* RingBufferPool.h */; }; + B39EF62D2740FA7000EAD1F9 /* opengl_Command.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61B2740FA7000EAD1F9 /* opengl_Command.h */; }; + B39EF62E2740FA7000EAD1F9 /* opengl_Command.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61B2740FA7000EAD1F9 /* opengl_Command.h */; }; + B39EF62F2740FA7000EAD1F9 /* atomicops.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61C2740FA7000EAD1F9 /* atomicops.h */; }; + B39EF6302740FA7000EAD1F9 /* atomicops.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61C2740FA7000EAD1F9 /* atomicops.h */; }; + B39EF6312740FA7000EAD1F9 /* opengl_ObjectPool.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61D2740FA7000EAD1F9 /* opengl_ObjectPool.h */; }; + B39EF6322740FA7000EAD1F9 /* opengl_ObjectPool.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61D2740FA7000EAD1F9 /* opengl_ObjectPool.h */; }; + B39EF6332740FA7000EAD1F9 /* opengl_Wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61E2740FA7000EAD1F9 /* opengl_Wrapper.h */; }; + B39EF6342740FA7000EAD1F9 /* opengl_Wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF61E2740FA7000EAD1F9 /* opengl_Wrapper.h */; }; + B39EF6352740FA7000EAD1F9 /* opengl_Wrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF61F2740FA7000EAD1F9 /* opengl_Wrapper.cpp */; }; + B39EF6362740FA7000EAD1F9 /* opengl_Wrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF61F2740FA7000EAD1F9 /* opengl_Wrapper.cpp */; }; + B39EF6372740FA7000EAD1F9 /* opengl_WrappedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6202740FA7000EAD1F9 /* opengl_WrappedFunctions.h */; }; + B39EF6382740FA7000EAD1F9 /* opengl_WrappedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6202740FA7000EAD1F9 /* opengl_WrappedFunctions.h */; }; + B39EF6392740FA7000EAD1F9 /* BlockingQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6212740FA7000EAD1F9 /* BlockingQueue.h */; }; + B39EF63A2740FA7000EAD1F9 /* BlockingQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6212740FA7000EAD1F9 /* BlockingQueue.h */; }; + B39EF63B2740FA7000EAD1F9 /* opengl_Command.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6222740FA7000EAD1F9 /* opengl_Command.cpp */; }; + B39EF63C2740FA7000EAD1F9 /* opengl_Command.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6222740FA7000EAD1F9 /* opengl_Command.cpp */; }; + B39EF63E2740FDEF00EAD1F9 /* MemoryStatus_mupenplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF63D2740FDEF00EAD1F9 /* MemoryStatus_mupenplus.cpp */; }; + B39EF63F2740FDEF00EAD1F9 /* MemoryStatus_mupenplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF63D2740FDEF00EAD1F9 /* MemoryStatus_mupenplus.cpp */; }; + B39EF6422740FE2700EAD1F9 /* BlueNoiseTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6402740FE2700EAD1F9 /* BlueNoiseTexture.cpp */; }; + B39EF6432740FE2700EAD1F9 /* BlueNoiseTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6402740FE2700EAD1F9 /* BlueNoiseTexture.cpp */; }; + B39EF6442740FE2700EAD1F9 /* BlueNoiseTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6412740FE2700EAD1F9 /* BlueNoiseTexture.h */; }; + B39EF6452740FE2700EAD1F9 /* BlueNoiseTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6412740FE2700EAD1F9 /* BlueNoiseTexture.h */; }; + B39EF6522740FE9100EAD1F9 /* glsl_CombinerProgramBuilderAccurate.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6462740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderAccurate.h */; }; + B39EF6532740FE9100EAD1F9 /* glsl_CombinerProgramBuilderAccurate.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6462740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderAccurate.h */; }; + B39EF6542740FE9100EAD1F9 /* glsl_CombinerProgramBuilderAccurate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6472740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderAccurate.cpp */; }; + B39EF6552740FE9100EAD1F9 /* glsl_CombinerProgramBuilderAccurate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6472740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderAccurate.cpp */; }; + B39EF6562740FE9100EAD1F9 /* glsl_CombinerProgramBuilderFast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6482740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderFast.cpp */; }; + B39EF6572740FE9100EAD1F9 /* glsl_CombinerProgramBuilderFast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6482740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderFast.cpp */; }; + B39EF6582740FE9100EAD1F9 /* glsl_CombinerProgramBuilderCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6492740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderCommon.cpp */; }; + B39EF6592740FE9100EAD1F9 /* glsl_CombinerProgramBuilderCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6492740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderCommon.cpp */; }; + B39EF65A2740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF64A2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.cpp */; }; + B39EF65B2740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF64A2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.cpp */; }; + B39EF65C2740FE9100EAD1F9 /* glsl_CombinerProgramBuilderCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF64B2740FE8F00EAD1F9 /* glsl_CombinerProgramBuilderCommon.h */; }; + B39EF65D2740FE9100EAD1F9 /* glsl_CombinerProgramBuilderCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF64B2740FE8F00EAD1F9 /* glsl_CombinerProgramBuilderCommon.h */; }; + B39EF65E2740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF64C2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.h */; }; + B39EF65F2740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF64C2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.h */; }; + B39EF6602740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF64D2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.cpp */; }; + B39EF6612740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF64D2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.cpp */; }; + B39EF6622740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF64E2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.h */; }; + B39EF6632740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF64E2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.h */; }; + B39EF6642740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF64F2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.h */; }; + B39EF6652740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF64F2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.h */; }; + B39EF6662740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6502740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.cpp */; }; + B39EF6672740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B39EF6502740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.cpp */; }; + B39EF6682740FE9100EAD1F9 /* glsl_CombinerProgramBuilderFast.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6512740FE8F00EAD1F9 /* glsl_CombinerProgramBuilderFast.h */; }; + B39EF6692740FE9100EAD1F9 /* glsl_CombinerProgramBuilderFast.h in Headers */ = {isa = PBXBuildFile; fileRef = B39EF6512740FE8F00EAD1F9 /* glsl_CombinerProgramBuilderFast.h */; }; B3A302F22073F2D4008C1955 /* RiceVideoLinux.ini in Resources */ = {isa = PBXBuildFile; fileRef = B3A302912073F2AA008C1955 /* RiceVideoLinux.ini */; }; B3A302F32073F2F2008C1955 /* osal_dynamiclib_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = B3A302C12073F2AA008C1955 /* osal_dynamiclib_unix.c */; }; B3A302F42073F2F2008C1955 /* osal_files_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = B3A302D32073F2AA008C1955 /* osal_files_unix.c */; }; @@ -180,7 +280,6 @@ B3AE1D83207311E900AD06D4 /* savestates.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055ABC2072FEE9001212D2 /* savestates.c */; }; B3AE1D84207311E900AD06D4 /* dynamiclib_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A052072FEE9001212D2 /* dynamiclib_unix.c */; }; B3AE1D85207311E900AD06D4 /* m64282fp.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A9A2072FEE9001212D2 /* m64282fp.c */; }; - B3AE1D86207311E900AD06D4 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AD32072FEE9001212D2 /* xxhash.c */; }; B3AE1D87207311E900AD06D4 /* gb_cart.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A9C2072FEE9001212D2 /* gb_cart.c */; }; B3AE1D88207311E900AD06D4 /* cheat.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055ACC2072FEE9001212D2 /* cheat.c */; }; B3AE1D89207311E900AD06D4 /* pure_interp.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A612072FEE9001212D2 /* pure_interp.c */; }; @@ -194,7 +293,6 @@ B3AE1D93207311E900AD06D4 /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A5A2072FEE9001212D2 /* memory.c */; }; B3AE1D94207311E900AD06D4 /* files_macos.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A022072FEE9001212D2 /* files_macos.c */; }; B3AE1D95207311E900AD06D4 /* tlb.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A8A2072FEE9001212D2 /* tlb.c */; }; - B3AE1D96207311E900AD06D4 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AD62072FEE9001212D2 /* md5.c */; }; B3AE1D97207311E900AD06D4 /* game_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AB52072FEE9001212D2 /* game_controller.c */; }; B3AE1D98207311E900AD06D4 /* rom.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AD42072FEE9001212D2 /* rom.c */; }; B3AE1D9A207311E900AD06D4 /* interrupt.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A632072FEE9001212D2 /* interrupt.c */; }; @@ -240,16 +338,12 @@ B3AE1DCC207317BE00AD06D4 /* idec.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A8B2072FEE9001212D2 /* idec.c */; }; B3AE1DCD207317D500AD06D4 /* cached_interp.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A602072FEE9001212D2 /* cached_interp.c */; }; B3AE1DD420731F2700AD06D4 /* libdl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B3AE1DD320731F2700AD06D4 /* libdl.tbd */; }; - B3AE1DD520732E5200AD06D4 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AC42072FEE9001212D2 /* unzip.c */; }; - B3AE1DD620732E5200AD06D4 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AC52072FEE9001212D2 /* zip.c */; }; - B3AE1DD720732E5200AD06D4 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AC62072FEE9001212D2 /* ioapi.c */; }; B3AE1DD82073378600AD06D4 /* screenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D00F06C1183E4AA002995A1 /* screenshot.m */; }; B3AE1DD92073378600AD06D4 /* vidext.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D00F0BF1183E6FA002995A1 /* vidext.m */; }; B3AE1DDA2073378600AD06D4 /* eventloop.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D00F06A1183E4AA002995A1 /* eventloop.m */; }; B3AE1DDB2073378600AD06D4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8B35D712260F9D00C4C844 /* main.m */; }; B3AE1DDC2073378600AD06D4 /* SDLStubs.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D00F0801183E52F002995A1 /* SDLStubs.m */; }; B3AE1DDD2073378600AD06D4 /* MupenGameCore.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D208F811182B00300BEAA42 /* MupenGameCore.m */; }; - B3AE1DDE2073378600AD06D4 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AD62072FEE9001212D2 /* md5.c */; }; B3AE1DDF2073378600AD06D4 /* cart.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AA02072FEE9001212D2 /* cart.c */; }; B3AE1DE02073378600AD06D4 /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A302072FEE9001212D2 /* callbacks.c */; }; B3AE1DE12073378600AD06D4 /* flashram.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AAA2072FEE9001212D2 /* flashram.c */; }; @@ -259,7 +353,6 @@ B3AE1DE52073378600AD06D4 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A212072FEE9001212D2 /* common.c */; }; B3AE1DE62073378600AD06D4 /* cached_interp.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A602072FEE9001212D2 /* cached_interp.c */; }; B3AE1DE72073378600AD06D4 /* lirc.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AD72072FEE9001212D2 /* lirc.c */; }; - B3AE1DE82073378600AD06D4 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AD32072FEE9001212D2 /* xxhash.c */; }; B3AE1DE92073378600AD06D4 /* af_rtc.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AA32072FEE9001212D2 /* af_rtc.c */; }; B3AE1DEA2073378600AD06D4 /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A5A2072FEE9001212D2 /* memory.c */; }; B3AE1DEB2073378600AD06D4 /* interrupt.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A632072FEE9001212D2 /* interrupt.c */; }; @@ -274,18 +367,15 @@ B3AE1DF42073378600AD06D4 /* audio_plugin_compat.c in Sources */ = {isa = PBXBuildFile; fileRef = B30559F22072FEE9001212D2 /* audio_plugin_compat.c */; }; B3AE1DF52073378600AD06D4 /* vi_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A372072FEE9001212D2 /* vi_controller.c */; }; B3AE1DF62073378600AD06D4 /* rom.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AD42072FEE9001212D2 /* rom.c */; }; - B3AE1DF72073378600AD06D4 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AC52072FEE9001212D2 /* zip.c */; }; B3AE1DF82073378600AD06D4 /* frontend.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A222072FEE9001212D2 /* frontend.c */; }; B3AE1DF92073378600AD06D4 /* dummy_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A0B2072FEE9001212D2 /* dummy_audio.c */; }; B3AE1DFA2073378600AD06D4 /* config.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A2D2072FEE9001212D2 /* config.c */; }; B3AE1DFB2073378600AD06D4 /* rsp_core.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A4E2072FEE9001212D2 /* rsp_core.c */; }; B3AE1DFC2073378600AD06D4 /* eeprom.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AA52072FEE9001212D2 /* eeprom.c */; }; - B3AE1DFD2073378600AD06D4 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AC42072FEE9001212D2 /* unzip.c */; }; B3AE1DFE2073378600AD06D4 /* rumblepak.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AB02072FEE9001212D2 /* rumblepak.c */; }; B3AE1DFF2073378600AD06D4 /* input_plugin_compat.c in Sources */ = {isa = PBXBuildFile; fileRef = B30559F42072FEE9001212D2 /* input_plugin_compat.c */; }; B3AE1E002073378600AD06D4 /* dynamiclib_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A052072FEE9001212D2 /* dynamiclib_unix.c */; }; B3AE1E012073378600AD06D4 /* sram.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A9F2072FEE9001212D2 /* sram.c */; }; - B3AE1E022073378600AD06D4 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055AC62072FEE9001212D2 /* ioapi.c */; }; B3AE1E032073378600AD06D4 /* files_macos.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A022072FEE9001212D2 /* files_macos.c */; }; B3AE1E042073378600AD06D4 /* savestates.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055ABC2072FEE9001212D2 /* savestates.c */; }; B3AE1E052073378600AD06D4 /* dummy_input.c in Sources */ = {isa = PBXBuildFile; fileRef = B3055A0F2072FEE9001212D2 /* dummy_input.c */; }; @@ -384,7 +474,6 @@ B3AF703D21916E87000FA7F9 /* TextureFilters_hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603002038AE7B001E70F1 /* TextureFilters_hq2x.cpp */; }; B3AF703E21916E87000FA7F9 /* TxUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603112038AE7B001E70F1 /* TxUtil.cpp */; }; B3AF703F21916E87000FA7F9 /* TxFilterExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6031F2038AE7B001E70F1 /* TxFilterExport.cpp */; }; - B3AF704021916E87000FA7F9 /* txWidestringWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603022038AE7B001E70F1 /* txWidestringWrapper.cpp */; }; B3AF704121916E87000FA7F9 /* TextureFilters_hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB602F32038AE7B001E70F1 /* TextureFilters_hq4x.cpp */; }; B3AF704221916E87000FA7F9 /* TextureFilters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB602EA2038AE7B001E70F1 /* TextureFilters.cpp */; }; B3AF704321916E87000FA7F9 /* TextureFilters_2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6031D2038AE7B001E70F1 /* TextureFilters_2xsai.cpp */; }; @@ -596,13 +685,9 @@ DFB6040B2038BA09001E70F1 /* GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB603942038AE7D001E70F1 /* GraphicsDrawer.h */; }; DFB6040C2038BA1B001E70F1 /* gSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB602802038AE7A001E70F1 /* gSP.cpp */; }; DFB6040D2038BA1B001E70F1 /* gSP.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB603222038AE7B001E70F1 /* gSP.h */; }; - DFB6040E2038BA1B001E70F1 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603922038AE7D001E70F1 /* Keys.cpp */; }; - DFB6040F2038BA1B001E70F1 /* Keys.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB601D72038AE78001E70F1 /* Keys.h */; }; DFB604112038BA1B001E70F1 /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602DF2038AE7A001E70F1 /* Log.h */; }; DFB604122038BA1B001E70F1 /* gSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB602802038AE7A001E70F1 /* gSP.cpp */; }; DFB604132038BA1B001E70F1 /* gSP.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB603222038AE7B001E70F1 /* gSP.h */; }; - DFB604142038BA1B001E70F1 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603922038AE7D001E70F1 /* Keys.cpp */; }; - DFB604152038BA1B001E70F1 /* Keys.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB601D72038AE78001E70F1 /* Keys.h */; }; DFB604172038BA1B001E70F1 /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602DF2038AE7A001E70F1 /* Log.h */; }; DFB604182038BA3C001E70F1 /* N64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603932038AE7D001E70F1 /* N64.cpp */; }; DFB604192038BA3C001E70F1 /* N64.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB603212038AE7B001E70F1 /* N64.h */; }; @@ -754,7 +839,6 @@ DFB604B02038BBD5001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6034C2038AE7C001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.cpp */; }; DFB604B12038BBD5001E70F1 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6036C2038AE7C001E70F1 /* opengl_ColorBufferReaderWithPixelBuffer.cpp */; }; DFB604B22038BBD5001E70F1 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603802038AE7C001E70F1 /* opengl_ColorBufferReaderWithReadPixels.cpp */; }; - DFB604B32038BBD5001E70F1 /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6034E2038AE7C001E70F1 /* opengl_ContextImpl.cpp */; }; DFB604B42038BBD5001E70F1 /* opengl_GLInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6037D2038AE7C001E70F1 /* opengl_GLInfo.cpp */; }; DFB604B52038BBD5001E70F1 /* opengl_Parameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6036A2038AE7C001E70F1 /* opengl_Parameters.cpp */; }; DFB604B62038BBD5001E70F1 /* opengl_TextureManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603692038AE7C001E70F1 /* opengl_TextureManipulationObjectFactory.cpp */; }; @@ -767,7 +851,6 @@ DFB604BD2038BBD6001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6034C2038AE7C001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.cpp */; }; DFB604BE2038BBD6001E70F1 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6036C2038AE7C001E70F1 /* opengl_ColorBufferReaderWithPixelBuffer.cpp */; }; DFB604BF2038BBD6001E70F1 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603802038AE7C001E70F1 /* opengl_ColorBufferReaderWithReadPixels.cpp */; }; - DFB604C02038BBD6001E70F1 /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6034E2038AE7C001E70F1 /* opengl_ContextImpl.cpp */; }; DFB604C12038BBD6001E70F1 /* opengl_GLInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6037D2038AE7C001E70F1 /* opengl_GLInfo.cpp */; }; DFB604C22038BBD6001E70F1 /* opengl_Parameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB6036A2038AE7C001E70F1 /* opengl_Parameters.cpp */; }; DFB604C32038BBD6001E70F1 /* opengl_TextureManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFB603692038AE7C001E70F1 /* opengl_TextureManipulationObjectFactory.cpp */; }; @@ -809,8 +892,6 @@ DFB605442038BCD0001E70F1 /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602712038AE7A001E70F1 /* callbacks.h */; }; DFB605452038BCD0001E70F1 /* m64p_types.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602722038AE7A001E70F1 /* m64p_types.h */; }; DFB605462038BCD0001E70F1 /* m64p_debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602732038AE7A001E70F1 /* m64p_debugger.h */; }; - DFB605472038BCD0001E70F1 /* vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602742038AE7A001E70F1 /* vidext.h */; }; - DFB605482038BCD0001E70F1 /* vidext_sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602752038AE7A001E70F1 /* vidext_sdl2_compat.h */; }; DFB6054A2038BCD0001E70F1 /* m64p_config.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB6027C2038AE7A001E70F1 /* m64p_config.h */; }; DFB6054B2038BCD0001E70F1 /* m64p_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB6027D2038AE7A001E70F1 /* m64p_plugin.h */; }; DFB6054C2038BCD1001E70F1 /* m64p_frontend.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602102038AE79001E70F1 /* m64p_frontend.h */; }; @@ -819,8 +900,6 @@ DFB605502038BCD1001E70F1 /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602712038AE7A001E70F1 /* callbacks.h */; }; DFB605512038BCD1001E70F1 /* m64p_types.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602722038AE7A001E70F1 /* m64p_types.h */; }; DFB605522038BCD1001E70F1 /* m64p_debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602732038AE7A001E70F1 /* m64p_debugger.h */; }; - DFB605532038BCD1001E70F1 /* vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602742038AE7A001E70F1 /* vidext.h */; }; - DFB605542038BCD1001E70F1 /* vidext_sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602752038AE7A001E70F1 /* vidext_sdl2_compat.h */; }; DFB605562038BCD1001E70F1 /* m64p_config.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB6027C2038AE7A001E70F1 /* m64p_config.h */; }; DFB605572038BCD1001E70F1 /* m64p_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB6027D2038AE7A001E70F1 /* m64p_plugin.h */; }; DFB605582038BCDB001E70F1 /* ftxf86.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB602142038AE79001E70F1 /* ftxf86.h */; }; @@ -1106,6 +1185,34 @@ remoteGlobalIDString = B3AF702121916E60000FA7F9; remoteInfo = "png-tvOS"; }; + B39EF5A32740DD3900EAD1F9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 089C1669FE841209C02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B39EF5942740DD2700EAD1F9; + remoteInfo = minizip; + }; + B39EF5B52740DF1500EAD1F9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 089C1669FE841209C02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B39EF5A52740DEF600EAD1F9; + remoteInfo = md5; + }; + B39EF6002740EF9800EAD1F9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 089C1669FE841209C02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B39EF5F42740EF6800EAD1F9; + remoteInfo = "md5-tvOS"; + }; + B39EF6032740EF9800EAD1F9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 089C1669FE841209C02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B39EF5E62740EF5F00EAD1F9; + remoteInfo = "minizip-tvOS"; + }; B3AF701921916E0F000FA7F9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 089C1669FE841209C02AAC07 /* Project object */; @@ -1141,6 +1248,42 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B39EF5932740DD2700EAD1F9 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5AC2740DEF600EAD1F9 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5ED2740EF5F00EAD1F9 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5F82740EF6800EAD1F9 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; B3AF703521916E60000FA7F9 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -1236,12 +1379,6 @@ B30559E42072FEE9001212D2 /* mupen64plus.ini */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mupen64plus.ini; sourceTree = ""; }; B30559E52072FEE9001212D2 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; B30559E62072FEE9001212D2 /* CREDITS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CREDITS; sourceTree = ""; }; - B30559E92072FEE9001212D2 /* OGLFT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGLFT.h; sourceTree = ""; }; - B30559EA2072FEE9001212D2 /* screenshot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; - B30559EB2072FEE9001212D2 /* OGLFT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGLFT.cpp; sourceTree = ""; }; - B30559EC2072FEE9001212D2 /* screenshot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = screenshot.c; sourceTree = ""; }; - B30559ED2072FEE9001212D2 /* osd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = osd.h; sourceTree = ""; }; - B30559EE2072FEE9001212D2 /* osd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = osd.cpp; sourceTree = ""; }; B30559F02072FEE9001212D2 /* clock_ctime_plus_delta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = clock_ctime_plus_delta.c; sourceTree = ""; }; B30559F22072FEE9001212D2 /* audio_plugin_compat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = audio_plugin_compat.c; sourceTree = ""; }; B30559F32072FEE9001212D2 /* plugins_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugins_compat.h; sourceTree = ""; }; @@ -1417,29 +1554,18 @@ B3055ABB2072FEE9001212D2 /* util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = util.c; sourceTree = ""; }; B3055ABC2072FEE9001212D2 /* savestates.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = savestates.c; sourceTree = ""; }; B3055ABD2072FEE9001212D2 /* lirc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lirc.h; sourceTree = ""; }; - B3055ABE2072FEE9001212D2 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; B3055ABF2072FEE9001212D2 /* rom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rom.h; sourceTree = ""; }; B3055AC02072FEE9001212D2 /* workqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = workqueue.h; sourceTree = ""; }; B3055AC12072FEE9001212D2 /* eventloop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eventloop.c; sourceTree = ""; }; B3055AC22072FEE9001212D2 /* sdl_key_converter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sdl_key_converter.h; sourceTree = ""; }; - B3055AC42072FEE9001212D2 /* unzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unzip.c; sourceTree = ""; }; - B3055AC52072FEE9001212D2 /* zip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip.c; sourceTree = ""; }; - B3055AC62072FEE9001212D2 /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; }; - B3055AC72072FEE9001212D2 /* crypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; - B3055AC82072FEE9001212D2 /* zip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; }; - B3055AC92072FEE9001212D2 /* unzip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; }; - B3055ACA2072FEE9001212D2 /* ioapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; }; B3055ACB2072FEE9001212D2 /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; B3055ACC2072FEE9001212D2 /* cheat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cheat.c; sourceTree = ""; }; B3055ACD2072FEE9001212D2 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; B3055ACE2072FEE9001212D2 /* savestates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = savestates.h; sourceTree = ""; }; B3055ACF2072FEE9001212D2 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; B3055AD02072FEE9001212D2 /* profile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = profile.c; sourceTree = ""; }; - B3055AD22072FEE9001212D2 /* xxhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; - B3055AD32072FEE9001212D2 /* xxhash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xxhash.c; sourceTree = ""; }; B3055AD42072FEE9001212D2 /* rom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rom.c; sourceTree = ""; }; B3055AD52072FEE9001212D2 /* workqueue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = workqueue.c; sourceTree = ""; }; - B3055AD62072FEE9001212D2 /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = md5.c; sourceTree = ""; }; B3055AD72072FEE9001212D2 /* lirc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lirc.c; sourceTree = ""; }; B3055AD82072FEE9001212D2 /* sdl_key_converter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sdl_key_converter.c; sourceTree = ""; }; B3055AD92072FEE9001212D2 /* eventloop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eventloop.h; sourceTree = ""; }; @@ -1491,6 +1617,76 @@ B3962AEA26FBD16000FAEFC0 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; B3962AEB26FBD89A00FAEFC0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/System/Library/Frameworks/OpenGL.framework; sourceTree = DEVELOPER_DIR; }; B39E8CB52053B53100380DCD /* Core.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Core.plist; sourceTree = ""; }; + B39EF5742740DB7D00EAD1F9 /* netplay.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netplay.c; sourceTree = ""; }; + B39EF5752740DB7D00EAD1F9 /* netplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netplay.h; sourceTree = ""; }; + B39EF57A2740DBA000EAD1F9 /* screenshot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; + B39EF57B2740DBA000EAD1F9 /* screenshot.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = screenshot.c; sourceTree = ""; }; + B39EF57E2740DBFF00EAD1F9 /* md5.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; + B39EF57F2740DBFF00EAD1F9 /* md5.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = md5.c; sourceTree = ""; }; + B39EF5812740DBFF00EAD1F9 /* OGLFT.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OGLFT.h; sourceTree = ""; }; + B39EF5822740DBFF00EAD1F9 /* OGLFT.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OGLFT.cpp; sourceTree = ""; }; + B39EF5842740DBFF00EAD1F9 /* unzip.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = unzip.c; sourceTree = ""; }; + B39EF5852740DBFF00EAD1F9 /* zip.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip.c; sourceTree = ""; }; + B39EF5862740DBFF00EAD1F9 /* ioapi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; }; + B39EF5872740DBFF00EAD1F9 /* crypt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; + B39EF5882740DBFF00EAD1F9 /* zip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; }; + B39EF5892740DBFF00EAD1F9 /* unzip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; }; + B39EF58A2740DBFF00EAD1F9 /* ioapi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; }; + B39EF58C2740DBFF00EAD1F9 /* xxhash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; + B39EF58D2740DC7800EAD1F9 /* osd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = osd.h; sourceTree = ""; }; + B39EF58E2740DC7800EAD1F9 /* osd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = osd.c; sourceTree = ""; }; + B39EF58F2740DC7800EAD1F9 /* oglft_c.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = oglft_c.h; sourceTree = ""; }; + B39EF5902740DC7800EAD1F9 /* oglft_c.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = oglft_c.cpp; sourceTree = ""; }; + B39EF5952740DD2700EAD1F9 /* libminizip-iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libminizip-iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B39EF5B22740DEF600EAD1F9 /* libmd5-iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libmd5-iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B39EF5B82740DF5C00EAD1F9 /* dd_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dd_controller.h; sourceTree = ""; }; + B39EF5B92740DF5C00EAD1F9 /* disk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = disk.h; sourceTree = ""; }; + B39EF5BA2740DF5C00EAD1F9 /* dd_controller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dd_controller.c; sourceTree = ""; }; + B39EF5BB2740DF5C00EAD1F9 /* disk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = disk.c; sourceTree = ""; }; + B39EF5C42740DF8F00EAD1F9 /* is_viewer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = is_viewer.c; sourceTree = ""; }; + B39EF5C52740DF8F00EAD1F9 /* is_viewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = is_viewer.h; sourceTree = ""; }; + B39EF5CA2740DFD400EAD1F9 /* biopak.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = biopak.c; sourceTree = ""; }; + B39EF5CB2740DFD400EAD1F9 /* biopak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = biopak.h; sourceTree = ""; }; + B39EF5D32740E06300EAD1F9 /* SDL_timer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL_timer.h; sourceTree = ""; }; + B39EF5D42740E23D00EAD1F9 /* video_capture_backend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = video_capture_backend.c; sourceTree = ""; }; + B39EF5D52740E23D00EAD1F9 /* video_capture_backend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_capture_backend.h; sourceTree = ""; }; + B39EF5DA2740E29B00EAD1F9 /* dummy_video_capture.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dummy_video_capture.c; sourceTree = ""; }; + B39EF5DB2740E29B00EAD1F9 /* opencv_video_capture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opencv_video_capture.cpp; sourceTree = ""; }; + B39EF5F32740EF6000EAD1F9 /* libminizip-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libminizip-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B39EF5FE2740EF6800EAD1F9 /* libmd5-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libmd5-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B39EF6062740F38800EAD1F9 /* hvqm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hvqm.c; sourceTree = ""; }; + B39EF6092740F64000EAD1F9 /* opengl_ContextImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_ContextImpl.cpp; sourceTree = ""; }; + B39EF60C2740F92600EAD1F9 /* TxHiResLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TxHiResLoader.cpp; sourceTree = ""; }; + B39EF60D2740F92600EAD1F9 /* TxHiResNoCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TxHiResNoCache.cpp; sourceTree = ""; }; + B39EF60E2740F92600EAD1F9 /* TxHiResLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TxHiResLoader.h; sourceTree = ""; }; + B39EF6162740FA7000EAD1F9 /* opengl_WrappedFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_WrappedFunctions.cpp; sourceTree = ""; }; + B39EF6172740FA7000EAD1F9 /* RingBufferPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RingBufferPool.cpp; sourceTree = ""; }; + B39EF6182740FA7000EAD1F9 /* readerwriterqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = readerwriterqueue.h; sourceTree = ""; }; + B39EF6192740FA7000EAD1F9 /* opengl_ObjectPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_ObjectPool.cpp; sourceTree = ""; }; + B39EF61A2740FA7000EAD1F9 /* RingBufferPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RingBufferPool.h; sourceTree = ""; }; + B39EF61B2740FA7000EAD1F9 /* opengl_Command.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opengl_Command.h; sourceTree = ""; }; + B39EF61C2740FA7000EAD1F9 /* atomicops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = atomicops.h; sourceTree = ""; }; + B39EF61D2740FA7000EAD1F9 /* opengl_ObjectPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opengl_ObjectPool.h; sourceTree = ""; }; + B39EF61E2740FA7000EAD1F9 /* opengl_Wrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opengl_Wrapper.h; sourceTree = ""; }; + B39EF61F2740FA7000EAD1F9 /* opengl_Wrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_Wrapper.cpp; sourceTree = ""; }; + B39EF6202740FA7000EAD1F9 /* opengl_WrappedFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opengl_WrappedFunctions.h; sourceTree = ""; }; + B39EF6212740FA7000EAD1F9 /* BlockingQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlockingQueue.h; sourceTree = ""; }; + B39EF6222740FA7000EAD1F9 /* opengl_Command.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_Command.cpp; sourceTree = ""; }; + B39EF63D2740FDEF00EAD1F9 /* MemoryStatus_mupenplus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryStatus_mupenplus.cpp; sourceTree = ""; }; + B39EF6402740FE2700EAD1F9 /* BlueNoiseTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BlueNoiseTexture.cpp; sourceTree = ""; }; + B39EF6412740FE2700EAD1F9 /* BlueNoiseTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlueNoiseTexture.h; sourceTree = ""; }; + B39EF6462740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderAccurate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramBuilderAccurate.h; sourceTree = ""; }; + B39EF6472740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderAccurate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glsl_CombinerProgramBuilderAccurate.cpp; sourceTree = ""; }; + B39EF6482740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderFast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glsl_CombinerProgramBuilderFast.cpp; sourceTree = ""; }; + B39EF6492740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderCommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glsl_CombinerProgramBuilderCommon.cpp; sourceTree = ""; }; + B39EF64A2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glsl_CombinerProgramUniformFactoryCommon.cpp; sourceTree = ""; }; + B39EF64B2740FE8F00EAD1F9 /* glsl_CombinerProgramBuilderCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramBuilderCommon.h; sourceTree = ""; }; + B39EF64C2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramUniformFactoryCommon.h; sourceTree = ""; }; + B39EF64D2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glsl_CombinerProgramUniformFactoryFast.cpp; sourceTree = ""; }; + B39EF64E2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramUniformFactoryFast.h; sourceTree = ""; }; + B39EF64F2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramUniformFactoryAccurate.h; sourceTree = ""; }; + B39EF6502740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glsl_CombinerProgramUniformFactoryAccurate.cpp; sourceTree = ""; }; + B39EF6512740FE8F00EAD1F9 /* glsl_CombinerProgramBuilderFast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramBuilderFast.h; sourceTree = ""; }; B3A302852073F2AA008C1955 /* INSTALL */ = {isa = PBXFileReference; lastKnownFileType = text; path = INSTALL; sourceTree = ""; }; B3A302862073F2AA008C1955 /* LICENSES */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSES; sourceTree = ""; }; B3A302892073F2AA008C1955 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; @@ -1731,7 +1927,6 @@ B3EA4488206E372400E608F6 /* TextDrawerStub.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextDrawerStub.cpp; sourceTree = ""; }; B3F2058226FBCBC600A4196B /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/System/Library/Frameworks/OpenGL.framework; sourceTree = DEVELOPER_DIR; }; D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; - DF0035BD203C77D900F63831 /* Revision.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Revision.h; sourceTree = ""; }; DFB601802038AD13001E70F1 /* PVMupen64PlusVideoGlideN64.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PVMupen64PlusVideoGlideN64.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DFB601822038AD13001E70F1 /* PVMupen64PlusVideoGlideN64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PVMupen64PlusVideoGlideN64.h; sourceTree = ""; }; DFB601832038AD13001E70F1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -1739,50 +1934,9 @@ DFB6018E2038AE78001E70F1 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; DFB601902038AE78001E70F1 /* gpl-2.0.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "gpl-2.0.txt"; sourceTree = ""; }; DFB601922038AE78001E70F1 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - DFB601952038AE78001E70F1 /* Readme.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Readme.txt; sourceTree = ""; }; - DFB601972038AE78001E70F1 /* libGLideNHQ.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libGLideNHQ.vcxproj; sourceTree = ""; }; - DFB601982038AE78001E70F1 /* GLideNUI.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = GLideNUI.vcxproj.filters; sourceTree = ""; }; - DFB601992038AE78001E70F1 /* GLideN64.sln */ = {isa = PBXFileReference; lastKnownFileType = text; path = GLideN64.sln; sourceTree = ""; }; - DFB6019A2038AE78001E70F1 /* GLideN64.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = GLideN64.vcxproj.filters; sourceTree = ""; }; - DFB6019B2038AE78001E70F1 /* osal.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = osal.vcxproj; sourceTree = ""; }; - DFB6019C2038AE78001E70F1 /* libGLideNHQ.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libGLideNHQ.vcxproj.filters; sourceTree = ""; }; - DFB6019F2038AE78001E70F1 /* freetype253MT_D.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = freetype253MT_D.lib; sourceTree = ""; }; - DFB601A02038AE78001E70F1 /* zlibd.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = zlibd.lib; sourceTree = ""; }; - DFB601A12038AE78001E70F1 /* libpngd.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpngd.lib; sourceTree = ""; }; - DFB601A32038AE78001E70F1 /* zlib.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = zlib.lib; sourceTree = ""; }; - DFB601A42038AE78001E70F1 /* libpng.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpng.lib; sourceTree = ""; }; - DFB601A52038AE78001E70F1 /* freetype253MT.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = freetype253MT.lib; sourceTree = ""; }; - DFB601A62038AE78001E70F1 /* GLideNUI.sln */ = {isa = PBXFileReference; lastKnownFileType = text; path = GLideNUI.sln; sourceTree = ""; }; - DFB601A72038AE78001E70F1 /* GLideNUI.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = GLideNUI.vcxproj; sourceTree = ""; }; - DFB601A82038AE78001E70F1 /* osal.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = osal.vcxproj.filters; sourceTree = ""; }; - DFB601A92038AE78001E70F1 /* GLideN64.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = GLideN64.vcxproj; sourceTree = ""; }; - DFB601AB2038AE78001E70F1 /* libGLideNHQ.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libGLideNHQ.vcxproj; sourceTree = ""; }; - DFB601AC2038AE78001E70F1 /* GLideNUI.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = GLideNUI.vcxproj.filters; sourceTree = ""; }; - DFB601AD2038AE78001E70F1 /* GLideN64.sln */ = {isa = PBXFileReference; lastKnownFileType = text; path = GLideN64.sln; sourceTree = ""; }; - DFB601AE2038AE78001E70F1 /* GLideNUI.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = GLideNUI.pro; sourceTree = ""; }; - DFB601AF2038AE78001E70F1 /* GLideN64.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = GLideN64.vcxproj.filters; sourceTree = ""; }; - DFB601B02038AE78001E70F1 /* osal.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = osal.vcxproj; sourceTree = ""; }; - DFB601B12038AE78001E70F1 /* libGLideNHQ.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libGLideNHQ.vcxproj.filters; sourceTree = ""; }; - DFB601B52038AE78001E70F1 /* freetype253MT_D.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = freetype253MT_D.lib; sourceTree = ""; }; - DFB601B62038AE78001E70F1 /* zlibd.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = zlibd.lib; sourceTree = ""; }; - DFB601B72038AE78001E70F1 /* libpngd.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpngd.lib; sourceTree = ""; }; - DFB601B92038AE78001E70F1 /* zlib.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = zlib.lib; sourceTree = ""; }; - DFB601BA2038AE78001E70F1 /* libpng.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpng.lib; sourceTree = ""; }; - DFB601BB2038AE78001E70F1 /* freetype253MT.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = freetype253MT.lib; sourceTree = ""; }; - DFB601BD2038AE78001E70F1 /* freetype253MT_D.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = freetype253MT_D.lib; sourceTree = ""; }; - DFB601BE2038AE78001E70F1 /* zlibd.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = zlibd.lib; sourceTree = ""; }; - DFB601BF2038AE78001E70F1 /* libpngd.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpngd.lib; sourceTree = ""; }; - DFB601C12038AE78001E70F1 /* zlib.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = zlib.lib; sourceTree = ""; }; - DFB601C22038AE78001E70F1 /* libpng.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpng.lib; sourceTree = ""; }; - DFB601C32038AE78001E70F1 /* freetype253MT.lib */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = freetype253MT.lib; sourceTree = ""; }; - DFB601C42038AE78001E70F1 /* GLideNUI.sln */ = {isa = PBXFileReference; lastKnownFileType = text; path = GLideNUI.sln; sourceTree = ""; }; - DFB601C52038AE78001E70F1 /* GLideNUI.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = GLideNUI.vcxproj; sourceTree = ""; }; - DFB601C62038AE78001E70F1 /* osal.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = osal.vcxproj.filters; sourceTree = ""; }; - DFB601C72038AE78001E70F1 /* GLideN64.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = GLideN64.vcxproj; sourceTree = ""; }; DFB601C82038AE78001E70F1 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; DFB601CA2038AE78001E70F1 /* GLideN64.custom.ini */ = {isa = PBXFileReference; lastKnownFileType = text; path = GLideN64.custom.ini; sourceTree = ""; }; DFB601CB2038AE78001E70F1 /* GLideN64.ini */ = {isa = PBXFileReference; lastKnownFileType = text; path = GLideN64.ini; sourceTree = ""; }; - DFB601CC2038AE78001E70F1 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; DFB601CE2038AE78001E70F1 /* gliden64_pt_BR.ts */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = gliden64_pt_BR.ts; sourceTree = ""; }; DFB601CF2038AE78001E70F1 /* gliden64_fr.ts */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = gliden64_fr.ts; sourceTree = ""; }; DFB601D02038AE78001E70F1 /* gliden64_es.ts */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = gliden64_es.ts; sourceTree = ""; }; @@ -1791,7 +1945,6 @@ DFB601D32038AE78001E70F1 /* gliden64_ja.ts */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = gliden64_ja.ts; sourceTree = ""; }; DFB601D42038AE78001E70F1 /* gliden64_pl.ts */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = gliden64_pl.ts; sourceTree = ""; }; DFB601D62038AE78001E70F1 /* DepthBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DepthBuffer.h; sourceTree = ""; }; - DFB601D72038AE78001E70F1 /* Keys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Keys.h; sourceTree = ""; }; DFB601D82038AE78001E70F1 /* RDP.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RDP.cpp; sourceTree = ""; }; DFB601D92038AE78001E70F1 /* PluginAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PluginAPI.h; sourceTree = ""; }; DFB602092038AE79001E70F1 /* getRevision.bat */ = {isa = PBXFileReference; lastKnownFileType = text; path = getRevision.bat; sourceTree = ""; }; @@ -1895,8 +2048,6 @@ DFB602712038AE7A001E70F1 /* callbacks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; DFB602722038AE7A001E70F1 /* m64p_types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = m64p_types.h; sourceTree = ""; }; DFB602732038AE7A001E70F1 /* m64p_debugger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = m64p_debugger.h; sourceTree = ""; }; - DFB602742038AE7A001E70F1 /* vidext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vidext.h; sourceTree = ""; }; - DFB602752038AE7A001E70F1 /* vidext_sdl2_compat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vidext_sdl2_compat.h; sourceTree = ""; }; DFB602772038AE7A001E70F1 /* wglext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wglext.h; sourceTree = ""; }; DFB602782038AE7A001E70F1 /* glext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = glext.h; sourceTree = ""; }; DFB602792038AE7A001E70F1 /* glxext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = glxext.h; sourceTree = ""; }; @@ -1937,7 +2088,6 @@ DFB6029E2038AE7A001E70F1 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; DFB6029F2038AE7A001E70F1 /* osal_files.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = osal_files.h; sourceTree = ""; }; DFB602A02038AE7A001E70F1 /* osal_files_unix.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = osal_files_unix.c; sourceTree = ""; }; - DFB602A12038AE7A001E70F1 /* mupen64plus-video-osal.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = "mupen64plus-video-osal.mk"; sourceTree = ""; }; DFB602A22038AE7A001E70F1 /* osal_files_win32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = osal_files_win32.c; sourceTree = ""; }; DFB602A32038AE7A001E70F1 /* CRC32.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CRC32.cpp; sourceTree = ""; }; DFB602A42038AE7A001E70F1 /* GBI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GBI.cpp; sourceTree = ""; }; @@ -1947,7 +2097,6 @@ DFB602A92038AE7A001E70F1 /* CommonAPIImpl_mupenplus.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CommonAPIImpl_mupenplus.cpp; sourceTree = ""; }; DFB602AA2038AE7A001E70F1 /* video_api_export.ver */ = {isa = PBXFileReference; lastKnownFileType = text; path = video_api_export.ver; sourceTree = ""; }; DFB602AB2038AE7A001E70F1 /* FrameBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FrameBuffer.cpp; sourceTree = ""; }; - DFB602AC2038AE7A001E70F1 /* mupen64plus-video-gliden64.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = "mupen64plus-video-gliden64.mk"; sourceTree = ""; }; DFB602AD2038AE7A001E70F1 /* sdl2_compat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sdl2_compat.h; sourceTree = ""; }; DFB602AE2038AE7A001E70F1 /* FrameBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrameBuffer.h; sourceTree = ""; }; DFB602AF2038AE7A001E70F1 /* RSP_LoadMatrix.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RSP_LoadMatrix.cpp; sourceTree = ""; }; @@ -2027,18 +2176,14 @@ DFB602FF2038AE7B001E70F1 /* TxFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TxFilter.h; sourceTree = ""; }; DFB603002038AE7B001E70F1 /* TextureFilters_hq2x.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureFilters_hq2x.cpp; sourceTree = ""; }; DFB603012038AE7B001E70F1 /* TxUtil.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TxUtil.h; sourceTree = ""; }; - DFB603022038AE7B001E70F1 /* txWidestringWrapper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = txWidestringWrapper.cpp; sourceTree = ""; }; DFB603032038AE7B001E70F1 /* TxQuantize.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TxQuantize.cpp; sourceTree = ""; }; - DFB603042038AE7B001E70F1 /* Ext_TxFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Ext_TxFilter.cpp; sourceTree = ""; }; DFB603052038AE7B001E70F1 /* TxImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TxImage.h; sourceTree = ""; }; DFB603062038AE7B001E70F1 /* TextureFilters_xbrz.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureFilters_xbrz.h; sourceTree = ""; }; DFB603072038AE7B001E70F1 /* TextureFilters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureFilters.h; sourceTree = ""; }; DFB603082038AE7B001E70F1 /* TxDbg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TxDbg.h; sourceTree = ""; }; DFB603092038AE7B001E70F1 /* TxHiResCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TxHiResCache.h; sourceTree = ""; }; DFB6030A2038AE7B001E70F1 /* TxFilter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TxFilter.cpp; sourceTree = ""; }; - DFB6030B2038AE7B001E70F1 /* txWidestringWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = txWidestringWrapper.h; sourceTree = ""; }; DFB6030C2038AE7B001E70F1 /* TxTexCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TxTexCache.h; sourceTree = ""; }; - DFB6030D2038AE7B001E70F1 /* GlideHQ.rc */ = {isa = PBXFileReference; lastKnownFileType = text; path = GlideHQ.rc; sourceTree = ""; }; DFB6030E2038AE7B001E70F1 /* TxHiResCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TxHiResCache.cpp; sourceTree = ""; }; DFB6030F2038AE7B001E70F1 /* TextureFilters_2xsai.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureFilters_2xsai.h; sourceTree = ""; }; DFB603102038AE7B001E70F1 /* TxCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TxCache.cpp; sourceTree = ""; }; @@ -2048,10 +2193,6 @@ DFB603152038AE7B001E70F1 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpng.a; sourceTree = ""; }; DFB603162038AE7B001E70F1 /* TextureFilters_lq2x.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextureFilters_lq2x.h; sourceTree = ""; }; DFB603172038AE7B001E70F1 /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - DFB603182038AE7B001E70F1 /* Ext_TxFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Ext_TxFilter.h; sourceTree = ""; }; - DFB603192038AE7B001E70F1 /* bldno.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bldno.h; sourceTree = ""; }; - DFB6031A2038AE7B001E70F1 /* bldno.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = bldno.cpp; sourceTree = ""; }; - DFB6031B2038AE7B001E70F1 /* mupen64plus-video-glidenhq.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = "mupen64plus-video-glidenhq.mk"; sourceTree = ""; }; DFB6031C2038AE7B001E70F1 /* TxReSample.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TxReSample.cpp; sourceTree = ""; }; DFB6031D2038AE7B001E70F1 /* TextureFilters_2xsai.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TextureFilters_2xsai.cpp; sourceTree = ""; }; DFB6031E2038AE7B001E70F1 /* TxCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TxCache.h; sourceTree = ""; }; @@ -2069,7 +2210,6 @@ DFB6032B2038AE7B001E70F1 /* 3DMath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 3DMath.h; sourceTree = ""; }; DFB6032C2038AE7B001E70F1 /* CRC32_ARMV8.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CRC32_ARMV8.cpp; sourceTree = ""; }; DFB6032E2038AE7B001E70F1 /* xxhash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; - DFB6032F2038AE7B001E70F1 /* xxhash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = xxhash.c; sourceTree = ""; }; DFB603302038AE7B001E70F1 /* gDP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gDP.h; sourceTree = ""; }; DFB603312038AE7B001E70F1 /* GraphicsDrawer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsDrawer.cpp; sourceTree = ""; }; DFB603322038AE7B001E70F1 /* Debugger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Debugger.h; sourceTree = ""; }; @@ -2078,7 +2218,6 @@ DFB603352038AE7B001E70F1 /* SoftwareRender.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SoftwareRender.h; sourceTree = ""; }; DFB603372038AE7C001E70F1 /* CommonAPIImpl_windows.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CommonAPIImpl_windows.cpp; sourceTree = ""; }; DFB603382038AE7C001E70F1 /* GLideN64_windows.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GLideN64_windows.cpp; sourceTree = ""; }; - DFB603392038AE7C001E70F1 /* Config_windows.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Config_windows.cpp; sourceTree = ""; }; DFB6033A2038AE7C001E70F1 /* GLideN64_windows.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GLideN64_windows.h; sourceTree = ""; }; DFB6033B2038AE7C001E70F1 /* ZilmarAPIImpl_windows.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ZilmarAPIImpl_windows.cpp; sourceTree = ""; }; DFB6033C2038AE7C001E70F1 /* convert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = convert.h; sourceTree = ""; }; @@ -2096,7 +2235,6 @@ DFB6034B2038AE7C001E70F1 /* mupen64plus_DisplayWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = mupen64plus_DisplayWindow.cpp; sourceTree = ""; }; DFB6034C2038AE7C001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_ColorBufferReaderWithBufferStorage.cpp; sourceTree = ""; }; DFB6034D2038AE7C001E70F1 /* opengl_UnbufferedDrawer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = opengl_UnbufferedDrawer.h; sourceTree = ""; }; - DFB6034E2038AE7C001E70F1 /* opengl_ContextImpl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_ContextImpl.cpp; sourceTree = ""; }; DFB6034F2038AE7C001E70F1 /* opengl_ColorBufferReaderWithEGLImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithEGLImage.h; sourceTree = ""; }; DFB603502038AE7C001E70F1 /* opengl_ColorBufferReaderWithEGLImage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_ColorBufferReaderWithEGLImage.cpp; sourceTree = ""; }; DFB603512038AE7C001E70F1 /* opengl_BufferManipulationObjectFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = opengl_BufferManipulationObjectFactory.h; sourceTree = ""; }; @@ -2161,7 +2299,6 @@ DFB6038F2038AE7D001E70F1 /* gDP.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gDP.cpp; sourceTree = ""; }; DFB603902038AE7D001E70F1 /* GBI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GBI.h; sourceTree = ""; }; DFB603912038AE7D001E70F1 /* CRC_OPT.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CRC_OPT.cpp; sourceTree = ""; }; - DFB603922038AE7D001E70F1 /* Keys.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Keys.cpp; sourceTree = ""; }; DFB603932038AE7D001E70F1 /* N64.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = N64.cpp; sourceTree = ""; }; DFB603942038AE7D001E70F1 /* GraphicsDrawer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GraphicsDrawer.h; sourceTree = ""; }; DFB603952038AE7D001E70F1 /* VI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VI.cpp; sourceTree = ""; }; @@ -2201,8 +2338,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B39EF5B42740DF1500EAD1F9 /* libmd5-iOS.a in Frameworks */, B37263C626EA1EF000E95488 /* PVMupen64PlusVideoRice.framework in Frameworks */, B37263BE26EA1EF000E95488 /* PVMupen64PlusRspHLE.framework in Frameworks */, + B39EF5A22740DD3900EAD1F9 /* libminizip-iOS.a in Frameworks */, B3274E8B2106C19600857F52 /* PVSupport.framework in Frameworks */, B324C62B21920BC2009F4EDC /* libz.tbd in Frameworks */, B3AE1DD420731F2700AD06D4 /* libdl.tbd in Frameworks */, @@ -2221,6 +2360,34 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B39EF5922740DD2700EAD1F9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5AB2740DEF600EAD1F9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5EC2740EF5F00EAD1F9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5F72740EF6800EAD1F9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; B3AF703421916E60000FA7F9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -2250,10 +2417,13 @@ files = ( B37263CF26EA1F1C00E95488 /* PVMupen64PlusRspHLE.framework in Frameworks */, B37263D326EA1F1C00E95488 /* PVMupen64PlusVideoGlideN64.framework in Frameworks */, + B39EF5FF2740EF9800EAD1F9 /* libmd5-tvOS.a in Frameworks */, B3AF705821916ED0000FA7F9 /* PVSupport.framework in Frameworks */, B37263DB26EA1F1C00E95488 /* PVRSPCXD4.framework in Frameworks */, B37263B526EA164900E95488 /* libz.tbd in Frameworks */, + B39EF6022740EF9800EAD1F9 /* libminizip-tvOS.a in Frameworks */, B37263D726EA1F1C00E95488 /* PVMupen64PlusVideoRice.framework in Frameworks */, + B39EF6052740EFA700EAD1F9 /* libdl.tbd in Frameworks */, B324C63021920BDA009F4EDC /* OpenGLES.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2395,6 +2565,10 @@ B3800FF5208522DC00FA03B8 /* libglidenhq-iOS.a */, B3AF703921916E60000FA7F9 /* libpng-tvOS.a */, B3AF705221916E87000FA7F9 /* libglidenhq-tvOS.a */, + B39EF5952740DD2700EAD1F9 /* libminizip-iOS.a */, + B39EF5B22740DEF600EAD1F9 /* libmd5-iOS.a */, + B39EF5F32740EF6000EAD1F9 /* libminizip-tvOS.a */, + B39EF5FE2740EF6800EAD1F9 /* libmd5-tvOS.a */, ); name = Products; sourceTree = ""; @@ -2412,6 +2586,7 @@ 3D00F07E1183E52F002995A1 /* SDL */ = { isa = PBXGroup; children = ( + B39EF5D32740E06300EAD1F9 /* SDL_timer.h */, B3C1031E1C72C9BA00DD066C /* SDL_opengles2.h */, 3DCABDC7166C524C002F2066 /* SDL_opengl.h */, 3D00F0AB1183E67F002995A1 /* SDL_thread.h */, @@ -2456,21 +2631,22 @@ B30559AA2072FEE8001212D2 /* Core */ = { isa = PBXGroup; children = ( - B30559AB2072FEE9001212D2 /* tools */, + B30559CD2072FEE9001212D2 /* .gitattributes */, + B30559CC2072FEE9001212D2 /* .gitignore */, + B30559E62072FEE9001212D2 /* CREDITS */, B30559C02072FEE9001212D2 /* INSTALL */, B30559C12072FEE9001212D2 /* LICENSES */, - B30559C22072FEE9001212D2 /* projects */, - B30559C82072FEE9001212D2 /* RELEASE */, B30559C92072FEE9001212D2 /* README */, + B30559C82072FEE9001212D2 /* RELEASE */, B30559CA2072FEE9001212D2 /* README.md */, + B30559E52072FEE9001212D2 /* .travis.yml */, B30559CB2072FEE9001212D2 /* appveyor.yml */, - B30559CC2072FEE9001212D2 /* .gitignore */, - B30559CD2072FEE9001212D2 /* .gitattributes */, - B30559CE2072FEE9001212D2 /* doc */, B30559E12072FEE9001212D2 /* data */, - B30559E52072FEE9001212D2 /* .travis.yml */, - B30559E62072FEE9001212D2 /* CREDITS */, + B30559CE2072FEE9001212D2 /* doc */, + B30559C22072FEE9001212D2 /* projects */, + B39EF57C2740DBFF00EAD1F9 /* subprojects */, B30559E72072FEE9001212D2 /* src */, + B30559AB2072FEE9001212D2 /* tools */, ); name = Core; path = Plugins/Core; @@ -2581,15 +2757,15 @@ B30559E72072FEE9001212D2 /* src */ = { isa = PBXGroup; children = ( - B30559E82072FEE9001212D2 /* osd */, - B30559EF2072FEE9001212D2 /* backends */, - B30559FF2072FEE9001212D2 /* osal */, + B3055A1F2072FEE9001212D2 /* api */, B3055A082072FEE9001212D2 /* asm_defines */, - B3055A0A2072FEE9001212D2 /* plugin */, + B30559EF2072FEE9001212D2 /* backends */, B3055A152072FEE9001212D2 /* debugger */, - B3055A1F2072FEE9001212D2 /* api */, B3055A332072FEE9001212D2 /* device */, B3055AB62072FEE9001212D2 /* main */, + B30559FF2072FEE9001212D2 /* osal */, + B30559E82072FEE9001212D2 /* osd */, + B3055A0A2072FEE9001212D2 /* plugin */, ); path = src; sourceTree = ""; @@ -2597,12 +2773,10 @@ B30559E82072FEE9001212D2 /* osd */ = { isa = PBXGroup; children = ( - B30559E92072FEE9001212D2 /* OGLFT.h */, - B30559EA2072FEE9001212D2 /* screenshot.h */, - B30559EB2072FEE9001212D2 /* OGLFT.cpp */, - B30559EC2072FEE9001212D2 /* screenshot.c */, - B30559ED2072FEE9001212D2 /* osd.h */, - B30559EE2072FEE9001212D2 /* osd.cpp */, + B39EF5902740DC7800EAD1F9 /* oglft_c.cpp */, + B39EF58F2740DC7800EAD1F9 /* oglft_c.h */, + B39EF58E2740DC7800EAD1F9 /* osd.c */, + B39EF58D2740DC7800EAD1F9 /* osd.h */, ); path = osd; sourceTree = ""; @@ -2611,11 +2785,13 @@ isa = PBXGroup; children = ( B30559F02072FEE9001212D2 /* clock_ctime_plus_delta.c */, - B30559F12072FEE9001212D2 /* plugins_compat */, - B30559F52072FEE9001212D2 /* file_storage.h */, + B30559FE2072FEE9001212D2 /* file_storage.c */, B30559F62072FEE9001212D2 /* clock_ctime_plus_delta.h */, + B30559F52072FEE9001212D2 /* file_storage.h */, + B39EF5DA2740E29B00EAD1F9 /* dummy_video_capture.c */, + B39EF5DB2740E29B00EAD1F9 /* opencv_video_capture.cpp */, B30559F72072FEE9001212D2 /* api */, - B30559FE2072FEE9001212D2 /* file_storage.c */, + B30559F12072FEE9001212D2 /* plugins_compat */, ); path = backends; sourceTree = ""; @@ -2633,12 +2809,14 @@ B30559F72072FEE9001212D2 /* api */ = { isa = PBXGroup; children = ( - B30559F82072FEE9001212D2 /* rumble_backend.h */, - B30559F92072FEE9001212D2 /* storage_backend.h */, B30559FA2072FEE9001212D2 /* audio_out_backend.h */, B30559FB2072FEE9001212D2 /* clock_backend.h */, - B30559FC2072FEE9001212D2 /* joybus.h */, B30559FD2072FEE9001212D2 /* controller_input_backend.h */, + B30559FC2072FEE9001212D2 /* joybus.h */, + B30559F82072FEE9001212D2 /* rumble_backend.h */, + B30559F92072FEE9001212D2 /* storage_backend.h */, + B39EF5D42740E23D00EAD1F9 /* video_capture_backend.c */, + B39EF5D52740E23D00EAD1F9 /* video_capture_backend.h */, ); path = api; sourceTree = ""; @@ -2728,16 +2906,17 @@ B3055A332072FEE9001212D2 /* device */ = { isa = PBXGroup; children = ( - B3055A342072FEE9001212D2 /* rcp */, - B3055A4F2072FEE9001212D2 /* pif */, + B3055AAB2072FEE9001212D2 /* device.c */, B3055A582072FEE9001212D2 /* device.h */, - B3055A592072FEE9001212D2 /* memory */, - B3055A5C2072FEE9001212D2 /* rdram */, - B3055A5F2072FEE9001212D2 /* r4300 */, - B3055A972072FEE9001212D2 /* gb */, B3055A9E2072FEE9001212D2 /* cart */, - B3055AAB2072FEE9001212D2 /* device.c */, B3055AAC2072FEE9001212D2 /* controllers */, + B39EF5B72740DF5C00EAD1F9 /* dd */, + B3055A972072FEE9001212D2 /* gb */, + B3055A592072FEE9001212D2 /* memory */, + B3055A4F2072FEE9001212D2 /* pif */, + B3055A5F2072FEE9001212D2 /* r4300 */, + B3055A342072FEE9001212D2 /* rcp */, + B3055A5C2072FEE9001212D2 /* rdram */, ); path = device; sourceTree = ""; @@ -2977,18 +3156,20 @@ B3055A9E2072FEE9001212D2 /* cart */ = { isa = PBXGroup; children = ( - B3055A9F2072FEE9001212D2 /* sram.c */, + B3055AA32072FEE9001212D2 /* af_rtc.c */, + B3055AA92072FEE9001212D2 /* af_rtc.h */, + B3055AA22072FEE9001212D2 /* cart_rom.c */, + B3055AA82072FEE9001212D2 /* cart_rom.h */, B3055AA02072FEE9001212D2 /* cart.c */, + B3055AA62072FEE9001212D2 /* cart.h */, + B3055AA52072FEE9001212D2 /* eeprom.c */, B3055AA12072FEE9001212D2 /* eeprom.h */, - B3055AA22072FEE9001212D2 /* cart_rom.c */, - B3055AA32072FEE9001212D2 /* af_rtc.c */, + B3055AAA2072FEE9001212D2 /* flashram.c */, B3055AA42072FEE9001212D2 /* flashram.h */, - B3055AA52072FEE9001212D2 /* eeprom.c */, - B3055AA62072FEE9001212D2 /* cart.h */, + B39EF5C42740DF8F00EAD1F9 /* is_viewer.c */, + B39EF5C52740DF8F00EAD1F9 /* is_viewer.h */, + B3055A9F2072FEE9001212D2 /* sram.c */, B3055AA72072FEE9001212D2 /* sram.h */, - B3055AA82072FEE9001212D2 /* cart_rom.h */, - B3055AA92072FEE9001212D2 /* af_rtc.h */, - B3055AAA2072FEE9001212D2 /* flashram.c */, ); path = cart; sourceTree = ""; @@ -3006,6 +3187,8 @@ B3055AAD2072FEE9001212D2 /* paks */ = { isa = PBXGroup; children = ( + B39EF5CA2740DFD400EAD1F9 /* biopak.c */, + B39EF5CB2740DFD400EAD1F9 /* biopak.h */, B3055AAE2072FEE9001212D2 /* mempak.h */, B3055AAF2072FEE9001212D2 /* transferpak.h */, B3055AB02072FEE9001212D2 /* rumblepak.c */, @@ -3019,59 +3202,36 @@ B3055AB62072FEE9001212D2 /* main */ = { isa = PBXGroup; children = ( - B3055AB72072FEE9001212D2 /* main.h */, + B3055ACC2072FEE9001212D2 /* cheat.c */, B3055AB82072FEE9001212D2 /* cheat.h */, - B3055AB92072FEE9001212D2 /* version.h */, - B3055ABA2072FEE9001212D2 /* profile.h */, - B3055ABB2072FEE9001212D2 /* util.c */, - B3055ABC2072FEE9001212D2 /* savestates.c */, - B3055ABD2072FEE9001212D2 /* lirc.h */, - B3055ABE2072FEE9001212D2 /* md5.h */, - B3055ABF2072FEE9001212D2 /* rom.h */, - B3055AC02072FEE9001212D2 /* workqueue.h */, B3055AC12072FEE9001212D2 /* eventloop.c */, - B3055AC22072FEE9001212D2 /* sdl_key_converter.h */, - B3055AC32072FEE9001212D2 /* zip */, + B3055AD92072FEE9001212D2 /* eventloop.h */, + B3055AD72072FEE9001212D2 /* lirc.c */, + B3055ABD2072FEE9001212D2 /* lirc.h */, B3055ACB2072FEE9001212D2 /* list.h */, - B3055ACC2072FEE9001212D2 /* cheat.c */, B3055ACD2072FEE9001212D2 /* main.c */, - B3055ACE2072FEE9001212D2 /* savestates.h */, - B3055ACF2072FEE9001212D2 /* util.h */, + B3055AB72072FEE9001212D2 /* main.h */, + B39EF5742740DB7D00EAD1F9 /* netplay.c */, + B39EF5752740DB7D00EAD1F9 /* netplay.h */, B3055AD02072FEE9001212D2 /* profile.c */, - B3055AD12072FEE9001212D2 /* xxHash */, + B3055ABA2072FEE9001212D2 /* profile.h */, B3055AD42072FEE9001212D2 /* rom.c */, - B3055AD52072FEE9001212D2 /* workqueue.c */, - B3055AD62072FEE9001212D2 /* md5.c */, - B3055AD72072FEE9001212D2 /* lirc.c */, + B3055ABF2072FEE9001212D2 /* rom.h */, + B3055ABC2072FEE9001212D2 /* savestates.c */, + B3055ACE2072FEE9001212D2 /* savestates.h */, + B39EF57B2740DBA000EAD1F9 /* screenshot.c */, + B39EF57A2740DBA000EAD1F9 /* screenshot.h */, B3055AD82072FEE9001212D2 /* sdl_key_converter.c */, - B3055AD92072FEE9001212D2 /* eventloop.h */, + B3055AC22072FEE9001212D2 /* sdl_key_converter.h */, + B3055ABB2072FEE9001212D2 /* util.c */, + B3055ACF2072FEE9001212D2 /* util.h */, + B3055AB92072FEE9001212D2 /* version.h */, + B3055AD52072FEE9001212D2 /* workqueue.c */, + B3055AC02072FEE9001212D2 /* workqueue.h */, ); path = main; sourceTree = ""; }; - B3055AC32072FEE9001212D2 /* zip */ = { - isa = PBXGroup; - children = ( - B3055AC42072FEE9001212D2 /* unzip.c */, - B3055AC52072FEE9001212D2 /* zip.c */, - B3055AC62072FEE9001212D2 /* ioapi.c */, - B3055AC72072FEE9001212D2 /* crypt.h */, - B3055AC82072FEE9001212D2 /* zip.h */, - B3055AC92072FEE9001212D2 /* unzip.h */, - B3055ACA2072FEE9001212D2 /* ioapi.h */, - ); - path = zip; - sourceTree = ""; - }; - B3055AD12072FEE9001212D2 /* xxHash */ = { - isa = PBXGroup; - children = ( - B3055AD22072FEE9001212D2 /* xxhash.h */, - B3055AD32072FEE9001212D2 /* xxhash.c */, - ); - path = xxHash; - sourceTree = ""; - }; B3303E4D1DED23C600896D96 /* libpng */ = { isa = PBXGroup; children = ( @@ -3133,6 +3293,88 @@ path = PVMupen64PlusDynamic; sourceTree = ""; }; + B39EF57C2740DBFF00EAD1F9 /* subprojects */ = { + isa = PBXGroup; + children = ( + B39EF57D2740DBFF00EAD1F9 /* md5 */, + B39EF5802740DBFF00EAD1F9 /* oglft */, + B39EF5832740DBFF00EAD1F9 /* minizip */, + B39EF58B2740DBFF00EAD1F9 /* xxhash */, + ); + path = subprojects; + sourceTree = ""; + }; + B39EF57D2740DBFF00EAD1F9 /* md5 */ = { + isa = PBXGroup; + children = ( + B39EF57E2740DBFF00EAD1F9 /* md5.h */, + B39EF57F2740DBFF00EAD1F9 /* md5.c */, + ); + path = md5; + sourceTree = ""; + }; + B39EF5802740DBFF00EAD1F9 /* oglft */ = { + isa = PBXGroup; + children = ( + B39EF5812740DBFF00EAD1F9 /* OGLFT.h */, + B39EF5822740DBFF00EAD1F9 /* OGLFT.cpp */, + ); + path = oglft; + sourceTree = ""; + }; + B39EF5832740DBFF00EAD1F9 /* minizip */ = { + isa = PBXGroup; + children = ( + B39EF5842740DBFF00EAD1F9 /* unzip.c */, + B39EF5852740DBFF00EAD1F9 /* zip.c */, + B39EF5862740DBFF00EAD1F9 /* ioapi.c */, + B39EF5872740DBFF00EAD1F9 /* crypt.h */, + B39EF5882740DBFF00EAD1F9 /* zip.h */, + B39EF5892740DBFF00EAD1F9 /* unzip.h */, + B39EF58A2740DBFF00EAD1F9 /* ioapi.h */, + ); + path = minizip; + sourceTree = ""; + }; + B39EF58B2740DBFF00EAD1F9 /* xxhash */ = { + isa = PBXGroup; + children = ( + B39EF58C2740DBFF00EAD1F9 /* xxhash.h */, + ); + path = xxhash; + sourceTree = ""; + }; + B39EF5B72740DF5C00EAD1F9 /* dd */ = { + isa = PBXGroup; + children = ( + B39EF5B82740DF5C00EAD1F9 /* dd_controller.h */, + B39EF5B92740DF5C00EAD1F9 /* disk.h */, + B39EF5BA2740DF5C00EAD1F9 /* dd_controller.c */, + B39EF5BB2740DF5C00EAD1F9 /* disk.c */, + ); + path = dd; + sourceTree = ""; + }; + B39EF6152740FA7000EAD1F9 /* ThreadedOpenGl */ = { + isa = PBXGroup; + children = ( + B39EF6162740FA7000EAD1F9 /* opengl_WrappedFunctions.cpp */, + B39EF6172740FA7000EAD1F9 /* RingBufferPool.cpp */, + B39EF6182740FA7000EAD1F9 /* readerwriterqueue.h */, + B39EF6192740FA7000EAD1F9 /* opengl_ObjectPool.cpp */, + B39EF61A2740FA7000EAD1F9 /* RingBufferPool.h */, + B39EF61B2740FA7000EAD1F9 /* opengl_Command.h */, + B39EF61C2740FA7000EAD1F9 /* atomicops.h */, + B39EF61D2740FA7000EAD1F9 /* opengl_ObjectPool.h */, + B39EF61E2740FA7000EAD1F9 /* opengl_Wrapper.h */, + B39EF61F2740FA7000EAD1F9 /* opengl_Wrapper.cpp */, + B39EF6202740FA7000EAD1F9 /* opengl_WrappedFunctions.h */, + B39EF6212740FA7000EAD1F9 /* BlockingQueue.h */, + B39EF6222740FA7000EAD1F9 /* opengl_Command.cpp */, + ); + path = ThreadedOpenGl; + sourceTree = ""; + }; B3A302842073F2AA008C1955 /* rice */ = { isa = PBXGroup; children = ( @@ -3419,28 +3661,29 @@ B3AE1F2220733D3500AD06D4 /* alist_naudio.c */, B3AE1F1D20733D3500AD06D4 /* alist_nead.c */, B3AE1F2120733D3500AD06D4 /* alist.c */, + B3AE1F1320733D3500AD06D4 /* alist.h */, + B3AE1F1420733D3500AD06D4 /* arithmetics.h */, B3AE1F2920733D3500AD06D4 /* audio.c */, + B3AE1F1B20733D3500AD06D4 /* audio.h */, B3AE1F1E20733D3500AD06D4 /* cicx105.c */, + B3AE1F1F20733D3500AD06D4 /* common.h */, + B3AE1F1520733D3500AD06D4 /* hle_external.h */, + B3AE1F1920733D3500AD06D4 /* hle_internal.h */, B3AE1F1620733D3500AD06D4 /* hle.c */, + B3AE1F2520733D3500AD06D4 /* hle.h */, + B39EF6062740F38800EAD1F9 /* hvqm.c */, B3AE1F1120733D3500AD06D4 /* jpeg.c */, B3AE1F1220733D3500AD06D4 /* memory.c */, + B3AE1F2420733D3500AD06D4 /* memory.h */, B3AE1F2720733D3500AD06D4 /* mp3.c */, B3AE1F1A20733D3500AD06D4 /* musyx.c */, B3AE1F1C20733D3500AD06D4 /* osal_dynamiclib_unix.c */, B3AE1F2620733D3500AD06D4 /* osal_dynamiclib_win32.c */, + B3AE1F1720733D3500AD06D4 /* osal_dynamiclib.h */, B3AE1F2320733D3500AD06D4 /* plugin.c */, B3AE1F1820733D3500AD06D4 /* re2.c */, - B3AE1F1320733D3500AD06D4 /* alist.h */, - B3AE1F1420733D3500AD06D4 /* arithmetics.h */, - B3AE1F1B20733D3500AD06D4 /* audio.h */, - B3AE1F1F20733D3500AD06D4 /* common.h */, - B3AE1F1520733D3500AD06D4 /* hle_external.h */, - B3AE1F1920733D3500AD06D4 /* hle_internal.h */, - B3AE1F2520733D3500AD06D4 /* hle.h */, - B3AE1F2420733D3500AD06D4 /* memory.h */, - B3AE1F1720733D3500AD06D4 /* osal_dynamiclib.h */, - B3AE1F2820733D3500AD06D4 /* ucodes.h */, B3AE1F2020733D3500AD06D4 /* rsp_api_export.ver */, + B3AE1F2820733D3500AD06D4 /* ucodes.h */, ); path = src; sourceTree = ""; @@ -3511,14 +3754,12 @@ DFB6018A2038AE78001E70F1 /* gliden64 */ = { isa = PBXGroup; children = ( + DFB601D52038AE78001E70F1 /* src */, + DFB601C92038AE78001E70F1 /* ini */, DFB6018B2038AE78001E70F1 /* LICENSE */, DFB6018C2038AE78001E70F1 /* licenses */, - DFB601932038AE78001E70F1 /* projects */, DFB601C82038AE78001E70F1 /* README.md */, - DFB601C92038AE78001E70F1 /* ini */, - DFB601CC2038AE78001E70F1 /* .gitignore */, DFB601CD2038AE78001E70F1 /* translations */, - DFB601D52038AE78001E70F1 /* src */, ); path = gliden64; sourceTree = ""; @@ -3557,175 +3798,45 @@ path = Glow; sourceTree = ""; }; - DFB601932038AE78001E70F1 /* projects */ = { + DFB601C92038AE78001E70F1 /* ini */ = { isa = PBXGroup; children = ( - DFB601942038AE78001E70F1 /* cmake */, - DFB601962038AE78001E70F1 /* msvc12 */, - DFB601AA2038AE78001E70F1 /* msvc2015 */, + DFB601CA2038AE78001E70F1 /* GLideN64.custom.ini */, + DFB601CB2038AE78001E70F1 /* GLideN64.ini */, ); - path = projects; + path = ini; sourceTree = ""; }; - DFB601942038AE78001E70F1 /* cmake */ = { + DFB601CD2038AE78001E70F1 /* translations */ = { isa = PBXGroup; children = ( - DFB601952038AE78001E70F1 /* Readme.txt */, + DFB601CE2038AE78001E70F1 /* gliden64_pt_BR.ts */, + DFB601CF2038AE78001E70F1 /* gliden64_fr.ts */, + DFB601D02038AE78001E70F1 /* gliden64_es.ts */, + DFB601D12038AE78001E70F1 /* gliden64_it.ts */, + DFB601D22038AE78001E70F1 /* gliden64_de.ts */, + DFB601D32038AE78001E70F1 /* gliden64_ja.ts */, + DFB601D42038AE78001E70F1 /* gliden64_pl.ts */, ); - path = cmake; + path = translations; sourceTree = ""; }; - DFB601962038AE78001E70F1 /* msvc12 */ = { - isa = PBXGroup; - children = ( - DFB601972038AE78001E70F1 /* libGLideNHQ.vcxproj */, - DFB601982038AE78001E70F1 /* GLideNUI.vcxproj.filters */, - DFB601992038AE78001E70F1 /* GLideN64.sln */, - DFB6019A2038AE78001E70F1 /* GLideN64.vcxproj.filters */, - DFB6019B2038AE78001E70F1 /* osal.vcxproj */, - DFB6019C2038AE78001E70F1 /* libGLideNHQ.vcxproj.filters */, - DFB6019D2038AE78001E70F1 /* lib */, - DFB601A62038AE78001E70F1 /* GLideNUI.sln */, - DFB601A72038AE78001E70F1 /* GLideNUI.vcxproj */, - DFB601A82038AE78001E70F1 /* osal.vcxproj.filters */, - DFB601A92038AE78001E70F1 /* GLideN64.vcxproj */, - ); - path = msvc12; - sourceTree = ""; - }; - DFB6019D2038AE78001E70F1 /* lib */ = { - isa = PBXGroup; - children = ( - DFB6019E2038AE78001E70F1 /* dbg */, - DFB601A22038AE78001E70F1 /* rel */, - ); - path = lib; - sourceTree = ""; - }; - DFB6019E2038AE78001E70F1 /* dbg */ = { - isa = PBXGroup; - children = ( - DFB6019F2038AE78001E70F1 /* freetype253MT_D.lib */, - DFB601A02038AE78001E70F1 /* zlibd.lib */, - DFB601A12038AE78001E70F1 /* libpngd.lib */, - ); - path = dbg; - sourceTree = ""; - }; - DFB601A22038AE78001E70F1 /* rel */ = { - isa = PBXGroup; - children = ( - DFB601A32038AE78001E70F1 /* zlib.lib */, - DFB601A42038AE78001E70F1 /* libpng.lib */, - DFB601A52038AE78001E70F1 /* freetype253MT.lib */, - ); - path = rel; - sourceTree = ""; - }; - DFB601AA2038AE78001E70F1 /* msvc2015 */ = { - isa = PBXGroup; - children = ( - DFB601AB2038AE78001E70F1 /* libGLideNHQ.vcxproj */, - DFB601AC2038AE78001E70F1 /* GLideNUI.vcxproj.filters */, - DFB601AD2038AE78001E70F1 /* GLideN64.sln */, - DFB601AE2038AE78001E70F1 /* GLideNUI.pro */, - DFB601AF2038AE78001E70F1 /* GLideN64.vcxproj.filters */, - DFB601B02038AE78001E70F1 /* osal.vcxproj */, - DFB601B12038AE78001E70F1 /* libGLideNHQ.vcxproj.filters */, - DFB601B22038AE78001E70F1 /* lib */, - DFB601C42038AE78001E70F1 /* GLideNUI.sln */, - DFB601C52038AE78001E70F1 /* GLideNUI.vcxproj */, - DFB601C62038AE78001E70F1 /* osal.vcxproj.filters */, - DFB601C72038AE78001E70F1 /* GLideN64.vcxproj */, - ); - path = msvc2015; - sourceTree = ""; - }; - DFB601B22038AE78001E70F1 /* lib */ = { - isa = PBXGroup; - children = ( - DFB601B32038AE78001E70F1 /* x64 */, - DFB601BC2038AE78001E70F1 /* dbg */, - DFB601C02038AE78001E70F1 /* rel */, - ); - path = lib; - sourceTree = ""; - }; - DFB601B32038AE78001E70F1 /* x64 */ = { - isa = PBXGroup; - children = ( - DFB601B42038AE78001E70F1 /* dbg */, - DFB601B82038AE78001E70F1 /* rel */, - ); - path = x64; - sourceTree = ""; - }; - DFB601B42038AE78001E70F1 /* dbg */ = { - isa = PBXGroup; - children = ( - DFB601B52038AE78001E70F1 /* freetype253MT_D.lib */, - DFB601B62038AE78001E70F1 /* zlibd.lib */, - DFB601B72038AE78001E70F1 /* libpngd.lib */, - ); - path = dbg; - sourceTree = ""; - }; - DFB601B82038AE78001E70F1 /* rel */ = { - isa = PBXGroup; - children = ( - DFB601B92038AE78001E70F1 /* zlib.lib */, - DFB601BA2038AE78001E70F1 /* libpng.lib */, - DFB601BB2038AE78001E70F1 /* freetype253MT.lib */, - ); - path = rel; - sourceTree = ""; - }; - DFB601BC2038AE78001E70F1 /* dbg */ = { - isa = PBXGroup; - children = ( - DFB601BD2038AE78001E70F1 /* freetype253MT_D.lib */, - DFB601BE2038AE78001E70F1 /* zlibd.lib */, - DFB601BF2038AE78001E70F1 /* libpngd.lib */, - ); - path = dbg; - sourceTree = ""; - }; - DFB601C02038AE78001E70F1 /* rel */ = { - isa = PBXGroup; - children = ( - DFB601C12038AE78001E70F1 /* zlib.lib */, - DFB601C22038AE78001E70F1 /* libpng.lib */, - DFB601C32038AE78001E70F1 /* freetype253MT.lib */, - ); - path = rel; - sourceTree = ""; - }; - DFB601C92038AE78001E70F1 /* ini */ = { - isa = PBXGroup; - children = ( - DFB601CA2038AE78001E70F1 /* GLideN64.custom.ini */, - DFB601CB2038AE78001E70F1 /* GLideN64.ini */, - ); - path = ini; - sourceTree = ""; - }; - DFB601CD2038AE78001E70F1 /* translations */ = { - isa = PBXGroup; - children = ( - DFB601CE2038AE78001E70F1 /* gliden64_pt_BR.ts */, - DFB601CF2038AE78001E70F1 /* gliden64_fr.ts */, - DFB601D02038AE78001E70F1 /* gliden64_es.ts */, - DFB601D12038AE78001E70F1 /* gliden64_it.ts */, - DFB601D22038AE78001E70F1 /* gliden64_de.ts */, - DFB601D32038AE78001E70F1 /* gliden64_ja.ts */, - DFB601D42038AE78001E70F1 /* gliden64_pl.ts */, - ); - path = translations; - sourceTree = ""; - }; - DFB601D52038AE78001E70F1 /* src */ = { + DFB601D52038AE78001E70F1 /* src */ = { isa = PBXGroup; children = ( + DFB602892038AE7A001E70F1 /* BufferCopy */, + DFB602BB2038AE7A001E70F1 /* common */, + DFB602B02038AE7A001E70F1 /* DepthBufferRender */, + DFB602E62038AE7B001E70F1 /* GLideNHQ */, + DFB602C32038AE7A001E70F1 /* GLideNUI */, + DFB6033D2038AE7C001E70F1 /* Graphics */, + DFB6020F2038AE79001E70F1 /* inc */, + DFB602A52038AE7A001E70F1 /* mupenplus */, + DFB603252038AE7B001E70F1 /* Neon */, + DFB6029D2038AE7A001E70F1 /* osal */, + DFB601DA2038AE78001E70F1 /* uCodes */, + DFB603362038AE7C001E70F1 /* windows */, + DFB6032D2038AE7B001E70F1 /* xxHash */, DFB602092038AE79001E70F1 /* getRevision.bat */, DFB603292038AE7B001E70F1 /* 3DMath.cpp */, DFB603242038AE7B001E70F1 /* Combiner.cpp */, @@ -3749,7 +3860,6 @@ DFB603312038AE7B001E70F1 /* GraphicsDrawer.cpp */, DFB602802038AE7A001E70F1 /* gSP.cpp */, DFB602952038AE7A001E70F1 /* iob.cpp */, - DFB603922038AE7D001E70F1 /* Keys.cpp */, DFB6038C2038AE7C001E70F1 /* Log_android.cpp */, DFB6020B2038AE79001E70F1 /* Log.cpp */, DFB6038D2038AE7C001E70F1 /* MupenPlusPluginAPI.cpp */, @@ -3791,7 +3901,6 @@ DFB602B52038AE7A001E70F1 /* GLideN64.h */, DFB603942038AE7D001E70F1 /* GraphicsDrawer.h */, DFB603222038AE7B001E70F1 /* gSP.h */, - DFB601D72038AE78001E70F1 /* Keys.h */, DFB602DF2038AE7A001E70F1 /* Log.h */, DFB603212038AE7B001E70F1 /* N64.h */, DFB602BA2038AE7A001E70F1 /* NoiseTexture.h */, @@ -3801,7 +3910,6 @@ DFB601D92038AE78001E70F1 /* PluginAPI.h */, DFB602B72038AE7A001E70F1 /* PostProcessor.h */, DFB603862038AE7C001E70F1 /* RDP.h */, - DF0035BD203C77D900F63831 /* Revision.h */, DFB603232038AE7B001E70F1 /* RSP.h */, DFB602AD2038AE7A001E70F1 /* sdl2_compat.h */, DFB603352038AE7B001E70F1 /* SoftwareRender.h */, @@ -3815,24 +3923,10 @@ DFB602E02038AE7A001E70F1 /* wst.h */, DFB6020D2038AE79001E70F1 /* ZilmarGFX_1_3.h */, DFB602B62038AE7A001E70F1 /* ZlutTexture.h */, - DFB602AC2038AE7A001E70F1 /* mupen64plus-video-gliden64.mk */, B3CB4B20206E54D10074706B /* Log_ios.mm */, DFB602C12038AE7A001E70F1 /* getRevision.sh */, DFB6027F2038AE7A001E70F1 /* CMakeLists.txt */, DFB6029C2038AE7A001E70F1 /* FrameBufferEmulationIssues.txt */, - DFB602892038AE7A001E70F1 /* BufferCopy */, - DFB602BB2038AE7A001E70F1 /* common */, - DFB602B02038AE7A001E70F1 /* DepthBufferRender */, - DFB602E62038AE7B001E70F1 /* GLideNHQ */, - DFB602C32038AE7A001E70F1 /* GLideNUI */, - DFB6033D2038AE7C001E70F1 /* Graphics */, - DFB6020F2038AE79001E70F1 /* inc */, - DFB602A52038AE7A001E70F1 /* mupenplus */, - DFB603252038AE7B001E70F1 /* Neon */, - DFB6029D2038AE7A001E70F1 /* osal */, - DFB601DA2038AE78001E70F1 /* uCodes */, - DFB603362038AE7C001E70F1 /* windows */, - DFB6032D2038AE7B001E70F1 /* xxHash */, ); path = src; sourceTree = ""; @@ -3897,20 +3991,18 @@ DFB6020F2038AE79001E70F1 /* inc */ = { isa = PBXGroup; children = ( - DFB602102038AE79001E70F1 /* m64p_frontend.h */, - DFB602112038AE79001E70F1 /* config.h */, - DFB602122038AE79001E70F1 /* freetype */, - DFB6026F2038AE7A001E70F1 /* m64p_vidext.h */, - DFB602702038AE7A001E70F1 /* m64p_common.h */, DFB602712038AE7A001E70F1 /* callbacks.h */, - DFB602722038AE7A001E70F1 /* m64p_types.h */, - DFB602732038AE7A001E70F1 /* m64p_debugger.h */, - DFB602742038AE7A001E70F1 /* vidext.h */, - DFB602752038AE7A001E70F1 /* vidext_sdl2_compat.h */, - DFB602762038AE7A001E70F1 /* GL */, + DFB602112038AE79001E70F1 /* config.h */, DFB6027B2038AE7A001E70F1 /* debugger.h */, + DFB602702038AE7A001E70F1 /* m64p_common.h */, DFB6027C2038AE7A001E70F1 /* m64p_config.h */, + DFB602732038AE7A001E70F1 /* m64p_debugger.h */, + DFB602102038AE79001E70F1 /* m64p_frontend.h */, DFB6027D2038AE7A001E70F1 /* m64p_plugin.h */, + DFB602722038AE7A001E70F1 /* m64p_types.h */, + DFB6026F2038AE7A001E70F1 /* m64p_vidext.h */, + DFB602122038AE79001E70F1 /* freetype */, + DFB602762038AE7A001E70F1 /* GL */, ); path = inc; sourceTree = ""; @@ -4056,14 +4148,16 @@ DFB602892038AE7A001E70F1 /* BufferCopy */ = { isa = PBXGroup; children = ( - DFB6028A2038AE7A001E70F1 /* RDRAMtoColorBuffer.h */, - DFB6028B2038AE7A001E70F1 /* DepthBufferToRDRAM.cpp */, - DFB6028C2038AE7A001E70F1 /* RDRAMtoColorBuffer.cpp */, + B39EF6402740FE2700EAD1F9 /* BlueNoiseTexture.cpp */, + B39EF6412740FE2700EAD1F9 /* BlueNoiseTexture.h */, + DFB602902038AE7A001E70F1 /* ColorBufferToRDRAM.cpp */, + DFB602912038AE7A001E70F1 /* ColorBufferToRDRAM.h */, DFB6028D2038AE7A001E70F1 /* ColorBufferToRDRAMStub.h */, + DFB6028B2038AE7A001E70F1 /* DepthBufferToRDRAM.cpp */, DFB6028E2038AE7A001E70F1 /* DepthBufferToRDRAM.h */, + DFB6028C2038AE7A001E70F1 /* RDRAMtoColorBuffer.cpp */, + DFB6028A2038AE7A001E70F1 /* RDRAMtoColorBuffer.h */, DFB6028F2038AE7A001E70F1 /* WriteToRDRAM.h */, - DFB602902038AE7A001E70F1 /* ColorBufferToRDRAM.cpp */, - DFB602912038AE7A001E70F1 /* ColorBufferToRDRAM.h */, ); path = BufferCopy; sourceTree = ""; @@ -4074,7 +4168,6 @@ DFB6029E2038AE7A001E70F1 /* CMakeLists.txt */, DFB6029F2038AE7A001E70F1 /* osal_files.h */, DFB602A02038AE7A001E70F1 /* osal_files_unix.c */, - DFB602A12038AE7A001E70F1 /* mupen64plus-video-osal.mk */, DFB602A22038AE7A001E70F1 /* osal_files_win32.c */, DFB60621203A7428001E70F1 /* osal_files_ios.mm */, ); @@ -4084,10 +4177,11 @@ DFB602A52038AE7A001E70F1 /* mupenplus */ = { isa = PBXGroup; children = ( + DFB602A92038AE7A001E70F1 /* CommonAPIImpl_mupenplus.cpp */, DFB602A62038AE7A001E70F1 /* Config_mupenplus.cpp */, DFB602A72038AE7A001E70F1 /* GLideN64_mupenplus.h */, + B39EF63D2740FDEF00EAD1F9 /* MemoryStatus_mupenplus.cpp */, DFB602A82038AE7A001E70F1 /* MupenPlusAPIImpl.cpp */, - DFB602A92038AE7A001E70F1 /* CommonAPIImpl_mupenplus.cpp */, DFB602AA2038AE7A001E70F1 /* video_api_export.ver */, ); path = mupenplus; @@ -4149,52 +4243,47 @@ DFB602E62038AE7B001E70F1 /* GLideNHQ */ = { isa = PBXGroup; children = ( - DFB6031A2038AE7B001E70F1 /* bldno.cpp */, - DFB603042038AE7B001E70F1 /* Ext_TxFilter.cpp */, + DFB602F72038AE7B001E70F1 /* CMakeLists.txt */, + DFB602F52038AE7B001E70F1 /* gpl-2.0.txt */, + DFB602EC2038AE7B001E70F1 /* inc */, + DFB603122038AE7B001E70F1 /* lib */, + DFB603172038AE7B001E70F1 /* README.txt */, + DFB602F92038AE7B001E70F1 /* test */, DFB6031D2038AE7B001E70F1 /* TextureFilters_2xsai.cpp */, - DFB603002038AE7B001E70F1 /* TextureFilters_hq2x.cpp */, - DFB602F32038AE7B001E70F1 /* TextureFilters_hq4x.cpp */, - DFB602F42038AE7B001E70F1 /* TextureFilters_xbrz.cpp */, - DFB602EA2038AE7B001E70F1 /* TextureFilters.cpp */, - DFB603102038AE7B001E70F1 /* TxCache.cpp */, - DFB602FE2038AE7B001E70F1 /* TxDbg.cpp */, - B380101320854EAA00FA03B8 /* TxDbg_ios.mm */, - DFB6030A2038AE7B001E70F1 /* TxFilter.cpp */, - DFB6031F2038AE7B001E70F1 /* TxFilterExport.cpp */, - DFB6030E2038AE7B001E70F1 /* TxHiResCache.cpp */, - DFB602E92038AE7B001E70F1 /* TxImage.cpp */, - DFB603032038AE7B001E70F1 /* TxQuantize.cpp */, - DFB6031C2038AE7B001E70F1 /* TxReSample.cpp */, - DFB602F62038AE7B001E70F1 /* TxTexCache.cpp */, - DFB603112038AE7B001E70F1 /* TxUtil.cpp */, - DFB603022038AE7B001E70F1 /* txWidestringWrapper.cpp */, - DFB603192038AE7B001E70F1 /* bldno.h */, - DFB603182038AE7B001E70F1 /* Ext_TxFilter.h */, DFB6030F2038AE7B001E70F1 /* TextureFilters_2xsai.h */, + DFB603002038AE7B001E70F1 /* TextureFilters_hq2x.cpp */, DFB602F82038AE7B001E70F1 /* TextureFilters_hq2x.h */, + DFB602F32038AE7B001E70F1 /* TextureFilters_hq4x.cpp */, DFB603202038AE7B001E70F1 /* TextureFilters_hq4x.h */, DFB603162038AE7B001E70F1 /* TextureFilters_lq2x.h */, + DFB602F42038AE7B001E70F1 /* TextureFilters_xbrz.cpp */, DFB603062038AE7B001E70F1 /* TextureFilters_xbrz.h */, + DFB602EA2038AE7B001E70F1 /* TextureFilters.cpp */, DFB603072038AE7B001E70F1 /* TextureFilters.h */, + DFB603102038AE7B001E70F1 /* TxCache.cpp */, DFB6031E2038AE7B001E70F1 /* TxCache.h */, + B380101320854EAA00FA03B8 /* TxDbg_ios.mm */, + DFB602FE2038AE7B001E70F1 /* TxDbg.cpp */, DFB603082038AE7B001E70F1 /* TxDbg.h */, + DFB6030A2038AE7B001E70F1 /* TxFilter.cpp */, DFB602FF2038AE7B001E70F1 /* TxFilter.h */, + DFB6031F2038AE7B001E70F1 /* TxFilterExport.cpp */, + B39EF60C2740F92600EAD1F9 /* TxHiResLoader.cpp */, + B39EF60E2740F92600EAD1F9 /* TxHiResLoader.h */, + B39EF60D2740F92600EAD1F9 /* TxHiResNoCache.cpp */, + DFB6030E2038AE7B001E70F1 /* TxHiResCache.cpp */, DFB603092038AE7B001E70F1 /* TxHiResCache.h */, + DFB602E92038AE7B001E70F1 /* TxImage.cpp */, DFB603052038AE7B001E70F1 /* TxImage.h */, DFB602EB2038AE7B001E70F1 /* TxInternal.h */, + DFB603032038AE7B001E70F1 /* TxQuantize.cpp */, DFB602E82038AE7B001E70F1 /* TxQuantize.h */, + DFB6031C2038AE7B001E70F1 /* TxReSample.cpp */, DFB602E72038AE7B001E70F1 /* TxReSample.h */, + DFB602F62038AE7B001E70F1 /* TxTexCache.cpp */, DFB6030C2038AE7B001E70F1 /* TxTexCache.h */, + DFB603112038AE7B001E70F1 /* TxUtil.cpp */, DFB603012038AE7B001E70F1 /* TxUtil.h */, - DFB6030B2038AE7B001E70F1 /* txWidestringWrapper.h */, - DFB6031B2038AE7B001E70F1 /* mupen64plus-video-glidenhq.mk */, - DFB6030D2038AE7B001E70F1 /* GlideHQ.rc */, - DFB602F72038AE7B001E70F1 /* CMakeLists.txt */, - DFB602F52038AE7B001E70F1 /* gpl-2.0.txt */, - DFB603172038AE7B001E70F1 /* README.txt */, - DFB602EC2038AE7B001E70F1 /* inc */, - DFB603122038AE7B001E70F1 /* lib */, - DFB602F92038AE7B001E70F1 /* test */, ); path = GLideNHQ; sourceTree = ""; @@ -4248,7 +4337,6 @@ isa = PBXGroup; children = ( DFB6032E2038AE7B001E70F1 /* xxhash.h */, - DFB6032F2038AE7B001E70F1 /* xxhash.c */, ); path = xxHash; sourceTree = ""; @@ -4258,7 +4346,6 @@ children = ( DFB603372038AE7C001E70F1 /* CommonAPIImpl_windows.cpp */, DFB603382038AE7C001E70F1 /* GLideN64_windows.cpp */, - DFB603392038AE7C001E70F1 /* Config_windows.cpp */, DFB6033A2038AE7C001E70F1 /* GLideN64_windows.h */, DFB6033B2038AE7C001E70F1 /* ZilmarAPIImpl_windows.cpp */, ); @@ -4269,20 +4356,20 @@ isa = PBXGroup; children = ( DFB603462038AE7C001E70F1 /* ColorBufferReader.cpp */, - DFB603452038AE7C001E70F1 /* ColorBufferReader.h */, DFB603842038AE7C001E70F1 /* CombinerProgram.cpp */, - DFB603822038AE7C001E70F1 /* CombinerProgram.h */, DFB603412038AE7C001E70F1 /* Context.cpp */, + DFB6033F2038AE7C001E70F1 /* ObjectHandle.cpp */, + DFB603452038AE7C001E70F1 /* ColorBufferReader.h */, + DFB603822038AE7C001E70F1 /* CombinerProgram.h */, DFB603432038AE7C001E70F1 /* Context.h */, DFB6033E2038AE7C001E70F1 /* ContextImpl.h */, DFB603442038AE7C001E70F1 /* FramebufferTextureFormats.h */, - DFB6033F2038AE7C001E70F1 /* ObjectHandle.cpp */, DFB603832038AE7C001E70F1 /* ObjectHandle.h */, - DFB603492038AE7C001E70F1 /* OpenGLContext */, DFB603402038AE7C001E70F1 /* Parameter.h */, DFB603472038AE7C001E70F1 /* Parameters.h */, DFB603482038AE7C001E70F1 /* PixelBuffer.h */, DFB603422038AE7C001E70F1 /* ShaderProgram.h */, + DFB603492038AE7C001E70F1 /* OpenGLContext */, ); path = Graphics; sourceTree = ""; @@ -4290,11 +4377,12 @@ DFB603492038AE7C001E70F1 /* OpenGLContext */ = { isa = PBXGroup; children = ( - DFB6037E2038AE7C001E70F1 /* GLFunctions.cpp */, - DFB603762038AE7C001E70F1 /* GLFunctions.h */, DFB603582038AE7C001E70F1 /* GLSL */, DFB6036F2038AE7C001E70F1 /* GraphicBufferPrivateApi */, DFB6034A2038AE7C001E70F1 /* mupen64plus */, + B39EF6152740FA7000EAD1F9 /* ThreadedOpenGl */, + DFB6037E2038AE7C001E70F1 /* GLFunctions.cpp */, + DFB603762038AE7C001E70F1 /* GLFunctions.h */, DFB603542038AE7C001E70F1 /* opengl_Attributes.cpp */, DFB603552038AE7C001E70F1 /* opengl_Attributes.h */, DFB603792038AE7C001E70F1 /* opengl_BufferedDrawer.cpp */, @@ -4311,7 +4399,7 @@ DFB603812038AE7C001E70F1 /* opengl_ColorBufferReaderWithPixelBuffer.h */, DFB603802038AE7C001E70F1 /* opengl_ColorBufferReaderWithReadPixels.cpp */, DFB603752038AE7C001E70F1 /* opengl_ColorBufferReaderWithReadPixels.h */, - DFB6034E2038AE7C001E70F1 /* opengl_ContextImpl.cpp */, + B39EF6092740F64000EAD1F9 /* opengl_ContextImpl.cpp */, DFB6036B2038AE7C001E70F1 /* opengl_ContextImpl.h */, DFB6037D2038AE7C001E70F1 /* opengl_GLInfo.cpp */, DFB6036E2038AE7C001E70F1 /* opengl_GLInfo.h */, @@ -4343,17 +4431,29 @@ DFB6035E2038AE7C001E70F1 /* glsl_CombinerInputs.h */, DFB6035D2038AE7C001E70F1 /* glsl_CombinerProgramBuilder.cpp */, DFB6035A2038AE7C001E70F1 /* glsl_CombinerProgramBuilder.h */, + B39EF6472740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderAccurate.cpp */, + B39EF6462740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderAccurate.h */, + B39EF6492740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderCommon.cpp */, + B39EF64B2740FE8F00EAD1F9 /* glsl_CombinerProgramBuilderCommon.h */, + B39EF6482740FE8E00EAD1F9 /* glsl_CombinerProgramBuilderFast.cpp */, + B39EF6512740FE8F00EAD1F9 /* glsl_CombinerProgramBuilderFast.h */, DFB6035B2038AE7C001E70F1 /* glsl_CombinerProgramImpl.cpp */, DFB603632038AE7C001E70F1 /* glsl_CombinerProgramImpl.h */, DFB603612038AE7C001E70F1 /* glsl_CombinerProgramUniformFactory.cpp */, DFB603592038AE7C001E70F1 /* glsl_CombinerProgramUniformFactory.h */, + B39EF6502740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.cpp */, + B39EF64F2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.h */, + B39EF64A2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.cpp */, + B39EF64C2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.h */, + B39EF64D2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.cpp */, + B39EF64E2740FE8F00EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.h */, + B3C3F46E21A9CBFB00EFB09C /* glsl_FXAA.cpp */, + B3C3F46D21A9CBFB00EFB09C /* glsl_FXAA.h */, DFB603672038AE7C001E70F1 /* glsl_ShaderPart.h */, DFB603652038AE7C001E70F1 /* glsl_ShaderStorage.cpp */, DFB603642038AE7C001E70F1 /* glsl_ShaderStorage.h */, DFB6035C2038AE7C001E70F1 /* glsl_SpecialShadersFactory.cpp */, DFB603622038AE7C001E70F1 /* glsl_SpecialShadersFactory.h */, - B3C3F46E21A9CBFB00EFB09C /* glsl_FXAA.cpp */, - B3C3F46D21A9CBFB00EFB09C /* glsl_FXAA.h */, DFB603662038AE7C001E70F1 /* glsl_Utils.cpp */, DFB603602038AE7C001E70F1 /* glsl_Utils.h */, ); @@ -4403,7 +4503,13 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + B39EF5C82740DF8F00EAD1F9 /* is_viewer.h in Headers */, + B39EF5BE2740DF5C00EAD1F9 /* disk.h in Headers */, + B39EF5BC2740DF5C00EAD1F9 /* dd_controller.h in Headers */, + B39EF5CE2740DFD400EAD1F9 /* biopak.h in Headers */, + B39EF5782740DB7D00EAD1F9 /* netplay.h in Headers */, B3B3B8581DECE9E100602746 /* MupenGameCore.h in Headers */, + B39EF5D82740E23D00EAD1F9 /* video_capture_backend.h in Headers */, B3B3B8A01DED04CE00602746 /* PVMupen64Plus.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4420,7 +4526,13 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + B39EF5C92740DF8F00EAD1F9 /* is_viewer.h in Headers */, + B39EF5BF2740DF5C00EAD1F9 /* disk.h in Headers */, + B39EF5BD2740DF5C00EAD1F9 /* dd_controller.h in Headers */, + B39EF5CF2740DFD400EAD1F9 /* biopak.h in Headers */, + B39EF5792740DB7D00EAD1F9 /* netplay.h in Headers */, B3B3B9001DED130B00602746 /* MupenGameCore.h in Headers */, + B39EF5D92740E23D00EAD1F9 /* video_capture_backend.h in Headers */, B3B3B9021DED130B00602746 /* PVMupen64Plus.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -4481,6 +4593,7 @@ DFB604592038BAB8001E70F1 /* DepthBufferToRDRAM.h in Headers */, DFB605882038BCF1001E70F1 /* ftmemory.h in Headers */, DFB6043B2038BA86001E70F1 /* SoftwareRender.h in Headers */, + B39EF6132740F92600EAD1F9 /* TxHiResLoader.h in Headers */, DFB606092038BD28001E70F1 /* glext.h in Headers */, B3C3F43121A9CBAA00EFB09C /* ZSortBOSS.h in Headers */, DFB604752038BB0B001E70F1 /* Context.h in Headers */, @@ -4493,10 +4606,10 @@ DFB6056E2038BCE7001E70F1 /* ftmodapi.h in Headers */, DFB6043F2038BA86001E70F1 /* TextDrawer.h in Headers */, DFB605A52038BCFD001E70F1 /* svpfr.h in Headers */, + B39EF65C2740FE9100EAD1F9 /* glsl_CombinerProgramBuilderCommon.h in Headers */, DFB605452038BCD0001E70F1 /* m64p_types.h in Headers */, DFB604972038BB5E001E70F1 /* opengl_GLInfo.h in Headers */, DFB6047D2038BB0B001E70F1 /* ShaderProgram.h in Headers */, - DFB6040F2038BA1B001E70F1 /* Keys.h in Headers */, DFB6047C2038BB0B001E70F1 /* PixelBuffer.h in Headers */, DFB605DE2038BD0F001E70F1 /* ftmoderr.h in Headers */, DFB604CD2038BBEC001E70F1 /* glsl_ShaderPart.h in Headers */, @@ -4509,6 +4622,7 @@ B3C3F41321A9CBAA00EFB09C /* F3DEX2CBFD.h in Headers */, DFB6059F2038BCFD001E70F1 /* svttcmap.h in Headers */, DFB605AC2038BCFD001E70F1 /* svttglyf.h in Headers */, + B39EF65E2740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.h in Headers */, DFB604902038BB5E001E70F1 /* opengl_BufferManipulationObjectFactory.h in Headers */, B3C3F44921A9CBAA00EFB09C /* F3DZEX2.h in Headers */, DFB6057F2038BCF1001E70F1 /* pshints.h in Headers */, @@ -4517,6 +4631,7 @@ DFB605AB2038BCFD001E70F1 /* svcid.h in Headers */, DFB605D82038BD0F001E70F1 /* ftsystem.h in Headers */, DFB604032038BA09001E70F1 /* GraphicsDrawer.h in Headers */, + B39EF6642740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.h in Headers */, DFB604012038BA09001E70F1 /* GLideN64.h in Headers */, DFB605422038BCD0001E70F1 /* m64p_vidext.h in Headers */, DFB604932038BB5E001E70F1 /* opengl_Attributes.h in Headers */, @@ -4538,21 +4653,24 @@ DFB605702038BCE7001E70F1 /* ttunpat.h in Headers */, DFB6040D2038BA1B001E70F1 /* gSP.h in Headers */, DFB604292038BA67001E70F1 /* PostProcessor.h in Headers */, + B39EF62B2740FA7000EAD1F9 /* RingBufferPool.h in Headers */, DFB605802038BCF1001E70F1 /* ftdriver.h in Headers */, DFB604792038BB0B001E70F1 /* ObjectHandle.h in Headers */, DFB604272038BA67001E70F1 /* PluginAPI.h in Headers */, - DFB605472038BCD0001E70F1 /* vidext.h in Headers */, DFB605A02038BCFD001E70F1 /* svotval.h in Headers */, DFB604952038BB5E001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */, B3C3F43321A9CBAA00EFB09C /* T3DUX.h in Headers */, + B39EF6522740FE9100EAD1F9 /* glsl_CombinerProgramBuilderAccurate.h in Headers */, DFB606082038BD28001E70F1 /* wglext.h in Headers */, DFB603DF2038B9CF001E70F1 /* DebugDump.h in Headers */, DFB605DD2038BD0F001E70F1 /* ftglyph.h in Headers */, + B39EF6372740FA7000EAD1F9 /* opengl_WrappedFunctions.h in Headers */, B3C3F46721A9CBAA00EFB09C /* F3DEX.h in Headers */, DFB605D12038BD0F001E70F1 /* ttnameid.h in Headers */, DFB603C12038B6FE001E70F1 /* 3DMath.h in Headers */, DFB6055D2038BCDB001E70F1 /* ftmm.h in Headers */, B3C3F41D21A9CBAA00EFB09C /* F5Indi_Naboo.h in Headers */, + B39EF6442740FE2700EAD1F9 /* BlueNoiseTexture.h in Headers */, DFB605C62038BD0F001E70F1 /* ftsynth.h in Headers */, DFB605442038BCD0001E70F1 /* callbacks.h in Headers */, DFB605652038BCE2001E70F1 /* ftheader.h in Headers */, @@ -4560,10 +4678,13 @@ DFB604922038BB5E001E70F1 /* opengl_GraphicsDrawer.h in Headers */, DFB606132038BD4E001E70F1 /* GLideN64_mupenplus.h in Headers */, DFB6055B2038BCDB001E70F1 /* ftsizes.h in Headers */, + B39EF6332740FA7000EAD1F9 /* opengl_Wrapper.h in Headers */, DFB605432038BCD0001E70F1 /* m64p_common.h in Headers */, DFB605582038BCDB001E70F1 /* ftxf86.h in Headers */, DFB604962038BB5E001E70F1 /* opengl_ContextImpl.h in Headers */, DFB605E12038BD0F001E70F1 /* ftmac.h in Headers */, + B39EF6272740FA7000EAD1F9 /* readerwriterqueue.h in Headers */, + B39EF6622740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.h in Headers */, DFB605E02038BD0F001E70F1 /* ftlist.h in Headers */, B3C3F43921A9CBAA00EFB09C /* F3D.h in Headers */, B3C3F45921A9CBAA00EFB09C /* Turbo3D.h in Headers */, @@ -4593,6 +4714,7 @@ DFB605682038BCE2001E70F1 /* ftmodule.h in Headers */, DFB605852038BCF1001E70F1 /* ftobjs.h in Headers */, DFB605C52038BD0F001E70F1 /* ftadvanc.h in Headers */, + B39EF6392740FA7000EAD1F9 /* BlockingQueue.h in Headers */, DFB603FD2038BA09001E70F1 /* GBI.h in Headers */, DFB6056F2038BCE7001E70F1 /* ftbzip2.h in Headers */, DFB604C82038BBEC001E70F1 /* glsl_CombinerInputs.h in Headers */, @@ -4634,13 +4756,15 @@ DFB604732038BB0A001E70F1 /* CombinerProgram.h in Headers */, B3C3F41721A9CBAA00EFB09C /* L3DEX2.h in Headers */, DFB605C02038BD04001E70F1 /* ftrfork.h in Headers */, + B39EF6312740FA7000EAD1F9 /* opengl_ObjectPool.h in Headers */, B3C3F44F21A9CBAA00EFB09C /* F3DGOLDEN.h in Headers */, DFB604692038BAD7001E70F1 /* DepthBufferRender.h in Headers */, B35B31C8206C912C00AEAF88 /* Types.h in Headers */, + B39EF62D2740FA7000EAD1F9 /* opengl_Command.h in Headers */, B3C3F42521A9CBAA00EFB09C /* F3DBETA.h in Headers */, DFB605CD2038BD0F001E70F1 /* freetype.h in Headers */, + B39EF62F2740FA7000EAD1F9 /* atomicops.h in Headers */, DFB604C92038BBEC001E70F1 /* glsl_Utils.h in Headers */, - DFB605482038BCD0001E70F1 /* vidext_sdl2_compat.h in Headers */, DFB605E32038BD0F001E70F1 /* ftautoh.h in Headers */, DFB605892038BCF1001E70F1 /* ftgloadr.h in Headers */, DFB6049B2038BB5E001E70F1 /* opengl_BufferedDrawer.h in Headers */, @@ -4649,6 +4773,7 @@ B3C3F45D21A9CBAA00EFB09C /* F3DFLX2.h in Headers */, DFB605D72038BD0F001E70F1 /* ftlzw.h in Headers */, DFB605A72038BCFD001E70F1 /* svxf86nm.h in Headers */, + B39EF6682740FE9100EAD1F9 /* glsl_CombinerProgramBuilderFast.h in Headers */, DFB604992038BB5E001E70F1 /* GLFunctions.h in Headers */, DFB603C92038B70E001E70F1 /* CombinerKey.h in Headers */, DFB604562038BAB8001E70F1 /* RDRAMtoColorBuffer.h in Headers */, @@ -4667,6 +4792,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + B39EF6652740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.h in Headers */, DFB603B32038B582001E70F1 /* PVMupen64PlusVideoGlideN64.h in Headers */, DFB604392038BA68001E70F1 /* RSP.h in Headers */, DFB605AE2038BCFE001E70F1 /* svprop.h in Headers */, @@ -4706,12 +4832,13 @@ DFB603F82038B9F0001E70F1 /* FrameBuffer.h in Headers */, DFB605742038BCE8001E70F1 /* ftmodapi.h in Headers */, DFB604492038BA87001E70F1 /* TextDrawer.h in Headers */, + B39EF6282740FA7000EAD1F9 /* readerwriterqueue.h in Headers */, + B39EF6322740FA7000EAD1F9 /* opengl_ObjectPool.h in Headers */, DFB605B72038BCFE001E70F1 /* svpfr.h in Headers */, DFB605512038BCD1001E70F1 /* m64p_types.h in Headers */, DFB604A62038BB5E001E70F1 /* opengl_GLInfo.h in Headers */, DFB6048B2038BB0B001E70F1 /* ShaderProgram.h in Headers */, B3C3F45A21A9CBAA00EFB09C /* Turbo3D.h in Headers */, - DFB604152038BA1B001E70F1 /* Keys.h in Headers */, DFB6048A2038BB0B001E70F1 /* PixelBuffer.h in Headers */, DFB606002038BD10001E70F1 /* ftmoderr.h in Headers */, DFB604D52038BBEC001E70F1 /* glsl_ShaderPart.h in Headers */, @@ -4730,6 +4857,7 @@ DFB604632038BAB8001E70F1 /* ColorBufferToRDRAM.h in Headers */, DFB605BD2038BCFE001E70F1 /* svcid.h in Headers */, DFB605FA2038BD10001E70F1 /* ftsystem.h in Headers */, + B39EF6692740FE9100EAD1F9 /* glsl_CombinerProgramBuilderFast.h in Headers */, DFB6040B2038BA09001E70F1 /* GraphicsDrawer.h in Headers */, DFB604092038BA09001E70F1 /* GLideN64.h in Headers */, DFB6054E2038BCD1001E70F1 /* m64p_vidext.h in Headers */, @@ -4743,9 +4871,11 @@ DFB6056B2038BCE2001E70F1 /* ftconfig.h in Headers */, DFB605692038BCE2001E70F1 /* ftstdlib.h in Headers */, B3C3F45021A9CBAA00EFB09C /* F3DGOLDEN.h in Headers */, + B39EF62C2740FA7000EAD1F9 /* RingBufferPool.h in Headers */, DFB604CE2038BBEC001E70F1 /* glsl_CombinerProgramUniformFactory.h in Headers */, B3C3F43621A9CBAA00EFB09C /* S2DEX2.h in Headers */, DFB605BF2038BCFE001E70F1 /* svpostnm.h in Headers */, + B39EF6302740FA7000EAD1F9 /* atomicops.h in Headers */, DFB603DC2038B9C0001E70F1 /* CRC.h in Headers */, DFB604AB2038BB5E001E70F1 /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */, DFB605932038BCF2001E70F1 /* ftstream.h in Headers */, @@ -4760,7 +4890,6 @@ DFB605912038BCF2001E70F1 /* ftdriver.h in Headers */, DFB604872038BB0B001E70F1 /* ObjectHandle.h in Headers */, DFB604322038BA68001E70F1 /* PluginAPI.h in Headers */, - DFB605532038BCD1001E70F1 /* vidext.h in Headers */, DFB605B22038BCFE001E70F1 /* svotval.h in Headers */, DFB604A42038BB5E001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */, DFB6060C2038BD29001E70F1 /* wglext.h in Headers */, @@ -4778,6 +4907,7 @@ B3C3F42421A9CBAA00EFB09C /* F3DTEXA.h in Headers */, DFB606172038BD4F001E70F1 /* GLideN64_mupenplus.h in Headers */, DFB605612038BCDC001E70F1 /* ftsizes.h in Headers */, + B39EF65D2740FE9100EAD1F9 /* glsl_CombinerProgramBuilderCommon.h in Headers */, DFB6054F2038BCD1001E70F1 /* m64p_common.h in Headers */, B3C3F42221A9CBAA00EFB09C /* F3DSETA.h in Headers */, DFB6055E2038BCDC001E70F1 /* ftxf86.h in Headers */, @@ -4785,9 +4915,12 @@ DFB606032038BD10001E70F1 /* ftmac.h in Headers */, DFB606022038BD10001E70F1 /* ftlist.h in Headers */, DFB604A92038BB5E001E70F1 /* opengl_TextureManipulationObjectFactory.h in Headers */, + B39EF65F2740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.h in Headers */, + B39EF6532740FE9100EAD1F9 /* glsl_CombinerProgramBuilderAccurate.h in Headers */, DFB6055F2038BCDC001E70F1 /* ftsnames.h in Headers */, DFB604512038BA95001E70F1 /* VI.h in Headers */, DFB605952038BCF2001E70F1 /* ftvalid.h in Headers */, + B39EF63A2740FA7000EAD1F9 /* BlockingQueue.h in Headers */, DFB605F72038BD10001E70F1 /* ftchapters.h in Headers */, DFB605B62038BCFE001E70F1 /* svpsinfo.h in Headers */, DFB6044D2038BA87001E70F1 /* Textures.h in Headers */, @@ -4812,6 +4945,7 @@ DFB605E72038BD0F001E70F1 /* ftadvanc.h in Headers */, DFB604052038BA09001E70F1 /* GBI.h in Headers */, DFB605752038BCE8001E70F1 /* ftbzip2.h in Headers */, + B39EF6382740FA7000EAD1F9 /* opengl_WrappedFunctions.h in Headers */, DFB604D02038BBEC001E70F1 /* glsl_CombinerInputs.h in Headers */, DFB604D42038BBEC001E70F1 /* glsl_ShaderStorage.h in Headers */, DFB605F42038BD10001E70F1 /* ftpfr.h in Headers */, @@ -4824,6 +4958,8 @@ DFB605EA2038BD0F001E70F1 /* ftgasp.h in Headers */, DFB604212038BA3D001E70F1 /* NoiseTexture.h in Headers */, DFB6049E2038BB5E001E70F1 /* opengl_ColorBufferReaderWithEGLImage.h in Headers */, + B39EF6142740F92600EAD1F9 /* TxHiResLoader.h in Headers */, + B39EF6632740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.h in Headers */, DFB6047F2038BB0B001E70F1 /* ColorBufferReader.h in Headers */, DFB604472038BA87001E70F1 /* TexrectDrawer.h in Headers */, B3C3F41E21A9CBAA00EFB09C /* F5Indi_Naboo.h in Headers */, @@ -4850,17 +4986,19 @@ DFB6046D2038BAD7001E70F1 /* DepthBufferRender.h in Headers */, DFB605EF2038BD0F001E70F1 /* freetype.h in Headers */, DFB604D12038BBEC001E70F1 /* glsl_Utils.h in Headers */, - DFB605542038BCD1001E70F1 /* vidext_sdl2_compat.h in Headers */, DFB606052038BD10001E70F1 /* ftautoh.h in Headers */, DFB6059A2038BCF2001E70F1 /* ftgloadr.h in Headers */, DFB604AA2038BB5E001E70F1 /* opengl_BufferedDrawer.h in Headers */, DFB605792038BCE8001E70F1 /* ftgzip.h in Headers */, B3C3F46621A9CBAA00EFB09C /* S2DEX.h in Headers */, + B39EF6452740FE2700EAD1F9 /* BlueNoiseTexture.h in Headers */, DFB604302038BA68001E70F1 /* Performance.h in Headers */, DFB605F92038BD10001E70F1 /* ftlzw.h in Headers */, DFB605B92038BCFE001E70F1 /* svxf86nm.h in Headers */, DFB604A82038BB5E001E70F1 /* GLFunctions.h in Headers */, + B39EF62E2740FA7000EAD1F9 /* opengl_Command.h in Headers */, DFB603CB2038B70E001E70F1 /* CombinerKey.h in Headers */, + B39EF6342740FA7000EAD1F9 /* opengl_Wrapper.h in Headers */, DFB6045D2038BAB8001E70F1 /* RDRAMtoColorBuffer.h in Headers */, DFB604072038BA09001E70F1 /* gDP.h in Headers */, DFB604852038BB0B001E70F1 /* FramebufferTextureFormats.h in Headers */, @@ -4949,6 +5087,8 @@ B37263C526EA1EF000E95488 /* PBXTargetDependency */, B37263C926EA1EF000E95488 /* PBXTargetDependency */, B37263CD26EA1EF000E95488 /* PBXTargetDependency */, + B39EF5A42740DD3900EAD1F9 /* PBXTargetDependency */, + B39EF5B62740DF1500EAD1F9 /* PBXTargetDependency */, ); name = "PVMupen64Plus-iOS"; productName = PVMupen64PlusDynamic; @@ -4972,6 +5112,74 @@ productReference = B3800FF5208522DC00FA03B8 /* libglidenhq-iOS.a */; productType = "com.apple.product-type.library.static"; }; + B39EF5942740DD2700EAD1F9 /* minizip-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = B39EF59B2740DD2700EAD1F9 /* Build configuration list for PBXNativeTarget "minizip-iOS" */; + buildPhases = ( + B39EF5912740DD2700EAD1F9 /* Sources */, + B39EF5922740DD2700EAD1F9 /* Frameworks */, + B39EF5932740DD2700EAD1F9 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "minizip-iOS"; + productName = minizip; + productReference = B39EF5952740DD2700EAD1F9 /* libminizip-iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + B39EF5A52740DEF600EAD1F9 /* md5-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = B39EF5AE2740DEF600EAD1F9 /* Build configuration list for PBXNativeTarget "md5-iOS" */; + buildPhases = ( + B39EF5A62740DEF600EAD1F9 /* Sources */, + B39EF5AB2740DEF600EAD1F9 /* Frameworks */, + B39EF5AC2740DEF600EAD1F9 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "md5-iOS"; + productName = minizip; + productReference = B39EF5B22740DEF600EAD1F9 /* libmd5-iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + B39EF5E62740EF5F00EAD1F9 /* minizip-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = B39EF5EF2740EF5F00EAD1F9 /* Build configuration list for PBXNativeTarget "minizip-tvOS" */; + buildPhases = ( + B39EF5E72740EF5F00EAD1F9 /* Sources */, + B39EF5EC2740EF5F00EAD1F9 /* Frameworks */, + B39EF5ED2740EF5F00EAD1F9 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "minizip-tvOS"; + productName = minizip; + productReference = B39EF5F32740EF6000EAD1F9 /* libminizip-tvOS.a */; + productType = "com.apple.product-type.library.static"; + }; + B39EF5F42740EF6800EAD1F9 /* md5-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = B39EF5FA2740EF6800EAD1F9 /* Build configuration list for PBXNativeTarget "md5-tvOS" */; + buildPhases = ( + B39EF5F52740EF6800EAD1F9 /* Sources */, + B39EF5F72740EF6800EAD1F9 /* Frameworks */, + B39EF5F82740EF6800EAD1F9 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "md5-tvOS"; + productName = minizip; + productReference = B39EF5FE2740EF6800EAD1F9 /* libmd5-tvOS.a */; + productType = "com.apple.product-type.library.static"; + }; B3AF702121916E60000FA7F9 /* png-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = B3AF703621916E60000FA7F9 /* Build configuration list for PBXNativeTarget "png-tvOS" */; @@ -5040,6 +5248,8 @@ B37263D626EA1F1C00E95488 /* PBXTargetDependency */, B37263DA26EA1F1C00E95488 /* PBXTargetDependency */, B37263DE26EA1F1C00E95488 /* PBXTargetDependency */, + B39EF6012740EF9800EAD1F9 /* PBXTargetDependency */, + B39EF6042740EF9800EAD1F9 /* PBXTargetDependency */, ); name = "PVMupen64Plus-tvOS"; productName = PVMupen64PlusDynamic; @@ -5170,6 +5380,9 @@ CreatedOnToolsVersion = 9.3; ProvisioningStyle = Automatic; }; + B39EF5942740DD2700EAD1F9 = { + CreatedOnToolsVersion = 13.0; + }; B3B3B85F1DECEA9100602746 = { CreatedOnToolsVersion = 8.1; }; @@ -5207,6 +5420,10 @@ B3AF702121916E60000FA7F9 /* png-tvOS */, B3800FF4208522DC00FA03B8 /* glidenhq-iOS */, B3AF703A21916E87000FA7F9 /* glidenhq-tvOS */, + B39EF5942740DD2700EAD1F9 /* minizip-iOS */, + B39EF5A52740DEF600EAD1F9 /* md5-iOS */, + B39EF5E62740EF5F00EAD1F9 /* minizip-tvOS */, + B39EF5F42740EF6800EAD1F9 /* md5-tvOS */, ); }; /* End PBXProject section */ @@ -5392,19 +5609,20 @@ B3AE1DC1207311E900AD06D4 /* vidext.m in Sources */, B3AE1D8B207311E900AD06D4 /* eventloop.m in Sources */, B3AE1DC8207312E000AD06D4 /* main.m in Sources */, + B39EF5C02740DF5C00EAD1F9 /* dd_controller.c in Sources */, B3AE1DA6207311E900AD06D4 /* SDLStubs.m in Sources */, B37EFF861C72F47000857158 /* MupenGameCore.m in Sources */, - B3AE1D96207311E900AD06D4 /* md5.c in Sources */, B3AE1DA9207311E900AD06D4 /* cart.c in Sources */, B3AE1DBD207311E900AD06D4 /* callbacks.c in Sources */, B3AE1D92207311E900AD06D4 /* flashram.c in Sources */, + B39EF5C22740DF5C00EAD1F9 /* disk.c in Sources */, B3AE1D89207311E900AD06D4 /* pure_interp.c in Sources */, B3AE1D7F207311E900AD06D4 /* main.c in Sources */, B3AE1DCB207316DF00AD06D4 /* cp0.c in Sources */, B3AE1D8A207311E900AD06D4 /* common.c in Sources */, B3AE1DCD207317D500AD06D4 /* cached_interp.c in Sources */, B3AE1D90207311E900AD06D4 /* lirc.c in Sources */, - B3AE1D86207311E900AD06D4 /* xxhash.c in Sources */, + B39EF5DC2740E29B00EAD1F9 /* dummy_video_capture.c in Sources */, B3AE1DA2207311E900AD06D4 /* af_rtc.c in Sources */, B3AE1D93207311E900AD06D4 /* memory.c in Sources */, B3AE1D9A207311E900AD06D4 /* interrupt.c in Sources */, @@ -5419,23 +5637,22 @@ B3AE1DA3207311E900AD06D4 /* audio_plugin_compat.c in Sources */, B3AE1DAD207311E900AD06D4 /* vi_controller.c in Sources */, B3AE1D98207311E900AD06D4 /* rom.c in Sources */, - B3AE1DD620732E5200AD06D4 /* zip.c in Sources */, + B39EF5CC2740DFD400EAD1F9 /* biopak.c in Sources */, B3AE1DCA2073153A00AD06D4 /* frontend.c in Sources */, B369B0DF21A3D7F90064EDCA /* MupenOptions.swift in Sources */, B3AE1DBB207311E900AD06D4 /* dummy_audio.c in Sources */, B3AE1DA5207311E900AD06D4 /* config.c in Sources */, B3AE1DBC207311E900AD06D4 /* rsp_core.c in Sources */, B3AE1D9F207311E900AD06D4 /* eeprom.c in Sources */, - B3AE1DD520732E5200AD06D4 /* unzip.c in Sources */, B3AE1DB8207311E900AD06D4 /* rumblepak.c in Sources */, B3AE1DA7207311E900AD06D4 /* input_plugin_compat.c in Sources */, B3AE1D84207311E900AD06D4 /* dynamiclib_unix.c in Sources */, B3AE1DAE207311E900AD06D4 /* sram.c in Sources */, - B3AE1DD720732E5200AD06D4 /* ioapi.c in Sources */, B3AE1D94207311E900AD06D4 /* files_macos.c in Sources */, B3AE1D83207311E900AD06D4 /* savestates.c in Sources */, B3AE1DAB207311E900AD06D4 /* dummy_input.c in Sources */, B3AE1D81207311E900AD06D4 /* bootrom_hle.c in Sources */, + B39EF5D62740E23D00EAD1F9 /* video_capture_backend.c in Sources */, B3AE1DBF207311E900AD06D4 /* ri_controller.c in Sources */, B3AE1D88207311E900AD06D4 /* cheat.c in Sources */, B3AE1DAF207311E900AD06D4 /* util.c in Sources */, @@ -5451,6 +5668,7 @@ B3AE1DB1207311E900AD06D4 /* debugger.c in Sources */, B3AE1DCC207317BE00AD06D4 /* idec.c in Sources */, B3AE1DAA207311E900AD06D4 /* sdl_key_converter.c in Sources */, + B39EF5C62740DF8F00EAD1F9 /* is_viewer.c in Sources */, B3AE1D7D207311E900AD06D4 /* cp1.c in Sources */, B3AE1DC6207311E900AD06D4 /* transferpak.c in Sources */, B3AE1DB7207311E900AD06D4 /* clock_ctime_plus_delta.c in Sources */, @@ -5472,7 +5690,6 @@ B3800FFF2085232500FA03B8 /* TextureFilters_hq2x.cpp in Sources */, B380100B2085234000FA03B8 /* TxUtil.cpp in Sources */, B38010052085234000FA03B8 /* TxFilterExport.cpp in Sources */, - B380100C2085234000FA03B8 /* txWidestringWrapper.cpp in Sources */, B38010002085232500FA03B8 /* TextureFilters_hq4x.cpp in Sources */, B38010022085232500FA03B8 /* TextureFilters.cpp in Sources */, B3800FFE2085232500FA03B8 /* TextureFilters_2xsai.cpp in Sources */, @@ -5487,6 +5704,42 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B39EF5912740DD2700EAD1F9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B39EF5A02740DD2E00EAD1F9 /* unzip.c in Sources */, + B39EF5A12740DD2E00EAD1F9 /* zip.c in Sources */, + B39EF59F2740DD2E00EAD1F9 /* ioapi.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5A62740DEF600EAD1F9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B39EF5B32740DF0B00EAD1F9 /* md5.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5E72740EF5F00EAD1F9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B39EF5E82740EF5F00EAD1F9 /* unzip.c in Sources */, + B39EF5E92740EF5F00EAD1F9 /* zip.c in Sources */, + B39EF5EA2740EF5F00EAD1F9 /* ioapi.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B39EF5F52740EF6800EAD1F9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B39EF5F62740EF6800EAD1F9 /* md5.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; B3AF702221916E60000FA7F9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -5519,7 +5772,6 @@ B3AF703D21916E87000FA7F9 /* TextureFilters_hq2x.cpp in Sources */, B3AF703E21916E87000FA7F9 /* TxUtil.cpp in Sources */, B3AF703F21916E87000FA7F9 /* TxFilterExport.cpp in Sources */, - B3AF704021916E87000FA7F9 /* txWidestringWrapper.cpp in Sources */, B3AF704121916E87000FA7F9 /* TextureFilters_hq4x.cpp in Sources */, B3AF704221916E87000FA7F9 /* TextureFilters.cpp in Sources */, B3AF704321916E87000FA7F9 /* TextureFilters_2xsai.cpp in Sources */, @@ -5538,6 +5790,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + B39EF6072740F38800EAD1F9 /* hvqm.c in Sources */, B3AE1F4420733D6000AD06D4 /* alist_audio.c in Sources */, B3AE1F4520733D6000AD06D4 /* alist_naudio.c in Sources */, B3AE1F4620733D6000AD06D4 /* alist_nead.c in Sources */, @@ -5559,23 +5812,24 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B3AE1E022073378600AD06D4 /* ioapi.c in Sources */, B3AE1DED2073378600AD06D4 /* plugin.c in Sources */, - B3AE1DDE2073378600AD06D4 /* md5.c in Sources */, B3AE1E1B2073378600AD06D4 /* game_controller.c in Sources */, B3AE1E1F2073378600AD06D4 /* mempak.c in Sources */, B3AE1E042073378600AD06D4 /* savestates.c in Sources */, + B39EF5C12740DF5C00EAD1F9 /* dd_controller.c in Sources */, B3AE1DE72073378600AD06D4 /* lirc.c in Sources */, B3AE1DDF2073378600AD06D4 /* cart.c in Sources */, B3AE1DD82073378600AD06D4 /* screenshot.m in Sources */, B3AE1DF82073378600AD06D4 /* frontend.c in Sources */, B3AE1DE62073378600AD06D4 /* cached_interp.c in Sources */, + B39EF5C32740DF5C00EAD1F9 /* disk.c in Sources */, B3AE1E1E2073378600AD06D4 /* rdram.c in Sources */, B3AE1DD92073378600AD06D4 /* vidext.m in Sources */, B3AE1DF22073378600AD06D4 /* dummy_rsp.c in Sources */, B3AE1E052073378600AD06D4 /* dummy_input.c in Sources */, B3AE1E162073378600AD06D4 /* cp1.c in Sources */, B3AE1DFA2073378600AD06D4 /* config.c in Sources */, + B39EF5DD2740E29B00EAD1F9 /* dummy_video_capture.c in Sources */, B3AE1E0A2073378600AD06D4 /* gb_cart.c in Sources */, B3AE1DFE2073378600AD06D4 /* rumblepak.c in Sources */, B3AE1E082073378600AD06D4 /* cheat.c in Sources */, @@ -5583,8 +5837,6 @@ B3AE1E0C2073378600AD06D4 /* cart_rom.c in Sources */, B3AE1E0D2073378600AD06D4 /* tlb.c in Sources */, B3AE1DF42073378600AD06D4 /* audio_plugin_compat.c in Sources */, - B3AE1DF72073378600AD06D4 /* zip.c in Sources */, - B3AE1DFD2073378600AD06D4 /* unzip.c in Sources */, B3AE1DE02073378600AD06D4 /* callbacks.c in Sources */, B3AE1DDD2073378600AD06D4 /* MupenGameCore.m in Sources */, B3AE1E132073378600AD06D4 /* debugger.c in Sources */, @@ -5592,6 +5844,7 @@ B3AE1DEF2073378600AD06D4 /* rdp_core.c in Sources */, B3AE1DF32073378600AD06D4 /* si_controller.c in Sources */, B3AE1E002073378600AD06D4 /* dynamiclib_unix.c in Sources */, + B39EF5CD2740DFD400EAD1F9 /* biopak.c in Sources */, B369B0E021A3D7FB0064EDCA /* MupenOptions.swift in Sources */, B3AE1DFC2073378600AD06D4 /* eeprom.c in Sources */, B3AE1E0F2073378600AD06D4 /* workqueue.c in Sources */, @@ -5606,12 +5859,12 @@ B3AE1DEE2073378600AD06D4 /* device.c in Sources */, B3AE1E0B2073378600AD06D4 /* mbc3_rtc.c in Sources */, B3AE1DDA2073378600AD06D4 /* eventloop.m in Sources */, + B39EF5D72740E23D00EAD1F9 /* video_capture_backend.c in Sources */, B3AE1DE52073378600AD06D4 /* common.c in Sources */, B3AE1E142073378600AD06D4 /* idec.c in Sources */, B3AE1E112073378600AD06D4 /* fb.c in Sources */, B3AE1E192073378600AD06D4 /* n64_cic_nus_6105.c in Sources */, B3AE1DE32073378600AD06D4 /* main.c in Sources */, - B3AE1DE82073378600AD06D4 /* xxhash.c in Sources */, B3AE1DE42073378600AD06D4 /* cp0.c in Sources */, B3AE1E1A2073378600AD06D4 /* r4300_core.c in Sources */, B3AE1DF02073378600AD06D4 /* file_storage.c in Sources */, @@ -5622,6 +5875,7 @@ B3AE1E122073378600AD06D4 /* pif.c in Sources */, B3AE1DF92073378600AD06D4 /* dummy_audio.c in Sources */, B3AE1DEA2073378600AD06D4 /* memory.c in Sources */, + B39EF5C72740DF8F00EAD1F9 /* is_viewer.c in Sources */, B3AE1DF62073378600AD06D4 /* rom.c in Sources */, B3AE1E102073378600AD06D4 /* pi_controller.c in Sources */, B3AE1DEB2073378600AD06D4 /* interrupt.c in Sources */, @@ -5682,6 +5936,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + B39EF6082740F38800EAD1F9 /* hvqm.c in Sources */, B3AE1F5220733D6700AD06D4 /* alist_audio.c in Sources */, B3AE1F5320733D6700AD06D4 /* alist_naudio.c in Sources */, B3AE1F5420733D6700AD06D4 /* alist_nead.c in Sources */, @@ -5734,19 +5989,22 @@ B3C3F45321A9CBAA00EFB09C /* Turbo3D.cpp in Sources */, DFB604282038BA67001E70F1 /* PostProcessor.cpp in Sources */, B3C3F40B21A9CBAA00EFB09C /* F3DEX2.cpp in Sources */, + B39EF65A2740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.cpp in Sources */, B3C3F45121A9CBAA00EFB09C /* L3DEX2.cpp in Sources */, DFB604742038BB0A001E70F1 /* Context.cpp in Sources */, DFB604722038BB0A001E70F1 /* CombinerProgram.cpp in Sources */, DFB6041A2038BA3C001E70F1 /* NoiseTexture.cpp in Sources */, DFB6044E2038BA94001E70F1 /* VI.cpp in Sources */, DFB604B22038BBD5001E70F1 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */, - DFB604B32038BBD5001E70F1 /* opengl_ContextImpl.cpp in Sources */, DFB604D82038BC0B001E70F1 /* glsl_CombinerProgramImpl.cpp in Sources */, B3C3F47121A9CBFB00EFB09C /* glsl_FXAA.cpp in Sources */, DFB604672038BAD7001E70F1 /* ClipPolygon.cpp in Sources */, DFB604642038BAC2001E70F1 /* RDRAMtoColorBuffer.cpp in Sources */, DFB604182038BA3C001E70F1 /* N64.cpp in Sources */, + B39EF6562740FE9100EAD1F9 /* glsl_CombinerProgramBuilderFast.cpp in Sources */, B3C3F42F21A9CBAA00EFB09C /* F3DPD.cpp in Sources */, + B39EF63B2740FA7000EAD1F9 /* opengl_Command.cpp in Sources */, + B39EF6112740F92600EAD1F9 /* TxHiResNoCache.cpp in Sources */, DFB604B52038BBD5001E70F1 /* opengl_Parameters.cpp in Sources */, DFB6045B2038BAB8001E70F1 /* ColorBufferToRDRAM.cpp in Sources */, DFB604522038BA9D001E70F1 /* ZlutTexture.cpp in Sources */, @@ -5770,16 +6028,21 @@ B3C3F41F21A9CBAA00EFB09C /* F5Rogue.cpp in Sources */, DFB6042A2038BA67001E70F1 /* RDP.cpp in Sources */, DFB603F42038B9F0001E70F1 /* FrameBufferInfo.cpp in Sources */, + B39EF6422740FE2700EAD1F9 /* BlueNoiseTexture.cpp in Sources */, B3C3F42D21A9CBAA00EFB09C /* F3DGOLDEN.cpp in Sources */, DFB603E02038B9CF001E70F1 /* Debugger.cpp in Sources */, DFB604DC2038BC0B001E70F1 /* glsl_Utils.cpp in Sources */, DFB6043C2038BA86001E70F1 /* TexrectDrawer.cpp in Sources */, B3C3F42B21A9CBAA00EFB09C /* F3DZEX2.cpp in Sources */, DFB604B02038BBD5001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */, + B39EF63E2740FDEF00EAD1F9 /* MemoryStatus_mupenplus.cpp in Sources */, B34601D62081333D008C049C /* gliden_osd.cpp in Sources */, B3C3F46121A9CBAA00EFB09C /* L3DEX.cpp in Sources */, B3C3F44721A9CBAA00EFB09C /* S2DEX.cpp in Sources */, + B39EF60F2740F92600EAD1F9 /* TxHiResLoader.cpp in Sources */, DFB604662038BAD7001E70F1 /* DepthBufferRender.cpp in Sources */, + B39EF60A2740F64000EAD1F9 /* opengl_ContextImpl.cpp in Sources */, + B39EF6232740FA7000EAD1F9 /* opengl_WrappedFunctions.cpp in Sources */, DFB603EC2038B9DD001E70F1 /* DisplayWindow.cpp in Sources */, DFB604D72038BC0B001E70F1 /* glsl_CombinerProgramBuilder.cpp in Sources */, B3EA448D206E473300E608F6 /* CRC_OPT.cpp in Sources */, @@ -5787,16 +6050,17 @@ B3C3F45B21A9CBAA00EFB09C /* F3DEX2CBFD.cpp in Sources */, B3CB4B21206E54D20074706B /* Log_ios.mm in Sources */, DFB6046E2038BAE1001E70F1 /* CommonAPIImpl_common.cpp in Sources */, + B39EF6252740FA7000EAD1F9 /* RingBufferPool.cpp in Sources */, B3C3F40921A9CBAA00EFB09C /* F3DFLX2.cpp in Sources */, DFB604702038BB0A001E70F1 /* ColorBufferReader.cpp in Sources */, DFB603FC2038BA09001E70F1 /* GBI.cpp in Sources */, - DFB6040E2038BA1B001E70F1 /* Keys.cpp in Sources */, DFB603DE2038B9CF001E70F1 /* DebugDump.cpp in Sources */, + B39EF6352740FA7000EAD1F9 /* opengl_Wrapper.cpp in Sources */, DFB603D02038B980001E70F1 /* CommonPluginAPI.cpp in Sources */, DFB603F22038B9F0001E70F1 /* FrameBuffer.cpp in Sources */, DFB6043A2038BA86001E70F1 /* SoftwareRender.cpp in Sources */, + B39EF6582740FE9100EAD1F9 /* glsl_CombinerProgramBuilderCommon.cpp in Sources */, DFB606142038BD4E001E70F1 /* MupenPlusAPIImpl.cpp in Sources */, - B35B31CE206CA72800AEAF88 /* xxhash.c in Sources */, DFB604D62038BC0B001E70F1 /* glsl_CombinerInputs.cpp in Sources */, B3C3F41121A9CBAA00EFB09C /* F3DTEXA.cpp in Sources */, B3C3F43D21A9CBAA00EFB09C /* F3DAM.cpp in Sources */, @@ -5807,10 +6071,13 @@ DFB60622203A7428001E70F1 /* osal_files_ios.mm in Sources */, DFB6041C2038BA3C001E70F1 /* PaletteTexture.cpp in Sources */, B35B31CC206CA65A00AEAF88 /* CRC_OPT_NEON.cpp in Sources */, + B39EF6602740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.cpp in Sources */, DFB604572038BAB8001E70F1 /* DepthBufferToRDRAM.cpp in Sources */, DFB604002038BA09001E70F1 /* GLideN64.cpp in Sources */, DFB6061A2038BD73001E70F1 /* mupen64plus_DisplayWindow.cpp in Sources */, + B39EF6292740FA7000EAD1F9 /* opengl_ObjectPool.cpp in Sources */, B35B3152206C843400AEAF88 /* gSPNeon.cpp in Sources */, + B39EF6662740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.cpp in Sources */, DFB606102038BD40001E70F1 /* MupenPlusPluginAPI.cpp in Sources */, DFB604B62038BBD5001E70F1 /* opengl_TextureManipulationObjectFactory.cpp in Sources */, B3EA448B206E471200E608F6 /* RSP_LoadMatrix.cpp in Sources */, @@ -5823,6 +6090,7 @@ DFB604B42038BBD5001E70F1 /* opengl_GLInfo.cpp in Sources */, DFB604022038BA09001E70F1 /* GraphicsDrawer.cpp in Sources */, B3C3F45521A9CBAA00EFB09C /* S2DEX2.cpp in Sources */, + B39EF6542740FE9100EAD1F9 /* glsl_CombinerProgramBuilderAccurate.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5845,19 +6113,22 @@ B3C3F45421A9CBAA00EFB09C /* Turbo3D.cpp in Sources */, DFB604822038BB0B001E70F1 /* Context.cpp in Sources */, B3C3F40C21A9CBAA00EFB09C /* F3DEX2.cpp in Sources */, + B39EF65B2740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryCommon.cpp in Sources */, B3C3F45221A9CBAA00EFB09C /* L3DEX2.cpp in Sources */, DFB604802038BB0B001E70F1 /* CombinerProgram.cpp in Sources */, DFB604202038BA3D001E70F1 /* NoiseTexture.cpp in Sources */, DFB604502038BA95001E70F1 /* VI.cpp in Sources */, DFB604BF2038BBD6001E70F1 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */, - DFB604C02038BBD6001E70F1 /* opengl_ContextImpl.cpp in Sources */, DFB604DF2038BC0C001E70F1 /* glsl_CombinerProgramImpl.cpp in Sources */, DFB6046B2038BAD7001E70F1 /* ClipPolygon.cpp in Sources */, B3C3F47221A9CBFB00EFB09C /* glsl_FXAA.cpp in Sources */, DFB604652038BAC3001E70F1 /* RDRAMtoColorBuffer.cpp in Sources */, DFB6041E2038BA3D001E70F1 /* N64.cpp in Sources */, DFB604C22038BBD6001E70F1 /* opengl_Parameters.cpp in Sources */, + B39EF6572740FE9100EAD1F9 /* glsl_CombinerProgramBuilderFast.cpp in Sources */, B3C3F43021A9CBAA00EFB09C /* F3DPD.cpp in Sources */, + B39EF63C2740FA7000EAD1F9 /* opengl_Command.cpp in Sources */, + B39EF6122740F92600EAD1F9 /* TxHiResNoCache.cpp in Sources */, DFB604622038BAB8001E70F1 /* ColorBufferToRDRAM.cpp in Sources */, DFB604542038BA9E001E70F1 /* ZlutTexture.cpp in Sources */, DFB604862038BB0B001E70F1 /* ObjectHandle.cpp in Sources */, @@ -5881,16 +6152,21 @@ B3C3F42021A9CBAA00EFB09C /* F5Rogue.cpp in Sources */, DFB603F92038B9F0001E70F1 /* FrameBufferInfo.cpp in Sources */, DFB603E62038B9CF001E70F1 /* Debugger.cpp in Sources */, + B39EF6432740FE2700EAD1F9 /* BlueNoiseTexture.cpp in Sources */, B3C3F42E21A9CBAA00EFB09C /* F3DGOLDEN.cpp in Sources */, DFB604E32038BC0C001E70F1 /* glsl_Utils.cpp in Sources */, DFB604462038BA87001E70F1 /* TexrectDrawer.cpp in Sources */, DFB604BD2038BBD6001E70F1 /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */, B3C3F42C21A9CBAA00EFB09C /* F3DZEX2.cpp in Sources */, DFB6046A2038BAD7001E70F1 /* DepthBufferRender.cpp in Sources */, + B39EF63F2740FDEF00EAD1F9 /* MemoryStatus_mupenplus.cpp in Sources */, B34601D72081333E008C049C /* gliden_osd.cpp in Sources */, B3C3F46221A9CBAA00EFB09C /* L3DEX.cpp in Sources */, B3C3F44821A9CBAA00EFB09C /* S2DEX.cpp in Sources */, + B39EF6102740F92600EAD1F9 /* TxHiResLoader.cpp in Sources */, DFB603F02038B9DE001E70F1 /* DisplayWindow.cpp in Sources */, + B39EF60B2740F64000EAD1F9 /* opengl_ContextImpl.cpp in Sources */, + B39EF6242740FA7000EAD1F9 /* opengl_WrappedFunctions.cpp in Sources */, DFB604DE2038BC0C001E70F1 /* glsl_CombinerProgramBuilder.cpp in Sources */, DFB604E02038BC0C001E70F1 /* glsl_CombinerProgramUniformFactory.cpp in Sources */, B3EA448E206E473400E608F6 /* CRC_OPT.cpp in Sources */, @@ -5898,15 +6174,16 @@ B3C3F45C21A9CBAA00EFB09C /* F3DEX2CBFD.cpp in Sources */, DFB6047E2038BB0B001E70F1 /* ColorBufferReader.cpp in Sources */, B3CB4B22206E54D20074706B /* Log_ios.mm in Sources */, + B39EF6262740FA7000EAD1F9 /* RingBufferPool.cpp in Sources */, B3C3F40A21A9CBAA00EFB09C /* F3DFLX2.cpp in Sources */, DFB604042038BA09001E70F1 /* GBI.cpp in Sources */, - DFB604142038BA1B001E70F1 /* Keys.cpp in Sources */, DFB603E42038B9CF001E70F1 /* DebugDump.cpp in Sources */, DFB603D12038B981001E70F1 /* CommonPluginAPI.cpp in Sources */, + B39EF6362740FA7000EAD1F9 /* opengl_Wrapper.cpp in Sources */, DFB603F72038B9F0001E70F1 /* FrameBuffer.cpp in Sources */, DFB604442038BA87001E70F1 /* SoftwareRender.cpp in Sources */, DFB606182038BD4F001E70F1 /* MupenPlusAPIImpl.cpp in Sources */, - B35B31CF206CA72A00AEAF88 /* xxhash.c in Sources */, + B39EF6592740FE9100EAD1F9 /* glsl_CombinerProgramBuilderCommon.cpp in Sources */, DFB604DD2038BC0C001E70F1 /* glsl_CombinerInputs.cpp in Sources */, DFB603D52038B98C001E70F1 /* convert.cpp in Sources */, B3C3F41221A9CBAA00EFB09C /* F3DTEXA.cpp in Sources */, @@ -5918,10 +6195,13 @@ DFB604222038BA3D001E70F1 /* PaletteTexture.cpp in Sources */, DFB6045E2038BAB8001E70F1 /* DepthBufferToRDRAM.cpp in Sources */, B35B31CD206CA65A00AEAF88 /* CRC_OPT_NEON.cpp in Sources */, + B39EF6612740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryFast.cpp in Sources */, DFB604082038BA09001E70F1 /* GLideN64.cpp in Sources */, DFB6061B2038BD73001E70F1 /* mupen64plus_DisplayWindow.cpp in Sources */, B35B3149206C7C9300AEAF88 /* gSPNeon.cpp in Sources */, + B39EF62A2740FA7000EAD1F9 /* opengl_ObjectPool.cpp in Sources */, DFB606112038BD41001E70F1 /* MupenPlusPluginAPI.cpp in Sources */, + B39EF6672740FE9100EAD1F9 /* glsl_CombinerProgramUniformFactoryAccurate.cpp in Sources */, DFB604C32038BBD6001E70F1 /* opengl_TextureManipulationObjectFactory.cpp in Sources */, B35B314B206C7C9300AEAF88 /* RSP_LoadMatrixNeon.cpp in Sources */, B3EA448C206E471300E608F6 /* RSP_LoadMatrix.cpp in Sources */, @@ -5934,6 +6214,7 @@ DFB604BC2038BBD6001E70F1 /* opengl_CachedFunctions.cpp in Sources */, DFB6040A2038BA09001E70F1 /* GraphicsDrawer.cpp in Sources */, B3C3F45621A9CBAA00EFB09C /* S2DEX2.cpp in Sources */, + B39EF6552740FE9100EAD1F9 /* glsl_CombinerProgramBuilderAccurate.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6001,15 +6282,35 @@ target = B3AF702121916E60000FA7F9 /* png-tvOS */; targetProxy = B37263E326EA280E00E95488 /* PBXContainerItemProxy */; }; - B3AF701A21916E0F000FA7F9 /* PBXTargetDependency */ = { + B39EF5A42740DD3900EAD1F9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = B3303E4B1DED23C600896D96 /* png-iOS */; - targetProxy = B3AF701921916E0F000FA7F9 /* PBXContainerItemProxy */; + target = B39EF5942740DD2700EAD1F9 /* minizip-iOS */; + targetProxy = B39EF5A32740DD3900EAD1F9 /* PBXContainerItemProxy */; }; - B3AF706121916FC7000FA7F9 /* PBXTargetDependency */ = { + B39EF5B62740DF1500EAD1F9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = B3AF703A21916E87000FA7F9 /* glidenhq-tvOS */; - targetProxy = B3AF706021916FC7000FA7F9 /* PBXContainerItemProxy */; + target = B39EF5A52740DEF600EAD1F9 /* md5-iOS */; + targetProxy = B39EF5B52740DF1500EAD1F9 /* PBXContainerItemProxy */; + }; + B39EF6012740EF9800EAD1F9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B39EF5F42740EF6800EAD1F9 /* md5-tvOS */; + targetProxy = B39EF6002740EF9800EAD1F9 /* PBXContainerItemProxy */; + }; + B39EF6042740EF9800EAD1F9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B39EF5E62740EF5F00EAD1F9 /* minizip-tvOS */; + targetProxy = B39EF6032740EF9800EAD1F9 /* PBXContainerItemProxy */; + }; + B3AF701A21916E0F000FA7F9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B3303E4B1DED23C600896D96 /* png-iOS */; + targetProxy = B3AF701921916E0F000FA7F9 /* PBXContainerItemProxy */; + }; + B3AF706121916FC7000FA7F9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B3AF703A21916E87000FA7F9 /* glidenhq-tvOS */; + targetProxy = B3AF706021916FC7000FA7F9 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -6245,6 +6546,9 @@ "\"$(SRCROOT)/Compatibility/SDL\"", "\"$(SRCROOT)/Plugins/Core/src\"", "\"$(SRCROOT)/Plugins/Core/src/asm_defines\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/md5\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/xxhash\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/minizip\"", ); INFOPLIST_FILE = PVMupen64PlusDynamic/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -6334,6 +6638,9 @@ "\"$(SRCROOT)/Compatibility/SDL\"", "\"$(SRCROOT)/Plugins/Core/src\"", "\"$(SRCROOT)/Plugins/Core/src/asm_defines\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/xxhash\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/md5\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/minizip\"", ); INFOPLIST_FILE = PVMupen64PlusDynamic/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -6796,7 +7103,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -6851,6 +7158,7 @@ "\"$(SRCROOT)/Plugins/Video/gliden64/src/inc\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/mupenplus\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/Neon\"", + "\"$(SRCROOT)/png\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/osal\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/uCodes\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/windows\"", @@ -6886,7 +7194,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -6942,6 +7250,7 @@ "\"$(SRCROOT)/Plugins/Video/gliden64/src/common\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/DepthBufferRender\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/GLideNHQ\"", + "\"$(SRCROOT)/png\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/GLideNUI\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/Graphics\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/inc\"", @@ -7656,6 +7965,9 @@ "\"$(SRCROOT)/Compatibility/SDL\"", "\"$(SRCROOT)/Plugins/Core/src\"", "\"$(SRCROOT)/Plugins/Core/src/asm_defines\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/md5\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/xxhash\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/minizip\"", ); INFOPLIST_FILE = PVMupen64PlusDynamic/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -7738,6 +8050,9 @@ "\"$(SRCROOT)/Compatibility/SDL\"", "\"$(SRCROOT)/Plugins/Core/src\"", "\"$(SRCROOT)/Plugins/Core/src/asm_defines\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/md5\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/xxhash\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/minizip\"", ); INFOPLIST_FILE = PVMupen64PlusDynamic/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -7896,6 +8211,416 @@ }; name = Release; }; + B39EF59C2740DD2700EAD1F9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B39EF59D2740DD2700EAD1F9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B39EF59E2740DD2700EAD1F9 /* Archive */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Archive; + }; + B39EF5AF2740DEF600EAD1F9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B39EF5B02740DEF600EAD1F9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B39EF5B12740DEF600EAD1F9 /* Archive */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Archive; + }; + B39EF5F02740EF5F00EAD1F9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B39EF5F12740EF5F00EAD1F9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B39EF5F22740EF5F00EAD1F9 /* Archive */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Archive; + }; + B39EF5FB2740EF6800EAD1F9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B39EF5FC2740EF6800EAD1F9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B39EF5FD2740EF6800EAD1F9 /* Archive */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Archive; + }; B3AF703721916E60000FA7F9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -8284,6 +9009,9 @@ "\"$(SRCROOT)/Compatibility/SDL\"", "\"$(SRCROOT)/Plugins/Core/src\"", "\"$(SRCROOT)/Plugins/Core/src/asm_defines\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/xxhash\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/md5\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/minizip\"", ); INFOPLIST_FILE = PVMupen64PlusDynamic/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -8371,6 +9099,9 @@ "\"$(SRCROOT)/Compatibility/SDL\"", "\"$(SRCROOT)/Plugins/Core/src\"", "\"$(SRCROOT)/Plugins/Core/src/asm_defines\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/xxhash\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/md5\"", + "\"$(SRCROOT)/Plugins/Core/subprojects/minizip\"", ); INFOPLIST_FILE = PVMupen64PlusDynamic/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -8837,7 +9568,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -8902,6 +9633,7 @@ "\"$(SRCROOT)/Plugins/Video/gliden64/src/inc\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/mupenplus\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/Neon\"", + "\"$(SRCROOT)/png\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/osal\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/uCodes\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/windows\"", @@ -8935,7 +9667,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -8990,6 +9722,7 @@ "\"$(SRCROOT)/Plugins/Video/gliden64/src/inc\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/mupenplus\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/Neon\"", + "\"$(SRCROOT)/png\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/osal\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/uCodes\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/windows\"", @@ -9024,7 +9757,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -9083,6 +9816,7 @@ "\"$(SRCROOT)/Plugins/Video/gliden64/src/common\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/DepthBufferRender\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/GLideNHQ\"", + "\"$(SRCROOT)/png\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/GLideNUI\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/Graphics\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/inc\"", @@ -9132,7 +9866,7 @@ ALWAYS_SEARCH_USER_PATHS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -9188,6 +9922,7 @@ "\"$(SRCROOT)/Plugins/Video/gliden64/src/common\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/DepthBufferRender\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/GLideNHQ\"", + "\"$(SRCROOT)/png\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/GLideNUI\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/Graphics\"", "\"$(SRCROOT)/Plugins/Video/gliden64/src/inc\"", @@ -9295,6 +10030,46 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + B39EF59B2740DD2700EAD1F9 /* Build configuration list for PBXNativeTarget "minizip-iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B39EF59C2740DD2700EAD1F9 /* Debug */, + B39EF59D2740DD2700EAD1F9 /* Release */, + B39EF59E2740DD2700EAD1F9 /* Archive */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B39EF5AE2740DEF600EAD1F9 /* Build configuration list for PBXNativeTarget "md5-iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B39EF5AF2740DEF600EAD1F9 /* Debug */, + B39EF5B02740DEF600EAD1F9 /* Release */, + B39EF5B12740DEF600EAD1F9 /* Archive */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B39EF5EF2740EF5F00EAD1F9 /* Build configuration list for PBXNativeTarget "minizip-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B39EF5F02740EF5F00EAD1F9 /* Debug */, + B39EF5F12740EF5F00EAD1F9 /* Release */, + B39EF5F22740EF5F00EAD1F9 /* Archive */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B39EF5FA2740EF6800EAD1F9 /* Build configuration list for PBXNativeTarget "md5-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B39EF5FB2740EF6800EAD1F9 /* Debug */, + B39EF5FC2740EF6800EAD1F9 /* Release */, + B39EF5FD2740EF6800EAD1F9 /* Archive */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; B3AF703621916E60000FA7F9 /* Build configuration list for PBXNativeTarget "png-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Cores/Mupen64Plus/PVMupen64Plus.xcodeproj/xcshareddata/xcschemes/PVMupen64Plus.xcscheme b/Cores/Mupen64Plus/PVMupen64Plus.xcodeproj/xcshareddata/xcschemes/PVMupen64Plus.xcscheme index d19fc49dc1..1351c35645 100644 --- a/Cores/Mupen64Plus/PVMupen64Plus.xcodeproj/xcshareddata/xcschemes/PVMupen64Plus.xcscheme +++ b/Cores/Mupen64Plus/PVMupen64Plus.xcodeproj/xcshareddata/xcschemes/PVMupen64Plus.xcscheme @@ -4,7 +4,7 @@ version = "1.3"> + buildImplicitDependencies = "YES"> - - - - Debug - Win32 - - - Release - Win32 - - - - {2EC7CEE3-C7A7-4F2E-B2C8-4DF6AFEC3E9A} - mupen64plusrsphle - Win32Proj - - - - DynamicLibrary - MultiByte - true - v110 - - - DynamicLibrary - MultiByte - v110 - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\..\mupen64plus-core\src\api;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;inline=__inline;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - - - Level3 - EditAndContinue - Default - - - true - Windows - MachineX86 - - - - - ..\..\..\mupen64plus-core\src\api;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;inline=__inline;%(PreprocessorDefinitions) - MultiThreadedDLL - - - Level3 - ProgramDatabase - Default - - - true - Windows - true - true - MachineX86 - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Cores/Mupen64Plus/mupen64plus-video-rice/projects/VisualStudio2013/mupen64plus-video-rice.vcxproj b/Cores/Mupen64Plus/mupen64plus-video-rice/projects/VisualStudio2013/mupen64plus-video-rice.vcxproj deleted file mode 100644 index 5b4c55e075..0000000000 --- a/Cores/Mupen64Plus/mupen64plus-video-rice/projects/VisualStudio2013/mupen64plus-video-rice.vcxproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {7D4AFF6A-B7D9-4C25-975A-038B8079098E} - mupen64plusvideorice - Win32Proj - - - - DynamicLibrary - MultiByte - true - v120 - - - DynamicLibrary - MultiByte - v120 - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - ..\..\src;..\..\..\mupen64plus-core\src\api;..\..\..\mupen64plus-win32-deps\SDL-1.2.14\include;..\..\..\mupen64plus-win32-deps\libpng-1.2.37\include;..\..\..\mupen64plus-win32-deps\zlib-1.2.3\include;%(AdditionalIncludeDirectories) - WIN32;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - - - Level3 - EditAndContinue - - - user32.lib;gdi32.lib;opengl32.lib;glu32.lib;..\..\..\mupen64plus-win32-deps\SDL-1.2.14\lib\SDL.lib;..\..\..\mupen64plus-win32-deps\libpng-1.2.37\lib\libpng.lib;%(AdditionalDependencies) - true - Windows - MachineX86 - - - - - ..\..\src;..\..\..\mupen64plus-core\src\api;..\..\..\mupen64plus-win32-deps\SDL-1.2.14\include;..\..\..\mupen64plus-win32-deps\libpng-1.2.37\include;..\..\..\mupen64plus-win32-deps\zlib-1.2.3\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - MultiThreadedDLL - - - Level3 - ProgramDatabase - Default - - - user32.lib;gdi32.lib;opengl32.lib;glu32.lib;..\..\..\mupen64plus-win32-deps\SDL-1.2.14\lib\SDL.lib;..\..\..\mupen64plus-win32-deps\libpng-1.2.37\lib\libpng.lib;%(AdditionalDependencies) - true - Windows - true - true - MachineX86 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Cores/VirtualJaguar b/Cores/VirtualJaguar index f287ec98bf..dec4f11a64 160000 --- a/Cores/VirtualJaguar +++ b/Cores/VirtualJaguar @@ -1 +1 @@ -Subproject commit f287ec98bf7f4689ef18bf27ac6cbcd5ffa8d97d +Subproject commit dec4f11a64ecb4109db218e3660cc55b10c0c50b diff --git a/PVLibrary/PVLibrary/Configuration/PVEmulatorConfiguration.swift b/PVLibrary/PVLibrary/Configuration/PVEmulatorConfiguration.swift index 2290d074c4..38b9103433 100644 --- a/PVLibrary/PVLibrary/Configuration/PVEmulatorConfiguration.swift +++ b/PVLibrary/PVLibrary/Configuration/PVEmulatorConfiguration.swift @@ -51,6 +51,7 @@ public enum SystemIdentifier: String { case Atari2600 = "com.provenance.2600" case Atari5200 = "com.provenance.5200" case Atari7800 = "com.provenance.7800" + case Atari8bit = "com.provenance.atari8bit" case AtariJaguar = "com.provenance.jaguar" case ColecoVision = "com.provenance.colecovision" case DS = "com.provenance.ds" diff --git a/PVLibrary/PVLibrary/Resources/systems.plist b/PVLibrary/PVLibrary/Resources/systems.plist index aef78b208a..7643dd6410 100644 --- a/PVLibrary/PVLibrary/Resources/systems.plist +++ b/PVLibrary/PVLibrary/Resources/systems.plist @@ -3249,6 +3249,131 @@ + + PVRequiresMouse + + PVRequiresKeyboard + + PVManufacturer + Atari + PVSystemName + Atari 8bit Computer + PVSystemShortName + Atari8bit + PVReleaseYear + 1982 + PVBit + 8 + PVPortable + + PVSystemIdentifier + com.provenance.atari8bit + PVDatabaseID + 4 + PVRequiresBIOS + + PVBIOSNames + + + Description + BIOS for the BASIC interpreter + MD5 + 0bac0c6a50104045d902df4503a4c30b + Name + ataribas.rom + Size + 0 + + + Description + BIOS for Atari XL/XE OS + MD5 + 06daac977823773a3eea3422fd26a703 + Name + ATARIXL.ROM + Size + 0 + + + Description + BIOS for Atari 400/800 PAL + MD5 + eb1f32f5d9f382db1bbfb8d7f9cb343a + Name + ATARIOSA.ROM + Size + 0 + + + Description + BIOS for Atari 400/800 NTSC + MD5 + a3e8d617c95d08031fe1b20d541434b2 + Name + ATARIOSB.ROM + Size + 0 + + + PVSupportedExtensions + + a52 + + PVControlLayout + + + PVControlType + PVButtonGroup + PVControlSize + {180,180} + PVGroupedButtons + + + PVControlType + PVButton + PVControlTitle + 1 + PVControlFrame + {{10,70},{60,70}} + PVControlTint + #f96763 + + + PVControlType + PVButton + PVControlTitle + 2 + PVControlFrame + {{90,70},{60,70}} + PVControlTint + #f96763 + + + + + PVControlType + PVStartButton + PVControlTitle + Reset + PVControlSize + {60,42} + + + PVControlType + PVSelectButton + PVControlTitle + Start + PVControlSize + {60,42} + + + PVControlType + PVDPad + PVControlSize + {180,180} + + + PVManufacturer Nintendo diff --git a/PVSupport/Controller/AHAP/Boing.ahap b/PVSupport/Controller/AHAP/Boing.ahap new file mode 100644 index 0000000000..806d24bd07 --- /dev/null +++ b/PVSupport/Controller/AHAP/Boing.ahap @@ -0,0 +1,62 @@ +{ + "Version": 1.0, + "Metadata": + { + "Project" : "Haptic Sampler", + "Created" : "5 June 2019", + "Description" : "A continuous event tweaked by sloped parameter curves, emphasized by a precisely placed transient event, creating the feeling of a spring or rubberband." + }, + "Pattern": + [ + { + "Event": + { + "Time": 0.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.4 } + ] + } + }, + { + "Event": + { + "Time": 0.015, + "EventType": "HapticContinuous", + "EventDuration": 0.25, + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.4 } + ] + } + }, + { + "ParameterCurve": + { + "ParameterID": "HapticIntensityControl", + "Time": 0.015, + "ParameterCurveControlPoints": + [ + { "Time": 0, "ParameterValue": 1 }, + { "Time": 0.1, "ParameterValue": 0.5 }, + { "Time": 0.25, "ParameterValue": 0.0 } + ] + } + }, + { + "ParameterCurve": + { + "ParameterID": "HapticSharpnessControl", + "Time": 0.015, + "ParameterCurveControlPoints": + [ + { "Time": 0, "ParameterValue": 0.0 }, + { "Time": 0.25, "ParameterValue": -0.3 } + ] + } + } + ] +} \ No newline at end of file diff --git a/PVSupport/Controller/AHAP/Drums.ahap b/PVSupport/Controller/AHAP/Drums.ahap new file mode 100755 index 0000000000..bfec19a7d1 --- /dev/null +++ b/PVSupport/Controller/AHAP/Drums.ahap @@ -0,0 +1,129 @@ +{ + "Version": 1, + "Metadata": + { + "Project" : "Haptic Sampler", + "Created" : "5 June 2019", + "Description" : "A sequence of haptic events paired with a custom audio file." + }, + "Pattern": + [ + {"Event": + {"Time":0,"EventType":"HapticTransient", + "EventParameters": + [ + {"ParameterID":"HapticSharpness","ParameterValue":0} + ] + } + }, + {"Event": + {"Time":0.391,"EventType":"HapticTransient", + "EventParameters": + [ + {"ParameterID":"HapticSharpness","ParameterValue":0}, + {"ParameterID":"HapticIntensity","ParameterValue":1} + ] + } + }, + {"Event": + {"Time":0.8,"EventType":"HapticTransient", + "EventParameters": + [ + {"ParameterID":"HapticSharpness","ParameterValue":0.3}, + {"ParameterID":"HapticIntensity","ParameterValue":1} + ] + } + }, + {"Event": + {"Time":1.2,"EventType":"HapticTransient", + "EventParameters": + [ + {"ParameterID":"HapticSharpness","ParameterValue":0}, + {"ParameterID":"HapticIntensity","ParameterValue":1} + ] + } + }, + {"Event": + {"Time":1.41,"EventType":"HapticTransient", + "EventParameters": + [ + {"ParameterID":"HapticSharpness","ParameterValue":0}, + {"ParameterID":"HapticIntensity","ParameterValue":1} + ] + } + }, + {"Event": + {"Time":1.6,"EventType":"HapticTransient", + "EventParameters": + [ + {"ParameterID":"HapticSharpness","ParameterValue":0} + ] + } + }, + {"Event": + {"Time":0,"EventType":"HapticContinuous","EventDuration":0.2, + "EventParameters": + [ + {"ParameterID":"HapticIntensity","ParameterValue":0.6} + ] + } + }, + {"Event": + {"Time":0.2,"EventType":"HapticContinuous","EventDuration":0.2, + "EventParameters": + [ + {"ParameterID":"HapticIntensity","ParameterValue":0.3} + ] + } + }, + {"Event": + {"Time":0.4,"EventType":"HapticContinuous","EventDuration":0.15, + "EventParameters": + [ + {"ParameterID":"HapticIntensity","ParameterValue":0.25}, + {"ParameterID":"HapticSharpness","ParameterValue":1.0} + ] + } + }, + {"Event": + {"Time":0.8,"EventType":"HapticContinuous","EventDuration":0.15, + "EventParameters": + [ + {"ParameterID":"HapticIntensity","ParameterValue":0.25}, + {"ParameterID":"HapticSharpness","ParameterValue":1.0} + ] + } + }, + {"Event": + {"Time":1.2,"EventType":"HapticContinuous","EventDuration":0.15, + "EventParameters": + [ + {"ParameterID":"HapticIntensity","ParameterValue":0.25}, + {"ParameterID":"HapticSharpness","ParameterValue":1.0} + ] + } + }, + {"Event": + {"Time":1.6,"EventType":"HapticContinuous","EventDuration":1, + "EventParameters": + [ + {"ParameterID":"HapticIntensity","ParameterValue":0.45}, + {"ParameterID":"HapticSharpness","ParameterValue":0.9}, + {"ParameterID":"DecayTime","ParameterValue":1}, + {"ParameterID":"Sustained","ParameterValue":0} + ] + } + }, + {"Event": + { + "Time":0, + "EventType":"AudioCustom", + "EventWaveformPath":"AHAP/Drums.wav", + "EventParameters": + [ + {"ParameterID":"AudioVolume","ParameterValue":0.75} + ] + } + } + ] +} diff --git a/PVSupport/Controller/AHAP/Drums.wav b/PVSupport/Controller/AHAP/Drums.wav new file mode 100755 index 0000000000..0c82f2afd3 Binary files /dev/null and b/PVSupport/Controller/AHAP/Drums.wav differ diff --git a/PVSupport/Controller/AHAP/Gravel.ahap b/PVSupport/Controller/AHAP/Gravel.ahap new file mode 100644 index 0000000000..38dfbe6379 --- /dev/null +++ b/PVSupport/Controller/AHAP/Gravel.ahap @@ -0,0 +1,2566 @@ +{ + "Version": 1.0, + "Metadata": + { + "Project" : "Haptic Sampler", + "Created" : "5 June 2019", + "Description" : "A sequence of tightly spaced transient events and parameter variations to create a gravel-like texture." + }, + "Pattern": + [ + { + "ParameterCurve": { + "ParameterID": "HapticIntensityControl", + "Time": 0.0, + "ParameterCurveControlPoints": + [ + { + "Time": 0, + "ParameterValue": 0.3 + }, + { + "Time": 1.0, + "ParameterValue": 0.6 + }, + { + "Time": 3.0, + "ParameterValue": 0.0 + } + ] + } + }, + { + "Event": { + "Time": 0.04, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.05, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.07, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.09, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.11, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.14, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.16, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.17, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.2, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.21, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.24, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.25, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.28, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.29, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.31, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.33, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.35, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.38, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.39, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.42, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.43, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.46, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.48, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.5, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.52, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.53, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.56, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.57, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.6, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.62, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.64, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.65, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.67, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.69, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.72, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.74, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.76, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.78, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.8, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.81, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.84, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.85, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.88, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.89, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 0.92, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.94, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.96, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 0.98, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.01, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.04, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.06, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.07, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.09, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.11, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.14, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.15, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.18, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.19, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.21, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.24, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.26, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.27, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.3, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.31, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.34, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.35, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.38, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.4, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.41, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.43, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.46, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.48, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.49, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.51, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.54, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.56, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.57, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.59, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.61, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.64, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.66, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.68, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.69, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.72, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.73, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.76, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.77, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.79, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.81, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.84, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.85, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.87, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.89, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.91, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.94, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 1.95, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 1.97, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.02, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.03, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.05, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.08, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.09, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.11, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.13, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.15, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.18, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.19, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.21, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.23, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.25, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.28, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.29, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.32, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.33, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.36, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.38, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.4, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.42, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.43, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.46, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.48, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.5, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.51, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.54, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.55, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.58, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.59, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.61, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.63, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.65, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.67, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.7, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.72, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.74, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.75, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.77, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.8, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.82, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.83, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.85, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.88, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.89, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.91, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.94, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 2.95, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 1.0 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.5 + } + ] + } + }, + { + "Event": { + "Time": 2.98, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + }, + { + "Event": { + "Time": 3.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { + "ParameterID": "HapticIntensity", + "ParameterValue": 0.7 + }, + { + "ParameterID": "HapticSharpness", + "ParameterValue": 0.3 + } + ] + } + } + ] +} \ No newline at end of file diff --git a/PVSupport/Controller/AHAP/Heartbeats.ahap b/PVSupport/Controller/AHAP/Heartbeats.ahap new file mode 100644 index 0000000000..447914cf16 --- /dev/null +++ b/PVSupport/Controller/AHAP/Heartbeats.ahap @@ -0,0 +1,156 @@ +{ + "Version": 1.0, + "Metadata": + { + "Project" : "Haptic Sampler", + "Created" : "5 June 2019", + "Description" : "Three organic heartbeats over three seconds, made using precisely spaced transient events at varying parameters." + }, + "Pattern": + [ + { + "Event": + { + "Time": 0.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.2 } + ] + } + }, + { + "Event": + { + "Time": 0.013, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.3 } + ] + } + }, + { + "Event": + { + "Time": 0.220, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.255, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.7 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.0 } + ] + } + }, + { + "Event": + { + "Time": 1.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.2 } + ] + } + }, + { + "Event": + { + "Time": 1.013, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.3 } + ] + } + }, + { + "Event": + { + "Time": 1.220, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.255, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.7 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.0 } + ] + } + }, + { + "Event": + { + "Time": 2.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.2 } + ] + } + }, + { + "Event": + { + "Time": 2.013, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.3 } + ] + } + }, + { + "Event": + { + "Time": 2.220, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 2.255, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.7 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.0 } + ] + } + } + ] +} diff --git a/PVSupport/Controller/AHAP/Hit.ahap b/PVSupport/Controller/AHAP/Hit.ahap new file mode 100644 index 0000000000..01b2888873 --- /dev/null +++ b/PVSupport/Controller/AHAP/Hit.ahap @@ -0,0 +1,22 @@ +{ + "Version" : 1, + "Metadata" : { + "Project" : "Haptic Controllers", + "Created" : "9 June 2020", + "Description" : "A single hit at full intensity" + }, + "Pattern" : [ + { + "Event" : { + "EventType" : "HapticTransient", + "EventParameters" : [ + { + "ParameterID" : "HapticIntensity", + "ParameterValue" : 1.000000 + } + ], + "Time" : 0 + } + } + ] +} diff --git a/PVSupport/Controller/AHAP/Inflate.ahap b/PVSupport/Controller/AHAP/Inflate.ahap new file mode 100644 index 0000000000..d14b78ae5f --- /dev/null +++ b/PVSupport/Controller/AHAP/Inflate.ahap @@ -0,0 +1,50 @@ +{ + "Version": 1.0, + "Metadata": + { + "Project" : "Haptic Sampler", + "Created" : "5 June 2019", + "Description" : "An effect that builds in sharpness and intensity." + }, + "Pattern": + [ + { + "Event": + { + "Time": 0.0, + "EventType": "HapticContinuous", + "EventDuration": 1.7, + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.5 } + ] + } + }, + { + "ParameterCurve": + { + "ParameterID": "HapticIntensityControl", + "Time": 0.0, + "ParameterCurveControlPoints": + [ + { "Time": 0, "ParameterValue": 0.0 }, + { "Time": 1.1, "ParameterValue": 0.5 }, + { "Time": 1.7, "ParameterValue": 0.0 } + ] + } + }, + { + "ParameterCurve": + { + "ParameterID": "HapticSharpnessControl", + "Time": 0.0, + "ParameterCurveControlPoints": + [ + { "Time": 0, "ParameterValue": -0.8 }, + { "Time": 1.7, "ParameterValue": 0.8 } + ] + } + } + ] +} diff --git a/PVSupport/Controller/AHAP/Oscillate.ahap b/PVSupport/Controller/AHAP/Oscillate.ahap new file mode 100644 index 0000000000..03bc88282a --- /dev/null +++ b/PVSupport/Controller/AHAP/Oscillate.ahap @@ -0,0 +1,51 @@ +{ + "Version": 1.0, + "Metadata": + { + "Project" : "Haptic Sampler", + "Created" : "5 June 2019", + "Description" : "A mixture of two continuous events, shifting the sharpness of one to create a smooth oscillating feel." + }, + "Pattern": + [ + { + "Event": + { + "Time": 0.0, + "EventType": "HapticContinuous", + "EventDuration": 3.0, + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.5 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.0 } + ] + } + }, + { + "Event": + { + "Time": 0.0, + "EventType": "HapticContinuous", + "EventDuration": 3.0, + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.5 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.075 } + ] + } + }, + { + "ParameterCurve": + { + "ParameterID": "HapticIntensityControl", + "Time": 0.0, + "ParameterCurveControlPoints": + [ + { "Time": 0, "ParameterValue": 1.0 }, + { "Time": 0.5, "ParameterValue": 1.0 }, + { "Time": 3.0, "ParameterValue": 0.0 } + ] + } + } + ] +} diff --git a/PVSupport/Controller/AHAP/Recharge.ahap b/PVSupport/Controller/AHAP/Recharge.ahap new file mode 100644 index 0000000000..084c792cf6 --- /dev/null +++ b/PVSupport/Controller/AHAP/Recharge.ahap @@ -0,0 +1,193 @@ +{ + "Version" : 1, + "Metadata" : { + "Project" : "Haptic Controllers", + "Created" : "9 June 2020", + "Description" : "Charge up sequence, with three cycle of incresing intensity curves" + }, + "Pattern" : [ + { + "Event" : { + "EventParameters" : [ + { + "ParameterID" : "HapticIntensity", + "ParameterValue" : 1.000000 + } + ], + "EventType" : "HapticContinuous", + "Time" : 0, + "EventDuration" : 2.4 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.0, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.0001 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.03, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.100 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.0915, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.200 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.216, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.300 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.3345, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.400 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.5, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.5 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.02025, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.600 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.048, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.700 + } + }, + + { + "Parameter" : { + "ParameterValue" : 0.09375, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.800 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.162, + "ParameterID" : "HapticIntensityControl", + "Time" : 0.900 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.25725, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.000 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.384, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.100 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.54675, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.200 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.75, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.3 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.001, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.400 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.008, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.500 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.027, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.600 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.064, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.700 + } + }, + + { + "Parameter" : { + "ParameterValue" : 0.125, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.800 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.216, + "ParameterID" : "HapticIntensityControl", + "Time" : 1.900 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.343, + "ParameterID" : "HapticIntensityControl", + "Time" : 2.000 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.512, + "ParameterID" : "HapticIntensityControl", + "Time" : 2.100 + } + }, + { + "Parameter" : { + "ParameterValue" : 0.729, + "ParameterID" : "HapticIntensityControl", + "Time" : 2.200 + } + }, + { + "Parameter" : { + "ParameterValue" : 1, + "ParameterID" : "HapticIntensityControl", + "Time" : 2.300 + } + }, + ] +} diff --git a/PVSupport/Controller/AHAP/Rumble.ahap b/PVSupport/Controller/AHAP/Rumble.ahap new file mode 100644 index 0000000000..3d8d856125 --- /dev/null +++ b/PVSupport/Controller/AHAP/Rumble.ahap @@ -0,0 +1,494 @@ +{ + "Version": 1.0, + "Metadata": + { + "Project" : "Haptic Sampler", + "Created" : "5 June 2019", + "Description" : "A sequence of transient events with decreasing sharpness, to create a precise rumble, reminiscent of driving over uneven ground." + }, + "Pattern": + [ + { + "ParameterCurve": + { + "ParameterID": "HapticIntensityControl", + "Time": 0.0, + "ParameterCurveControlPoints": + [ + { "Time": 0.0, "ParameterValue": 0.3 }, + { "Time": 0.1, "ParameterValue": 1.0 }, + { "Time": 1.0, "ParameterValue": 1.0 }, + { "Time": 1.6, "ParameterValue": 0.0 } + ] + } + }, + { + "Event": + { + "Time": 0.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.04, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.08, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.12, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.16, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.2, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.24, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.28, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.32, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.36, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.40, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.44, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.48, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.52, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.56, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.6, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.64, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.68, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.72, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.76, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.8, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.84, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.88, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.92, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 0.96, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.04, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.08, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.12, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.16, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.2, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.24, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.28, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.32, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.36, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.40, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.44, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.48, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "Event": + { + "Time": 1.52, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + } + ] +} diff --git a/PVSupport/Controller/AHAP/Sparkle.ahap b/PVSupport/Controller/AHAP/Sparkle.ahap new file mode 100644 index 0000000000..a4987d4b5e --- /dev/null +++ b/PVSupport/Controller/AHAP/Sparkle.ahap @@ -0,0 +1,304 @@ +{ + "Version": 1.0, + "Metadata": + { + "Project" : "Haptic Sampler", + "Created" : "5 June 2019", + "Description" : "A combination of transient and continuous events to create a pop with trailing sparkles." + }, + "Pattern": + [ + { + "Event": + { + "Time": 0.0, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.6 } + ] + } + }, + { + "Event": + { + "Time": 0.024, + "EventType": "HapticContinuous", + "EventDuration": 0.150, + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.6 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.1 } + ] + } + }, + { + "ParameterCurve": + { + "ParameterID": "HapticIntensityControl", + "Time": 0.024, + "ParameterCurveControlPoints": + [ + { "Time": 0, "ParameterValue": 1.0 }, + { "Time": 0.025, "ParameterValue": 0.45 }, + { "Time": 0.15, "ParameterValue": 0.0 } + ] + } + }, + { + "ParameterCurve": + { + "ParameterID": "HapticIntensityControl", + "Time": 0.174, + "ParameterCurveControlPoints": + [ + { "Time": 0, "ParameterValue": 0.75 }, + { "Time": 0.087, "ParameterValue": 0.40 }, + { "Time": 0.667, "ParameterValue": 0.40 }, + { "Time": 0.846, "ParameterValue": 0.2 } + ] + } + }, + { + "Event": + { + "Time": 0.174, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.4 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.5 } + ] + } + }, + { + "Event": + { + "Time": 0.188, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.6 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.5 } + ] + } + }, + { + "Event": + { + "Time": 0.203, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.7 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.231, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.5 } + ] + } + }, + { + "Event": + { + "Time": 0.261, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.278, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.9 } + ] + } + }, + { + "Event": + { + "Time": 0.318, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.336, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.9 } + ] + } + }, + { + "Event": + { + "Time": 0.368, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.6 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.425, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.473, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.6 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.517, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.531, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.573, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.6 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.595, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.647, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 1.0 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.678, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.751, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 0.841, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 0.8 } + ] + } + }, + { + "Event": + { + "Time": 1.020, + "EventType": "HapticTransient", + "EventParameters": + [ + { "ParameterID": "HapticIntensity", "ParameterValue": 0.8 }, + { "ParameterID": "HapticSharpness", "ParameterValue": 1.0 } + ] + } + } + ] +} diff --git a/PVSupport/Controller/AHAP/Triple.ahap b/PVSupport/Controller/AHAP/Triple.ahap new file mode 100644 index 0000000000..d78efde7b3 --- /dev/null +++ b/PVSupport/Controller/AHAP/Triple.ahap @@ -0,0 +1,46 @@ +{ + "Version" : 1, + "Metadata" : { + "Project" : "Haptic Controllers", + "Created" : "9 June 2020", + "Description" : "A triple hit pattern at full intensity" + }, + "Pattern" : [ + { + "Event" : { + "EventType" : "HapticTransient", + "EventParameters" : [ + { + "ParameterID" : "HapticIntensity", + "ParameterValue" : 1 + } + ], + "Time" : 0 + } + }, + { + "Event" : { + "EventType" : "HapticTransient", + "EventParameters" : [ + { + "ParameterID" : "HapticIntensity", + "ParameterValue" : 1 + } + ], + "Time" : 0.25 + } + }, + { + "Event" : { + "EventType" : "HapticTransient", + "EventParameters" : [ + { + "ParameterID" : "HapticIntensity", + "ParameterValue" : 1 + } + ], + "Time" : 0.5 + } + } + ] +} \ No newline at end of file diff --git a/PVSupport/Controller/HapticsManager.swift b/PVSupport/Controller/HapticsManager.swift new file mode 100644 index 0000000000..aa304050db --- /dev/null +++ b/PVSupport/Controller/HapticsManager.swift @@ -0,0 +1,229 @@ +/* +See LICENSE folder for this sample’s licensing information. + +Abstract: +The class that manages the app's haptics playback. +*/ + +#if canImport(CoreHaptics) +import Foundation +import GameController +import CoreHaptics + +@available(iOS 14.0, tvOS 14.0, *) +public protocol HapticsManagerDelegate: AnyObject { + func didConnect(controller: GCController) + func didDisconnectController() +} + +@available(iOS 14.0, tvOS 14.0, *) +public final class HapticsManager { + + private var isSetup = false + + private var controller: GCController? + // A haptic engine manages the connection to the haptic server. + private var engineMap = [GCHapticsLocality: CHHapticEngine]() + + weak var delegate: HapticsManagerDelegate? { + didSet { + if delegate != nil { + startObserving() + } + } + + willSet { + if isSetup { + stopObserving() + } + } + } + + /// - Tag: StartObserving + private func startObserving() { + guard !isSetup else { return } + + let nc = NotificationCenter.default + + // Controller did connect observer. + NotificationCenter.default.addObserver(self, + selector: #selector(controllerDidConnect), + name: .GCControllerDidConnect, + object: nil) + + // Controller did disconnect observer. + nc.addObserver(self, selector: + #selector(controllerDidDisconnect), + name: .GCControllerDidDisconnect, + object: nil) + isSetup = true + } + + private func stopObserving() { + guard isSetup else { return } + + let nc = NotificationCenter.default + + // Controller did connect observer. + NotificationCenter.default.removeObserver(self, + name: .GCControllerDidConnect, + object: nil) + + // Controller did disconnect observer. + nc.removeObserver(self, + name: .GCControllerDidDisconnect, + object: nil) + isSetup = false + } + + /// - Tag: ControllerDidConnect + @objc private func controllerDidConnect(notification: Notification) { + guard let controller = notification.object as? GCController else { + fatalError("Invalid notification object.") + } + + ILOG("Connected \(controller.productCategory) game controller.") + + // Create a haptics engine for the controller. + guard let engine = createEngine(for: controller, locality: .default) else { return } + + // Configure the event handlers for the controller buttons. + delegate?.didConnect(controller: controller) + + self.engineMap[GCHapticsLocality.default] = engine + self.controller = controller + } + + /// - Tag: CreateEngine + private func createEngine(for controller: GCController, locality: GCHapticsLocality) -> CHHapticEngine? { + // Get the controller's haptics (if one exists), and create a + // new CGHapticEngine for it, using the default locality. + guard let engine = controller.haptics?.createEngine(withLocality: locality) else { + ELOG("Failed to create engine.") + return nil + } + + // The stopped handler alerts you of engine stoppage due to external causes. + engine.stoppedHandler = { reason in + ELOG("The engine stopped because \(reason.message)") + } + + // The reset handler provides an opportunity for your app to restart the engine in case of failure. + engine.resetHandler = { + // Try restarting the engine. + ILOG("The engine reset --> Restarting now!") + do { + try engine.start() + } catch { + ELOG("Failed to restart the engine: \(error)") + } + } + return engine + } + + @objc private func controllerDidDisconnect(notification: Notification) { + guard controller == notification.object as? GCController else { return } + + // dispose of engine and controller. + engineMap.removeAll(keepingCapacity: true) + controller = nil + delegate?.didDisconnectController() + } + + /// - Tag: PlayHapticsFile + func playHapticsFile(named filename: String, locality: GCHapticsLocality = .default) { + // Update the engine based on locality. + guard let controller = controller else { + ELOG("Unable to play haptics: no game controller connected") + return + } + + var engine: CHHapticEngine! + if let existingEngine = engineMap[locality] { + engine = existingEngine + } else if let newEngine = createEngine(for: controller, locality: locality) { + engine = newEngine + } + + guard engine != nil else { + ELOG("Unable to play haptics: no engine available for locality \(locality)") + return + } + + // Get the AHAP file URL. + let bundle = Bundle.init(for: Self.self) + guard let url = bundle.url(forResource: filename, withExtension: "ahap") else { + ELOG("Unable to find haptics file named '\(filename)'.") + return + } + + do { + // Start the engine in case it's idle. + try engine.start() + + // Tell the engine to play a pattern. + try engine.playPattern(from: url) + + } catch { // Engine startup errors + ELOG("An error occured playing \(filename): \(error).") + } + } +} + +@available(iOS 14.0, tvOS 14.0, *) +public extension HapticsManager { + enum HapticFiles: String { + case boing + case drums + case gravel + case heartbeats + case hit + case inflate + case oscillate + case recharge + case rumble + case sparkle + case triple + } + + private func play(_ file: HapticFiles) { + playHapticsFile(named: file.rawValue.uppercased()) + } + + func boing() { play(.boing) } + func drums() { play(.drums) } + func gravel() { play(.gravel) } + func heartbeats() { play(.heartbeats) } + func hit() { play(.hit) } + func inflate() { play(.inflate) } + func oscillate() { play(.oscillate) } + func recharge() { play(.recharge) } + func rumble() { play(.rumble) } + func sparkle() { play(.sparkle) } + func triple() { play(.triple) } +} + +@available(iOS 13.0, tvOS 14.0, *) +extension CHHapticEngine.StoppedReason { + var message: String { + switch self { + case .audioSessionInterrupt: + return "the audio session was interrupted." + case .applicationSuspended: + return "the application was suspended." + case .idleTimeout: + return "an idle timeout occurred." + case .systemError: + return "a system error occurred." + case .notifyWhenFinished: + return "playback finished." + case .engineDestroyed: + return "the engine was destroyed." + case .gameControllerDisconnect: + return "the game controller disconnected." + @unknown default: + fatalError() + } + } +} +#endif diff --git a/PVSupport/CoreOptions/CoreOptions.swift b/PVSupport/CoreOptions/CoreOptions.swift index 5c80bc057c..523d83687d 100644 --- a/PVSupport/CoreOptions/CoreOptions.swift +++ b/PVSupport/CoreOptions/CoreOptions.swift @@ -72,6 +72,12 @@ public extension CoreOptional { // where Self:PVEmulatorCore { } else { return .notFound } + case .rangef: + if let value = valueForOption(NSNumber.self, option.key) { + return .number(value) + } else { + return .notFound + } case .multi: if let value = valueForOption(NSNumber.self, option.key) { return .number(value) @@ -80,6 +86,14 @@ public extension CoreOptional { // where Self:PVEmulatorCore { } else { return .notFound } + case .enumeration: + if let value = valueForOption(NSNumber.self, option.key) { + return .number(value) + } else if let value = valueForOption(String.self, option.key) { + return .string(value) + } else { + return .notFound + } case .group: assertionFailure("Feature unfinished") return .notFound @@ -110,13 +124,21 @@ public extension CoreOptional { // where Self:PVEmulatorCore { // public let max : T // } -public struct CoreOptionRange { - public let defaultValue: Int - public let min: Int - public let max: Int +public struct CoreOptionRange { + public let defaultValue: T + public let min: T + public let max: T + + public init(defaultValue: T, min: T, max: T) { + self.defaultValue = defaultValue + self.min = min + self.max = max + } } -extension CoreOptionRange: Codable, Equatable, Hashable {} +extension CoreOptionRange: Codable where T:Codable {} +extension CoreOptionRange: Equatable where T:Equatable {} +extension CoreOptionRange: Hashable where T:Hashable {} public struct CoreOptionMultiValue { public let title: String @@ -125,9 +147,9 @@ public struct CoreOptionMultiValue { public static func values(fromArray a: [[String]]) -> [CoreOptionMultiValue] { return a.compactMap { if $0.count == 1 { - return CoreOptionMultiValue(title: $0[0], description: nil) + return .init(title: $0[0], description: nil) } else if $0.count >= 2 { - return CoreOptionMultiValue(title: $0[0], description: $0[1]) + return .init(title: $0[0], description: $0[1]) } else { return nil } @@ -136,7 +158,7 @@ public struct CoreOptionMultiValue { public static func values(fromArray a: [String]) -> [CoreOptionMultiValue] { return a.map { - CoreOptionMultiValue(title: $0, description: nil) + .init(title: $0, description: nil) } } } @@ -209,11 +231,13 @@ public protocol MultiCOption: COption { // } public enum CoreOption { - case bool(display: CoreOptionValueDisplay, defaultValue: Bool) - case range(display: CoreOptionValueDisplay, range: CoreOptionRange, defaultValue: Int) - case multi(display: CoreOptionValueDisplay, values: [CoreOptionMultiValue]) - case string(display: CoreOptionValueDisplay, defaultValue: String) - case group(display: CoreOptionValueDisplay, subOptions: [CoreOption]) + case bool(_ display: CoreOptionValueDisplay, defaultValue: Bool = false) + case range(_ display: CoreOptionValueDisplay, range: CoreOptionRange, defaultValue: Int) + case rangef(_ display: CoreOptionValueDisplay, range: CoreOptionRange, defaultValue: Float) + case multi(_ display: CoreOptionValueDisplay, values: [CoreOptionMultiValue]) + case enumeration(_ display: CoreOptionValueDisplay, values: [CoreOptionMultiValue]) + case string(_ display: CoreOptionValueDisplay, defaultValue: String = "") + case group(_ display: CoreOptionValueDisplay, subOptions: [CoreOption]) public var defaultValue: Any? { switch self { @@ -221,8 +245,12 @@ public enum CoreOption { return defaultValue case let .range(_, _, defaultValue): return defaultValue + case let .rangef(_, _, defaultValue): + return defaultValue case let .multi(_, values): return values.first?.title + case let .enumeration(_, values): + return values.first?.title case let .string(_, defaultValue): return defaultValue case .group: @@ -236,13 +264,17 @@ public enum CoreOption { return display.title case .range(let display, _, _): return display.title + case .rangef(let display, _, _): + return display.title case .multi(let display, _): return display.title case .string(let display, _): return display.title case .group(let display, _): return display.title - } + case .enumeration(let display, _): + return display.title + } } func subOptionForKey(_ key: String) -> CoreOption? { @@ -257,7 +289,7 @@ public enum CoreOption { extension CoreOption: Codable { public enum CodingError: Error { case decoding(String) } - enum CodableKeys: String, CodingKey { case display, defaultValue, range, values, subOptions } + enum CodableKeys: String, CodingKey { case display, defaultValue, range, rangef, values, subOptions } public init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: CodableKeys.self) @@ -269,31 +301,37 @@ extension CoreOption: Codable { // Bool if let defaultValue = try? values.decode(Bool.self, forKey: .defaultValue) { - self = .bool(display: display, defaultValue: defaultValue) + self = .bool(display, defaultValue: defaultValue) return } // Range - if let range = try? values.decode(CoreOptionRange.self, forKey: .range), let defaultValue = try? values.decode(Int.self, forKey: .defaultValue) { - self = .range(display: display, range: range, defaultValue: defaultValue) + if let range = try? values.decode(CoreOptionRange.self, forKey: .range), let defaultValue = try? values.decode(Int.self, forKey: .defaultValue) { + self = .range(display, range: range, defaultValue: defaultValue) return } + // Rangef + if let rangef = try? values.decode(CoreOptionRange.self, forKey: .rangef), let defaultValue = try? values.decode(Float.self, forKey: .defaultValue) { + self = .rangef(display, range: rangef, defaultValue: defaultValue) + return + } + // multi if let values = try? values.decode([CoreOptionMultiValue].self, forKey: .values) { - self = .multi(display: display, values: values) + self = .multi(display, values: values) return } // string if let defaultValue = try? values.decode(String.self, forKey: .defaultValue) { - self = .string(display: display, defaultValue: defaultValue) + self = .string(display, defaultValue: defaultValue) return } // group if let subOptions = try? values.decode([CoreOption].self, forKey: CodableKeys.subOptions) { - self = .group(display: display, subOptions: subOptions) + self = .group(display, subOptions: subOptions) return } @@ -311,9 +349,16 @@ extension CoreOption: Codable { try container.encode(display, forKey: .display) try container.encode(range, forKey: .range) try container.encode(defaultValue, forKey: .defaultValue) + case let .rangef(display, range, defaultValue): + try container.encode(display, forKey: .display) + try container.encode(range, forKey: .range) + try container.encode(defaultValue, forKey: .defaultValue) case let .multi(display, values): try container.encode(display, forKey: .display) try container.encode(values, forKey: .values) + case let .enumeration(display, values): + try container.encode(display, forKey: .display) + try container.encode(values, forKey: .values) case let .string(display, defaultValue): try container.encode(display, forKey: .display) try container.encode(defaultValue, forKey: .defaultValue) @@ -331,6 +376,11 @@ extension CoreOptionMultiValue { self.title = title self.description = description } + + public init(_ title: String, _ description: String) { + self.title = title + self.description = description + } } // public protocol CoreOptionP { diff --git a/PVSupport/EmulatorCore/Features/Controls.swift b/PVSupport/EmulatorCore/Features/Controls.swift index 760147acde..6f0c5b3af9 100644 --- a/PVSupport/EmulatorCore/Features/Controls.swift +++ b/PVSupport/EmulatorCore/Features/Controls.swift @@ -11,6 +11,8 @@ import Foundation @objc public protocol ResponderClient: AnyObject {} @objc public protocol ButtonResponder { + var valueChangedHandler: GCExtendedGamepadValueChangedHandler? { get } + func didPush(_ button: Int, forPlayer player: Int) func didRelease(_ button: Int, forPlayer player: Int) } @@ -19,6 +21,58 @@ import Foundation func didMoveJoystick(_ button: Int, withValue value: CGFloat, forPlayer player: Int) } +@objc public protocol KeyboardResponder { + var gameSupportsKeyboard: Bool { get } + var requiresKeyboard: Bool { get } + + var keyChangedHandler: GCKeyboardValueChangedHandler? { get } + + @available(iOS 14.0, *) + func keyDown(_ key: GCKeyCode) +// func keyDown(_ key: GCKeyCode, chararacters: String, charactersIgnoringModifiers: String) + + @available(iOS 14.0, *) + func keyUp(_ key: GCKeyCode) +// func keyUp(_ key: GCKeyCode, chararacters: String, charactersIgnoringModifiers: String) +} + +@objc public enum MouseButton: Int { + case left + case right + case middle + case auxiliary +} + +@objc public protocol MouseResponder { + var gameSupportsMouse: Bool { get } + var requiresMouse: Bool { get } + + @available(iOS 14.0, *) + func didScroll(_ cursor: GCDeviceCursor) + + var mouseMovedHandler: GCMouseMoved? { get } + func mouseMoved(atPoint point: CGPoint) + + func leftMouseDown(atPoint point: CGPoint) + func leftMouseUp() + + func rightMouseDown(atPoint point: CGPoint) + func rightMouseUp() +} + +@objc public enum Touchpad: Int { + case primary + case secondary +} + +@objc public protocol TouchPadResponder { + var touchedChangedHandler: GCControllerButtonTouchedChangedHandler? { get } + var pressedChangedHandler: GCControllerButtonValueChangedHandler? { get } + var valueChangedHandler: GCControllerButtonValueChangedHandler? { get } + + var gameSupportsTouchpad: Bool { get } +} + @objc extension PVEmulatorCore: ResponderClient {} // MARK: - Sega 32X @@ -449,7 +503,7 @@ import Foundation case count } -@objc public protocol PVA8SystemResponderClient: ResponderClient, ButtonResponder { +@objc public protocol PVA8SystemResponderClient: ResponderClient, ButtonResponder, KeyboardResponder, MouseResponder { func mouseMoved(at point: CGPoint) func leftMouseDown(at point: CGPoint) func leftMouseUp() @@ -828,7 +882,6 @@ import Foundation func didRelease(_ button: PVSaturnButton, forPlayer player: Int) } - // MARK: - Magnavox Odyssey2/Videopac+ @objc public enum PVOdyssey2Button: Int { diff --git a/PVSupport/EmulatorCore/PVEmulatorCore.h b/PVSupport/EmulatorCore/PVEmulatorCore.h index 9125c21cd0..fd29df6bfc 100644 --- a/PVSupport/EmulatorCore/PVEmulatorCore.h +++ b/PVSupport/EmulatorCore/PVEmulatorCore.h @@ -189,6 +189,4 @@ typedef NS_ENUM(NSInteger, GLESVersion) { completionHandler:(nonnull SaveStateCompletion)block; - (void)loadStateFromFileAtPath:(NSString *_Nonnull )fileName completionHandler:(nonnull SaveStateCompletion)block; - -- (void)rumble; @end diff --git a/PVSupport/EmulatorCore/PVEmulatorCore.m b/PVSupport/EmulatorCore/PVEmulatorCore.m index 1a6be4b08a..1d817e3bd5 100644 --- a/PVSupport/EmulatorCore/PVEmulatorCore.m +++ b/PVSupport/EmulatorCore/PVEmulatorCore.m @@ -317,33 +317,6 @@ - (void)setFramerateMultiplier:(CGFloat)framerateMultiplier { gameInterval = 1.0 / ([self frameInterval] * framerateMultiplier); } -- (void)rumble { -#if TARGET_OS_IOS - if (!self.supportsRumble) { - WLOG(@"Rumble called on core that doesn't support it"); - return; - } - - if (self.controller1 && !self.controller1.isAttachedToDevice) { - // Don't rumble if using a controller and it's not an attached type. - return; - } - - BOOL deviceHasHaptic = [[UIDevice currentDevice] valueForKey:@"_feedbackSupportLevel"] > 0; - if (deviceHasHaptic) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.rumbleGenerator impactOccurred]; - }); - } else { - AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); - } -#endif -} - -- (BOOL)supportsRumble { - return NO; -} - -(void)setController1:(GCController *)controller1 { if(![controller1 isEqual:_controller1]) { _controller1 = controller1; diff --git a/PVSupport/EmulatorCore/PVEmulatorCore.swift b/PVSupport/EmulatorCore/PVEmulatorCore.swift index 8d1b8978e1..82dac1ffd8 100644 --- a/PVSupport/EmulatorCore/PVEmulatorCore.swift +++ b/PVSupport/EmulatorCore/PVEmulatorCore.swift @@ -1,9 +1,58 @@ // -// PVEmulatorCore.swift -// PVSupport -// -// Created by Joseph Mattiello on 3/8/18. -// Copyright © 2018 James Addyman. All rights reserved. -// + // PVEmulatorCore.swift + // PVSupport + // + // Created by Joseph Mattiello on 3/8/18. + // Copyright © 2018 James Addyman. All rights reserved. + // import Foundation + +@objc +public extension PVEmulatorCore { + var supportsRumble: Bool { false } + + func rumble() { + rumble(player: 0) + } + + func rumble(player: Int) { + guard self.supportsRumble else { + WLOG("Rumble called on core that doesn't support it") + return + } + + var controller: GCController? + switch player { + case 1: + if let controller1 = self.controller1, controller1.isAttachedToDevice { + rumblePhone() + } else { + controller = self.controller1 + } + case 2: + controller = self.controller2 + case 3: + controller = self.controller3 + case 4: + controller = self.controller4 + default: + WLOG("No player \(player)") + return + } + + } + + func rumblePhone() { + + let deviceHasHaptic = (UIDevice.current.value(forKey: "_feedbackSupportLevel") as? Int ?? 0) > 0 + + DispatchQueue.main.async { + if deviceHasHaptic { +// self?.rumbleGenerator.impactOccurred() + } else { + AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) + } + } + } +} diff --git a/PVSupport/PVSupport.xcodeproj/project.pbxproj b/PVSupport/PVSupport.xcodeproj/project.pbxproj index f02d4fde26..2731edc977 100644 --- a/PVSupport/PVSupport.xcodeproj/project.pbxproj +++ b/PVSupport/PVSupport.xcodeproj/project.pbxproj @@ -187,6 +187,14 @@ B3CDEEC621D4C490000C55F7 /* CoreActions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3CDEEC421D4C490000C55F7 /* CoreActions.swift */; }; B3CDEEC821D4C4E5000C55F7 /* SaveStateSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3CDEEC721D4C4E5000C55F7 /* SaveStateSupport.swift */; }; B3CDEEC921D4C4E5000C55F7 /* SaveStateSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3CDEEC721D4C4E5000C55F7 /* SaveStateSupport.swift */; }; + B3D0EE20277FE85F002DC0A5 /* HapticsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3D0EE1F277FE85F002DC0A5 /* HapticsManager.swift */; }; + B3D0EE21277FE85F002DC0A5 /* HapticsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3D0EE1F277FE85F002DC0A5 /* HapticsManager.swift */; }; + B3D0EE23277FE87A002DC0A5 /* AHAP in Resources */ = {isa = PBXBuildFile; fileRef = B3D0EE22277FE879002DC0A5 /* AHAP */; }; + B3D0EE24277FE87A002DC0A5 /* AHAP in Resources */ = {isa = PBXBuildFile; fileRef = B3D0EE22277FE879002DC0A5 /* AHAP */; }; + B3D0EE25277FE87A002DC0A5 /* AHAP in Resources */ = {isa = PBXBuildFile; fileRef = B3D0EE22277FE879002DC0A5 /* AHAP */; }; + B3D0EE26277FE880002DC0A5 /* HapticsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3D0EE1F277FE85F002DC0A5 /* HapticsManager.swift */; }; + B3D0EE28277FE8C9002DC0A5 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3D0EE27277FE8C9002DC0A5 /* CoreHaptics.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + B3D0EE2A277FE8E1002DC0A5 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3D0EE29277FE8E0002DC0A5 /* CoreHaptics.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; B3D73D3D1EA15BB20023925B /* NSFileManager+OEHashingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B3D73D3B1EA15BB20023925B /* NSFileManager+OEHashingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; B3D73D3E1EA15BB20023925B /* NSFileManager+OEHashingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B3D73D3B1EA15BB20023925B /* NSFileManager+OEHashingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; B3D73D401EA15BB20023925B /* NSFileManager+OEHashingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B3D73D3C1EA15BB20023925B /* NSFileManager+OEHashingAdditions.m */; }; @@ -280,6 +288,10 @@ B3CDEEC121D4C454000C55F7 /* Controls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Controls.swift; sourceTree = ""; }; B3CDEEC421D4C490000C55F7 /* CoreActions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreActions.swift; sourceTree = ""; }; B3CDEEC721D4C4E5000C55F7 /* SaveStateSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveStateSupport.swift; sourceTree = ""; }; + B3D0EE1F277FE85F002DC0A5 /* HapticsManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HapticsManager.swift; sourceTree = ""; }; + B3D0EE22277FE879002DC0A5 /* AHAP */ = {isa = PBXFileReference; lastKnownFileType = folder; path = AHAP; sourceTree = ""; }; + B3D0EE27277FE8C9002DC0A5 /* CoreHaptics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreHaptics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.2.sdk/System/Library/Frameworks/CoreHaptics.framework; sourceTree = DEVELOPER_DIR; }; + B3D0EE29277FE8E0002DC0A5 /* CoreHaptics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreHaptics.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/CoreHaptics.framework; sourceTree = DEVELOPER_DIR; }; B3D73D3B1EA15BB20023925B /* NSFileManager+OEHashingAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFileManager+OEHashingAdditions.h"; sourceTree = ""; }; B3D73D3C1EA15BB20023925B /* NSFileManager+OEHashingAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFileManager+OEHashingAdditions.m"; sourceTree = ""; }; B3E6DADD20B7BF8600454DD4 /* UIDeviceExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIDeviceExtension.swift; sourceTree = ""; }; @@ -327,6 +339,7 @@ B3296E8926C67F6B0088AC32 /* CocoaLumberjackSwiftLogBackend in Frameworks */, B3AF6FDF219161C0000FA7F9 /* GameController.framework in Frameworks */, B3AF6FDD219161BC000FA7F9 /* Foundation.framework in Frameworks */, + B3D0EE28277FE8C9002DC0A5 /* CoreHaptics.framework in Frameworks */, B336B8F826B3991500960A81 /* CocoaLumberjackSwift in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -335,6 +348,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B3D0EE2A277FE8E1002DC0A5 /* CoreHaptics.framework in Frameworks */, B3CA5B5326E9E4DC00687B27 /* CocoaLumberjack in Frameworks */, B336B8F426B398A900960A81 /* Reachability in Frameworks */, B3AF6FDA2191616C000FA7F9 /* Foundation.framework in Frameworks */, @@ -389,6 +403,8 @@ 1ACEA64617F7467D0031B1C9 /* Frameworks */ = { isa = PBXGroup; children = ( + B3D0EE27277FE8C9002DC0A5 /* CoreHaptics.framework */, + B3D0EE29277FE8E0002DC0A5 /* CoreHaptics.framework */, B305EF9B276B4FDC003AE510 /* CoreGraphics.framework */, B305EF99276B4F0A003AE510 /* GameKit.framework */, B3FFF02C26E9E65800A33143 /* AVFoundation.framework */, @@ -500,6 +516,8 @@ B3AB36DC2187F4C4009D9244 /* Controller */ = { isa = PBXGroup; children = ( + B3D0EE22277FE879002DC0A5 /* AHAP */, + B3D0EE1F277FE85F002DC0A5 /* HapticsManager.swift */, B3AB37462187F57A009D9244 /* iCade */, ); path = Controller; @@ -815,6 +833,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B3D0EE25277FE87A002DC0A5 /* AHAP in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -829,6 +848,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B3D0EE24277FE87A002DC0A5 /* AHAP in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -836,6 +856,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B3D0EE23277FE87A002DC0A5 /* AHAP in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -876,6 +897,7 @@ B305EF76276B4E41003AE510 /* RealTimeThread.m in Sources */, B305EF77276B4E41003AE510 /* DiscSwappable.swift in Sources */, B305EF78276B4E41003AE510 /* NSObject+PVAbstractAdditions.m in Sources */, + B3D0EE26277FE880002DC0A5 /* HapticsManager.swift in Sources */, B305EF79276B4E41003AE510 /* PVEmulatorCore.m in Sources */, B305EF7A276B4E41003AE510 /* PVLogEntry.m in Sources */, B305EF7B276B4E41003AE510 /* TPCircularBuffer.c in Sources */, @@ -932,6 +954,7 @@ B3D73D401EA15BB20023925B /* NSFileManager+OEHashingAdditions.m in Sources */, B3CDEEC021D4C41D000C55F7 /* DiscSwappable.swift in Sources */, B3F0846D2188CA7A00FF39EE /* CocoaLumberExtensions.swift in Sources */, + B3D0EE21277FE85F002DC0A5 /* HapticsManager.swift in Sources */, B302F8AD20B73D6500C5E502 /* PVLogging.m in Sources */, B3447E91218B7E4B00557ACE /* CAAudioTimeStamp.cpp in Sources */, B3C96EA91D62C3C3003F1E93 /* OEGameAudio.m in Sources */, @@ -980,6 +1003,7 @@ B34AB57D2106DC6100C45F09 /* RealTimeThread.m in Sources */, B3CDEEBF21D4C41D000C55F7 /* DiscSwappable.swift in Sources */, B34AB57B2106DC6100C45F09 /* NSObject+PVAbstractAdditions.m in Sources */, + B3D0EE20277FE85F002DC0A5 /* HapticsManager.swift in Sources */, B34AB57E2106DC6100C45F09 /* PVEmulatorCore.m in Sources */, B34AB5742106DC4100C45F09 /* PVLogEntry.m in Sources */, B34AB5792106DC5300C45F09 /* TPCircularBuffer.c in Sources */, diff --git a/Provenance.xcodeproj/xcshareddata/xcschemes/ProvenanceTV.xcscheme b/Provenance.xcodeproj/xcshareddata/xcschemes/ProvenanceTV.xcscheme index 659ce551c6..85c900b0b5 100644 --- a/Provenance.xcodeproj/xcshareddata/xcschemes/ProvenanceTV.xcscheme +++ b/Provenance.xcodeproj/xcshareddata/xcschemes/ProvenanceTV.xcscheme @@ -4,7 +4,7 @@ version = "1.3"> + buildImplicitDependencies = "YES"> ) -> GCVirtualController in + + // Earlier I used `fullScreenCover` for games in MenuScreen, + // but GCVirtualController was BELOW it. + // So keep GCVirtualController in View, not Overlay/Modal/Sheet containers + // https://developer.apple.com/forums/thread/682138 + let virtualConfiguration = GCVirtualController.Configuration() + virtualConfiguration.elements = elements + let virtualController = GCVirtualController(configuration: virtualConfiguration) + + return virtualController +} + +@available(iOS 15.0, *) +final class PVN64ControllerViewController2: PVControllerViewController { + let cPadAsThumbstick: Bool = true + lazy var elements: Set = { + var elements: Set = [ + GCInputLeftThumbstick, + GCInputButtonA, + GCInputButtonB, + GCInputLeftShoulder, + GCInputRightShoulder, + GCInputLeftTrigger, + GCInputDirectionPad, + GCInputDirectionalCardinalDpad] + + if cPadAsThumbstick { + elements.insert(GCInputRightShoulder) + } + return elements + }() + + var virtualController: GCVirtualController? { + didSet { + if let virtualController = virtualController { + virtualController.connect { maybeError in + guard maybeError == nil else { + ELOG("\(maybeError!.localizedDescription)") + return + } + } + } + } + willSet { + if newValue == nil, let virtualController = virtualController { + virtualController.disconnect() + } + } + } + + override func setupTouchControls() { + guard virtualController == nil else { return } + let isKeyboardConnected = GCKeyboard.coalesced != nil + if isKeyboardConnected { + print("Keyboard is connected") + } + + let isGamepadConnected = GCController.controllers().count > 0 + + if isGamepadConnected { + print("Gamepad is connected") + } +// TODO: Hookup / check keyboard +// if !isGamepadConnected { +// print("There is no keyboard or gamepad so just create Virtual one") + virtualController = createVirtualController(elements) +// } + } + + override func viewWillDisappear(_ animated: Bool) { + virtualController?.disconnect() + super.viewWillDisappear(animated) + } +} + final class PVN64ControllerViewController: PVControllerViewController { override func layoutViews() { buttonGroup?.subviews.forEach { diff --git a/Provenance/Emulator/CoreOptionsViewController.swift b/Provenance/Emulator/CoreOptionsViewController.swift index 35d28317a9..09f23bf390 100644 --- a/Provenance/Emulator/CoreOptionsViewController.swift +++ b/Provenance/Emulator/CoreOptionsViewController.swift @@ -53,67 +53,97 @@ final class CoreOptionsViewController: QuickTableViewController { } func generateTableViewViewModels() { - typealias TableRow = Row & RowStyle - - let sections: [Section] = groups.map { - let rows: [TableRow] = $0.options.enumerated().map { (rowIndex, option) in - switch option { - case let .bool(display, defaultValue): - let detailText: DetailText = display.description != nil ? DetailText.subtitle(display.description!) : .none - return SwitchRow(text: display.title, detailText: detailText, switchValue: core.valueForOption(Bool.self, option.key) ?? defaultValue, action: { _ in - let value = self.core.valueForOption(Bool.self, option.key) ?? defaultValue - self.core.setValue(!value, forOption: option) - }) - case let .multi(display, values): - let detailText: DetailText = display.description != nil ? DetailText.subtitle(display.description!) : .none - return NavigationRow(text: display.title, - detailText: detailText, - icon: nil, - customization: { _, _ in - }, - action: { _ in - let currentSelection: String? = self.core.valueForOption(String.self, option.key) ?? option.defaultValue as? String - let actionController = UIAlertController(title: display.title, message: nil, preferredStyle: .actionSheet) - - if let popoverPresentationController = actionController.popoverPresentationController { - let cellRect = self.tableView.rectForRow(at: IndexPath(row: rowIndex, section: 0)) - popoverPresentationController.sourceView = self.tableView - popoverPresentationController.sourceRect = cellRect - } - - values.forEach { value in - var title = value.title - if currentSelection == value.title { - title += " ✔︎" - } - let action = UIAlertAction(title: title, style: .default, handler: { _ in - self.core.setValue(value.title, forOption: option) - }) - actionController.addAction(action) - } - actionController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) - self.present(actionController, animated: true) - - if let indexPath = self.tableView.indexPathForSelectedRow { - self.tableView.deselectRow(at: indexPath, animated: false) - } - }) - case .range: - fatalError("Unfinished feature") - case .string: - fatalError("Unfinished feature") - default: - fatalError("Unfinished feature") - } - } - return Section(title: $0.title, rows: rows) - } - #if os(tvOS) self.tableView.backgroundColor = .black self.tableView.mask = nil #endif + let sections: [Section] = sections(forGroups: self.groups) tableContents = sections } + + func sections(forGroups groups: [TableGroup]) -> [Section] { + typealias TableRow = Row & RowStyle + + let sections: [Section] = groups.map { + let rows: [TableRow] = $0.options.enumerated().map { (rowIndex, option) in + switch option { + case let .bool(display, defaultValue): + let detailText: DetailText = display.description != nil ? DetailText.subtitle(display.description!) : .none + return SwitchRow(text: display.title, detailText: detailText, switchValue: core.valueForOption(Bool.self, option.key) ?? defaultValue, action: { _ in + let value = self.core.valueForOption(Bool.self, option.key) ?? defaultValue + self.core.setValue(!value, forOption: option) + }) + case let .multi(display, values), let .enumeration(display, values: values): + let detailText: DetailText = display.description != nil ? DetailText.subtitle(display.description!) : .none + return NavigationRow(text: display.title, + detailText: detailText, + icon: nil, + customization: { _, _ in + }, + action: { _ in + let currentSelection: String? = self.core.valueForOption(String.self, option.key) ?? option.defaultValue as? String + let actionController = UIAlertController(title: display.title, message: nil, preferredStyle: .actionSheet) + + if let popoverPresentationController = actionController.popoverPresentationController { + let cellRect = self.tableView.rectForRow(at: IndexPath(row: rowIndex, section: 0)) + popoverPresentationController.sourceView = self.tableView + popoverPresentationController.sourceRect = cellRect + } + + values.forEach { value in + var title = value.title + if currentSelection == value.title { + title += " ✔︎" + } + let action = UIAlertAction(title: title, style: .default, handler: { _ in + self.core.setValue(value.title, forOption: option) + }) + actionController.addAction(action) + } + actionController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) + self.present(actionController, animated: true) + + if let indexPath = self.tableView.indexPathForSelectedRow { + self.tableView.deselectRow(at: indexPath, animated: false) + } + }) + case let .range(display, range: range, defaultValue: defaultValue): + let detailText: DetailText = display.description != nil ? DetailText.subtitle(display.description!) : .none + return NavigationRow(text: display.title, + detailText: detailText, + icon: nil, + customization: { _, _ in + }, + action: { _ in + }) + case let .rangef(display, range: range, defaultValue: defaultValue): + let detailText: DetailText = display.description != nil ? DetailText.subtitle(display.description!) : .none + return NavigationRow(text: display.title, + detailText: detailText, + icon: nil, + customization: { _, _ in + }, + action: { _ in + }) + case .string: + fatalError("Unfinished feature") + case let .group(display, subOptions: subOptions): + let detailText: DetailText = display.description != nil ? DetailText.subtitle(display.description!) : .none +// return self.sections(forGroups: subOptions) + return NavigationRow(text: display.title, + detailText: detailText, + icon: nil, + customization: { _, _ in + }, + action: { _ in + }) + default: + fatalError("Unfinished feature") + } + } + return Section(title: $0.title, rows: rows) + } + return sections + } } diff --git a/Provenance/Emulator/PVCoreFactory.swift b/Provenance/Emulator/PVCoreFactory.swift index ed9a178f49..43491cb528 100644 --- a/Provenance/Emulator/PVCoreFactory.swift +++ b/Provenance/Emulator/PVCoreFactory.swift @@ -196,7 +196,7 @@ public final class PVCoreFactory: NSObject { } case .N64: if let core = core as? PVN64SystemResponderClient { - return PVN64ControllerViewController(controlLayout: controllerLayout, system: system, responder: core) + return PVN64ControllerViewController(controlLayout: controllerLayout, system: system, responder: core) } else { fatalError("Core doesn't implement PVN64SystemResponderClient") } diff --git a/Provenance/Game Library/UI/SaveStates/PVSaveStateCollectionViewCell.swift b/Provenance/Game Library/UI/SaveStates/PVSaveStateCollectionViewCell.swift index 62c5e76e9d..2bcf03bcdf 100644 --- a/Provenance/Game Library/UI/SaveStates/PVSaveStateCollectionViewCell.swift +++ b/Provenance/Game Library/UI/SaveStates/PVSaveStateCollectionViewCell.swift @@ -41,7 +41,7 @@ final class PVSaveStateCollectionViewCell: UICollectionViewCell { weak var saveState: PVSaveState? { didSet { - if let saveState = saveState { + if let saveState = saveState, !saveState.isInvalidated { if let image = saveState.image { imageView.image = UIImage(contentsOfFile: image.url.path) }