diff --git a/desmume/src/cocoa/DeSmuME (Legacy).xcodeproj/project.pbxproj b/desmume/src/cocoa/DeSmuME (Legacy).xcodeproj/project.pbxproj index 195d2a210..a3384306a 100644 --- a/desmume/src/cocoa/DeSmuME (Legacy).xcodeproj/project.pbxproj +++ b/desmume/src/cocoa/DeSmuME (Legacy).xcodeproj/project.pbxproj @@ -887,6 +887,69 @@ ABB9215E17CEB53A0049D4C5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB9215917CEB53A0049D4C5 /* slot1comp_protocol.cpp */; }; ABB9215F17CEB53A0049D4C5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB9215917CEB53A0049D4C5 /* slot1comp_protocol.cpp */; }; ABB9216017CEB53A0049D4C5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB9215917CEB53A0049D4C5 /* slot1comp_protocol.cpp */; }; + ABBBF2EE18B7F59E00BDE776 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */; }; + ABBBF2EF18B7F59E00BDE776 /* bilinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */; }; + ABBBF2F118B7F59E00BDE776 /* epx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E018B7F59E00BDE776 /* epx.cpp */; }; + ABBBF2F218B7F59E00BDE776 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */; }; + ABBBF2F318B7F59E00BDE776 /* hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */; }; + ABBBF2F418B7F59E00BDE776 /* lq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */; }; + ABBBF2F518B7F59E00BDE776 /* scanline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E418B7F59E00BDE776 /* scanline.cpp */; }; + ABBBF2F618B7F59E00BDE776 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */; }; + ABBBF2F718B7F59E00BDE776 /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */; }; + ABBBF2F818B7F59E00BDE776 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */; }; + ABBBF2F918B7F59E00BDE776 /* bilinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */; }; + ABBBF2FB18B7F59E00BDE776 /* epx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E018B7F59E00BDE776 /* epx.cpp */; }; + ABBBF2FC18B7F59E00BDE776 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */; }; + ABBBF2FD18B7F59E00BDE776 /* hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */; }; + ABBBF2FE18B7F59E00BDE776 /* lq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */; }; + ABBBF2FF18B7F59E00BDE776 /* scanline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E418B7F59E00BDE776 /* scanline.cpp */; }; + ABBBF30018B7F59E00BDE776 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */; }; + ABBBF30118B7F59E00BDE776 /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */; }; + ABBBF30218B7F59E00BDE776 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */; }; + ABBBF30318B7F59E00BDE776 /* bilinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */; }; + ABBBF30518B7F59E00BDE776 /* epx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E018B7F59E00BDE776 /* epx.cpp */; }; + ABBBF30618B7F59E00BDE776 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */; }; + ABBBF30718B7F59E00BDE776 /* hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */; }; + ABBBF30818B7F59E00BDE776 /* lq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */; }; + ABBBF30918B7F59E00BDE776 /* scanline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E418B7F59E00BDE776 /* scanline.cpp */; }; + ABBBF30A18B7F59E00BDE776 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */; }; + ABBBF30B18B7F59E00BDE776 /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */; }; + ABBBF30C18B7F59E00BDE776 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */; }; + ABBBF30D18B7F59E00BDE776 /* bilinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */; }; + ABBBF30F18B7F59E00BDE776 /* epx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E018B7F59E00BDE776 /* epx.cpp */; }; + ABBBF31018B7F59E00BDE776 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */; }; + ABBBF31118B7F59E00BDE776 /* hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */; }; + ABBBF31218B7F59E00BDE776 /* lq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */; }; + ABBBF31318B7F59E00BDE776 /* scanline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E418B7F59E00BDE776 /* scanline.cpp */; }; + ABBBF31418B7F59E00BDE776 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */; }; + ABBBF31518B7F59E00BDE776 /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */; }; + ABBBF31618B7F59E00BDE776 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */; }; + ABBBF31718B7F59E00BDE776 /* bilinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */; }; + ABBBF31918B7F59E00BDE776 /* epx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E018B7F59E00BDE776 /* epx.cpp */; }; + ABBBF31A18B7F59E00BDE776 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */; }; + ABBBF31B18B7F59E00BDE776 /* hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */; }; + ABBBF31C18B7F59E00BDE776 /* lq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */; }; + ABBBF31D18B7F59E00BDE776 /* scanline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E418B7F59E00BDE776 /* scanline.cpp */; }; + ABBBF31E18B7F59E00BDE776 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */; }; + ABBBF31F18B7F59E00BDE776 /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */; }; + ABBBF32018B7F59E00BDE776 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */; }; + ABBBF32118B7F59E00BDE776 /* bilinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */; }; + ABBBF32318B7F59E00BDE776 /* epx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E018B7F59E00BDE776 /* epx.cpp */; }; + ABBBF32418B7F59E00BDE776 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */; }; + ABBBF32518B7F59E00BDE776 /* hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */; }; + ABBBF32618B7F59E00BDE776 /* lq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */; }; + ABBBF32718B7F59E00BDE776 /* scanline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E418B7F59E00BDE776 /* scanline.cpp */; }; + ABBBF32818B7F59E00BDE776 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */; }; + ABBBF32918B7F59E00BDE776 /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */; }; + ABBBF32A18B7F59E00BDE776 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */; }; + ABBBF32B18B7F59E00BDE776 /* bilinear.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */; }; + ABBBF32D18B7F59E00BDE776 /* epx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E018B7F59E00BDE776 /* epx.cpp */; }; + ABBBF32E18B7F59E00BDE776 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */; }; + ABBBF32F18B7F59E00BDE776 /* hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */; }; + ABBBF33018B7F59E00BDE776 /* lq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */; }; + ABBBF33118B7F59E00BDE776 /* scanline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E418B7F59E00BDE776 /* scanline.cpp */; }; + ABBBF33218B7F59E00BDE776 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */; }; + ABBBF33318B7F59E00BDE776 /* xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */; }; ABBF053014B5436E00E505A0 /* cocoa_file.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABBF052F14B5436E00E505A0 /* cocoa_file.mm */; }; ABBF053114B5436E00E505A0 /* cocoa_file.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABBF052F14B5436E00E505A0 /* cocoa_file.mm */; }; ABBF053214B5436E00E505A0 /* cocoa_file.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABBF052F14B5436E00E505A0 /* cocoa_file.mm */; }; @@ -1424,6 +1487,22 @@ ABB328EE18313F7C00FEE4C4 /* slot2_auto.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot2_auto.cpp; sourceTree = ""; }; ABB9215817CEB53A0049D4C5 /* slot1comp_protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slot1comp_protocol.h; sourceTree = ""; }; ABB9215917CEB53A0049D4C5 /* slot1comp_protocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot1comp_protocol.cpp; sourceTree = ""; }; + ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 2xsai.cpp; sourceTree = ""; }; + ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bilinear.cpp; sourceTree = ""; }; + ABBBF2E018B7F59E00BDE776 /* epx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = epx.cpp; sourceTree = ""; }; + ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq2x.cpp; sourceTree = ""; }; + ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq4x.cpp; sourceTree = ""; }; + ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lq2x.cpp; sourceTree = ""; }; + ABBBF2E418B7F59E00BDE776 /* scanline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scanline.cpp; sourceTree = ""; }; + ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = videofilter.cpp; sourceTree = ""; }; + ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xbrz.cpp; sourceTree = ""; }; + ABBBF2E718B7F59E00BDE776 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter.h; sourceTree = ""; }; + ABBBF2E818B7F59E00BDE776 /* hq2x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hq2x.h; sourceTree = ""; }; + ABBBF2E918B7F59E00BDE776 /* hq4x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hq4x.h; sourceTree = ""; }; + ABBBF2EA18B7F59E00BDE776 /* interp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interp.h; sourceTree = ""; }; + ABBBF2EB18B7F59E00BDE776 /* lq2x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lq2x.h; sourceTree = ""; }; + ABBBF2EC18B7F59E00BDE776 /* videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videofilter.h; sourceTree = ""; }; + ABBBF2ED18B7F59E00BDE776 /* xbrz.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xbrz.h; sourceTree = ""; }; ABBF045E14B5144D00E505A0 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = "translations/English.lproj/MainMenu (Legacy).xib"; sourceTree = ""; }; ABBF04CB14B51BBB00E505A0 /* Chinese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Chinese; path = translations/Chinese.lproj/Localizable.strings; sourceTree = ""; }; ABBF04CC14B51BC300E505A0 /* Norwegian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Norwegian; path = translations/Norwegian.lproj/Localizable.strings; sourceTree = ""; }; @@ -1718,6 +1797,7 @@ AB06CD9B135B8AED00E977B3 /* addons */, AB06CDA7135B8AED00E977B3 /* cli */, AB06CDAF135B8AED00E977B3 /* gdbstub */, + ABBBF2DC18B7F59E00BDE776 /* filter */, AB06CDB3135B8AED00E977B3 /* metaspu */, AB06CDDC135B8AED00E977B3 /* utils */, AB06CD0F135B8ACE00E977B3 /* aggdraw.cpp */, @@ -2093,6 +2173,30 @@ name = "App Icons"; sourceTree = ""; }; + ABBBF2DC18B7F59E00BDE776 /* filter */ = { + isa = PBXGroup; + children = ( + ABBBF2DD18B7F59E00BDE776 /* 2xsai.cpp */, + ABBBF2DE18B7F59E00BDE776 /* bilinear.cpp */, + ABBBF2E018B7F59E00BDE776 /* epx.cpp */, + ABBBF2E118B7F59E00BDE776 /* hq2x.cpp */, + ABBBF2E218B7F59E00BDE776 /* hq4x.cpp */, + ABBBF2E318B7F59E00BDE776 /* lq2x.cpp */, + ABBBF2E418B7F59E00BDE776 /* scanline.cpp */, + ABBBF2E518B7F59E00BDE776 /* videofilter.cpp */, + ABBBF2E618B7F59E00BDE776 /* xbrz.cpp */, + ABBBF2E718B7F59E00BDE776 /* filter.h */, + ABBBF2E818B7F59E00BDE776 /* hq2x.h */, + ABBBF2E918B7F59E00BDE776 /* hq4x.h */, + ABBBF2EA18B7F59E00BDE776 /* interp.h */, + ABBBF2EB18B7F59E00BDE776 /* lq2x.h */, + ABBBF2EC18B7F59E00BDE776 /* videofilter.h */, + ABBBF2ED18B7F59E00BDE776 /* xbrz.h */, + ); + name = filter; + path = ../filter; + sourceTree = SOURCE_ROOT; + }; ABC3ADEC14B7DC6E00D5B13D /* userinterface */ = { isa = PBXGroup; children = ( @@ -2983,6 +3087,15 @@ AB126D2A182ECC7B00EBCF22 /* slot2_passme.cpp in Sources */, ABB328EC18313F5A00FEE4C4 /* slot2.cpp in Sources */, ABB328F418313F7C00FEE4C4 /* slot2_auto.cpp in Sources */, + ABBBF32018B7F59E00BDE776 /* 2xsai.cpp in Sources */, + ABBBF32118B7F59E00BDE776 /* bilinear.cpp in Sources */, + ABBBF32318B7F59E00BDE776 /* epx.cpp in Sources */, + ABBBF32418B7F59E00BDE776 /* hq2x.cpp in Sources */, + ABBBF32518B7F59E00BDE776 /* hq4x.cpp in Sources */, + ABBBF32618B7F59E00BDE776 /* lq2x.cpp in Sources */, + ABBBF32718B7F59E00BDE776 /* scanline.cpp in Sources */, + ABBBF32818B7F59E00BDE776 /* videofilter.cpp in Sources */, + ABBBF32918B7F59E00BDE776 /* xbrz.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3134,6 +3247,15 @@ AB126D28182ECC7B00EBCF22 /* slot2_passme.cpp in Sources */, ABB328EA18313F5A00FEE4C4 /* slot2.cpp in Sources */, ABB328F218313F7C00FEE4C4 /* slot2_auto.cpp in Sources */, + ABBBF30C18B7F59E00BDE776 /* 2xsai.cpp in Sources */, + ABBBF30D18B7F59E00BDE776 /* bilinear.cpp in Sources */, + ABBBF30F18B7F59E00BDE776 /* epx.cpp in Sources */, + ABBBF31018B7F59E00BDE776 /* hq2x.cpp in Sources */, + ABBBF31118B7F59E00BDE776 /* hq4x.cpp in Sources */, + ABBBF31218B7F59E00BDE776 /* lq2x.cpp in Sources */, + ABBBF31318B7F59E00BDE776 /* scanline.cpp in Sources */, + ABBBF31418B7F59E00BDE776 /* videofilter.cpp in Sources */, + ABBBF31518B7F59E00BDE776 /* xbrz.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3285,6 +3407,15 @@ AB126D26182ECC7B00EBCF22 /* slot2_passme.cpp in Sources */, ABB328E818313F5A00FEE4C4 /* slot2.cpp in Sources */, ABB328F018313F7C00FEE4C4 /* slot2_auto.cpp in Sources */, + ABBBF2F818B7F59E00BDE776 /* 2xsai.cpp in Sources */, + ABBBF2F918B7F59E00BDE776 /* bilinear.cpp in Sources */, + ABBBF2FB18B7F59E00BDE776 /* epx.cpp in Sources */, + ABBBF2FC18B7F59E00BDE776 /* hq2x.cpp in Sources */, + ABBBF2FD18B7F59E00BDE776 /* hq4x.cpp in Sources */, + ABBBF2FE18B7F59E00BDE776 /* lq2x.cpp in Sources */, + ABBBF2FF18B7F59E00BDE776 /* scanline.cpp in Sources */, + ABBBF30018B7F59E00BDE776 /* videofilter.cpp in Sources */, + ABBBF30118B7F59E00BDE776 /* xbrz.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3406,6 +3537,15 @@ AB126D25182ECC7B00EBCF22 /* slot2_passme.cpp in Sources */, ABB328E718313F5A00FEE4C4 /* slot2.cpp in Sources */, ABB328EF18313F7C00FEE4C4 /* slot2_auto.cpp in Sources */, + ABBBF2EE18B7F59E00BDE776 /* 2xsai.cpp in Sources */, + ABBBF2EF18B7F59E00BDE776 /* bilinear.cpp in Sources */, + ABBBF2F118B7F59E00BDE776 /* epx.cpp in Sources */, + ABBBF2F218B7F59E00BDE776 /* hq2x.cpp in Sources */, + ABBBF2F318B7F59E00BDE776 /* hq4x.cpp in Sources */, + ABBBF2F418B7F59E00BDE776 /* lq2x.cpp in Sources */, + ABBBF2F518B7F59E00BDE776 /* scanline.cpp in Sources */, + ABBBF2F618B7F59E00BDE776 /* videofilter.cpp in Sources */, + ABBBF2F718B7F59E00BDE776 /* xbrz.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3527,6 +3667,15 @@ AB126D27182ECC7B00EBCF22 /* slot2_passme.cpp in Sources */, ABB328E918313F5A00FEE4C4 /* slot2.cpp in Sources */, ABB328F118313F7C00FEE4C4 /* slot2_auto.cpp in Sources */, + ABBBF30218B7F59E00BDE776 /* 2xsai.cpp in Sources */, + ABBBF30318B7F59E00BDE776 /* bilinear.cpp in Sources */, + ABBBF30518B7F59E00BDE776 /* epx.cpp in Sources */, + ABBBF30618B7F59E00BDE776 /* hq2x.cpp in Sources */, + ABBBF30718B7F59E00BDE776 /* hq4x.cpp in Sources */, + ABBBF30818B7F59E00BDE776 /* lq2x.cpp in Sources */, + ABBBF30918B7F59E00BDE776 /* scanline.cpp in Sources */, + ABBBF30A18B7F59E00BDE776 /* videofilter.cpp in Sources */, + ABBBF30B18B7F59E00BDE776 /* xbrz.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3658,6 +3807,15 @@ AB126D2B182ECC7B00EBCF22 /* slot2_passme.cpp in Sources */, ABB328ED18313F5A00FEE4C4 /* slot2.cpp in Sources */, ABB328F518313F7C00FEE4C4 /* slot2_auto.cpp in Sources */, + ABBBF32A18B7F59E00BDE776 /* 2xsai.cpp in Sources */, + ABBBF32B18B7F59E00BDE776 /* bilinear.cpp in Sources */, + ABBBF32D18B7F59E00BDE776 /* epx.cpp in Sources */, + ABBBF32E18B7F59E00BDE776 /* hq2x.cpp in Sources */, + ABBBF32F18B7F59E00BDE776 /* hq4x.cpp in Sources */, + ABBBF33018B7F59E00BDE776 /* lq2x.cpp in Sources */, + ABBBF33118B7F59E00BDE776 /* scanline.cpp in Sources */, + ABBBF33218B7F59E00BDE776 /* videofilter.cpp in Sources */, + ABBBF33318B7F59E00BDE776 /* xbrz.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3809,6 +3967,15 @@ AB126D29182ECC7B00EBCF22 /* slot2_passme.cpp in Sources */, ABB328EB18313F5A00FEE4C4 /* slot2.cpp in Sources */, ABB328F318313F7C00FEE4C4 /* slot2_auto.cpp in Sources */, + ABBBF31618B7F59E00BDE776 /* 2xsai.cpp in Sources */, + ABBBF31718B7F59E00BDE776 /* bilinear.cpp in Sources */, + ABBBF31918B7F59E00BDE776 /* epx.cpp in Sources */, + ABBBF31A18B7F59E00BDE776 /* hq2x.cpp in Sources */, + ABBBF31B18B7F59E00BDE776 /* hq4x.cpp in Sources */, + ABBBF31C18B7F59E00BDE776 /* lq2x.cpp in Sources */, + ABBBF31D18B7F59E00BDE776 /* scanline.cpp in Sources */, + ABBBF31E18B7F59E00BDE776 /* videofilter.cpp in Sources */, + ABBBF31F18B7F59E00BDE776 /* xbrz.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4048,6 +4215,7 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; GCC_ALTIVEC_EXTENSIONS = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_FAST_OBJC_DISPATCH = NO; @@ -4090,6 +4258,7 @@ COPY_PHASE_STRIP = NO; GCC_ALTIVEC_EXTENSIONS = YES; GCC_AUTO_VECTORIZATION = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_SSE3_EXTENSIONS = YES; GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; diff --git a/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj b/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj index 658baedc9..0c7d5bf82 100644 --- a/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj +++ b/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj @@ -4219,6 +4219,7 @@ DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; GCC_ALTIVEC_EXTENSIONS = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_FAST_MATH = YES; @@ -4271,6 +4272,7 @@ ENABLE_OPENMP_SUPPORT = NO; GCC_ALTIVEC_EXTENSIONS = YES; GCC_AUTO_VECTORIZATION = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = YES; GCC_ENABLE_SSE3_EXTENSIONS = YES; GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; diff --git a/desmume/src/cocoa/nds_control_legacy.h b/desmume/src/cocoa/nds_control_legacy.h index bd36ff7b0..9a75591c8 100644 --- a/desmume/src/cocoa/nds_control_legacy.h +++ b/desmume/src/cocoa/nds_control_legacy.h @@ -159,4 +159,5 @@ @end +void RomIconToRGBA8888(uint32_t *bitmapData); bool OSXOpenGLRendererInit(); diff --git a/desmume/src/cocoa/nds_control_legacy.mm b/desmume/src/cocoa/nds_control_legacy.mm index 8900d7aa2..f7684519f 100644 --- a/desmume/src/cocoa/nds_control_legacy.mm +++ b/desmume/src/cocoa/nds_control_legacy.mm @@ -130,7 +130,7 @@ bool OSXOpenGLRendererInit() timer_based = ([NSObject instancesRespondToSelector:@selector(performSelector:onThread:withObject:waitUntilDone:)]==NO)?true:false; #ifdef HAVE_JIT - CommonSettings.use_jit = false; + CommonSettings.use_jit = true; #endif //Firmware setup @@ -461,81 +461,61 @@ bool OSXOpenGLRendererInit() - (NSImage *) romIcon { - NDS_header *header = NDS_getROMHeader(); - if(!header)return nil; - - if(header->IconOff == 0)return nil; - - NSImage *result = [[NSImage alloc] initWithSize:NSMakeSize(32, 32)]; - if(result == nil)return nil; - - NSBitmapImageRep *image = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL - pixelsWide:32 - pixelsHigh:32 - bitsPerSample:8 - samplesPerPixel:4 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSCalibratedRGBColorSpace - bytesPerRow:32 * 4 - bitsPerPixel:32]; - - [image setAlpha:YES]; - - if(image == nil) + NSImage *newImage = nil; + + NDS_header *ndsRomHeader = NDS_getROMHeader(); + if (ndsRomHeader == nil) { - [result release]; - return nil; + return newImage; } - - //load the palette - //the pallete contains 16 entries, 2 bytes each - //the first entry represents alpha so the value is ignored - - u8 palette[16*4]; //16 entries at 32 bit (we will convert) - int x; - - for(x = 0; x < 16; x++) + + NSUInteger iconOffset = ndsRomHeader->IconOff; + if(iconOffset == 0) { - u16 temp = T1ReadWord(MMU.CART_ROM, header->IconOff + 0x220 + x*2); - palette[x*4+0] = (temp & 0x001F) << 3; //r - palette[x*4+1] = (temp & 0x03E0) >> 5 << 3; //g - palette[x*4+2] = (temp & 0x7C00) >> 10 << 3; //b - palette[x*4+3] = x==0?0:255; //alpha: color 0 is always transparent + return newImage; } - - //load the image - //the image is 32x32 pixels, each 4bit (correspoding to the pallete) - //it's stored just before the pallete - - u8 *bitmap_data = [image bitmapData]; - - int y, inner_y, inner_x, offset = 0; - for(y = 0; y < 4; y++) //the image is split into 16 squares (4 on each axis) - for(x = 0; x < 4; x++) - for(inner_y = 0; inner_y < 8; inner_y++) //each square is 8x8 - for(inner_x = 0; inner_x < 8; inner_x+=2) //increment by 2 since each byte is two 4bit colors + + newImage = [[NSImage alloc] initWithSize:NSMakeSize(32, 32)]; + if(newImage == nil) { - //grab the color indicies of the next 2 pixels - u8 color = T1ReadByte(MMU.CART_ROM, header->IconOff + 0x20 + offset++); - - //set the first pixel color - *(bitmap_data+( (y*8+inner_y)*32*4+(x*8+inner_x+1)*4+0 )) = palette[(color>>4) * 4 + 0]; //r - *(bitmap_data+( (y*8+inner_y)*32*4+(x*8+inner_x+1)*4+1 )) = palette[(color>>4) * 4 + 1]; //g - *(bitmap_data+( (y*8+inner_y)*32*4+(x*8+inner_x+1)*4+2 )) = palette[(color>>4) * 4 + 2]; //b - *(bitmap_data+( (y*8+inner_y)*32*4+(x*8+inner_x+1)*4+3 )) = palette[(color>>4) * 4 + 3]; //a - - //set the next pixel color - *(bitmap_data+( (y*8+inner_y)*32*4+(x*8+inner_x+0)*4+0 )) = palette[(color&0x0F) * 4 + 0]; //r - *(bitmap_data+( (y*8+inner_y)*32*4+(x*8+inner_x+0)*4+1 )) = palette[(color&0x0F) * 4 + 1]; //g - *(bitmap_data+( (y*8+inner_y)*32*4+(x*8+inner_x+0)*4+2 )) = palette[(color&0x0F) * 4 + 2]; //b - *(bitmap_data+( (y*8+inner_y)*32*4+(x*8+inner_x+0)*4+3 )) = palette[(color&0x0F) * 4 + 3]; //a + return newImage; } - - [result addRepresentation:image]; - [image release]; - [result autorelease]; - return result; + + NSUInteger w = ROM_ICON_WIDTH; + NSUInteger h = ROM_ICON_HEIGHT; + NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL + pixelsWide:w + pixelsHigh:h + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSCalibratedRGBColorSpace + bytesPerRow:w * 4 + bitsPerPixel:32]; + + if(imageRep == nil) + { + [newImage release]; + newImage = nil; + return newImage; + } + + uint32_t *bitmapData = (uint32_t *)[imageRep bitmapData]; + RomIconToRGBA8888(bitmapData); + +#ifdef __BIG_ENDIAN__ + uint32_t *bitmapDataEnd = bitmapData + (w * h); + while (bitmapData < bitmapDataEnd) + { + *bitmapData++ = CFSwapInt32LittleToHost(*bitmapData); + } +#endif + + [imageRep autorelease]; + [newImage addRepresentation:imageRep]; + + return [newImage autorelease]; } - (NSString *) romFileName @@ -1185,3 +1165,120 @@ bool OSXOpenGLRendererInit() } @end + +void RomIconToRGBA8888(uint32_t *bitmapData) +{ + const RomBanner &ndsRomBanner = gameInfo.getRomBanner(); // Contains the memory addresses we need to get our read pointer locations. + const uint16_t *iconClutPtr; // Read pointer for the icon's CLUT. + const uint32_t *iconPixPtr; // Read pointer for the icon's pixel data. + + uint32_t clut[16]; // 4-bit indexed CLUT, storing RGBA8888 values for each color. + + uint32_t pixRowColors; // Temp location for storing an 8 pixel row of 4-bit indexed color values from the icon's pixel data. + unsigned int pixRowIndex; // Temp location for tracking which pixel row of an 8x8 square that we are reading. + unsigned int x; // Temp location for tracking which of the 8x8 pixel squares that we are reading (x-dimension). + unsigned int y; // Temp location for tracking which of the 8x8 pixel squares that we are reading (y-dimension). + + uint32_t *bitmapPixPtr; // Write pointer for the RGBA8888 bitmap pixel data, relative to the passed in *bitmapData pointer. + + if (bitmapData == NULL) + { + return; + } + + if (&ndsRomBanner == NULL) + { + memset(bitmapData, 0, 4096); // 4096 bytes = 32px * 32px * sizeof(uint32_t) + return; + } + + // Set all of our icon read pointers. + iconClutPtr = (uint16_t *)ndsRomBanner.palette + 1; + iconPixPtr = (uint32_t *)ndsRomBanner.bitmap; + + // Setup the 4-bit CLUT. + // + // The actual color values are stored with the ROM icon data in RGB555 format. + // We convert these color values and store them in the CLUT as RGBA8888 values. + // + // The first entry always represents the alpha, so we can just ignore it. + clut[0] = 0x00000000; + RGB555ToRGBA8888Buffer(iconClutPtr, &clut[1], 15); + + // Load the image from the icon pixel data. + // + // ROM icons are stored in 4-bit indexed color and have dimensions of 32x32 pixels. + // Also, ROM icons are split into 16 separate 8x8 pixel squares arranged in a 4x4 + // array. Here, we sequentially read from the ROM data, and adjust our write + // location appropriately within the bitmap memory block. + for(y = 0; y < 4; y++) + { + for(x = 0; x < 4; x++) + { + for(pixRowIndex = 0; pixRowIndex < 8; pixRowIndex++, iconPixPtr++) + { + // Load the entire row of pixels as a single 32-bit chunk. + pixRowColors = *iconPixPtr; + + // Set the write location. The formula below calculates the proper write + // location depending on the position of the read pointer. We use a more + // optimized version of this formula in practice. + // + // bitmapPixPtr = bitmapData + ( ((y * 8) + pixRowIndex) * 32 ) + (x * 8); + bitmapPixPtr = bitmapData + ( ((y << 3) + pixRowIndex) << 5 ) + (x << 3); + + // Set the RGBA8888 bitmap pixels using our CLUT from earlier. + +#ifdef __BIG_ENDIAN__ + *bitmapPixPtr = clut[(pixRowColors & 0x0F000000) >> 24]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0xF0000000) >> 28]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x000F0000) >> 16]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x00F00000) >> 20]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x00000F00) >> 8]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x0000F000) >> 12]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x0000000F)]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x000000F0) >> 4]; + +#else + + *bitmapPixPtr = clut[(pixRowColors & 0x0000000F)]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x000000F0) >> 4]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x00000F00) >> 8]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x0000F000) >> 12]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x000F0000) >> 16]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x00F00000) >> 20]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0x0F000000) >> 24]; + + bitmapPixPtr++; + *bitmapPixPtr = clut[(pixRowColors & 0xF0000000) >> 28]; +#endif + } + } + } +} diff --git a/desmume/src/cocoa/video_output_view_legacy.mm b/desmume/src/cocoa/video_output_view_legacy.mm index c621a4a40..beb5189c1 100644 --- a/desmume/src/cocoa/video_output_view_legacy.mm +++ b/desmume/src/cocoa/video_output_view_legacy.mm @@ -62,7 +62,7 @@ screen_buffer = nil; viewScale = 1.0; viewRotation = 0.0; - displayMode = DS_DISPLAY_TYPE_COMBO; + displayMode = DS_DISPLAY_TYPE_DUAL; gpuStateFlags = GPUSTATE_MAIN_GPU_MASK | GPUSTATE_MAIN_BG0_MASK | GPUSTATE_MAIN_BG1_MASK | @@ -647,7 +647,7 @@ void SetGPULayerState(int displayType, unsigned int i, bool state) theGpu = MainScreen.gpu; break; - case DS_GPU_TYPE_COMBO: + case DS_GPU_TYPE_MAIN_AND_SUB: SetGPULayerState(DS_GPU_TYPE_SUB, i, state); // Recursive call theGpu = MainScreen.gpu; break; @@ -695,7 +695,7 @@ bool GetGPULayerState(int displayType, unsigned int i) } break; - case DS_GPU_TYPE_COMBO: + case DS_GPU_TYPE_MAIN_AND_SUB: if (SubScreen.gpu != nil && MainScreen.gpu != nil) { result = (CommonSettings.dispLayers[SubScreen.gpu->core][i] && CommonSettings.dispLayers[MainScreen.gpu->core][i]); @@ -721,7 +721,7 @@ void SetGPUDisplayState(int displayType, bool state) CommonSettings.showGpu.main = state; break; - case DS_GPU_TYPE_COMBO: + case DS_GPU_TYPE_MAIN_AND_SUB: CommonSettings.showGpu.sub = state; CommonSettings.showGpu.main = state; break; @@ -745,7 +745,7 @@ bool GetGPUDisplayState(int displayType) result = CommonSettings.showGpu.main; break; - case DS_GPU_TYPE_COMBO: + case DS_GPU_TYPE_MAIN_AND_SUB: result = (CommonSettings.showGpu.sub && CommonSettings.showGpu.main); break;