Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
56087c6
Remove redundant file dialog string conversions
tobil4sk Aug 27, 2025
4613c72
Add comment about file dialog string ownership
tobil4sk Dec 20, 2025
938d6a6
Move inline script into output.js.
player-03 Jan 2, 2026
167c07b
Call `lime.embed()` from output.js.
player-03 Jan 2, 2026
918ca9f
Remove unneeded const
tobil4sk Jan 12, 2026
a0534ff
merge 8.4.0 (#2064)
dimensionscape May 14, 2026
20b4786
Fix asset embedding regression.
player-03 May 14, 2026
c2ed6a0
Use `copyProjectAssets()` in `WebAssemblyPlatform`.
player-03 May 14, 2026
919232a
Add an experimental Vulkan backend
dimensionscape May 20, 2026
df371a3
Hook the Vulkan backend into project config and CI
dimensionscape May 20, 2026
aec2441
Fix Vulkan docs on non-CFFI targets
dimensionscape May 20, 2026
ff8ad73
Restore frame timing for directly-created windows
dimensionscape May 20, 2026
7dfdf49
Fix Vulkan smoke coverage on Linux
dimensionscape May 20, 2026
35d97de
Wire up Vulkan devices and command buffers
dimensionscape May 20, 2026
780cb40
Fix HashLink Vulkan signatures
dimensionscape May 21, 2026
251cb31
Add Vulkan types, swapchain & helper bindings
dimensionscape May 22, 2026
9acbfe7
Vulkan: add memory download and command helpers
dimensionscape May 22, 2026
b91b9ea
Vulkan: Pack Vulkan render-pass params into state array
dimensionscape May 22, 2026
d129177
Add Vulkan bootstrap logging and vk error details
dimensionscape May 25, 2026
01789c0
Vulkan: MSAA/resolve support
dimensionscape May 25, 2026
0c3d568
Enable Vulkan by default for Windows/Linux builds
dimensionscape May 26, 2026
0e4b7d4
Vulkan: mapped memory & descriptor helpers
dimensionscape May 26, 2026
9fe4452
Vulkan: cache device proc addresses
dimensionscape May 26, 2026
c653ae3
Vulkan: Android support
dimensionscape May 27, 2026
88769f6
Window: updated gamepad mappings from: https://github.com/gabomdq/SDL…
joshtynjala May 29, 2026
ea029fb
Missed a comma
joshtynjala May 29, 2026
17d95bd
Fix GL cleanup and skip invisible windows
dimensionscape Jun 2, 2026
e5273f4
Use renderer window attribute; update parser
dimensionscape Jun 2, 2026
15377a7
Merge branch 'feature/vulkan' into develop
dimensionscape Jun 2, 2026
2ac936c
Vulkan: Keep non-Vulkan native builds isolated
dimensionscape Jun 2, 2026
9524adb
ios template: added identity settings and 'update to recommended sett…
IriySoft Apr 16, 2026
2e1d221
Add support for VAOs on macOS
ACrazyTown May 14, 2026
3b86148
Fix GC not picking up some GL objects on desktop
ACrazyTown May 14, 2026
07c2c7c
Don't use `ReplaceVistaIcon` on windows `cpp` target anymore.
MAJigsaw77 Jul 17, 2025
13a9b79
Implement OpenAL audio capture extension (#1965)
ACrazyTown Jun 2, 2026
b1e2671
Fix leftover OpenAL merge markers
dimensionscape Jun 2, 2026
f220607
Fix Windows cpp icon resource handling
dimensionscape Jun 2, 2026
ad09934
Rebuild tools
dimensionscape Jun 2, 2026
f34a0a5
Remove the old hxcpp compile cache + bump Haxe from 4.3.6 to 4.3.7
MRK2009 Jun 1, 2026
2157389
Remove redundant file dialog string conversions (#1665)
player-03 Jun 2, 2026
42785a2
Expose input event timestamps without breaking listeners
dimensionscape Jun 2, 2026
d5ee2a5
Fix Event.timestamp in doc generation
dimensionscape Jun 2, 2026
8c5a870
Update pixman for llvm assembly fixes
tobil4sk Mar 17, 2025
ae54563
Reenable pixman neon support for 32 bit arm
tobil4sk Mar 17, 2025
428e945
Fix pixman config for gcc android ndks
tobil4sk Mar 17, 2025
6051bc7
Enable pixman neon support for arm64
tobil4sk Mar 17, 2025
201b9e1
Fix pixman config for apple platforms
tobil4sk Jan 11, 2026
f34259b
Disable neon on armv7 ios again
tobil4sk Jan 11, 2026
f94a2d5
Add polling AudioInput API
dimensionscape Jun 2, 2026
1d81346
Implement html5 audio input backend
dimensionscape Jun 3, 2026
e0bd462
Implement flash audio input b ackend
dimensionscape Jun 3, 2026
3593e61
account for async permissions in html5
dimensionscape Jun 3, 2026
ebcd7c5
Fix perspective camera
Teslotik Jan 11, 2026
a23712a
Add ALC extension presence support
dimensionscape Jun 3, 2026
2592aef
including bindings
dimensionscape Jun 3, 2026
88d151e
Recover OpenAL audio after output device changes
dimensionscape Jun 3, 2026
8d9a49e
AudioBuffer: Don't force HTML5 audio when using fromBytes()/fromBase64()
ACrazyTown May 23, 2025
01a9171
compilation checks
dimensionscape Jun 3, 2026
e090825
Fix HashLink layout mismatch
dimensionscape Jun 3, 2026
bf2704d
Support inline stream looping and loop counts
dimensionscape Jun 5, 2026
b8d06e0
Add transparent window support
dimensionscape Jun 5, 2026
6f124fc
Fix HL Vulkan exports
dimensionscape Jun 5, 2026
f53e224
Fix HTML5 transparent docs build
dimensionscape Jun 5, 2026
7c2d7e2
Gate invisible window optimization
dimensionscape Jun 12, 2026
dd530ba
prepare for 8.4.0
dimensionscape Jun 18, 2026
e749e62
Stop copying embedded assets
dimensionscape Jun 18, 2026
79e2cef
Avoid duplicate embedded asset prep
dimensionscape Jun 18, 2026
baaf478
Document asset embedding functions.
player-03 Jun 18, 2026
276aea8
Merge branch 'develop' into unsafe-inline
player-03 Jul 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 64 additions & 10 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev libmbedtls-dev libpng-dev libturbojpeg-dev libuv1-dev libvorbis-dev
sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev g++-multilib gcc-multilib libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev libmbedtls-dev libpng-dev libturbojpeg-dev libuv1-dev libvorbis-dev libvulkan-dev

- uses: krdlab/setup-haxe@v2
with:
Expand Down Expand Up @@ -110,7 +110,7 @@ jobs:
run: |
sudo add-apt-repository ppa:haxe/releases -y
sudo apt-get update
sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev libmbedtls-dev libpng-dev libturbojpeg-dev libuv1-dev libvorbis-dev
sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev libasound2-dev libx11-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev libmbedtls-dev libpng-dev libturbojpeg-dev libuv1-dev libvorbis-dev libvulkan-dev

# krdlab/setup-haxe doesn't support arm64 linux
# so this is our workaround for now
Expand All @@ -135,10 +135,6 @@ jobs:
haxelib install hxp --quiet
haxelib install utest --quiet

- name: Enable HXCPP compile cache
run: |
echo "HXCPP_COMPILE_CACHE=~/.hxcpp" >> $GITHUB_ENV

- name: Rebuild Lime tools
run: |
haxelib dev lime ${{ github.workspace }}
Expand Down Expand Up @@ -182,6 +178,59 @@ jobs:
lime create SimpleAudio -verbose -nocolor
lime build SimpleAudio linux -release -verbose -nocolor

vulkan-smoke:
runs-on: ubuntu-22.04
steps:

- uses: actions/checkout@v6
with:
submodules: true

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev libasound2-dev libx11-dev libx11-xcb1 libxext-dev libxi-dev libxrandr-dev libxinerama-dev libpulse-dev libmbedtls-dev libpng-dev libturbojpeg-dev libuv1-dev libvorbis-dev libvulkan-dev mesa-vulkan-drivers xvfb

- uses: krdlab/setup-haxe@v2
with:
haxe-version: ${{ env.HAXE_VERSION }}

- name: Set HAXEPATH
run: |
echo "HAXEPATH=$HAXE_STD_PATH/.." >> $GITHUB_ENV

- name: Install Haxe dependencies
run: |
curl --output ../hxcpp-4.3.45.zip --location https://github.com/HaxeFoundation/hxcpp/releases/download/v4.3.45/hxcpp-4.3.45.zip
haxelib --global update haxelib --quiet
haxelib install ../hxcpp-4.3.45.zip --quiet
haxelib install format --quiet
haxelib install hxp --quiet
haxelib install utest --quiet

- name: Rebuild Lime tools
run: |
haxelib dev lime ${{ github.workspace }}
haxelib run lime rebuild tools -nocolor -verbose -nocffi
haxelib run lime setup -alias -y -nocffi

- name: Rebuild Lime (Linux default Vulkan)
run: |
lime rebuild linux -64 -release -nocolor -verbose -nocffi

- name: Build Vulkan smoke test app
working-directory: tests/vulkan-smoke
run: |
lime build linux -release -verbose -nocolor

- name: Run Vulkan smoke test app
working-directory: tests/vulkan-smoke
run: |
if [ -f /usr/share/vulkan/icd.d/lvp_icd.x86_64.json ]; then
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/lvp_icd.x86_64.json
fi
SDL_AUDIODRIVER=dummy xvfb-run -a Export/linux/bin/LimeVulkanSmoke

macos:
runs-on: macos-14
steps:
Expand Down Expand Up @@ -476,6 +525,11 @@ jobs:
run: |
lime create SimpleAudio -verbose -nocolor -eval
lime build SimpleAudio android -release -verbose -nocolor -eval

- name: Build Vulkan smoke test app
working-directory: tests/vulkan-smoke
run: |
lime build android -release -verbose -nocolor -eval
ios:
runs-on: macos-14
steps:
Expand Down Expand Up @@ -536,7 +590,7 @@ jobs:
lime build SimpleAudio ios -release -nosign -verbose -nocolor -eval

package-haxelib:
needs: [linux, macos, windows, android, ios]
needs: [linux, vulkan-smoke, macos, windows, android, ios]
runs-on: ubuntu-22.04
steps:

Expand Down Expand Up @@ -728,7 +782,7 @@ jobs:
runs-on: windows-latest
strategy:
matrix:
haxe-version: [4.0.5, 4.1.5, 4.2.5, 4.3.6]
haxe-version: [4.0.5, 4.1.5, 4.2.5, 4.3.7]
steps:

- uses: actions/checkout@v6
Expand Down Expand Up @@ -882,7 +936,7 @@ jobs:
runs-on: ubuntu-22.04
strategy:
matrix:
haxe-version: [3.4.7, 4.0.5, 4.1.5, 4.2.5, 4.3.6]
haxe-version: [3.4.7, 4.0.5, 4.1.5, 4.2.5, 4.3.7]
steps:

- uses: actions/checkout@v6
Expand Down Expand Up @@ -996,7 +1050,7 @@ jobs:

notify:
runs-on: ubuntu-22.04
needs: [package-haxelib, docs, android, flash-samples, air-samples, hashlink-samples, hashlinkc-samples, html5-samples, ios, linux, macos, neko-samples, windows]
needs: [package-haxelib, docs, android, flash-samples, air-samples, hashlink-samples, hashlinkc-samples, html5-samples, ios, linux, vulkan-smoke, macos, neko-samples, windows]
if: ${{ github.repository == 'openfl/lime' && github.event_name != 'pull_request' }}
steps:
- name: Notify Discord
Expand Down
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,38 @@
Changelog
=========

8.4.0 (06/18/2026)
------------------

- Added an experimental Vulkan renderer for native Windows, Linux, and Android targets.
- Added `VulkanRenderContext` and Haxe Vulkan bindings for instance, device, swapchain, command, descriptor, memory, and pipeline helpers.
- Added Vulkan bootstrap logging, error details, MSAA resolve support, mapped memory helpers, and descriptor helpers.
- Added configurable application frame timing with `FrameProfile`, `FrameOptions`, `VSyncMode`, busy-wait, time precision, and uncap controls.
- Added `AudioInput` and audio input device APIs with native OpenAL, HTML5, and Flash backends.
- Added SDL_sound decoding and streaming, including inline stream playback, streams with unknown length, and loop counts.
- Added `Window.alwaysOnTop` and transparent window support.
- Added input event timestamps without changing listener signatures.
- Added `Promise.completeAsync()`.
- Added explicit font rendering flags, DPI-aware glyph rendering, unhinted font decomposition, and HarfBuzz FT font change notifications.
- Added project.xml support for Android manifest tags and Gradle plugin entries.
- Added AIR options for Android App Bundles, Android Studio output, and shared runtime deployment.
- Added VAO support on macOS.
- Changed asset copying and embedding to behave consistently across targets.
- Changed OpenAL Soft HRTF to be disabled by default.
- Updated pixman and platform config for LLVM assembly fixes, ARM NEON, Android NDKs, and Apple platforms.
- Updated MojoAL and gamepad mappings.
- Fixed an asset embedding regression.
- Fixed Windows cpp icon resource handling when no icon is generated.
- Fixed GL cleanup and desktop GL object collection.
- Fixed native and HashLink `AudioBuffer` layout mismatches.
- Fixed `AudioBuffer.fromBytes()` and `AudioBuffer.fromBase64()` on HTML5 to avoid forcing HTML5 audio buffers.
- Fixed OpenAL output device recovery.
- Fixed perspective camera matrix calculation.
- Fixed Tizen `appinfo.json` templating.
- Fixed Android architecture parsing for `x86_64` and `x86_32`.
- Fixed SDL_sound ARM64 Linux detection outside Raspberry Pi OS.
- Fixed HTML5 transparent docs generation.

8.3.2 (05/13/2026)
------------------

Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,13 @@ Lime does not include a renderer, but exposes the current context:
* DOM
* Flash
* GL
* Vulkan

The GL context is based upon the WebGL standard, implemented for both OpenGL and OpenGL ES as needed.
Native Vulkan support exposes an explicit Vulkan API layer for renderer backends, including native window/swapchain integration and resource/command primitives.
Native Vulkan support is included in standard Windows and Linux C++ Lime builds, including the matching Haxe API define. Apple targets still require an explicit Vulkan-enabled build and MoltenVK packaging.
To request a Vulkan window, use the standard `RenderContextType.VULKAN` context selection or set `<window renderer="vulkan" />` in project XML.
The in-repo `tests/vulkan-smoke` project is used as the current Vulkan CI smoke app.

Lime provides a unified audio API, but also provides access to OpenAL for advanced audio on native targets.

Expand Down
37 changes: 37 additions & 0 deletions docs/ImportAll.hx
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,41 @@ import lime.graphics.PixelFormat;
import lime.graphics.RenderContext;
import lime.graphics.RenderContextAttributes;
import lime.graphics.RenderContextType;
import lime.graphics.VulkanRenderContext;
import lime.graphics.vulkan.VK;
import lime.graphics.vulkan.VKAcquireResult;
import lime.graphics.vulkan.VKBuffer;
import lime.graphics.vulkan.VKCommandBuffer;
import lime.graphics.vulkan.VKCommandPool;
import lime.graphics.vulkan.VKDescriptorPool;
import lime.graphics.vulkan.VKDescriptorPoolSize;
import lime.graphics.vulkan.VKDescriptorSet;
import lime.graphics.vulkan.VKDescriptorSetLayout;
import lime.graphics.vulkan.VKDescriptorSetLayoutBinding;
import lime.graphics.vulkan.VKDevice;
import lime.graphics.vulkan.VKDeviceMemory;
import lime.graphics.vulkan.VKFence;
import lime.graphics.vulkan.VKFramebuffer;
import lime.graphics.vulkan.VKGraphicsPipelineInfo;
import lime.graphics.vulkan.VKImage;
import lime.graphics.vulkan.VKImageView;
import lime.graphics.vulkan.VKInstance;
import lime.graphics.vulkan.VKMemoryRequirements;
import lime.graphics.vulkan.VKPhysicalDevice;
import lime.graphics.vulkan.VKPipeline;
import lime.graphics.vulkan.VKPipelineCache;
import lime.graphics.vulkan.VKPipelineLayout;
import lime.graphics.vulkan.VKQueue;
import lime.graphics.vulkan.VKQueueFamilyInfo;
import lime.graphics.vulkan.VKRenderPass;
import lime.graphics.vulkan.VKRenderer;
import lime.graphics.vulkan.VKSampler;
import lime.graphics.vulkan.VKSemaphore;
import lime.graphics.vulkan.VKShaderModule;
import lime.graphics.vulkan.VKSurface;
import lime.graphics.vulkan.VKSwapchain;
import lime.graphics.vulkan.VKVertexAttribute;
import lime.graphics.vulkan.VKVertexBinding;
import lime.graphics.WebGL2RenderContext;
import lime.graphics.WebGLRenderContext;
import lime.math.ARGB;
Expand Down Expand Up @@ -87,6 +122,8 @@ import lime.media.vorbis.VorbisInfo;
import lime.media.AudioBuffer;
import lime.media.AudioContext;
import lime.media.AudioContextType;
import lime.media.AudioInput;
import lime.media.AudioInputDevice;
import lime.media.AudioManager;
import lime.media.AudioSource;
import lime.media.FlashAudioContext;
Expand Down
2 changes: 2 additions & 0 deletions include.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
<define name="lime-openal" if="ios || tvos || emscripten || lime-openalsoft || lime-mojoal" />
<define name="lime-opengl" if="desktop" unless="html5" />
<define name="lime-opengles" if="emscripten || mobile" />
<define name="lime-vulkan" if="cpp windows" unless="no-vulkan || lime-no-vulkan || winrt" />
<define name="lime-vulkan" if="cpp linux" unless="no-vulkan || lime-no-vulkan" />
<define name="lime-vorbis" if="native" />
<define name="lime-webgl" if="html5" />
<haxedef name="lime_sdl_sound" if="native" />
Expand Down
9 changes: 9 additions & 0 deletions project/Build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,13 @@
<set name="LIME_SDL_ANGLE" value="1" if="winrt" />
<set name="LIME_SDL_SOUND" value="1" />
<set name="LIME_TINYFILEDIALOGS" value="1" if="windows || mac || linux" unless="winrt || emscripten" />
<set name="LIME_VULKAN" value="1" if="lime-vulkan" unless="no-vulkan || lime-no-vulkan" />
<set name="LIME_VULKAN" value="1" if="windows || linux || android" unless="no-vulkan || lime-no-vulkan || winrt || emscripten" />
<set name="LIME_VORBIS" value="1" />
<!-- <set name="LIME_VPX" value="1" />
<set name="LIME_WEBM" value="1" /> -->
<set name="LIME_ZLIB" value="1" />
<set name="OBJEXT" value="${OBJEXT}-vk" if="LIME_VULKAN" />

<set name="OUTPUT_DIR" value="../ndll" unless="OUTPUT_DIR" />
<set name="NATIVE_TOOLKIT_PATH" value="lib" unless="NATIVE_TOOLKIT_PATH" />
Expand All @@ -59,6 +62,10 @@
<!-- setting HXCPP_CPP11 doesn't seem to apply to .mm files -->
<compilerflag value="-std=c++11" unless="isMsvc" />
<compilerflag value="-Iinclude" />
<compilerflag value="-DLIME_VULKAN" if="LIME_VULKAN" />
<compilerflag value="-I${VULKAN_SDK}/Include" if="windows VULKAN_SDK LIME_VULKAN" />
<compilerflag value="-I${VULKAN_SDK}/include" if="mac VULKAN_SDK LIME_VULKAN" />
<compilerflag value="-I${VULKAN_SDK}/include" if="linux VULKAN_SDK LIME_VULKAN" />

<file name="src/ExternalInterface.cpp" />

Expand Down Expand Up @@ -236,6 +243,7 @@
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/sdl/include/configs/mac/" if="mac" />
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/sdl/include/configs/rpi/" if="rpi" />
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/sdl/include/configs/winrt/" if="winrt" />
<compilerflag value="-I${NATIVE_TOOLKIT_PATH}/sdl/src/video/khronos/" />

<compilerflag value="-DHAVE_LIBC" />

Expand Down Expand Up @@ -270,6 +278,7 @@
<file name="src/backend/sdl/SDLMutex.cpp" />
<file name="src/backend/sdl/SDLSystem.cpp" />
<file name="src/backend/sdl/SDLWindow.cpp" />
<file name="src/graphics/vulkan/VKRenderer.cpp" if="LIME_VULKAN" />

</section>

Expand Down
Loading
Loading