From 92744527667afd994130407364cd7cd52fb974e4 Mon Sep 17 00:00:00 2001 From: Justin Espedal Date: Wed, 12 Jan 2022 13:36:37 +0900 Subject: [PATCH 01/48] Display preloader progress for packed asset libraries. --- src/lime/utils/PackedAssetLibrary.hx | 107 +++++++++++++++++---------- 1 file changed, 68 insertions(+), 39 deletions(-) diff --git a/src/lime/utils/PackedAssetLibrary.hx b/src/lime/utils/PackedAssetLibrary.hx index 4015d1f291..c2e8a73428 100644 --- a/src/lime/utils/PackedAssetLibrary.hx +++ b/src/lime/utils/PackedAssetLibrary.hx @@ -168,17 +168,36 @@ import flash.media.Sound; if (promise == null) { promise = new Promise(); + bytesLoadedCache = new Map(); // TODO: Handle `preload` for individual assets // TODO: Do not preload bytes on native, if we can read from it instead (all non-Android targets?) + assetsLoaded = 0; + assetsTotal = 2; //for our initial __assetLoaded(null) call and __assetLoaded(this.id) + + for (id in preload.keys()) + { + if (!preload.get(id)) continue; + + switch (types.get(id)) + { + case BINARY, FONT, IMAGE, MUSIC, SOUND, TEXT: + assetsTotal++; + + case MUSIC, SOUND: + assetsTotal++; + + default: + } + } + var packedData_onComplete = function(data:Bytes) { cachedBytes.set(id, data); packedData = data; - assetsLoaded = 0; - assetsTotal = 1; + __assetLoaded(this.id); for (id in preload.keys()) { @@ -189,40 +208,30 @@ import flash.media.Sound; switch (types.get(id)) { case BINARY: - assetsTotal++; - var future = loadBytes(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadBytes_onComplete.bind(id)); case FONT: - assetsTotal++; - var future = loadFont(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadFont_onComplete.bind(id)); case IMAGE: - assetsTotal++; - var future = loadImage(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadImage_onComplete.bind(id)); case MUSIC, SOUND: - assetsTotal++; - var future = loadAudioBuffer(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadAudioBuffer_onComplete.bind(id)); case TEXT: - assetsTotal++; - var future = loadText(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); @@ -231,10 +240,10 @@ import flash.media.Sound; default: } } - - __assetLoaded(null); }; + __assetLoaded(null); + if (cachedBytes.exists(id)) { packedData_onComplete(cachedBytes.get(id)); @@ -248,7 +257,9 @@ import flash.media.Sound; var path = basePath + (paths.exists(id) ? paths.get(id) : id); path = __cacheBreak(path); - Bytes.loadFromFile(path).onError(promise.error).onComplete(packedData_onComplete); + var packedData_onProgress = load_onProgress.bind(this.id); + + Bytes.loadFromFile(path).onProgress(packedData_onProgress).onError(promise.error).onComplete(packedData_onComplete); } } @@ -401,18 +412,39 @@ import flash.media.Sound; super.__fromManifest(manifest); + var packedBytesTotal = 0; + bytesTotal = 0; + for (asset in manifest.assets) { + var id = asset.id; + if (Reflect.hasField(asset, "position")) { - positions.set(asset.id, Reflect.field(asset, "position")); + positions.set(id, Reflect.field(asset, "position")); } if (Reflect.hasField(asset, "length")) { - lengths.set(asset.id, Reflect.field(asset, "length")); + var length = Reflect.field(asset, "length"); + lengths.set(id, length); + + //for individual packed assets, the size represents the work done unpacking them + //since this is likely to be much faster than downloading, set it to something + //small like the packed length / 10. + sizes.set(id, Math.floor(length / 10)); + + packedBytesTotal += length; + } + + if (preload.exists(id) && preload.get(id) && sizes.exists(id)) + { + bytesTotal += sizes.get(id); } } + + sizes.set(this.id, packedBytesTotal); + bytesTotal += packedBytesTotal; } @:noCompletion private override function __assetLoaded(id:String):Void @@ -424,38 +456,35 @@ import flash.media.Sound; Log.verbose("Loaded asset: " + id + " [" + types.get(id) + "] (" + (assetsLoaded - 1) + "/" + (assetsTotal - 1) + ")"); } - // if (id != null) { - - // var size = sizes.get (id); - - // if (!bytesLoadedCache.exists (id)) { - - // bytesLoaded += size; - - // } else { - - // var cache = bytesLoadedCache.get (id); - - // if (cache < size) { - - // bytesLoaded += (size - cache); - - // } + if (id != null) + { + var size = sizes.exists(id) ? sizes.get(id) : 0; - // } + if (!bytesLoadedCache.exists(id)) + { + bytesLoaded += size; + } + else + { + var cache = bytesLoadedCache.get(id); - // bytesLoadedCache.set (id, size); + if (cache < size) + { + bytesLoaded += (size - cache); + } + } - // } + bytesLoadedCache.set(id, size); + } if (assetsLoaded < assetsTotal) { - // promise.progress (bytesLoaded, bytesTotal); + promise.progress(bytesLoaded, bytesTotal); } else { loaded = true; - // promise.progress (bytesTotal, bytesTotal); + promise.progress(bytesTotal, bytesTotal); promise.complete(this); } } From ea4c3716c1ae643b3d7476543beaf1bf09314411 Mon Sep 17 00:00:00 2001 From: Justin Espedal Date: Wed, 12 Jan 2022 13:37:51 +0900 Subject: [PATCH 02/48] Don't delay music preloading until the packed asset library is loaded --- src/lime/utils/PackedAssetLibrary.hx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/lime/utils/PackedAssetLibrary.hx b/src/lime/utils/PackedAssetLibrary.hx index c2e8a73428..a05639d47b 100644 --- a/src/lime/utils/PackedAssetLibrary.hx +++ b/src/lime/utils/PackedAssetLibrary.hx @@ -182,12 +182,18 @@ import flash.media.Sound; switch (types.get(id)) { - case BINARY, FONT, IMAGE, MUSIC, SOUND, TEXT: + case BINARY, FONT, IMAGE, TEXT: assetsTotal++; case MUSIC, SOUND: + Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); assetsTotal++; + var future = loadAudioBuffer(id); + future.onProgress(load_onProgress.bind(id)); + future.onError(loadAudioBuffer_onError.bind(id)); + future.onComplete(loadAudioBuffer_onComplete.bind(id)); + default: } } @@ -203,35 +209,31 @@ import flash.media.Sound; { if (!preload.get(id)) continue; - Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); - switch (types.get(id)) { case BINARY: + Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); var future = loadBytes(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadBytes_onComplete.bind(id)); case FONT: + Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); var future = loadFont(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadFont_onComplete.bind(id)); case IMAGE: + Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); var future = loadImage(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); future.onComplete(loadImage_onComplete.bind(id)); - case MUSIC, SOUND: - var future = loadAudioBuffer(id); - // future.onProgress (load_onProgress.bind (id)); - future.onError(load_onError.bind(id)); - future.onComplete(loadAudioBuffer_onComplete.bind(id)); - case TEXT: + Log.verbose("Preloading asset: " + id + " [" + types.get(id) + "]"); var future = loadText(id); // future.onProgress (load_onProgress.bind (id)); future.onError(load_onError.bind(id)); From 40764acbf37c599931b09ea525e94b973e5099c3 Mon Sep 17 00:00:00 2001 From: Patrick Gutlich Date: Sun, 18 Aug 2024 17:12:47 +0200 Subject: [PATCH 03/48] set correct paths for ndll for linxuarm and linuxarm64 (raspberrypi) and remove conflicting legacy includepaths in build.xml --- project/Build.xml | 6 -- src/lime/tools/HTML5Helper.hx | 8 +++ tools/CommandLineTools.hx | 10 ++- tools/RunScript.hx | 10 +-- tools/SVGExport.hx | 10 ++- tools/platforms/LinuxPlatform.hx | 104 +++++++++++-------------------- 6 files changed, 58 insertions(+), 90 deletions(-) diff --git a/project/Build.xml b/project/Build.xml index b7d9172bee..4f82125bab 100755 --- a/project/Build.xml +++ b/project/Build.xml @@ -235,9 +235,6 @@
- - - @@ -510,9 +507,6 @@ - - -
diff --git a/src/lime/tools/HTML5Helper.hx b/src/lime/tools/HTML5Helper.hx index a028204935..d7550381f1 100644 --- a/src/lime/tools/HTML5Helper.hx +++ b/src/lime/tools/HTML5Helper.hx @@ -107,6 +107,14 @@ class HTML5Helper { suffix += "32"; } + else if( System.hostArchitecture == ARMV7) + { + suffix += "Arm"; + } + else if( System.hostArchitecture == ARM64) + { + suffix += "Arm64"; + } else { suffix += "64"; diff --git a/tools/CommandLineTools.hx b/tools/CommandLineTools.hx index f840828910..a5a11fadb9 100644 --- a/tools/CommandLineTools.hx +++ b/tools/CommandLineTools.hx @@ -496,16 +496,14 @@ class CommandLineTools case LINUX: var arguments = Sys.args(); - var raspberryPi = false; - for (argument in arguments) + if (System.hostArchitecture == ARMV7 ) { - if (argument == "-rpi") raspberryPi = true; + untyped $loader.path = $array(path + "LinuxArm/", $loader.path); } - - if (raspberryPi || System.hostArchitecture == ARMV6 || System.hostArchitecture == ARMV7) + else if (System.hostArchitecture == ARM64) { - untyped $loader.path = $array(path + "RPi/", $loader.path); + untyped $loader.path = $array(path + "LinuxArm64/", $loader.path); } else if (System.hostArchitecture == X64) { diff --git a/tools/RunScript.hx b/tools/RunScript.hx index ec93140187..1cc522ab0c 100644 --- a/tools/RunScript.hx +++ b/tools/RunScript.hx @@ -35,7 +35,7 @@ class RunScript if (!rebuildBinaries) return; - var platforms = ["Windows", "Mac", "Mac64", "MacArm64", "Linux", "Linux64"]; + var platforms = ["Windows", "Mac", "Mac64", "MacArm64", "Linux", "Linux64", "LinuxArm", "LinuxArm64"]; for (platform in platforms) { @@ -70,14 +70,14 @@ class RunScript System.runCommand(limeDirectory, "neko", args.concat(["mac", toolsDirectory])); } - case "Linux": - if (System.hostPlatform == LINUX && System.hostArchitecture != X64) + case "Linux", "LinuxArm": + if (System.hostPlatform == LINUX && System.hostArchitecture != X64 && System.hostArchitecture != ARM64) { System.runCommand(limeDirectory, "neko", args.concat(["linux", "-32", toolsDirectory])); } - case "Linux64": - if (System.hostPlatform == LINUX && System.hostArchitecture == X64) + case "Linux64", "LinuxArm64": + if (System.hostPlatform == LINUX && (System.hostArchitecture == X64 || System.hostArchitecture == ARM64)) { System.runCommand(limeDirectory, "neko", args.concat(["linux", "-64", toolsDirectory])); } diff --git a/tools/SVGExport.hx b/tools/SVGExport.hx index 94b442337d..4bb62d0bdf 100644 --- a/tools/SVGExport.hx +++ b/tools/SVGExport.hx @@ -78,16 +78,14 @@ class SVGExport case LINUX: var arguments = Sys.args(); - var raspberryPi = false; - for (argument in arguments) + if ( System.hostArchitecture == ARMV7 ) { - if (argument == "-rpi") raspberryPi = true; + untyped $loader.path = $array(path + "LinuxArm/", $loader.path); } - - if (raspberryPi) + else if (System.hostArchitecture == ARM64) { - untyped $loader.path = $array(path + "RPi/", $loader.path); + untyped $loader.path = $array(path + "LinuxArm64/", $loader.path); } else if (System.hostArchitecture == X64) { diff --git a/tools/platforms/LinuxPlatform.hx b/tools/platforms/LinuxPlatform.hx index e08ed38742..944e30cc53 100644 --- a/tools/platforms/LinuxPlatform.hx +++ b/tools/platforms/LinuxPlatform.hx @@ -95,6 +95,8 @@ class LinuxPlatform extends PlatformTarget defaults.architectures = [ARMV6]; case ARMV7: defaults.architectures = [ARMV7]; + case ARM64: + defaults.architectures = [ARM64]; case X86: defaults.architectures = [X86]; case X64: @@ -120,24 +122,16 @@ class LinuxPlatform extends PlatformTarget for (architecture in project.architectures) { - if (!targetFlags.exists("32") && !targetFlags.exists("x86_32") && architecture == Architecture.X64) + if (!targetFlags.exists("32") && !targetFlags.exists("x86_32") && (architecture == Architecture.X64 || architecture == Architecture.ARM64)) { is64 = true; } else if (architecture == Architecture.ARMV7) { - // TODO: can we assume this is actually a Pi? probably not. -JT - isRaspberryPi = true; is64 = false; } } - if (project.targetFlags.exists("rpi")) - { - isRaspberryPi = true; - is64 = targetFlags.exists("64"); - } - if (project.targetFlags.exists("neko")) { targetType = "neko"; @@ -183,16 +177,9 @@ class LinuxPlatform extends PlatformTarget { ProjectHelper.copyLibrary(project, ndll, "Linux" + (is64 ? "64" : ""), "", ".hdll", applicationDirectory, project.debug, targetSuffix); } - else if (isRaspberryPi) - { - ProjectHelper.copyLibrary(project, ndll, "RPi" + (is64 ? "64" : ""), "", - (ndll.haxelib != null - && (ndll.haxelib.name == "hxcpp" || ndll.haxelib.name == "hxlibc")) ? ".dso" : ".ndll", applicationDirectory, - project.debug, targetSuffix); - } else { - ProjectHelper.copyLibrary(project, ndll, "Linux" + (is64 ? "64" : ""), "", + ProjectHelper.copyLibrary(project, ndll, "Linux" + (( System.hostArchitecture == ARMV7 || System.hostArchitecture == ARM64)?"Arm":"") + (is64 ? "64" : ""), "", (ndll.haxelib != null && (ndll.haxelib.name == "hxcpp" || ndll.haxelib.name == "hxlibc")) ? ".dll" : ".ndll", applicationDirectory, project.debug, targetSuffix); @@ -206,16 +193,9 @@ class LinuxPlatform extends PlatformTarget if (noOutput) return; - if (isRaspberryPi) - { - NekoHelper.createExecutable(project.templatePaths, "rpi", targetDirectory + "/obj/ApplicationMain.n", executablePath); - NekoHelper.copyLibraries(project.templatePaths, "rpi", applicationDirectory); - } - else - { - NekoHelper.createExecutable(project.templatePaths, "linux" + (is64 ? "64" : ""), targetDirectory + "/obj/ApplicationMain.n", executablePath); - NekoHelper.copyLibraries(project.templatePaths, "linux" + (is64 ? "64" : ""), applicationDirectory); - } + NekoHelper.createExecutable(project.templatePaths, "linux" + (( System.hostArchitecture == ARMV7 || System.hostArchitecture == ARM64)?"Arm":"") + (is64 ? "64" : ""), targetDirectory + "/obj/ApplicationMain.n", executablePath); + NekoHelper.copyLibraries(project.templatePaths, "linux" + (is64 ? "64" : ""), applicationDirectory); + } else if (targetType == "hl") { @@ -281,7 +261,7 @@ class LinuxPlatform extends PlatformTarget if (is64) { - if (isRaspberryPi) + if (System.hostArchitecture == ARM64) { haxeArgs.push("-D"); haxeArgs.push("HXCPP_ARM64"); @@ -412,7 +392,7 @@ class LinuxPlatform extends PlatformTarget { // var project = project.clone (); - if (isRaspberryPi) + if(targetFlags.exists('rpi')) { project.haxedefs.set("rpi", 1); } @@ -469,36 +449,33 @@ class LinuxPlatform extends PlatformTarget { var commands = []; - if (targetFlags.exists("rpi")) - { - if (is64) - { - commands.push([ - "-Dlinux", - "-Drpi", - "-Dtoolchain=linux", - "-DBINDIR=RPi64", - "-DHXCPP_ARM64", - "-DCXX=aarch64-linux-gnu-g++", - "-DHXCPP_STRIP=aarch64-linux-gnu-strip", - "-DHXCPP_AR=aarch64-linux-gnu-ar", - "-DHXCPP_RANLIB=aarch64-linux-gnu-ranlib" - ]); - } - else - { - commands.push([ - "-Dlinux", - "-Drpi", - "-Dtoolchain=linux", - "-DBINDIR=RPi", - "-DHXCPP_M32", - "-DCXX=arm-linux-gnueabihf-g++", - "-DHXCPP_STRIP=arm-linux-gnueabihf-strip", - "-DHXCPP_AR=arm-linux-gnueabihf-ar", - "-DHXCPP_RANLIB=arm-linux-gnueabihf-ranlib" - ]); - } + if (System.hostArchitecture == ARM64 ) + { + commands.push([ + "-Dlinux", + "-Drpi", + "-Dtoolchain=linux", + "-DBINDIR=LinuxArm64", + "-DHXCPP_ARM64", + "-DCXX=aarch64-linux-gnu-g++", + "-DHXCPP_STRIP=aarch64-linux-gnu-strip", + "-DHXCPP_AR=aarch64-linux-gnu-ar", + "-DHXCPP_RANLIB=aarch64-linux-gnu-ranlib" + ]); + } + else if (System.hostArchitecture == ARMV7) + { + commands.push([ + "-Dlinux", + "-Drpi", + "-Dtoolchain=linux", + "-DBINDIR=LinuxArm", + "-DHXCPP_M32", + "-DCXX=arm-linux-gnueabihf-g++", + "-DHXCPP_STRIP=arm-linux-gnueabihf-strip", + "-DHXCPP_AR=arm-linux-gnueabihf-ar", + "-DHXCPP_RANLIB=arm-linux-gnueabihf-ranlib" + ]); } else if (targetFlags.exists("hl") && System.hostArchitecture == X64) { @@ -584,14 +561,7 @@ class LinuxPlatform extends PlatformTarget if (ndll.path == null || ndll.path == "") { - if (isRaspberryPi) - { - context.ndlls[i].path = NDLL.getLibraryPath(ndll, "RPi" + (is64 ? "64" : ""), "lib", ".a", project.debug); - } - else - { - context.ndlls[i].path = NDLL.getLibraryPath(ndll, "Linux" + (is64 ? "64" : ""), "lib", ".a", project.debug); - } + context.ndlls[i].path = NDLL.getLibraryPath(ndll, "Linux" + (( System.hostArchitecture == ARMV7 || System.hostArchitecture == ARM64) ? "Arm" : "") + (is64 ? "64" : ""), "lib", ".a", project.debug); } } } From 6ab5246a478d996463d4837a93b98c961303697b Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 3 Sep 2024 15:32:50 -0700 Subject: [PATCH 04/48] actions: update dependencies --- .github/workflows/main.yml | 80 +++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ac1d9b9189..5580a4f78e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -49,7 +49,7 @@ jobs: lime rebuild linux -64 -release -nocolor -verbose -nocffi lime rebuild hl -clean -release -nocolor -verbose -nocffi - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Linux-NDLL path: | @@ -57,7 +57,7 @@ jobs: !**/.gitignore if-no-files-found: error - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Linux64-NDLL path: | @@ -65,7 +65,7 @@ jobs: !**/.gitignore if-no-files-found: error - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Linux64-Hashlink path: | @@ -95,7 +95,7 @@ jobs: runs-on: macos-12 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -141,7 +141,7 @@ jobs: lime rebuild macos -clean -release -arm64 -nocolor -verbose -nocffi lime rebuild hl -clean -release -nocolor -verbose -nocffi - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Mac64-NDLL path: | @@ -149,7 +149,7 @@ jobs: !**/.gitignore if-no-files-found: error - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: MacArm64-NDLL path: | @@ -157,7 +157,7 @@ jobs: !**/.gitignore if-no-files-found: error - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Mac64-Hashlink path: | @@ -187,7 +187,7 @@ jobs: runs-on: windows-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -221,7 +221,7 @@ jobs: lime rebuild windows -64 -release -nocolor -verbose -nocffi lime rebuild hl -clean -release -nocolor -verbose -nocffi - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Windows-NDLL path: | @@ -229,7 +229,7 @@ jobs: !**/.gitignore if-no-files-found: error - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Windows64-NDLL path: | @@ -237,13 +237,13 @@ jobs: !**/.gitignore if-no-files-found: error - # - uses: actions/upload-artifact@v3 + # - uses: actions/upload-artifact@v4 # with: # name: Windows-Hashlink # path: | # templates/bin/hl/Windows # if-no-files-found: error - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Windows64-Hashlink path: | @@ -273,7 +273,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -283,7 +283,7 @@ jobs: with: ndk-version: r21e - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: "zulu" java-version: 11 @@ -323,7 +323,7 @@ jobs: run: | lime rebuild android -release -nocolor -verbose -nocffi -eval - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: Android-NDLL path: | @@ -353,7 +353,7 @@ jobs: runs-on: macos-12 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -384,7 +384,7 @@ jobs: run: | lime rebuild ios -clean -release -verbose -nocolor -eval - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: iPhone-NDLL path: | @@ -416,7 +416,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -451,62 +451,62 @@ jobs: cp project/lib/hashlink/src/hl.h templates/bin/hl/include/hl.h cp project/lib/hashlink/src/hlc_main.c templates/bin/hl/include/hlc_main.c - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Android-NDLL path: ndll/Android/ - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: iPhone-NDLL path: ndll/iPhone/ - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Linux-NDLL path: ndll/Linux/ - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Linux64-NDLL path: ndll/Linux64/ - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Mac64-NDLL path: ndll/Mac64/ - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: MacArm64-NDLL path: ndll/MacArm64/ - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Windows-NDLL path: ndll/Windows/ - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Windows64-NDLL path: ndll/Windows64/ - # - uses: actions/download-artifact@v3 + # - uses: actions/download-artifact@v4 # with: # name: Windows-Hashlink # path: templates/bin/hl/Windows - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Windows64-Hashlink path: templates/bin/hl/Windows64 - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Mac64-Hashlink path: templates/bin/hl/Mac64 - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: Linux64-Hashlink path: templates/bin/hl/Linux64 @@ -516,7 +516,7 @@ jobs: run: | haxe svg.hxml - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: lime-haxelib path: | @@ -531,7 +531,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: krdlab/setup-haxe@v1 with: @@ -551,7 +551,7 @@ jobs: run: | haxe build.hxml - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: lime-docs path: docs/pages @@ -561,7 +561,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: krdlab/setup-haxe@v1 with: @@ -604,7 +604,7 @@ jobs: haxe-version: [4.0.5, 4.1.5, 4.2.5, 4.3.1] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -674,7 +674,7 @@ jobs: run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: lime-haxelib path: lime-haxelib @@ -724,7 +724,7 @@ jobs: run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: lime-haxelib path: lime-haxelib @@ -753,7 +753,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: krdlab/setup-haxe@v1 with: @@ -831,7 +831,7 @@ jobs: run: | haxelib git lime-samples https://github.com/openfl/lime-samples --quiet - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: lime-haxelib path: lime-haxelib From c4a9bb81b531afaf8a5db5a8304e2dd2d8d7b228 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Wed, 4 Sep 2024 14:31:10 -0700 Subject: [PATCH 05/48] Socket: flash extern used wrong type for objectEncoding property --- externs/air/flash/net/Socket.hx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/externs/air/flash/net/Socket.hx b/externs/air/flash/net/Socket.hx index 34eddbfcf9..40940d78d1 100644 --- a/externs/air/flash/net/Socket.hx +++ b/externs/air/flash/net/Socket.hx @@ -7,7 +7,7 @@ extern class Socket extends flash.events.EventDispatcher implements flash.utils. @:require(flash11) var bytesPending(default, never):UInt; var connected(default, never):Bool; var endian:flash.utils.Endian; - var objectEncoding:UInt; + var objectEncoding:#if openfl openfl.net.ObjectEncoding #else UInt #end; @:require(flash10) var timeout:UInt; #if air var localAddress(default, never):String; @@ -20,7 +20,7 @@ extern class Socket extends flash.events.EventDispatcher implements flash.utils. @:flash.property @:require(flash11) var bytesPending(get, never):UInt; @:flash.property var connected(get, never):Bool; @:flash.property var endian(get, set):flash.utils.Endian; - @:flash.property var objectEncoding(get, set):UInt; + @:flash.property var objectEncoding(get, set):#if openfl openfl.net.ObjectEncoding #else UInt #end; @:flash.property @:require(flash10) var timeout(get, set):UInt; #if air @:flash.property var localAddress(get, never):String; @@ -65,7 +65,7 @@ extern class Socket extends flash.events.EventDispatcher implements flash.utils. private function get_bytesPending():UInt; private function get_connected():Bool; private function get_endian():flash.utils.Endian; - private function get_objectEncoding():UInt; + private function get_objectEncoding():#if openfl openfl.net.ObjectEncoding #else UInt #end; private function get_timeout():UInt; #if air private function get_localAddress():String; @@ -74,7 +74,7 @@ extern class Socket extends flash.events.EventDispatcher implements flash.utils. private function get_remotePort():Int; #end private function set_endian(value:flash.utils.Endian):flash.utils.Endian; - private function set_objectEncoding(value:UInt):UInt; + private function set_objectEncoding(value:#if openfl openfl.net.ObjectEncoding #else UInt #end):#if openfl openfl.net.ObjectEncoding #else UInt #end; private function set_timeout(value:UInt):UInt; #end } From dd79e5852a17eee424b0951ff9400c881a357e33 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 10 Sep 2024 11:10:34 -0700 Subject: [PATCH 06/48] LZMA: fix is check missing parentheses --- src/lime/_internal/format/LZMA.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lime/_internal/format/LZMA.hx b/src/lime/_internal/format/LZMA.hx index f54f2ae7cf..47510fecd4 100644 --- a/src/lime/_internal/format/LZMA.hx +++ b/src/lime/_internal/format/LZMA.hx @@ -27,7 +27,7 @@ class LZMA #end #elseif js var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("LZMA.compress")(new UInt8Array(bytes.getData()), 5); - if (data is String) + if ((data is String)) { return Bytes.ofString(data); } @@ -60,7 +60,7 @@ class LZMA #end #elseif js var data = untyped #if haxe4 js.Syntax.code #else __js__ #end ("LZMA.decompress")(new UInt8Array(bytes.getData())); - if (data is String) + if ((data is String)) { return Bytes.ofString(data); } From 895ce877d9e5bcf95d7d54ff6caef933b0c60536 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 7 Oct 2024 09:40:22 -0700 Subject: [PATCH 07/48] Default hlc target directory is not the same as hl --- tools/platforms/LinuxPlatform.hx | 8 +++++++- tools/platforms/MacPlatform.hx | 8 +++++++- tools/platforms/WindowsPlatform.hx | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/tools/platforms/LinuxPlatform.hx b/tools/platforms/LinuxPlatform.hx index e08ed38742..c13d69d915 100644 --- a/tools/platforms/LinuxPlatform.hx +++ b/tools/platforms/LinuxPlatform.hx @@ -160,7 +160,13 @@ class LinuxPlatform extends PlatformTarget targetType = "cpp"; } - targetDirectory = Path.combine(project.app.path, project.config.getString("linux.output-directory", targetType == "cpp" ? "linux" : targetType)); + var defaultTargetDirectory = switch (targetType) + { + case "cpp": "linux"; + case "hl": project.targetFlags.exists("hlc") ? "hlc" : targetType; + default: targetType; + } + targetDirectory = Path.combine(project.app.path, project.config.getString("linux.output-directory", defaultTargetDirectory)); targetDirectory = StringTools.replace(targetDirectory, "arch64", is64 ? "64" : ""); applicationDirectory = targetDirectory + "/bin/"; executablePath = Path.combine(applicationDirectory, project.app.file); diff --git a/tools/platforms/MacPlatform.hx b/tools/platforms/MacPlatform.hx index 6de0fc6894..3737419d4d 100644 --- a/tools/platforms/MacPlatform.hx +++ b/tools/platforms/MacPlatform.hx @@ -147,7 +147,13 @@ class MacPlatform extends PlatformTarget targetType = "cpp"; } - targetDirectory = Path.combine(project.app.path, project.config.getString("mac.output-directory", targetType == "cpp" ? "macos" : targetType)); + var defaultTargetDirectory = switch (targetType) + { + case "cpp": "macos"; + case "hl": project.targetFlags.exists("hlc") ? "hlc" : targetType; + default: targetType; + } + targetDirectory = Path.combine(project.app.path, project.config.getString("mac.output-directory", defaultTargetDirectory)); targetDirectory = StringTools.replace(targetDirectory, "arch64", dirSuffix); applicationDirectory = targetDirectory + "/bin/" + project.app.file + ".app"; contentDirectory = applicationDirectory + "/Contents/Resources"; diff --git a/tools/platforms/WindowsPlatform.hx b/tools/platforms/WindowsPlatform.hx index d1babe54f7..9cf73d685f 100644 --- a/tools/platforms/WindowsPlatform.hx +++ b/tools/platforms/WindowsPlatform.hx @@ -203,7 +203,13 @@ class WindowsPlatform extends PlatformTarget } } - targetDirectory = Path.combine(project.app.path, project.config.getString("windows.output-directory", targetType == "cpp" ? "windows" : targetType)); + var defaultTargetDirectory = switch (targetType) + { + case "cpp": "windows"; + case "hl": project.targetFlags.exists("hlc") ? "hlc" : targetType; + default: targetType; + } + targetDirectory = Path.combine(project.app.path, project.config.getString("windows.output-directory", defaultTargetDirectory)); targetDirectory = StringTools.replace(targetDirectory, "arch64", is64 ? "64" : ""); if (targetType == "winjs") From a1dcad42dfbcc1fafaa461e2f560279f2b2e56db Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 7 Oct 2024 10:12:42 -0700 Subject: [PATCH 08/48] harfbuzz: update to 6.0.0 Needed for macOS when using Xcode 16 and clang 16. This version of clang produces errors like this when compiling harfbuzz: cast from 'void (*)(FT_Face)' (aka 'void (*)(FT_FaceRec_ *)') to 'FT_Generic_Finalizer' (aka 'void (*)(void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict] This is the minimum version of harfbuzz that fixes the errors. We could certainly consider upgrading further (current release is 10.0.1 at the time of this commit). --- project/lib/harfbuzz | 2 +- project/lib/harfbuzz-files.xml | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/project/lib/harfbuzz b/project/lib/harfbuzz index aee123fc83..afcae83a06 160000 --- a/project/lib/harfbuzz +++ b/project/lib/harfbuzz @@ -1 +1 @@ -Subproject commit aee123fc83388b8f5acfb301d87bd92eccc5b843 +Subproject commit afcae83a064843d71d47624bc162e121cc56c08b diff --git a/project/lib/harfbuzz-files.xml b/project/lib/harfbuzz-files.xml index 1027f14b3f..68f882a6ba 100644 --- a/project/lib/harfbuzz-files.xml +++ b/project/lib/harfbuzz-files.xml @@ -45,18 +45,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + From 700c2c727b0a349422b211bf3207f993879b45ab Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 7 Oct 2024 14:26:40 -0700 Subject: [PATCH 09/48] preliminary 8.2.0 CHANGELOG --- CHANGELOG.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 133f1c3d5b..57e1209690 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,64 @@ Changelog ========= +8.2.0 (??/??/2024) +------------------ + +* Added Apple Silicon (ARM64) support for macOS target. +* Added new `hlc` target to support compiling for HashLink/C. Both generates C code and compiles to an executable (requires Haxe 4.3.4 or newer). +* Added support for inserting attributes into the `` or `` elements of _AndroidManifest.xml_ +* Added `createPerspective()` to `Matrix4`. +* Added `removeLibrary()` to `lime.utils.Assets`, which removes a library, but makes unloading optional. +* Added `SINGLE_THREADED` mode to `ThreadPool`, which is used by default when threading is not available. +* Added `workLoad` property to `ThreadPool` to limit total time spent per frame on green threads. +* Added optional `-noalias` flag to `lime setup` to skip creating the **lime** executable alias. +* Added optional `-nosign` flag to `lime build ios` to skip code signing when targeting iOS. +* Added support for `-64` flag to force compiling for 64-bit Raspberry Pi.without requiring a custom template. +* Added option to configure `preserveDrawingBuffer` on HTML5 target. +* Added LZMA compression to HTML5 target. +* Added automatic deletion of "stale" assets and dependency files. +* Added `VIEW` intents on Android target. +* Added support for `-mingw` flag when cross-compiling to Windows from another operating system. +* Added support for `-cpp` flag when cross-compiling to Linux from another operating system (requires homebrew-macos-cross-toolchains on macOS). +* Fixed `lime display` command incorrectly printing old _.hxml_ content after _project.xml_ file has been modified, skipping requirement to build project or restart editor to get valid code intelligence. +* Fixed HashLink _.app_ bundles on macOS to include all Homebrew library dependencies, so that they run on computers without Homebrew. +* Fixed `@android:style/Theme.NoTitleBarnull` in generated _AndroidManifest.xml_. +* Fixed `Image` in a web worker by storing it as `DATA` type. +* Fixed cURL C++ to Haxe callbacks when targeting HashLink. +* Fixed icon generation for Android target with `accept-file-intent` config. +* Fixed exception in Lime tools when resolving full path of Neko _.n_ file. +* Fixed keyboard input incorrectly getting enabled by default when creating a new window, which could show an IME when unexpected. +* Fixed `ALC.getContextsDevice()` when targeting HashLink. +* Fixed potentially uninitialized values in `Matrix3`. +* Fixed wrong type for `Socket.objectEncoding` in Flash/AIR externs. +* Improved support for Raspberry Pi 64-bit builds. +* Changed custom `haxe.Timer` to fall back to the original in a macro context. +* Changed `Promise` to remove `@:generic` when in a macro context. +* Changed `Matrix3` to be an abstract over `Float32Array`, similar to `Matrix4`. +* Changed Raspberry Pi keyboard shortcut to exit to Ctrl + Esc. +* Changed `-64` and `-32` flags for Intel architectures to `-x86_64` and `-x86_32` to make their purpose more clear (the old flags still work, for now). +* Removed Joystick trackball APIs because they is supported only on Linux, with a single piece of hardware, and will be removed from SDL 3. +* Removed ARMV5 architecture from Android rebuilds by default because hxcpp doesn't support it with NDK versions >= 20. +* Removed 32-bit _liblime.iphonesim.a_ as a default binary because 32-bit iOS is no longer supported by Apple. +* Updated Cairo submodule to version 1.17.6 and point to upstream repository instead of fork. +* Updated cURL submodule to version 7.83.1 and point to upstream repository instead of fork. +* Updated efsw submodule to version 1.2.0 and point to upstream repository instead of fork. +* Updated FreeType submodule to version 2.12.1 and point to upstream repository instead of fork. +* Updated HarfBuzz submodule to version 6.0.0 and point to upstream repository instead of fork. +* Updated libpng submodule to version 1.6.37 and point to upstream repository instead of fork. +* Updated libjpg-turbo submodule to version 2.1.3 and point to upstream repository instead of fork. +* Updated libvpx submodule to version 1.11.0 and point to upstream repository instead of fork. +* Updated libwebm submodule to version 1.0.0.28 and point to upstream repository instead of fork. +* Updated Mbed TLS submodule to version 2.28.7 and point to upstream repository instead of fork. +* Updated MojoAL submodule to commit e08dbf3 and point to upstream repository instead of fork. +* Updated Ogg submodule to version 1.3.5 and point to upstream repository instead of fork. +* Updated OpenAL-Soft submodule to version 1.20.1 and point to upstream repository instead of fork. +* Updated Pixman submodule to version 0.42.2 and point to upstream repository instead of fork. +* Updated SDL submodule to version 2.24.0 and point to upstream repository instead of fork. +* Updated Tinyfiledialogs submodule to version 3.8.8 (still uses fork due to SourceForge limitationss). +* Updated Vorbis submodule to version 1.3.7 and point to upstream repository instead of fork. +* Updated zlib submodule to version 1.2.12 and point to upstream repository instead of fork. + 8.1.3 (07/22/2024) ------------------ From ccb76478271c8682c9147a3b64423681762c7117 Mon Sep 17 00:00:00 2001 From: Cobalt Bar <79053181+CobaltBar@users.noreply.github.com> Date: Thu, 10 Oct 2024 09:36:46 -0700 Subject: [PATCH 10/48] actions: use the same version of hxcpp for all jobs (#1850) We're currently using a version of hxcpp from GitHub instead of from Haxelib for macOS ARM64 support. Let's just use that version for all jobs, for consistency. Whenever hxcpp finally gets update on Haxelib, we'll switch to that version. --- .github/workflows/main.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5580a4f78e..2b18a7680a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,8 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp 4.2.1 --quiet + curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ./hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -201,7 +202,8 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp 4.2.1 --quiet + curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ./hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -298,7 +300,8 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp 4.2.1 --quiet + curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ./hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -367,7 +370,8 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp 4.2.1 --quiet + curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ./hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -430,7 +434,8 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp 4.2.1 --quiet + curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ./hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib install svg --quiet @@ -623,7 +628,8 @@ jobs: - name: Install Haxe dependencies run: | - haxelib install hxcpp 4.2.1 --quiet + curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ./hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet From 7dc37185513fc05cb36b4453a75fa7f266354210 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 16 Oct 2024 00:34:09 -0400 Subject: [PATCH 11/48] BackgroundWorker: Add hl flag Prevents hl from freezing up when using bgworker --- src/lime/system/BackgroundWorker.hx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lime/system/BackgroundWorker.hx b/src/lime/system/BackgroundWorker.hx index f92ca0ca17..cc4ce91a97 100644 --- a/src/lime/system/BackgroundWorker.hx +++ b/src/lime/system/BackgroundWorker.hx @@ -69,7 +69,7 @@ class BackgroundWorker public var onProgress = new EventVoid>(); @:noCompletion private var __runMessage:Dynamic; - #if (cpp || neko) + #if (cpp || neko || hl) @:noCompletion private var __messageQueue:Deque; @:noCompletion private var __workerThread:Thread; #end @@ -87,7 +87,7 @@ class BackgroundWorker { canceled = true; - #if (cpp || neko) + #if (cpp || neko || hl) __workerThread = null; #end } @@ -102,7 +102,7 @@ class BackgroundWorker completed = false; __runMessage = message; - #if (cpp || neko) + #if (cpp || neko || hl) __messageQueue = new Deque(); __workerThread = Thread.create(__doWork); @@ -125,7 +125,7 @@ class BackgroundWorker { completed = true; - #if (cpp || neko) + #if (cpp || neko || hl) __messageQueue.add(MESSAGE_COMPLETE); __messageQueue.add(message); #else @@ -143,7 +143,7 @@ class BackgroundWorker **/ public function sendError(message:Dynamic = null):Void { - #if (cpp || neko) + #if (cpp || neko || hl) __messageQueue.add(MESSAGE_ERROR); __messageQueue.add(message); #else @@ -161,7 +161,7 @@ class BackgroundWorker **/ public function sendProgress(message:Dynamic = null):Void { - #if (cpp || neko) + #if (cpp || neko || hl) __messageQueue.add(message); #else if (!canceled) @@ -193,7 +193,7 @@ class BackgroundWorker @:noCompletion private function __update(deltaTime:Int):Void { - #if (cpp || neko) + #if (cpp || neko || hl) var message = __messageQueue.pop(false); if (message != null) From 0e974fd733ac35fc8d11821b347364c197e117b3 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Thu, 17 Oct 2024 09:18:03 -0700 Subject: [PATCH 12/48] AIRHelper: add support for AIR adt -tsa option Example: Required to workaround "Could not generate timestamp: Connection reset" error from adt with default timestamp URL. --- src/lime/tools/AIRHelper.hx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lime/tools/AIRHelper.hx b/src/lime/tools/AIRHelper.hx index 01045e8d55..62e4ffde6a 100644 --- a/src/lime/tools/AIRHelper.hx +++ b/src/lime/tools/AIRHelper.hx @@ -135,6 +135,12 @@ class AIRHelper signingOptions.push("samplePassword"); } + if (project.config.exists("air.tsa")) + { + signingOptions.push("-tsa"); + signingOptions.push(project.config.getString("air.tsa")); + } + var args = ["-package"]; // TODO: Is this an old workaround fixed in newer AIR SDK? From 9b1ea2464809eb524e7cfaf71a08d63585d32bdf Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Thu, 17 Oct 2024 13:41:20 -0700 Subject: [PATCH 13/48] FileDialog: Fixes issue where file dialog stops responding in HashLink on Windows (closes #1849) Does not seem to recover when it happens, requiring the Lime app to be force closed. Some kind of threading issue that is affecting HashLink on Windows only (macOS and Linux are fine, and other sys targets are fine). Fixed by passing SINGLE_THREADED to ThreadPool constructor using #if (windows && hl) --- src/lime/ui/FileDialog.hx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lime/ui/FileDialog.hx b/src/lime/ui/FileDialog.hx index 61201b9fbc..d5bc70d990 100644 --- a/src/lime/ui/FileDialog.hx +++ b/src/lime/ui/FileDialog.hx @@ -99,7 +99,7 @@ class FileDialog if (type == null) type = FileDialogType.OPEN; #if desktop - var worker = new ThreadPool(); + var worker = new ThreadPool(#if (windows && hl) SINGLE_THREADED #end); worker.onComplete.add(function(result) { @@ -224,7 +224,7 @@ class FileDialog public function open(filter:String = null, defaultPath:String = null, title:String = null):Bool { #if (desktop && sys) - var worker = new ThreadPool(); + var worker = new ThreadPool(#if (windows && hl) SINGLE_THREADED #end); worker.onComplete.add(function(path:String) { @@ -287,7 +287,7 @@ class FileDialog } #if (desktop && sys) - var worker = new ThreadPool(); + var worker = new ThreadPool(#if (windows && hl) SINGLE_THREADED #end); worker.onComplete.add(function(path:String) { From 8a5b9d506a19a0b1870547ec924aa8f9a87998c2 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Fri, 18 Oct 2024 02:56:35 -0400 Subject: [PATCH 14/48] Font: Add missing Docs --- src/lime/text/Font.hx | 114 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/src/lime/text/Font.hx b/src/lime/text/Font.hx index 19843c2e8a..273c676d74 100644 --- a/src/lime/text/Font.hx +++ b/src/lime/text/Font.hx @@ -34,14 +34,47 @@ import haxe.io.Path; @:access(lime.text.Glyph) class Font { + /** + * The ascender value of the font. + */ public var ascender:Int; + + /** + * The descender value of the font. + */ public var descender:Int; + + /** + * The height of the font. + */ public var height:Int; + + /** + * The name of the font. + */ public var name(default, null):String; + + /** + * The number of glyphs in the font. + */ public var numGlyphs:Int; + + public var src:Dynamic; + + /** + * The underline position of the font. + */ public var underlinePosition:Int; + + /** + * The underline thickness of the font. + */ public var underlineThickness:Int; + + /** + * The units per EM of the font. + */ public var unitsPerEM:Int; @:noCompletion private var __fontID:String; @@ -51,6 +84,11 @@ class Font #end @:noCompletion private var __init:Bool; + /** + * Creates a new instance of a Font object. + * + * @param name Optional name of the font. + */ public function new(name:String = null) { if (name != null) @@ -100,6 +138,11 @@ class Font } } + /** + * Decomposes the font into outline data. + * + * @return An instance of `NativeFontData` that contains decomposed font outline information. + */ public function decompose():NativeFontData { #if (lime_cffi && !macro) @@ -118,6 +161,12 @@ class Font #end } + /** + * Creates a Font instance from byte data. + * + * @param bytes The byte data containing the font. + * @return A `Font` instance. + */ public static function fromBytes(bytes:Bytes):Font { if (bytes == null) return null; @@ -132,6 +181,12 @@ class Font #end } + /** + * Creates a Font instance from a file path. + * + * @param path The file path of the font. + * @return A `Font` instance. + */ public static function fromFile(path:String):Font { if (path == null) return null; @@ -146,11 +201,23 @@ class Font #end } + /** + * Loads a Font from byte data asynchronously. + * + * @param bytes The byte data containing the font. + * @return A `Future` containing a `Font` instance. + */ public static function loadFromBytes(bytes:Bytes):Future { return Future.withValue(fromBytes(bytes)); } + /** + * Loads a Font from a file path asynchronously. + * + * @param path The file path of the font. + * @return A `Future` containing a `Font` instance. + */ public static function loadFromFile(path:String):Future { var request = new HTTPRequest(); @@ -167,6 +234,12 @@ class Font }); } + /** + * Loads a Font by its name asynchronously. + * + * @param path The name of the font. + * @return A `Future` containing a `Font` instance. + */ public static function loadFromName(path:String):Future { #if (js && html5) @@ -177,6 +250,12 @@ class Font #end } + /** + * Retrieves a glyph from the font by a character. + * + * @param character The character whose glyph to retrieve. + * @return A `Glyph` instance representing the glyph of the character. + */ public function getGlyph(character:String):Glyph { #if (lime_cffi && !macro) @@ -186,6 +265,12 @@ class Font #end } + /** + * Retrieves an array of glyphs for a set of characters. + * + * @param characters The string containing characters to retrieve glyphs for. + * @return An array of `Glyph` instances representing the glyphs of the characters. + */ public function getGlyphs(characters:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^`'\"/\\&*()[]{}<>|:;_-+=?,. "):Array { #if (lime_cffi && !macro) @@ -199,6 +284,12 @@ class Font #end } + /** + * Retrieves metrics for a given glyph. + * + * @param glyph The glyph whose metrics to retrieve. + * @return A `GlyphMetrics` instance containing the metrics of the glyph. + */ public function getGlyphMetrics(glyph:Glyph):GlyphMetrics { #if (lime_cffi && !macro) @@ -216,6 +307,13 @@ class Font #end } + /** + * Renders a specific glyph to an image. + * + * @param glyph The glyph to render. + * @param fontSize The size to render the glyph at. + * @return An `Image` instance representing the rendered glyph. + */ public function renderGlyph(glyph:Glyph, fontSize:Int):Image { #if (lime_cffi && !macro) @@ -255,6 +353,13 @@ class Font return null; } + /** + * Renders a set of glyphs to images. + * + * @param glyphs The glyphs to render. + * @param fontSize The size to render the glyphs at. + * @return A `Map` containing glyphs mapped to their corresponding images. + */ public function renderGlyphs(glyphs:Array, fontSize:Int):Map { #if (lime_cffi && !macro) @@ -595,6 +700,9 @@ class Font } } +/** +* Represents decomposed font data, containing kerning information, glyphs, and other properties. +*/ typedef NativeFontData = { var has_kerning:Bool; @@ -613,6 +721,9 @@ typedef NativeFontData = var kerning:Array; } +/** +* Represents data for an individual glyph, including dimensions and control points. +*/ typedef NativeGlyphData = { var char_code:Int; @@ -624,6 +735,9 @@ typedef NativeGlyphData = var points:Array; } +/** +* Represents kerning information between two glyphs. +*/ typedef NativeKerningData = { var left_glyph:Int; From 91705c0b492f406ad0d61588d775e95bd9d940cd Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 21 Oct 2024 08:54:29 -0700 Subject: [PATCH 15/48] CHANGELOG: more updates --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57e1209690..8fd0525205 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ Changelog * Added `VIEW` intents on Android target. * Added support for `-mingw` flag when cross-compiling to Windows from another operating system. * Added support for `-cpp` flag when cross-compiling to Linux from another operating system (requires homebrew-macos-cross-toolchains on macOS). +* Added support for `tsa` option in `` to pass timestamp URL to Adobe AIR's adt tool. * Fixed `lime display` command incorrectly printing old _.hxml_ content after _project.xml_ file has been modified, skipping requirement to build project or restart editor to get valid code intelligence. * Fixed HashLink _.app_ bundles on macOS to include all Homebrew library dependencies, so that they run on computers without Homebrew. * Fixed `@android:style/Theme.NoTitleBarnull` in generated _AndroidManifest.xml_. @@ -31,6 +32,7 @@ Changelog * Fixed `ALC.getContextsDevice()` when targeting HashLink. * Fixed potentially uninitialized values in `Matrix3`. * Fixed wrong type for `Socket.objectEncoding` in Flash/AIR externs. +* Fixed `BackgroundWorker` not using threads on HashLink. * Improved support for Raspberry Pi 64-bit builds. * Changed custom `haxe.Timer` to fall back to the original in a macro context. * Changed `Promise` to remove `@:generic` when in a macro context. From d7cd79a7e3421d61ae5026784e848a23efe88419 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 21 Oct 2024 09:01:54 -0700 Subject: [PATCH 16/48] prepare for 8.2.0 --- CHANGELOG.md | 2 +- haxelib.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fd0525205..7a704fb424 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ Changelog ========= -8.2.0 (??/??/2024) +8.2.0 (10/21/2024) ------------------ * Added Apple Silicon (ARM64) support for macOS target. diff --git a/haxelib.json b/haxelib.json index 337576283b..016e271f72 100644 --- a/haxelib.json +++ b/haxelib.json @@ -5,7 +5,7 @@ "tags": [], "description": "A foundational Haxe framework for cross-platform development", "version": "8.2.0", - "releasenote": "Various bug fixes", + "releasenote": "Apple Silicon support on macOS, HashLink/C target, upgraded C++ submodules", "contributors": [ "singmajesty", "bowlerhat", From 54d647f4c9560bfe2fbabd9401cec6f73dbf87bc Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 21 Oct 2024 09:04:09 -0700 Subject: [PATCH 17/48] README: installation section was missing haxelib install and lime setup commands --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 41a378c7f1..992c2ee1d0 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,12 @@ Lime is free, open-source software under the [MIT license](LICENSE.md). Installation ============ -First install the latest version of [Haxe](http://www.haxe.org/download). +First, install the latest version of [Haxe](http://www.haxe.org/download). + +Then, install Lime from Haxelib and run Lime's setup command. + + haxelib install lime + haxelib run lime setup Development Builds From 32b86f50f5b3d8f45d85aa4d3d528f3c3664c5f9 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 21 Oct 2024 11:55:12 -0700 Subject: [PATCH 18/48] actions: don't include hxcpp.zip in haxelib bundle Download to parent directory instead. --- .github/workflows/main.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2b18a7680a..262f5dd7bc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,8 +29,8 @@ jobs: - name: Install Haxe dependencies run: | - curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip - haxelib install ./hxcpp-4.3.45.zip --quiet + curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -121,8 +121,8 @@ jobs: - name: Install Haxe dependencies run: | - curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip - haxelib install ./hxcpp-4.3.45.zip --quiet + curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -202,8 +202,8 @@ jobs: - name: Install Haxe dependencies run: | - curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip - haxelib install ./hxcpp-4.3.45.zip --quiet + curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -300,8 +300,8 @@ jobs: - name: Install Haxe dependencies run: | - curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip - haxelib install ./hxcpp-4.3.45.zip --quiet + curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -370,8 +370,8 @@ jobs: - name: Install Haxe dependencies run: | - curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip - haxelib install ./hxcpp-4.3.45.zip --quiet + curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -434,8 +434,8 @@ jobs: - name: Install Haxe dependencies run: | - curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip - haxelib install ./hxcpp-4.3.45.zip --quiet + curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib install svg --quiet @@ -628,8 +628,8 @@ jobs: - name: Install Haxe dependencies run: | - curl -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip - haxelib install ./hxcpp-4.3.45.zip --quiet + curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet haxelib git lime-samples https://github.com/openfl/lime-samples --quiet From be51435b28db7df585bc78030f3e1b4c06a3bb1c Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 21 Oct 2024 13:21:53 -0700 Subject: [PATCH 19/48] actions: fix curl commands --- .github/workflows/main.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 262f5dd7bc..bf8da075c4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -121,7 +121,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -202,7 +202,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -300,7 +300,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -370,7 +370,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -434,7 +434,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -628,7 +628,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output-dir .. -LO https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet From 187134907730ed615db591a3b87a3340f57708f5 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Mon, 21 Oct 2024 13:40:08 -0700 Subject: [PATCH 20/48] actions: fix typo in curl output path --- .github/workflows/main.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bf8da075c4..e9ed88eb4b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -121,7 +121,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -202,7 +202,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -300,7 +300,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -370,7 +370,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -434,7 +434,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet @@ -628,7 +628,7 @@ jobs: - name: Install Haxe dependencies run: | - curl --output ../hxcpp-4.3.5.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip + curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip haxelib install ../hxcpp-4.3.45.zip --quiet haxelib install format --quiet haxelib install hxp --quiet From 4c987ef1cc8eed7da340fb7f6819bba0283f00a8 Mon Sep 17 00:00:00 2001 From: player-03 Date: Mon, 21 Oct 2024 19:51:14 -0400 Subject: [PATCH 21/48] HL didn't support threads in Haxe 3. --- src/lime/system/BackgroundWorker.hx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lime/system/BackgroundWorker.hx b/src/lime/system/BackgroundWorker.hx index cc4ce91a97..30d69d1ed8 100644 --- a/src/lime/system/BackgroundWorker.hx +++ b/src/lime/system/BackgroundWorker.hx @@ -69,7 +69,7 @@ class BackgroundWorker public var onProgress = new EventVoid>(); @:noCompletion private var __runMessage:Dynamic; - #if (cpp || neko || hl) + #if (cpp || neko || (haxe4 && hl)) @:noCompletion private var __messageQueue:Deque; @:noCompletion private var __workerThread:Thread; #end @@ -87,7 +87,7 @@ class BackgroundWorker { canceled = true; - #if (cpp || neko || hl) + #if (cpp || neko || (haxe4 && hl)) __workerThread = null; #end } @@ -102,7 +102,7 @@ class BackgroundWorker completed = false; __runMessage = message; - #if (cpp || neko || hl) + #if (cpp || neko || (haxe4 && hl)) __messageQueue = new Deque(); __workerThread = Thread.create(__doWork); @@ -125,7 +125,7 @@ class BackgroundWorker { completed = true; - #if (cpp || neko || hl) + #if (cpp || neko || (haxe4 && hl)) __messageQueue.add(MESSAGE_COMPLETE); __messageQueue.add(message); #else @@ -143,7 +143,7 @@ class BackgroundWorker **/ public function sendError(message:Dynamic = null):Void { - #if (cpp || neko || hl) + #if (cpp || neko || (haxe4 && hl)) __messageQueue.add(MESSAGE_ERROR); __messageQueue.add(message); #else @@ -161,7 +161,7 @@ class BackgroundWorker **/ public function sendProgress(message:Dynamic = null):Void { - #if (cpp || neko || hl) + #if (cpp || neko || (haxe4 && hl)) __messageQueue.add(message); #else if (!canceled) @@ -193,7 +193,7 @@ class BackgroundWorker @:noCompletion private function __update(deltaTime:Int):Void { - #if (cpp || neko || hl) + #if (cpp || neko || (haxe4 && hl)) var message = __messageQueue.pop(false); if (message != null) From e480067c071352e84bd56c58832726a7f0a5bb4b Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Tue, 22 Oct 2024 07:25:19 -0400 Subject: [PATCH 22/48] Bump haxelib version Prepare for next patch release --- haxelib.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/haxelib.json b/haxelib.json index 016e271f72..9cc0096853 100644 --- a/haxelib.json +++ b/haxelib.json @@ -4,12 +4,12 @@ "license": "MIT", "tags": [], "description": "A foundational Haxe framework for cross-platform development", - "version": "8.2.0", - "releasenote": "Apple Silicon support on macOS, HashLink/C target, upgraded C++ submodules", + "version": "8.2.1", + "releasenote": "Correct path for raspberrypi ndlls, minor fixes", "contributors": [ "singmajesty", "bowlerhat", "Dimensionscape" ], "classPath": "src" -} \ No newline at end of file +} From 866c7c65079b3123a19ee44ae9e324d9fcb5650f Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Tue, 22 Oct 2024 07:33:04 -0400 Subject: [PATCH 23/48] Update Changelog for 8.2.1 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a704fb424..1948c9f75d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========= +8.2.1 (10/??/2024) +------------------ + +* Fixed paths for ndll on Raspberry pi +* Fixed `BackgroundWorker`conditional on hl to use threads only for haxe4 + + 8.2.0 (10/21/2024) ------------------ From f73ea770b467ca9a3d680b49d96c310b6d3fd8b1 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 22 Oct 2024 09:06:12 -0700 Subject: [PATCH 24/48] Release Checklist --- release-checklist.md | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 release-checklist.md diff --git a/release-checklist.md b/release-checklist.md new file mode 100644 index 0000000000..9cc2297dcf --- /dev/null +++ b/release-checklist.md @@ -0,0 +1,50 @@ +# Lime Release Checklist + +- Add release notes to _CHANGELOG.md_ + - Compare to previous tag on GitHub: + `https://github.com/openfl/lime/compare/a.b.c...develop` + - Compare to previous tag in terminal: + ```sh + git log a.b.c...develop --oneline + ``` + - Sometimes, commits from previous releases show up, but most should be correct +- Update release note in _haxelib.json_ +- Update version in _haxelib.json_ (may be updated already) +- Update release date in _CHANGELOG.md_ +- Tag release and push + ```sh + git tag -s x.y.z -m "version x.y.z" + git push origin x.y.z + ``` +- Download _lime-haxelib_ and _lime-docs_ artifacts for tag from GitHub Actions +- Submit _.zip_ file to Haxelib with following command: + ```sh + haxelib submit lime-haxelib.zip + ``` + - Lime releases are sometimes too large for Haxelib. If required, unzip and rezip with higher compresssion + - First, unzip _lime-haxelib.zip_ + - Then, zip with highest compresssion (command for macOS terminal below): + ```sh + cd lime-haxelib/ + # tested on macOS, but not other platforms + zip -r path/to/new/lime-haxelib.zip . -9 + ``` +- Create new release for tag on GitHub + - Upload _lime-haxelib.zip_ and _lime-docs.zip_ + - Link to _CHANGELOG.md_ from tag and to _https://community.openfl.org_ announcement thread) + - _CHANGELOG.md_ tag URL: `https://github.com/openfl/lime/blob/x.y.z/CHANGELOG.md` + - It's okay to skip link to announcement at first, and edit the release to add it later +- Deploy API reference by updating Git ref in _.github/workflows/deploy.yml_ in _openfl/lime.openfl.org_ repo + ```yaml + - uses: actions/checkout@v4 + with: + repository: openfl/lime + path: _lime-git + ref: x.y.z + ``` +- Make announcement on _https://community.openfl.org_ in _Announcements_ category + - For feature releases, it's good to write a summary of noteworthy new features + - For bugfix releases, intro can be short + - Include full list of changes from _CHANGELOG.md_ + - If also releasing OpenFL at the same time, announcement thread should be combined + - After posting, go back and add link to thread GitHub release description, if needed \ No newline at end of file From 448206cf40ed21e105138b9f9a07bc883b3d60eb Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 22 Oct 2024 09:12:34 -0700 Subject: [PATCH 25/48] Release checklist --- release-checklist.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/release-checklist.md b/release-checklist.md index 9cc2297dcf..7f75b7f3dc 100644 --- a/release-checklist.md +++ b/release-checklist.md @@ -18,21 +18,20 @@ ``` - Download _lime-haxelib_ and _lime-docs_ artifacts for tag from GitHub Actions - Submit _.zip_ file to Haxelib with following command: - ```sh - haxelib submit lime-haxelib.zip - ``` + ```sh + haxelib submit lime-haxelib.zip + ``` - Lime releases are sometimes too large for Haxelib. If required, unzip and rezip with higher compresssion - First, unzip _lime-haxelib.zip_ - Then, zip with highest compresssion (command for macOS terminal below): ```sh cd lime-haxelib/ - # tested on macOS, but not other platforms zip -r path/to/new/lime-haxelib.zip . -9 ``` - Create new release for tag on GitHub - Upload _lime-haxelib.zip_ and _lime-docs.zip_ - Link to _CHANGELOG.md_ from tag and to _https://community.openfl.org_ announcement thread) - - _CHANGELOG.md_ tag URL: `https://github.com/openfl/lime/blob/x.y.z/CHANGELOG.md` + - _CHANGELOG.md_ tag URL format: `https://github.com/openfl/lime/blob/x.y.z/CHANGELOG.md` - It's okay to skip link to announcement at first, and edit the release to add it later - Deploy API reference by updating Git ref in _.github/workflows/deploy.yml_ in _openfl/lime.openfl.org_ repo ```yaml From 579a7cd61b6dc9e90759f8e7af9fb83064c6ad04 Mon Sep 17 00:00:00 2001 From: player-03 Date: Tue, 22 Oct 2024 13:49:03 -0400 Subject: [PATCH 26/48] Work around compile error in specific cases. This appears to have been a bug in Haxe 4.0-4.1's HashLink target. `value++` failed, but `value = value + 1` was fine. --- src/lime/system/ThreadPool.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lime/system/ThreadPool.hx b/src/lime/system/ThreadPool.hx index ec8669b295..d64bff98b5 100644 --- a/src/lime/system/ThreadPool.hx +++ b/src/lime/system/ThreadPool.hx @@ -425,7 +425,7 @@ class ThreadPool extends WorkOutput { while (!output.__jobComplete.value && (interruption = Thread.readMessage(false)) == null) { - output.workIterations.value++; + output.workIterations.value = output.workIterations.value + 1; event.job.doWork.dispatch(event.job.state, output); } } @@ -521,7 +521,7 @@ class ThreadPool extends WorkOutput { do { - workIterations.value++; + workIterations.value = workIterations.value + 1; activeJob.doWork.dispatch(state, this); timeElapsed = timestamp() - startTime; } From 54f7734d7faa126493385ea6018dba6acf642432 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 23 Oct 2024 21:22:56 -0400 Subject: [PATCH 27/48] Downgrade to OpenAL 1.20.0 --- project/lib/openal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/lib/openal b/project/lib/openal index f5e0eef34d..c0cf323e1d 160000 --- a/project/lib/openal +++ b/project/lib/openal @@ -1 +1 @@ -Subproject commit f5e0eef34db3a3ab94b61a2f99f84f078ba947e7 +Subproject commit c0cf323e1d56ce605e90927324d2fdafcfbb564a From f60d8a75c5129e4d7d41ba0957338047afde816c Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 23 Oct 2024 21:25:05 -0400 Subject: [PATCH 28/48] Remove missing file path Removes an expected file introduced in 1.20.1 --- project/lib/openal-files.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/project/lib/openal-files.xml b/project/lib/openal-files.xml index d07ad13bae..0f3bea631a 100644 --- a/project/lib/openal-files.xml +++ b/project/lib/openal-files.xml @@ -71,7 +71,6 @@ - From 583e742734df449b9117fb0d1f6f9dc6afede7ab Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 23 Oct 2024 22:31:09 -0400 Subject: [PATCH 29/48] Downgrade OpenAL to 1.19.1 This still solves https://github.com/kcat/openal-soft/pull/227 which seems to be fixed in 1.19.1 --- project/lib/openal | 2 +- project/lib/openal-files.xml | 181 +++++++++++++++++------------------ 2 files changed, 90 insertions(+), 93 deletions(-) diff --git a/project/lib/openal b/project/lib/openal index c0cf323e1d..1226aec2fc 160000 --- a/project/lib/openal +++ b/project/lib/openal @@ -1 +1 @@ -Subproject commit c0cf323e1d56ce605e90927324d2fdafcfbb564a +Subproject commit 1226aec2fcf1a10d60be52205a22e538d80108a3 diff --git a/project/lib/openal-files.xml b/project/lib/openal-files.xml index 0f3bea631a..4b00af239b 100644 --- a/project/lib/openal-files.xml +++ b/project/lib/openal-files.xml @@ -2,90 +2,87 @@ - - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- + - - - - - + + + + + - +
@@ -98,35 +95,34 @@ - + - - - + + +
- + - - - - - + + + + +
- - - - + + + - + @@ -149,18 +145,19 @@ +
- + - +
- + \ No newline at end of file From 2ae713d1807f4f1b84ac68d8d37b9763a741cf00 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 23 Oct 2024 23:39:11 -0400 Subject: [PATCH 30/48] Revert "Downgrade OpenAL to 1.19.1" This reverts commit 583e742734df449b9117fb0d1f6f9dc6afede7ab. --- project/lib/openal | 2 +- project/lib/openal-files.xml | 181 ++++++++++++++++++----------------- 2 files changed, 93 insertions(+), 90 deletions(-) diff --git a/project/lib/openal b/project/lib/openal index 1226aec2fc..c0cf323e1d 160000 --- a/project/lib/openal +++ b/project/lib/openal @@ -1 +1 @@ -Subproject commit 1226aec2fcf1a10d60be52205a22e538d80108a3 +Subproject commit c0cf323e1d56ce605e90927324d2fdafcfbb564a diff --git a/project/lib/openal-files.xml b/project/lib/openal-files.xml index 4b00af239b..0f3bea631a 100644 --- a/project/lib/openal-files.xml +++ b/project/lib/openal-files.xml @@ -2,87 +2,90 @@ - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- + - - - - - + + + + + - +
@@ -95,34 +98,35 @@ - + - - - + + +
- + - - - - - + + + + +
- - - + + + + - + @@ -145,19 +149,18 @@ -
- + - +
- \ No newline at end of file + From a5d980cf75d06dd1110ab32fcc143fdfe9f3bb4b Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 23 Oct 2024 23:39:20 -0400 Subject: [PATCH 31/48] Revert "Remove missing file path" This reverts commit f60d8a75c5129e4d7d41ba0957338047afde816c. --- project/lib/openal-files.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/project/lib/openal-files.xml b/project/lib/openal-files.xml index 0f3bea631a..d07ad13bae 100644 --- a/project/lib/openal-files.xml +++ b/project/lib/openal-files.xml @@ -71,6 +71,7 @@ + From e24ab07125d06b99474663b2bc373308903f9ee3 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 23 Oct 2024 23:39:25 -0400 Subject: [PATCH 32/48] Revert "Downgrade to OpenAL 1.20.0" This reverts commit 54f7734d7faa126493385ea6018dba6acf642432. --- project/lib/openal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/lib/openal b/project/lib/openal index c0cf323e1d..f5e0eef34d 160000 --- a/project/lib/openal +++ b/project/lib/openal @@ -1 +1 @@ -Subproject commit c0cf323e1d56ce605e90927324d2fdafcfbb564a +Subproject commit f5e0eef34db3a3ab94b61a2f99f84f078ba947e7 From 6a4099861e1ed4d2b4703248db0a2df321f277b1 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Fri, 25 Oct 2024 11:08:15 -0400 Subject: [PATCH 33/48] OpenALBindings: Avoid deadlock when `Sys.exit()` is called This change eliminates the cleanup attempt of the current OpenAL context and associated system resources. A change in OpenAL 1.20.0 made it unlikely that we will be able to clean up things in this way moving forward. We should steer users toward using `lime.system.System.exit()` or petition a change in the haxe stdlib to allow us to hook into Sys.exit(). I am not 100% satisfied with this, so perhaps we will find another solution. In the end, I think the benefit of updating OpenAL supersedes any inconvenience here. Closes https://github.com/openfl/lime/issues/1803 --- project/src/media/openal/OpenALBindings.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/project/src/media/openal/OpenALBindings.cpp b/project/src/media/openal/OpenALBindings.cpp index cd67d72ccc..fe549149df 100644 --- a/project/src/media/openal/OpenALBindings.cpp +++ b/project/src/media/openal/OpenALBindings.cpp @@ -142,7 +142,12 @@ namespace lime { } - + /*This has been removed after updating to openal 1.20.0+ since the cleanup functions involved + * lead to deadlocking. See https://github.com/openfl/lime/issues/1803 for more info. + * Developers should use lime.system.System.exit() instead of Sys.exit() to clean up any system + * resources + */ + /* void lime_al_atexit () { ALCcontext* alcContext = alcGetCurrentContext (); @@ -163,7 +168,7 @@ namespace lime { } } - + */ void lime_al_auxf (value aux, int param, float value) { @@ -3412,7 +3417,8 @@ namespace lime { value lime_alc_open_device (HxString devicename) { ALCdevice* alcDevice = alcOpenDevice (devicename.__s); - atexit (lime_al_atexit); + //TODO: Can we work out our own cleanup for openal? + //atexit (lime_al_atexit); value ptr = CFFIPointer (alcDevice, gc_alc_object); alcObjects[alcDevice] = ptr; @@ -3424,7 +3430,8 @@ namespace lime { HL_PRIM HL_CFFIPointer* HL_NAME(hl_alc_open_device) (hl_vstring* devicename) { ALCdevice* alcDevice = alcOpenDevice (devicename ? (char*)hl_to_utf8 ((const uchar*)devicename->bytes) : 0); - atexit (lime_al_atexit); + //TODO: Can we work out our own cleanup for openal? + //atexit (lime_al_atexit); HL_CFFIPointer* ptr = HLCFFIPointer (alcDevice, (hl_finalizer)hl_gc_alc_object); alcObjects[alcDevice] = ptr; From 802ae3518ed755d700fdd83d914a55a8edc2a45a Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Fri, 25 Oct 2024 09:13:48 -0700 Subject: [PATCH 34/48] System: expand documentation of exit() method Includes explanation that Sys.exit() bypasses Lime's ability to shut down its C++ subsystems, so System.exit() is recommended as best practice instead of Sys.exit(). --- src/lime/system/System.hx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lime/system/System.hx b/src/lime/system/System.hx index 039b58283c..71d1812c70 100644 --- a/src/lime/system/System.hx +++ b/src/lime/system/System.hx @@ -191,7 +191,18 @@ class System #if (!lime_doc_gen || sys) /** Attempts to exit the application. Dispatches `onExit`, and will not - exit if the event is canceled. + exit if the event is canceled. When exiting using this method, Lime will + gracefully shut down a number of subsystems, including (but not limited + to) audio, graphics, timers, and game controllers. + + To properly exit a Lime application, it's best to call Lime's + `System.exit()` instead of calling Haxe's built-in `Sys.exit()`. When + targeting native platforms especially, Lime's is built on C++ libraries + that expose functions to clean up resources properly on exit. Haxe's + `Sys.exit()` exits immediately without giving Lime a chance to clean + things up. With that in mind, the proper and correct way to exit a Lime + app is by calling `lime.system.System.exit()`, and to avoid using + `Sys.exit()`. **/ public static function exit(code:Int):Void { From 4673b91c659980452baa482acba47e17e93f8007 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Mon, 28 Oct 2024 22:51:15 -0400 Subject: [PATCH 35/48] Fix RenderGlyph We change the way RenderGlyph populates the binary data here. It's a little heavier than the 8-bit method used previously but I was having issues getting that to work properly with `Image`. --- project/src/text/Font.cpp | 61 ++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/project/src/text/Font.cpp b/project/src/text/Font.cpp index 61328850ca..8992132567 100644 --- a/project/src/text/Font.cpp +++ b/project/src/text/Font.cpp @@ -944,29 +944,33 @@ namespace lime { } - int Font::RenderGlyph (int index, Bytes *bytes, int offset) { - - if (FT_Load_Glyph ((FT_Face)face, index, FT_LOAD_FORCE_AUTOHINT | FT_LOAD_DEFAULT) == 0) { - - if (FT_Render_Glyph (((FT_Face)face)->glyph, FT_RENDER_MODE_NORMAL) == 0) { - + int Font::RenderGlyph(int index, Bytes *bytes, int offset) + { + if (FT_Load_Glyph((FT_Face)face, index, FT_LOAD_FORCE_AUTOHINT | FT_LOAD_DEFAULT) == 0) + { + if (FT_Render_Glyph(((FT_Face)face)->glyph, FT_RENDER_MODE_LCD) == 0) + { FT_Bitmap bitmap = ((FT_Face)face)->glyph->bitmap; int height = bitmap.rows; - int width = bitmap.width; + int width = bitmap.width / 3; //Due to each pixel now has 3 components (R, G, B) int pitch = bitmap.pitch; - if (width == 0 || height == 0) return 0; + if (width == 0 || height == 0) + return 0; - uint32_t size = (4 * 5) + (width * height); - - if (bytes->length < size + offset) { - - bytes->Resize (size + offset); + //We calculate the size needed for the glyph image, including metadata and 24-bit RGB color data + uint32_t size = sizeof(GlyphImage) + (width * height * 4); + if (bytes->length < size + offset) + { + bytes->Resize(size + offset); } - GlyphImage *data = (GlyphImage*)(bytes->b + offset); + GlyphImage *data = (GlyphImage *)(bytes->b + offset); + + //We should initialize the GlyphImage struct here with zero to avoid uninitialized values + memset(data, 0, sizeof(GlyphImage)); data->index = index; data->width = width; @@ -974,22 +978,33 @@ namespace lime { data->x = ((FT_Face)face)->glyph->bitmap_left; data->y = ((FT_Face)face)->glyph->bitmap_top; - unsigned char* position = &data->data; - - for (int i = 0; i < height; i++) { - - memcpy (position + (i * width), bitmap.buffer + (i * pitch), width); - + unsigned char *position = &data->data; + + //Copy the bitmap data row by row, copying each RGB triplet and adding padding for 32-bit alignment + for (int i = 0; i < height; i++) + { + for (int j = 0; j < width; j++) + { + unsigned char r = bitmap.buffer[i * pitch + j * 3 + 0]; + unsigned char g = bitmap.buffer[i * pitch + j * 3 + 1]; + unsigned char b = bitmap.buffer[i * pitch + j * 3 + 2]; + + //Red + position[(i * width + j) * 4 + 0] = r; + //Green + position[(i * width + j) * 4 + 1] = g; + //Blue + position[(i * width + j) * 4 + 2] = b; + //Alpha (fully opaque) + position[(i * width + j) * 4 + 3] = 255; + } } return size; - } - } return 0; - } From 85414fce461e4e552b39b225dee30e93fd6a620f Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Mon, 28 Oct 2024 22:58:23 -0400 Subject: [PATCH 36/48] Font: Fix `renderGlyph` to render correctly Accounts for some changes to the native code called through cffi. We use 32 bit space (24 bit color) to create our image. We had some problems using 8 bit color previously. This might be a breaking change to anyone expecting an 8 bit image buffer, but it wasn't working for several versions anyway and this api is not used for anything within lime to render text as is. --- src/lime/text/Font.hx | 46 ++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/src/lime/text/Font.hx b/src/lime/text/Font.hx index 273c676d74..c2bcc54e54 100644 --- a/src/lime/text/Font.hx +++ b/src/lime/text/Font.hx @@ -319,29 +319,52 @@ class Font #if (lime_cffi && !macro) __setSize(fontSize); - var bytes = Bytes.alloc(0); - // bytes.endian = (System.endianness == BIG_ENDIAN ? "bigEndian" : "littleEndian"); + // Allocate an estimated buffer size - adjust if necessary + var bytes:Bytes = Bytes.alloc(0); // Allocate some reasonable initial size - var dataPosition = 0; + // Call native function to render glyph and get byte data bytes = NativeCFFI.lime_font_render_glyph(src, glyph, bytes); if (bytes != null && bytes.length > 0) { - var index = bytes.getInt32(dataPosition); + var dataPosition = 0; + + // Extract glyph information from the byte array + var index:Int = bytes.getInt32(dataPosition); dataPosition += 4; - var width = bytes.getInt32(dataPosition); + + var width:Int = bytes.getInt32(dataPosition); dataPosition += 4; - var height = bytes.getInt32(dataPosition); + + var height:Int = bytes.getInt32(dataPosition); dataPosition += 4; - var x = bytes.getInt32(dataPosition); + + var x:Int = bytes.getInt32(dataPosition); dataPosition += 4; - var y = bytes.getInt32(dataPosition); + + var y:Int = bytes.getInt32(dataPosition); dataPosition += 4; - var data = bytes.sub(dataPosition, width * height); - dataPosition += (width * height); + // Check if width and height are valid before proceeding + if (width <= 0 || height <= 0) + { + return null; + } + + // Extract pixel data from the byte array, accounting for 32-bit RGBA data + var pitch = width * 4; // 32-bit color data - var buffer = new ImageBuffer(new UInt8Array(data), width, height, 8); + // Create a new Bytes array to store the extracted bitmap data without padding + var dataBytes = Bytes.alloc(width * height * 4); + + // Extract row by row to handle RGBA data + for (i in 0...height) + { + dataBytes.blit(i * width * 4, bytes, dataPosition + (i * pitch), width * 4); + } + + // Create ImageBuffer and Image from the extracted data + var buffer = new ImageBuffer(new UInt8Array(dataBytes), width, height, 32); var image = new Image(buffer, 0, 0, width, height); image.x = x; image.y = y; @@ -352,7 +375,6 @@ class Font return null; } - /** * Renders a set of glyphs to images. * From 9cbdc836058e71083c2f956d632bf765e4dbc01d Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Mon, 28 Oct 2024 23:02:28 -0400 Subject: [PATCH 37/48] SetSize should use 96 dpi for now I think it should probably use 96 dpi instead of 72.... In the next minor version of Lime I think we should change the function sig to allow a dpi argument. --- project/src/text/Font.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/project/src/text/Font.cpp b/project/src/text/Font.cpp index 8992132567..021b112c13 100644 --- a/project/src/text/Font.cpp +++ b/project/src/text/Font.cpp @@ -1040,14 +1040,22 @@ namespace lime { } - void Font::SetSize (size_t size) { - - size_t hdpi = 72; - size_t vdpi = 72; - - FT_Set_Char_Size ((FT_Face)face, (int)(size*64), (int)(size*64), hdpi, vdpi); + void Font::SetSize(size_t size) + { + //We changed this from 72? I think in the next version of lime we should probably + //change the function signature from both the native and haxe side to expect an optional + //dpi argument + size_t hdpi = 96; + size_t vdpi = 96; + + FT_Set_Char_Size( + (FT_Face)face, //Handle to the target face object + 0, //Char width in 1/64th of points (0 means same as height) + static_cast(size * 64), //Char height in 1/64th of points + hdpi, //Horizontal DPI + vdpi //Vertical DPI + ); mSize = size; - } From e65e863918790c36b0d33890beb653c93b14abe3 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Mon, 28 Oct 2024 23:38:18 -0400 Subject: [PATCH 38/48] Native `RenderGylph` should handle alpha properly --- project/src/text/Font.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/project/src/text/Font.cpp b/project/src/text/Font.cpp index 021b112c13..e0f77069fd 100644 --- a/project/src/text/Font.cpp +++ b/project/src/text/Font.cpp @@ -988,15 +988,16 @@ namespace lime { unsigned char r = bitmap.buffer[i * pitch + j * 3 + 0]; unsigned char g = bitmap.buffer[i * pitch + j * 3 + 1]; unsigned char b = bitmap.buffer[i * pitch + j * 3 + 2]; - + unsigned char a = (r + g + b) / 3; + //Red position[(i * width + j) * 4 + 0] = r; //Green position[(i * width + j) * 4 + 1] = g; //Blue position[(i * width + j) * 4 + 2] = b; - //Alpha (fully opaque) - position[(i * width + j) * 4 + 3] = 255; + //Alpha + position[(i * width + j) * 4 + 3] = a; } } From c4faf58ff0c8a889bbe47c8ea1c90238a1bb9d08 Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Tue, 29 Oct 2024 15:43:27 -0700 Subject: [PATCH 39/48] freetype: roll back to freetype version 2.9.1 tag VER-2-9-1 Starting with freetype 2.10.0, the sum of the ascent and descent values seem to be more likely to be less than the baseline-to-baseline measurement (called the font's height), which is the font designer's recommend distance between baselines. However, OpenFL doesn't account for the full baseline-to-baseline height at all, so with smaller ascent and descent values, lines render with smaller gaps between them. OpenFL needs to update its TextEngine algorithm to use the height of the line instead of adding ascent and descent together alone, and then we can update freetype. Updating TextEngine is not a trivial change, and may likely require time to discover bugs and stabilize, so it's better to roll back the freetype update for now, and apply it again later after OpenFL can handle it properly. --- project/lib/freetype | 2 +- project/lib/freetype-files.xml | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/project/lib/freetype b/project/lib/freetype index e8ebfe988b..86bc8a9505 160000 --- a/project/lib/freetype +++ b/project/lib/freetype @@ -1 +1 @@ -Subproject commit e8ebfe988b5f57bfb9a3ecb13c70d9791bce9ecf +Subproject commit 86bc8a95056c97a810986434a3f268cbe67f2902 diff --git a/project/lib/freetype-files.xml b/project/lib/freetype-files.xml index c9e9e69e58..15e0c3476a 100644 --- a/project/lib/freetype-files.xml +++ b/project/lib/freetype-files.xml @@ -110,7 +110,13 @@ - + + + + + + + @@ -120,13 +126,8 @@ - - - - - From e6fa4e73d41858bb549dbc304ebcc4194586256b Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 30 Oct 2024 12:12:58 -0400 Subject: [PATCH 40/48] Revert "SetSize should use 96 dpi for now" This reverts commit 9cbdc836058e71083c2f956d632bf765e4dbc01d. --- project/src/text/Font.cpp | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/project/src/text/Font.cpp b/project/src/text/Font.cpp index e0f77069fd..a6fd56715d 100644 --- a/project/src/text/Font.cpp +++ b/project/src/text/Font.cpp @@ -1041,22 +1041,14 @@ namespace lime { } - void Font::SetSize(size_t size) - { - //We changed this from 72? I think in the next version of lime we should probably - //change the function signature from both the native and haxe side to expect an optional - //dpi argument - size_t hdpi = 96; - size_t vdpi = 96; - - FT_Set_Char_Size( - (FT_Face)face, //Handle to the target face object - 0, //Char width in 1/64th of points (0 means same as height) - static_cast(size * 64), //Char height in 1/64th of points - hdpi, //Horizontal DPI - vdpi //Vertical DPI - ); + void Font::SetSize (size_t size) { + + size_t hdpi = 72; + size_t vdpi = 72; + + FT_Set_Char_Size ((FT_Face)face, (int)(size*64), (int)(size*64), hdpi, vdpi); mSize = size; + } From 579efa5351cbe4a4be261e22663a3d0db11e13b6 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 30 Oct 2024 12:49:30 -0400 Subject: [PATCH 41/48] Font: Allow setting dpi internally This fixes some unexpected changes in text rendering for OpenFL which rely on a private function in Lime. Previously we defaulted at 72 dpi, which apparently is expected to layout the text properly. Most displays are 96 dpi or higher today, so we should probably look into this. For RenderGlyph, which was previously broken over several versions, we will now use a dpi of 96 for now. In the next version of lime, we absolutely should alter the function signature to allow for renderGlyph to accept a dpi argument. --- project/include/text/Font.h | 2 +- project/src/ExternalInterface.cpp | 10 ++++---- project/src/text/Font.cpp | 24 ++++++++++++------- .../_internal/backend/native/NativeCFFI.hx | 8 +++---- src/lime/text/Font.hx | 4 ++-- 5 files changed, 28 insertions(+), 20 deletions(-) diff --git a/project/include/text/Font.h b/project/include/text/Font.h index bcf3d4a8ed..2d4cf87f40 100644 --- a/project/include/text/Font.h +++ b/project/include/text/Font.h @@ -59,7 +59,7 @@ namespace lime { int GetUnitsPerEM (); int RenderGlyph (int index, Bytes *bytes, int offset = 0); int RenderGlyphs (value indices, Bytes *bytes); - void SetSize (size_t size); + void SetSize (size_t size, size_t dpi); void* library; void* face; diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 62d89441cf..10b075eea9 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -1602,21 +1602,21 @@ namespace lime { } - void lime_font_set_size (value fontHandle, int fontSize) { + void lime_font_set_size (value fontHandle, int fontSize, int dpi) { #ifdef LIME_FREETYPE Font *font = (Font*)val_data (fontHandle); - font->SetSize (fontSize); + font->SetSize (fontSize, dpi); #endif } - HL_PRIM void HL_NAME(hl_font_set_size) (HL_CFFIPointer* fontHandle, int fontSize) { + HL_PRIM void HL_NAME(hl_font_set_size) (HL_CFFIPointer* fontHandle, int fontSize, int dpi) { #ifdef LIME_FREETYPE Font *font = (Font*)fontHandle->ptr; - font->SetSize (fontSize); + font->SetSize (fontSize, dpi); #endif } @@ -4153,7 +4153,7 @@ namespace lime { DEFINE_HL_PRIM (_DYN, hl_font_outline_decompose, _TCFFIPOINTER _I32); DEFINE_HL_PRIM (_TBYTES, hl_font_render_glyph, _TCFFIPOINTER _I32 _TBYTES); DEFINE_HL_PRIM (_TBYTES, hl_font_render_glyphs, _TCFFIPOINTER _ARR _TBYTES); - DEFINE_HL_PRIM (_VOID, hl_font_set_size, _TCFFIPOINTER _I32); + DEFINE_HL_PRIM (_VOID, hl_font_set_size, _TCFFIPOINTER _I32 _I32); DEFINE_HL_PRIM (_VOID, hl_gamepad_add_mappings, _ARR); DEFINE_HL_PRIM (_VOID, hl_gamepad_event_manager_register, _FUN(_VOID, _NO_ARG) _TGAMEPAD_EVENT); DEFINE_HL_PRIM (_BYTES, hl_gamepad_get_device_guid, _I32); diff --git a/project/src/text/Font.cpp b/project/src/text/Font.cpp index a6fd56715d..52903b73e7 100644 --- a/project/src/text/Font.cpp +++ b/project/src/text/Font.cpp @@ -1039,14 +1039,22 @@ namespace lime { return totalOffset; } - - - void Font::SetSize (size_t size) { - - size_t hdpi = 72; - size_t vdpi = 72; - - FT_Set_Char_Size ((FT_Face)face, (int)(size*64), (int)(size*64), hdpi, vdpi); + + void Font::SetSize(size_t size, size_t dpi) + { + //We changed the function signature to include a dpi argument which changes this from + //the default value of 72 for dpi. Any public api that uses this should probably be changed + //to allow setting the dpi in an appropriate future release. + size_t hdpi = dpi; + size_t vdpi = dpi; + + FT_Set_Char_Size( + (FT_Face)face, //Handle to the target face object + 0, //Char width in 1/64th of points (0 means same as height) + static_cast(size * 64), //Char height in 1/64th of points + hdpi, //Horizontal DPI + vdpi //Vertical DPI + ); mSize = size; } diff --git a/src/lime/_internal/backend/native/NativeCFFI.hx b/src/lime/_internal/backend/native/NativeCFFI.hx index 33ce3df541..700f9fe4d3 100644 --- a/src/lime/_internal/backend/native/NativeCFFI.hx +++ b/src/lime/_internal/backend/native/NativeCFFI.hx @@ -149,7 +149,7 @@ class NativeCFFI @:cffi private static function lime_font_render_glyphs(handle:Dynamic, indices:Dynamic, data:Dynamic):Dynamic; - @:cffi private static function lime_font_set_size(handle:Dynamic, size:Int):Void; + @:cffi private static function lime_font_set_size(handle:Dynamic, size:Int, dpi:Int):Void; @:cffi private static function lime_gamepad_add_mappings(mappings:Dynamic):Void; @@ -439,7 +439,7 @@ class NativeCFFI "lime_font_render_glyph", "oioo", false)); private static var lime_font_render_glyphs = new cpp.Callablecpp.Object->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_render_glyphs", "oooo", false)); - private static var lime_font_set_size = new cpp.CallableInt->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_font_set_size", "oiv", false)); + private static var lime_font_set_size = new cpp.CallableInt->Int->ccpp.Void>(cpp.Prime._loadPrime("lime", "lime_font_set_size", "oiiv", false)); private static var lime_gamepad_add_mappings = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gamepad_add_mappings", "ov", false)); private static var lime_gamepad_get_device_guid = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gamepad_get_device_guid", "io", @@ -672,7 +672,7 @@ class NativeCFFI private static var lime_font_outline_decompose = CFFI.load("lime", "lime_font_outline_decompose", 2); private static var lime_font_render_glyph = CFFI.load("lime", "lime_font_render_glyph", 3); private static var lime_font_render_glyphs = CFFI.load("lime", "lime_font_render_glyphs", 3); - private static var lime_font_set_size = CFFI.load("lime", "lime_font_set_size", 2); + private static var lime_font_set_size = CFFI.load("lime", "lime_font_set_size", 3); private static var lime_gamepad_add_mappings = CFFI.load("lime", "lime_gamepad_add_mappings", 1); private static var lime_gamepad_get_device_guid = CFFI.load("lime", "lime_gamepad_get_device_guid", 1); private static var lime_gamepad_get_device_name = CFFI.load("lime", "lime_gamepad_get_device_name", 1); @@ -993,7 +993,7 @@ class NativeCFFI return null; } - @:hlNative("lime", "hl_font_set_size") private static function lime_font_set_size(handle:CFFIPointer, size:Int):Void {} + @:hlNative("lime", "hl_font_set_size") private static function lime_font_set_size(handle:CFFIPointer, size:Int, dpi:Int):Void {} @:hlNative("lime", "hl_gamepad_add_mappings") private static function lime_gamepad_add_mappings(mappings:hl.NativeArray):Void {} diff --git a/src/lime/text/Font.hx b/src/lime/text/Font.hx index c2bcc54e54..4fa2655362 100644 --- a/src/lime/text/Font.hx +++ b/src/lime/text/Font.hx @@ -317,7 +317,7 @@ class Font public function renderGlyph(glyph:Glyph, fontSize:Int):Image { #if (lime_cffi && !macro) - __setSize(fontSize); + __setSize(fontSize, 96); // Allocate an estimated buffer size - adjust if necessary var bytes:Bytes = Bytes.alloc(0); // Allocate some reasonable initial size @@ -714,7 +714,7 @@ class Font } #end - @:noCompletion private function __setSize(size:Int):Void + @:noCompletion private function __setSize(size:Int, dpi:Int):Void { #if (lime_cffi && !macro) NativeCFFI.lime_font_set_size(src, size); From 2f99776336c2ca26519fecf439dc20481044bcbc Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 30 Oct 2024 12:56:16 -0400 Subject: [PATCH 42/48] Font: Set 72 as default dpi for backwards compatibility --- src/lime/text/Font.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/text/Font.hx b/src/lime/text/Font.hx index 4fa2655362..a46b3a8ebd 100644 --- a/src/lime/text/Font.hx +++ b/src/lime/text/Font.hx @@ -714,7 +714,7 @@ class Font } #end - @:noCompletion private function __setSize(size:Int, dpi:Int):Void + @:noCompletion private function __setSize(size:Int, dpi:Int = 72):Void { #if (lime_cffi && !macro) NativeCFFI.lime_font_set_size(src, size); From fa77a6b370f64309d67dcb3da7e5202d96711d31 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 30 Oct 2024 13:04:06 -0400 Subject: [PATCH 43/48] Font: Make sure we pass dpi value --- src/lime/text/Font.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/text/Font.hx b/src/lime/text/Font.hx index a46b3a8ebd..e8fc03c81a 100644 --- a/src/lime/text/Font.hx +++ b/src/lime/text/Font.hx @@ -717,7 +717,7 @@ class Font @:noCompletion private function __setSize(size:Int, dpi:Int = 72):Void { #if (lime_cffi && !macro) - NativeCFFI.lime_font_set_size(src, size); + NativeCFFI.lime_font_set_size(src, size, dpi); #end } } From 17bd36ac2948d360a1133d952d9b32a71833b4ca Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 30 Oct 2024 13:08:21 -0400 Subject: [PATCH 44/48] Fix compilation for cpp --- src/lime/_internal/backend/native/NativeCFFI.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/_internal/backend/native/NativeCFFI.hx b/src/lime/_internal/backend/native/NativeCFFI.hx index 700f9fe4d3..dd3403c8cc 100644 --- a/src/lime/_internal/backend/native/NativeCFFI.hx +++ b/src/lime/_internal/backend/native/NativeCFFI.hx @@ -439,7 +439,7 @@ class NativeCFFI "lime_font_render_glyph", "oioo", false)); private static var lime_font_render_glyphs = new cpp.Callablecpp.Object->cpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_font_render_glyphs", "oooo", false)); - private static var lime_font_set_size = new cpp.CallableInt->Int->ccpp.Void>(cpp.Prime._loadPrime("lime", "lime_font_set_size", "oiiv", false)); + private static var lime_font_set_size = new cpp.CallableInt->Int->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_font_set_size", "oiiv", false)); private static var lime_gamepad_add_mappings = new cpp.Callablecpp.Void>(cpp.Prime._loadPrime("lime", "lime_gamepad_add_mappings", "ov", false)); private static var lime_gamepad_get_device_guid = new cpp.Callablecpp.Object>(cpp.Prime._loadPrime("lime", "lime_gamepad_get_device_guid", "io", From d2562997bfdac67dae9ce3d18a88480d59977b75 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 30 Oct 2024 13:14:32 -0400 Subject: [PATCH 45/48] Update CairoBindings to use a default of 72 dpi for fonts We use a default of 72 for now to ensure text is formatted correctly. Not entirely sure why we are stuck on 72 but that is an investigation for the future. --- project/src/graphics/cairo/CairoBindings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project/src/graphics/cairo/CairoBindings.cpp b/project/src/graphics/cairo/CairoBindings.cpp index b3c92e1f06..09ab422e38 100644 --- a/project/src/graphics/cairo/CairoBindings.cpp +++ b/project/src/graphics/cairo/CairoBindings.cpp @@ -1824,7 +1824,7 @@ namespace lime { if (fontReference) { Font* font = (Font*)val_data ((value)fontReference->Get ()); - font->SetSize (size); + font->SetSize (size, 72); } @@ -1852,7 +1852,7 @@ namespace lime { if (fontReference) { Font* font = (Font*)((HL_CFFIPointer*)fontReference->Get ())->ptr; - font->SetSize (size); + font->SetSize (size, 72); } From c6165350c62ad573166e486cb0e53917a31decf8 Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 30 Oct 2024 13:17:50 -0400 Subject: [PATCH 46/48] Font: `renderGlyphs` should use the internal `__setSize()` --- src/lime/text/Font.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lime/text/Font.hx b/src/lime/text/Font.hx index e8fc03c81a..564b267afb 100644 --- a/src/lime/text/Font.hx +++ b/src/lime/text/Font.hx @@ -410,7 +410,7 @@ class Font var glyphList = _glyphList; #end - NativeCFFI.lime_font_set_size(src, fontSize); + __setSize(fontSize, 96); var bytes = Bytes.alloc(0); bytes = NativeCFFI.lime_font_render_glyphs(src, glyphList, bytes); From 6de4b67620becbecb45b2d5ae20c7301a043ee0f Mon Sep 17 00:00:00 2001 From: Chris Speciale Date: Wed, 30 Oct 2024 13:23:37 -0400 Subject: [PATCH 47/48] CFFI fix Accept 3 values instead of 2. Incidentally, I thought this was going to be a rather simple straightforward change, but I suppose not. --- project/src/ExternalInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 10b075eea9..d213c61e74 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -3965,7 +3965,7 @@ namespace lime { DEFINE_PRIME2 (lime_font_outline_decompose); DEFINE_PRIME3 (lime_font_render_glyph); DEFINE_PRIME3 (lime_font_render_glyphs); - DEFINE_PRIME2v (lime_font_set_size); + DEFINE_PRIME3v (lime_font_set_size); DEFINE_PRIME1v (lime_gamepad_add_mappings); DEFINE_PRIME2v (lime_gamepad_event_manager_register); DEFINE_PRIME1 (lime_gamepad_get_device_guid); From 36b14e946935f1560e9cbdaa7b010cdfbf16017e Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Thu, 31 Oct 2024 15:22:38 -0700 Subject: [PATCH 48/48] prepare for 8.2.1 --- CHANGELOG.md | 11 +++++++---- haxelib.json | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1948c9f75d..9ca7f078e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,15 @@ Changelog ========= -8.2.1 (10/??/2024) +8.2.1 (11/01/2024) ------------------ -* Fixed paths for ndll on Raspberry pi -* Fixed `BackgroundWorker`conditional on hl to use threads only for haxe4 - +* Fixed `Sys.exit()` causing hang instead of exiting application. +* Fixed paths for _.ndll_ files when targeting Raspberry Pi. +* Fixed compiling `BackgroundWorker` when targeting HashLink before Haxe 4. +* Fixed errors compiling `ThreadPool` for HashLink with Haxe 4.0 and 4.1. +* Fixed `Font.renderGlyph` to support 32-bit colors, including alpha. +* Fixed OpenFL line height issues by rolling back FreeType submodule to version 2.9.1. 8.2.0 (10/21/2024) ------------------ diff --git a/haxelib.json b/haxelib.json index 9cc0096853..b3dcba7aa2 100644 --- a/haxelib.json +++ b/haxelib.json @@ -5,7 +5,7 @@ "tags": [], "description": "A foundational Haxe framework for cross-platform development", "version": "8.2.1", - "releasenote": "Correct path for raspberrypi ndlls, minor fixes", + "releasenote": "Various bug fixes", "contributors": [ "singmajesty", "bowlerhat",