diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000000..45995eb1b0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,138 @@
+name: Bug report
+description: Report a focused, reproducible Lime bug
+title: "[Bug]: "
+labels: []
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Please report one specific problem per issue. Reports without enough information to reproduce may be closed until the missing details are provided.
+
+ - type: checkboxes
+ id: checks
+ attributes:
+ label: Preflight Checklist
+ options:
+ - label: I searched existing open and closed issues for duplicates.
+ required: true
+ - label: I tested the latest stable Lime release or the current development branch where possible.
+ required: true
+ - label: I reduced this to the smallest project or code sample that still reproduces the issue.
+ required: true
+ - label: This issue describes one specific behavior, not several unrelated observations.
+ required: true
+
+ - type: textarea
+ id: summary
+ attributes:
+ label: Problem Description
+ description: Describe the specific behavior that appears to be wrong.
+ validations:
+ required: true
+
+ - type: textarea
+ id: versions
+ attributes:
+ label: Version Information
+ description: Include exact versions. Do not write "latest" by itself.
+ value: |
+ Lime version:
+ OpenFL version, if applicable:
+ Haxe version:
+ Target/runtime:
+ validations:
+ required: true
+
+ - type: textarea
+ id: environment
+ attributes:
+ label: Environment
+ description: Include relevant OS, architecture, hardware and driver details.
+ value: |
+ OS:
+ Architecture:
+ GPU/driver, if relevant:
+ Display refresh rate, if relevant:
+ validations:
+ required: true
+
+ - type: textarea
+ id: repro
+ attributes:
+ label: Minimal Reproduction
+ description: Attach or link a minimal project, or paste the smallest code sample that reproduces the problem. Include project.xml or project.hxp.
+ placeholder: |
+ Link to minimal project:
+
+ project.xml / project.hxp:
+
+ Relevant source:
+ validations:
+ required: true
+
+ - type: textarea
+ id: steps
+ attributes:
+ label: Steps to Reproduce
+ description: List exact steps needed to reproduce the issue from a clean checkout/project.
+ placeholder: |
+ 1.
+ 2.
+ 3.
+ validations:
+ required: true
+
+ - type: textarea
+ id: expected
+ attributes:
+ label: Expected Behavior
+ description: What should happen?
+ validations:
+ required: true
+
+ - type: textarea
+ id: actual
+ attributes:
+ label: Actual Behavior
+ description: What happens instead?
+ validations:
+ required: true
+
+ - type: textarea
+ id: logs
+ attributes:
+ label: Logs and Output
+ description: Paste relevant console output, stack traces or build logs.
+ render: text
+ validations:
+ required: false
+
+ - type: textarea
+ id: media
+ attributes:
+ label: Screenshots or Videos
+ description: Attach screenshots or videos only if they help demonstrate the reproduced behavior. They do not replace a minimal reproduction.
+ validations:
+ required: false
+
+ - type: textarea
+ id: timing
+ attributes:
+ label: Performance, Timing or Rendering Details
+ description: If this is about frame pacing, timing or rendering, explain how you measured it and list frame rate, vsync, window/fullscreen and display settings.
+ placeholder: |
+ Frame rate:
+ Vsync setting:
+ Window/fullscreen mode:
+ Measurement method:
+ Reproduces on other targets/machines/drivers:
+ validations:
+ required: false
+
+ - type: textarea
+ id: additional
+ attributes:
+ label: Additional Context
+ description: Add any other focused context that may help reproduce or diagnose this issue.
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000000..3ba13e0cec
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1 @@
+blank_issues_enabled: false
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 0000000000..143721ab44
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,87 @@
+name: Feature request
+description: Propose a focused Lime feature or behavior change
+title: "[Feature]: "
+labels: []
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Please use this form for focused feature proposals. If you are reporting broken behavior, use the bug report form instead.
+
+ - type: checkboxes
+ id: checks
+ attributes:
+ label: Preflight Checklist
+ options:
+ - label: I searched existing open and closed issues for similar proposals.
+ required: true
+ - label: This request describes one focused feature or behavior change.
+ required: true
+ - label: This is not a bug report or a request for help debugging project-specific code.
+ required: true
+
+ - type: textarea
+ id: problem
+ attributes:
+ label: Problem or Use Case
+ description: What problem would this feature solve? Who needs it, and when?
+ validations:
+ required: true
+
+ - type: textarea
+ id: proposal
+ attributes:
+ label: Proposed Behavior
+ description: Describe the exact behavior, API, project setting or workflow change you are proposing.
+ validations:
+ required: true
+
+ - type: textarea
+ id: targets
+ attributes:
+ label: Affected Targets or Backends
+ description: List the targets, runtimes or backends this proposal affects.
+ placeholder: |
+ Native SDL:
+ HTML5:
+ HashLink:
+ HXCPP:
+ Other:
+ validations:
+ required: true
+
+ - type: textarea
+ id: compatibility
+ attributes:
+ label: Compatibility and Defaults
+ description: Explain whether this should be default behavior, opt-in behavior or a breaking change. Include any compatibility concerns.
+ validations:
+ required: true
+
+ - type: textarea
+ id: alternatives
+ attributes:
+ label: Alternatives Considered
+ description: What existing options, workarounds or alternative designs have you considered?
+ validations:
+ required: false
+
+ - type: textarea
+ id: examples
+ attributes:
+ label: Example Usage
+ description: Show how a project would use this feature, if applicable.
+ placeholder: |
+ project.xml / project.hxp:
+
+ Haxe code:
+ validations:
+ required: false
+
+ - type: textarea
+ id: additional
+ attributes:
+ label: Additional Context
+ description: Add any focused context, links or prior discussion that may help evaluate the proposal.
+ validations:
+ required: false
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 857907b35e..3ea16a4a54 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -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:
@@ -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
@@ -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 }}
@@ -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:
@@ -200,16 +249,27 @@ jobs:
- name: Install HashLink dependencies
run: |
- arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
- pushd project/lib/hashlink
- arch -x86_64 /usr/local/bin/brew update
- rm /usr/local/bin/2to3*
- rm /usr/local/bin/idle3*
- rm /usr/local/bin/pydoc3*
- rm /usr/local/bin/python3*
- rm /usr/local/bin/pip3*
- arch -x86_64 /usr/local/bin/brew bundle
- popd
+ set -euxo pipefail
+
+ if [ ! -x /usr/local/bin/brew ]; then
+ NONINTERACTIVE=1 arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
+ fi
+
+ rm -f /usr/local/bin/2to3*
+ rm -f /usr/local/bin/idle3*
+ rm -f /usr/local/bin/pydoc3*
+ rm -f /usr/local/bin/python3*
+ rm -f /usr/local/bin/pip3*
+
+ for attempt in 1 2 3; do
+ if arch -x86_64 /usr/local/bin/brew update && arch -x86_64 /usr/local/bin/brew install jpeg-turbo libpng libuv libvorbis; then
+ break
+ fi
+ if [ "$attempt" -eq 3 ]; then
+ exit 1
+ fi
+ sleep $((attempt * 30))
+ done
- name: Install Haxe dependencies
run: |
@@ -229,6 +289,9 @@ jobs:
run: |
lime rebuild macos -clean -release -64 -nocolor -verbose -nocffi
lime rebuild macos -clean -release -arm64 -nocolor -verbose -nocffi
+
+ - name: Rebuild Lime (HashLink macOS)
+ run: |
lime rebuild hl -clean -release -nocolor -verbose -nocffi
- uses: actions/upload-artifact@v7
@@ -476,6 +539,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:
@@ -536,7 +604,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:
@@ -728,7 +796,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
@@ -882,7 +950,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
@@ -996,7 +1064,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
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 38d456a168..f3ddcb60e1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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)
------------------
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c483f354e6..ae8c283921 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -5,6 +5,38 @@ We welcome your feedback and input in how to make Lime better!
If you are interested in discussing new features, the direction the project or how to integrate some change, please open an issue so we can talk about.
+## Issue Reporting Guidelines
+
+Please keep bug reports focused, reproducible and actionable. A good issue should describe one specific problem and include enough information for maintainers to reproduce it without guessing.
+
+Before opening an issue:
+
+ 1. Search existing open and closed issues to avoid duplicates.
+
+ 2. Test with the latest stable release and, when possible, the current development branch.
+
+ 3. Reduce the problem to the smallest project or code sample that still reproduces it.
+
+Bug reports should include:
+
+ 1. The exact Lime version, OpenFL version if applicable, Haxe version and target/runtime.
+
+ 2. The operating system, architecture and relevant hardware or driver details.
+
+ 3. A minimal project or code sample, including `project.xml` or `project.hxp`.
+
+ 4. Exact steps to reproduce the problem.
+
+ 5. The expected behavior and the actual behavior.
+
+ 6. Any relevant logs, console output, screenshots or videos.
+
+Please do not combine multiple unrelated problems in one issue. Open one issue per behavior so each report can be reproduced, discussed and fixed independently.
+
+Performance, timing and rendering reports need especially clear reproduction material. Include a minimal project, the exact frame rate/vsync/window settings, how the result was measured and whether the behavior reproduces across targets, machines or drivers.
+
+Issues based only on broad observations, speculation, generated code that has not been verified, or project-specific behavior without a minimal reproduction may be closed until enough information is provided.
+
1. Fork the repository
2. Make the desired change
diff --git a/README.md b/README.md
index c6803fb1a5..167628b285 100644
--- a/README.md
+++ b/README.md
@@ -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 `` 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.
diff --git a/docs/ImportAll.hx b/docs/ImportAll.hx
index e0039724f6..d1fbcc89cf 100644
--- a/docs/ImportAll.hx
+++ b/docs/ImportAll.hx
@@ -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;
@@ -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;
diff --git a/externs/air/flash/data/SQLCollationType.hx b/externs/air/flash/data/SQLCollationType.hx
index fecbfc8382..0f93c36c1f 100644
--- a/externs/air/flash/data/SQLCollationType.hx
+++ b/externs/air/flash/data/SQLCollationType.hx
@@ -1,7 +1,6 @@
package flash.data;
-@:native("flash.data.SQLCollationType")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLCollationType(String)
+@:native("flash.data.SQLCollationType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLCollationType(String)
{
var BINARY = "binary";
var NO_CASE = "noCase";
diff --git a/externs/air/flash/data/SQLColumnNameStyle.hx b/externs/air/flash/data/SQLColumnNameStyle.hx
index 03cb7a5adf..c25b13fc07 100644
--- a/externs/air/flash/data/SQLColumnNameStyle.hx
+++ b/externs/air/flash/data/SQLColumnNameStyle.hx
@@ -1,7 +1,6 @@
package flash.data;
-@:native("flash.data.SQLColumnNameStyle")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLColumnNameStyle(String)
+@:native("flash.data.SQLColumnNameStyle") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLColumnNameStyle(String)
{
var DEFAULT = "default";
var LONG = "long";
diff --git a/externs/air/flash/data/SQLMode.hx b/externs/air/flash/data/SQLMode.hx
index ebddf4c8c9..4b876d2d02 100644
--- a/externs/air/flash/data/SQLMode.hx
+++ b/externs/air/flash/data/SQLMode.hx
@@ -1,7 +1,6 @@
package flash.data;
-@:native("flash.data.SQLMode")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLMode(String)
+@:native("flash.data.SQLMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLMode(String)
{
var CREATE = "create";
var READ = "read";
diff --git a/externs/air/flash/data/SQLTransactionLockType.hx b/externs/air/flash/data/SQLTransactionLockType.hx
index 36c24bc1a7..47a06a7a79 100644
--- a/externs/air/flash/data/SQLTransactionLockType.hx
+++ b/externs/air/flash/data/SQLTransactionLockType.hx
@@ -1,7 +1,6 @@
package flash.data;
-@:native("flash.data.SQLTransactionLockType")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLTransactionLockType(String)
+@:native("flash.data.SQLTransactionLockType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLTransactionLockType(String)
{
var DEFERRED = "deferred";
var EXCLUSIVE = "exclusive";
diff --git a/externs/air/flash/desktop/InvokeEventReason.hx b/externs/air/flash/desktop/InvokeEventReason.hx
index d06e591c1b..1c053ad26c 100644
--- a/externs/air/flash/desktop/InvokeEventReason.hx
+++ b/externs/air/flash/desktop/InvokeEventReason.hx
@@ -1,7 +1,6 @@
package flash.desktop;
-@:native("flash.desktop.InvokeEventReason")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract InvokeEventReason(String)
+@:native("flash.desktop.InvokeEventReason") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract InvokeEventReason(String)
{
var LOGIN = "login";
var NOTIFICATION = "notification";
diff --git a/externs/air/flash/desktop/NativeDragActions.hx b/externs/air/flash/desktop/NativeDragActions.hx
index fe67ff9db7..544ad2f1bf 100644
--- a/externs/air/flash/desktop/NativeDragActions.hx
+++ b/externs/air/flash/desktop/NativeDragActions.hx
@@ -1,7 +1,6 @@
package flash.desktop;
-@:native("flash.desktop.NativeDragActions")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeDragActions(String)
+@:native("flash.desktop.NativeDragActions") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeDragActions(String)
{
var COPY = "copy";
var LINK = "link";
diff --git a/externs/air/flash/desktop/NotificationType.hx b/externs/air/flash/desktop/NotificationType.hx
index b2b3dcfb09..c9461c33cf 100644
--- a/externs/air/flash/desktop/NotificationType.hx
+++ b/externs/air/flash/desktop/NotificationType.hx
@@ -1,7 +1,6 @@
package flash.desktop;
-@:native("flash.desktop.NotificationType")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NotificationType(String)
+@:native("flash.desktop.NotificationType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NotificationType(String)
{
var CRITICAL = "critical";
var INFORMATIONAL = "informational";
diff --git a/externs/air/flash/desktop/SystemIdleMode.hx b/externs/air/flash/desktop/SystemIdleMode.hx
index 7fda8df044..c129940766 100644
--- a/externs/air/flash/desktop/SystemIdleMode.hx
+++ b/externs/air/flash/desktop/SystemIdleMode.hx
@@ -1,7 +1,6 @@
package flash.desktop;
-@:native("flash.desktop.SystemIdleMode")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SystemIdleMode(String)
+@:native("flash.desktop.SystemIdleMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SystemIdleMode(String)
{
var KEEP_AWAKE = "keepAwake";
var NORMAL = "normal";
diff --git a/externs/air/flash/display/NativeWindowDisplayState.hx b/externs/air/flash/display/NativeWindowDisplayState.hx
index 4fb63f10d7..56a073a2e0 100644
--- a/externs/air/flash/display/NativeWindowDisplayState.hx
+++ b/externs/air/flash/display/NativeWindowDisplayState.hx
@@ -1,7 +1,6 @@
package flash.display;
-@:native("flash.display.NativeWindowDisplayState")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowDisplayState(String)
+@:native("flash.display.NativeWindowDisplayState") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowDisplayState(String)
{
var MAXIMIZED = "maximized";
var MINIMIZED = "minimized";
diff --git a/externs/air/flash/display/NativeWindowRenderMode.hx b/externs/air/flash/display/NativeWindowRenderMode.hx
index e2d182c5bd..51a135f715 100644
--- a/externs/air/flash/display/NativeWindowRenderMode.hx
+++ b/externs/air/flash/display/NativeWindowRenderMode.hx
@@ -1,7 +1,6 @@
package flash.display;
-@:native("flash.display.NativeWindowRenderMode")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowRenderMode(String)
+@:native("flash.display.NativeWindowRenderMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowRenderMode(String)
{
var AUTO = "auto";
var CPU = "cpu";
diff --git a/externs/air/flash/display/NativeWindowResize.hx b/externs/air/flash/display/NativeWindowResize.hx
index b3cd1a1f9f..5974784f0f 100644
--- a/externs/air/flash/display/NativeWindowResize.hx
+++ b/externs/air/flash/display/NativeWindowResize.hx
@@ -1,7 +1,6 @@
package flash.display;
-@:native("flash.display.NativeWindowResize")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowResize(String)
+@:native("flash.display.NativeWindowResize") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowResize(String)
{
var BOTTOM = "bottom";
var BOTTOM_LEFT = "bottomLeft";
diff --git a/externs/air/flash/display/NativeWindowSystemChrome.hx b/externs/air/flash/display/NativeWindowSystemChrome.hx
index e271969831..367e6d9c22 100644
--- a/externs/air/flash/display/NativeWindowSystemChrome.hx
+++ b/externs/air/flash/display/NativeWindowSystemChrome.hx
@@ -1,7 +1,6 @@
package flash.display;
-@:native("flash.display.NativeWindowSystemChrome")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowSystemChrome(String)
+@:native("flash.display.NativeWindowSystemChrome") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowSystemChrome(String)
{
var ALTERNATE = "alternate";
var NONE = "none";
diff --git a/externs/air/flash/display/NativeWindowType.hx b/externs/air/flash/display/NativeWindowType.hx
index 90ff5bb41f..0ffd8af4bc 100644
--- a/externs/air/flash/display/NativeWindowType.hx
+++ b/externs/air/flash/display/NativeWindowType.hx
@@ -1,7 +1,6 @@
package flash.display;
-@:native("flash.display.NativeWindowType")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowType(String)
+@:native("flash.display.NativeWindowType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NativeWindowType(String)
{
var LIGHTWEIGHT = "lightweight";
var NORMAL = "normal";
diff --git a/externs/air/flash/display/StageAspectRatio.hx b/externs/air/flash/display/StageAspectRatio.hx
index 70ede16512..8a308b07bf 100644
--- a/externs/air/flash/display/StageAspectRatio.hx
+++ b/externs/air/flash/display/StageAspectRatio.hx
@@ -1,7 +1,6 @@
package flash.display;
-@:native("flash.display.StageAspectRatio")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageAspectRatio(String)
+@:native("flash.display.StageAspectRatio") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageAspectRatio(String)
{
var ANY = "any";
var LANDSCAPE = "landscape";
diff --git a/externs/air/flash/display/StageOrientation.hx b/externs/air/flash/display/StageOrientation.hx
index d55da84778..2f2a9b34a8 100644
--- a/externs/air/flash/display/StageOrientation.hx
+++ b/externs/air/flash/display/StageOrientation.hx
@@ -1,7 +1,6 @@
package flash.display;
-@:native("flash.display.StageOrientation")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageOrientation(String)
+@:native("flash.display.StageOrientation") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageOrientation(String)
{
var DEFAULT = "default";
var ROTATED_LEFT = "rotatedLeft";
diff --git a/externs/air/flash/display3D/Context3DProfile.hx b/externs/air/flash/display3D/Context3DProfile.hx
index 2c29eea679..a7e697bc09 100644
--- a/externs/air/flash/display3D/Context3DProfile.hx
+++ b/externs/air/flash/display3D/Context3DProfile.hx
@@ -1,7 +1,6 @@
package flash.display3D;
-@:native("flash.display3D.Context3DProfile")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract Context3DProfile(String)
+@:native("flash.display3D.Context3DProfile") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract Context3DProfile(String)
{
var BASELINE = "baseline";
var BASELINE_CONSTRAINED = "baselineConstrained";
diff --git a/externs/air/flash/errors/SQLErrorOperation.hx b/externs/air/flash/errors/SQLErrorOperation.hx
index 15e7a651c0..396ba8c237 100644
--- a/externs/air/flash/errors/SQLErrorOperation.hx
+++ b/externs/air/flash/errors/SQLErrorOperation.hx
@@ -1,7 +1,6 @@
package flash.errors;
-@:native("flash.errors.SQLErrorOperation")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLErrorOperation(String)
+@:native("flash.errors.SQLErrorOperation") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SQLErrorOperation(String)
{
var ANALYZE = "analyze";
var ATTACH = "attach";
diff --git a/externs/air/flash/events/TouchEventIntent.hx b/externs/air/flash/events/TouchEventIntent.hx
index 19a3c6a0e6..0af83e0428 100644
--- a/externs/air/flash/events/TouchEventIntent.hx
+++ b/externs/air/flash/events/TouchEventIntent.hx
@@ -1,7 +1,6 @@
package flash.events;
-@:native("flash.events.TouchEventIntent")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract TouchEventIntent(String)
+@:native("flash.events.TouchEventIntent") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract TouchEventIntent(String)
{
var ERASER = "eraser";
var PEN = "pen";
diff --git a/externs/air/flash/filesystem/FileMode.hx b/externs/air/flash/filesystem/FileMode.hx
index 3041db9b92..6644c1627b 100644
--- a/externs/air/flash/filesystem/FileMode.hx
+++ b/externs/air/flash/filesystem/FileMode.hx
@@ -1,7 +1,6 @@
package flash.filesystem;
-@:native("flash.filesystem.FileMode")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract FileMode(String)
+@:native("flash.filesystem.FileMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract FileMode(String)
{
var APPEND = "append";
var READ = "read";
diff --git a/externs/air/flash/media/AudioPlaybackMode.hx b/externs/air/flash/media/AudioPlaybackMode.hx
index fdc31990c4..9757dadbe0 100644
--- a/externs/air/flash/media/AudioPlaybackMode.hx
+++ b/externs/air/flash/media/AudioPlaybackMode.hx
@@ -1,7 +1,6 @@
package flash.media;
-@:native("flash.media.AudioPlaybackMode")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract AudioPlaybackMode(String)
+@:native("flash.media.AudioPlaybackMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract AudioPlaybackMode(String)
{
var AMBIENT = "ambient";
var MEDIA = "media";
diff --git a/externs/air/flash/media/CameraPosition.hx b/externs/air/flash/media/CameraPosition.hx
index 06184cc9ed..754d0051f9 100644
--- a/externs/air/flash/media/CameraPosition.hx
+++ b/externs/air/flash/media/CameraPosition.hx
@@ -1,7 +1,6 @@
package flash.media;
-@:native("flash.media.CameraPosition")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract CameraPosition(String)
+@:native("flash.media.CameraPosition") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract CameraPosition(String)
{
var BACK = "back";
var FRONT = "front";
diff --git a/externs/air/flash/media/MediaType.hx b/externs/air/flash/media/MediaType.hx
index 41a10306fb..e925b08397 100644
--- a/externs/air/flash/media/MediaType.hx
+++ b/externs/air/flash/media/MediaType.hx
@@ -1,7 +1,6 @@
package flash.media;
-@:native("flash.media.MediaType")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract MediaType(String)
+@:native("flash.media.MediaType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract MediaType(String)
{
var IMAGE = "image";
var VIDEO = "video";
diff --git a/externs/air/flash/net/IPVersion.hx b/externs/air/flash/net/IPVersion.hx
index ef4a44fcf2..c9d8200955 100644
--- a/externs/air/flash/net/IPVersion.hx
+++ b/externs/air/flash/net/IPVersion.hx
@@ -1,7 +1,6 @@
package flash.net;
-@:native("flash.net.IPVersion")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract IPVersion(String)
+@:native("flash.net.IPVersion") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract IPVersion(String)
{
var IPV4 = "ipv4";
var IPV6 = "ipv6";
diff --git a/externs/air/flash/notifications/NotificationStyle.hx b/externs/air/flash/notifications/NotificationStyle.hx
index a2a9f3fdd2..715052bf6d 100644
--- a/externs/air/flash/notifications/NotificationStyle.hx
+++ b/externs/air/flash/notifications/NotificationStyle.hx
@@ -1,7 +1,6 @@
package flash.notifications;
-@:native("flash.notifications.NotificationStyle")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NotificationStyle(String)
+@:native("flash.notifications.NotificationStyle") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract NotificationStyle(String)
{
var ALERT = "alert";
var BADGE = "badge";
diff --git a/externs/air/flash/printing/PaperSize.hx b/externs/air/flash/printing/PaperSize.hx
index fe607d1e2a..65e60bdbfa 100644
--- a/externs/air/flash/printing/PaperSize.hx
+++ b/externs/air/flash/printing/PaperSize.hx
@@ -1,7 +1,6 @@
package flash.printing;
-@:native("flash.printing.PaperSize")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract PaperSize(String)
+@:native("flash.printing.PaperSize") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract PaperSize(String)
{
var A4 = "a4";
var A5 = "a5";
diff --git a/externs/air/flash/printing/PrintMethod.hx b/externs/air/flash/printing/PrintMethod.hx
index 070fcfcf1c..a6f7ac873a 100644
--- a/externs/air/flash/printing/PrintMethod.hx
+++ b/externs/air/flash/printing/PrintMethod.hx
@@ -1,7 +1,6 @@
package flash.printing;
-@:native("flash.printing.PrintMethod")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract PrintMethod(String)
+@:native("flash.printing.PrintMethod") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract PrintMethod(String)
{
var AUTO = "auto";
var BITMAP = "bitmap";
diff --git a/externs/air/flash/security/ReferencesValidationSetting.hx b/externs/air/flash/security/ReferencesValidationSetting.hx
index 08fda5c8ca..b357c649d1 100644
--- a/externs/air/flash/security/ReferencesValidationSetting.hx
+++ b/externs/air/flash/security/ReferencesValidationSetting.hx
@@ -1,7 +1,6 @@
package flash.security;
-@:native("flash.security.ReferencesValidationSetting")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract ReferencesValidationSetting(String)
+@:native("flash.security.ReferencesValidationSetting") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract ReferencesValidationSetting(String)
{
var NEVER = "never";
var VALID_IDENTITY = "validIdentity";
diff --git a/externs/air/flash/security/RevocationCheckSettings.hx b/externs/air/flash/security/RevocationCheckSettings.hx
index 09725cea85..11365b4a09 100644
--- a/externs/air/flash/security/RevocationCheckSettings.hx
+++ b/externs/air/flash/security/RevocationCheckSettings.hx
@@ -1,7 +1,6 @@
package flash.security;
-@:native("flash.security.RevocationCheckSettings")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract RevocationCheckSettings(String)
+@:native("flash.security.RevocationCheckSettings") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract RevocationCheckSettings(String)
{
var ALWAYS_REQUIRED = "alwaysRequired";
var BEST_EFFORT = "bestEffort";
diff --git a/externs/air/flash/security/SignatureStatus.hx b/externs/air/flash/security/SignatureStatus.hx
index f8c632599e..68e03bcaf9 100644
--- a/externs/air/flash/security/SignatureStatus.hx
+++ b/externs/air/flash/security/SignatureStatus.hx
@@ -1,7 +1,6 @@
package flash.security;
-@:native("flash.security.SignatureStatus")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SignatureStatus(String)
+@:native("flash.security.SignatureStatus") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SignatureStatus(String)
{
var INVALID = "invalid";
var UNKNOWN = "unknown";
diff --git a/externs/air/flash/security/SignerTrustSettings.hx b/externs/air/flash/security/SignerTrustSettings.hx
index 0164a3a253..0edf890a94 100644
--- a/externs/air/flash/security/SignerTrustSettings.hx
+++ b/externs/air/flash/security/SignerTrustSettings.hx
@@ -1,7 +1,6 @@
package flash.security;
-@:native("flash.security.SignerTrustSettings")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SignerTrustSettings(String)
+@:native("flash.security.SignerTrustSettings") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SignerTrustSettings(String)
{
var CODE_SIGNING = "codeSigning";
var PLAYLIST_SIGNING = "playlistSigning";
diff --git a/externs/air/flash/text/AutoCapitalize.hx b/externs/air/flash/text/AutoCapitalize.hx
index e0bb0169df..472737f7cd 100644
--- a/externs/air/flash/text/AutoCapitalize.hx
+++ b/externs/air/flash/text/AutoCapitalize.hx
@@ -1,7 +1,6 @@
package flash.text;
-@:native("flash.text.AutoCapitalize")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract AutoCapitalize(String)
+@:native("flash.text.AutoCapitalize") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract AutoCapitalize(String)
{
var ALL = "all";
var NONE = "none";
diff --git a/externs/air/flash/text/ReturnKeyLabel.hx b/externs/air/flash/text/ReturnKeyLabel.hx
index 3936c1722e..573d048ee3 100644
--- a/externs/air/flash/text/ReturnKeyLabel.hx
+++ b/externs/air/flash/text/ReturnKeyLabel.hx
@@ -1,7 +1,6 @@
package flash.text;
-@:native("flash.text.ReturnKeyLabel")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract ReturnKeyLabel(String)
+@:native("flash.text.ReturnKeyLabel") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract ReturnKeyLabel(String)
{
var DEFAULT = "default";
var DONE = "done";
diff --git a/externs/air/flash/text/SoftKeyboardType.hx b/externs/air/flash/text/SoftKeyboardType.hx
index 3a9f747dc4..a6ff23fddb 100644
--- a/externs/air/flash/text/SoftKeyboardType.hx
+++ b/externs/air/flash/text/SoftKeyboardType.hx
@@ -1,7 +1,6 @@
package flash.text;
-@:native("flash.text.SoftKeyboardType")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SoftKeyboardType(String)
+@:native("flash.text.SoftKeyboardType") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract SoftKeyboardType(String)
{
var CONTACT = "contact";
var DEFAULT = "default";
diff --git a/externs/air/flash/text/StageTextClearButtonMode.hx b/externs/air/flash/text/StageTextClearButtonMode.hx
index 21f09ecb2b..ade3888cb0 100644
--- a/externs/air/flash/text/StageTextClearButtonMode.hx
+++ b/externs/air/flash/text/StageTextClearButtonMode.hx
@@ -1,7 +1,6 @@
package flash.text;
-@:native("flash.text.StageTextClearButtonMode")
-#if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageTextClearButtonMode(String)
+@:native("flash.text.StageTextClearButtonMode") #if (haxe_ver >= 4.0) extern enum #else @:extern @:enum #end abstract StageTextClearButtonMode(String)
{
var ALWAYS = "always";
var NEVER = "never";
diff --git a/externs/air/sys/io/FileInput.hx b/externs/air/sys/io/FileInput.hx
index 93e2f3b19d..7e3558ed28 100644
--- a/externs/air/sys/io/FileInput.hx
+++ b/externs/air/sys/io/FileInput.hx
@@ -34,9 +34,9 @@ class FileInput extends haxe.io.Input
switch (pos)
{
case SeekBegin:
- // this.pos = p;
+ // this.pos = p;
case SeekEnd:
- // this.pos = cast Fs.fstatSync(fd).size + p;
+ // this.pos = cast Fs.fstatSync(fd).size + p;
case SeekCur:
// this.pos += p;
}
diff --git a/externs/air/sys/io/FileOutput.hx b/externs/air/sys/io/FileOutput.hx
index cdd3ba2414..e0e96e9d57 100644
--- a/externs/air/sys/io/FileOutput.hx
+++ b/externs/air/sys/io/FileOutput.hx
@@ -31,9 +31,9 @@ class FileOutput extends haxe.io.Output
switch (pos)
{
case SeekBegin:
- // this.pos = p;
+ // this.pos = p;
case SeekEnd:
- // this.pos = cast Fs.fstatSync(fd).size + p;
+ // this.pos = cast Fs.fstatSync(fd).size + p;
case SeekCur:
// this.pos += p;
}
diff --git a/include.xml b/include.xml
index 04f641e3c6..e38f58019f 100644
--- a/include.xml
+++ b/include.xml
@@ -24,6 +24,8 @@
+
+
diff --git a/project/Build.xml b/project/Build.xml
index ef9bc7458d..84ef070811 100755
--- a/project/Build.xml
+++ b/project/Build.xml
@@ -35,10 +35,13 @@
+
+
+
@@ -59,6 +62,10 @@
+
+
+
+
@@ -236,6 +243,7 @@
+
@@ -270,6 +278,7 @@
+
diff --git a/project/include/graphics/vulkan/VKRenderer.h b/project/include/graphics/vulkan/VKRenderer.h
new file mode 100644
index 0000000000..ae2b0b8f69
--- /dev/null
+++ b/project/include/graphics/vulkan/VKRenderer.h
@@ -0,0 +1,160 @@
+#ifndef LIME_GRAPHICS_VULKAN_VKRENDERER_H
+#define LIME_GRAPHICS_VULKAN_VKRENDERER_H
+
+#include
+#include
+#include
+#include
+#include
+
+
+namespace lime {
+
+
+ class VulkanRenderer {
+
+ public:
+
+ explicit VulkanRenderer (Window* window);
+ ~VulkanRenderer ();
+
+ bool ClearOverlay ();
+ bool Create (const char* applicationName);
+ void Destroy ();
+ bool Render (float red, float green, float blue, float alpha);
+ bool Resize ();
+ bool SetOverlay (const unsigned char* data, int width, int height, int x, int y);
+
+ inline const std::string& GetInfo () const { return info; }
+ inline const std::string& GetLastError () const { return lastError; }
+
+ private:
+
+ bool CreateCommandBuffers ();
+ bool CreateCommandPool ();
+ bool CreateDevice ();
+ bool CreateFramebuffers ();
+ bool CreateImageViews ();
+ bool CreateInstance (const char* applicationName);
+ bool CreateOverlayBuffer (size_t requiredSize);
+ bool CreateRenderPass ();
+ bool CreateSurface ();
+ bool CreateSwapchain ();
+ bool CreateSwapchainResources ();
+ bool CreateSyncObjects ();
+ void DestroyOverlayResources ();
+ void DestroySwapchainResources ();
+ uint32_t FindMemoryType (uint32_t typeFilter, VkMemoryPropertyFlags properties);
+ bool LoadDeviceProcs ();
+ bool LoadGlobalProcs ();
+ bool LoadInstanceProcs ();
+ bool PickPhysicalDevice ();
+ bool RecordCommandBuffer (uint32_t imageIndex, float red, float green, float blue, float alpha);
+ bool RecreateSwapchain ();
+ void SetError (const std::string& value);
+
+ Window* window;
+ std::string info;
+ std::string lastError;
+
+ PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
+ PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
+ PFN_vkAllocateMemory vkAllocateMemory;
+ PFN_vkBindBufferMemory vkBindBufferMemory;
+ PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
+ PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
+ PFN_vkCreateBuffer vkCreateBuffer;
+ PFN_vkCreateDevice vkCreateDevice;
+ PFN_vkCreateFence vkCreateFence;
+ PFN_vkCreateFramebuffer vkCreateFramebuffer;
+ PFN_vkCreateImageView vkCreateImageView;
+ PFN_vkCreateInstance vkCreateInstance;
+ PFN_vkCreateRenderPass vkCreateRenderPass;
+ PFN_vkCreateSemaphore vkCreateSemaphore;
+ PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR;
+ PFN_vkCreateCommandPool vkCreateCommandPool;
+ PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
+ PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
+ PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
+ PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
+ PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
+ PFN_vkDestroyCommandPool vkDestroyCommandPool;
+ PFN_vkDestroyBuffer vkDestroyBuffer;
+ PFN_vkDestroyDevice vkDestroyDevice;
+ PFN_vkDestroyFence vkDestroyFence;
+ PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
+ PFN_vkDestroyImageView vkDestroyImageView;
+ PFN_vkDestroyInstance vkDestroyInstance;
+ PFN_vkDestroyRenderPass vkDestroyRenderPass;
+ PFN_vkDestroySemaphore vkDestroySemaphore;
+ PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
+ PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
+ PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
+ PFN_vkEndCommandBuffer vkEndCommandBuffer;
+ PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
+ PFN_vkFreeMemory vkFreeMemory;
+ PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
+ PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
+ PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion;
+ PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
+ PFN_vkGetDeviceQueue vkGetDeviceQueue;
+ PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
+ PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
+ PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
+ PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
+ PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
+ PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR;
+ PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR;
+ PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
+ PFN_vkMapMemory vkMapMemory;
+ PFN_vkQueuePresentKHR vkQueuePresentKHR;
+ PFN_vkQueueSubmit vkQueueSubmit;
+ PFN_vkResetCommandPool vkResetCommandPool;
+ PFN_vkResetFences vkResetFences;
+ PFN_vkUnmapMemory vkUnmapMemory;
+ PFN_vkWaitForFences vkWaitForFences;
+
+ VkInstance instance;
+ VkSurfaceKHR surface;
+ VkPhysicalDevice physicalDevice;
+ VkPhysicalDeviceProperties physicalDeviceProperties;
+ VkDevice device;
+ VkQueue queue;
+ uint32_t queueFamilyIndex;
+ VkSwapchainKHR swapchain;
+ VkFormat swapchainFormat;
+ VkPresentModeKHR swapchainPresentMode;
+ int requestedVSyncMode;
+ VkExtent2D swapchainExtent;
+ VkRenderPass renderPass;
+ VkCommandPool commandPool;
+ VkSemaphore imageAvailableSemaphore;
+ VkSemaphore renderFinishedSemaphore;
+ VkFence inFlightFence;
+ VkBuffer overlayBuffer;
+ VkDeviceMemory overlayBufferMemory;
+ bool portabilityEnumerationSupported;
+ bool portabilitySubsetSupported;
+ bool swapchainDirty;
+ size_t overlayBufferCapacity;
+ unsigned char* overlayMappedData;
+ uint32_t overlayWidth;
+ uint32_t overlayHeight;
+ int overlayX;
+ int overlayY;
+ bool overlayEnabled;
+
+ std::vector instanceExtensions;
+ std::vector deviceExtensions;
+ std::vector swapchainImages;
+ std::vector swapchainImageViews;
+ std::vector framebuffers;
+ std::vector commandBuffers;
+
+ };
+
+
+}
+
+
+#endif
diff --git a/project/include/media/AudioBuffer.h b/project/include/media/AudioBuffer.h
index 5f9a8130e0..5cd3e476d9 100644
--- a/project/include/media/AudioBuffer.h
+++ b/project/include/media/AudioBuffer.h
@@ -40,6 +40,7 @@ namespace lime {
vdynamic* __srcAudio;
vdynamic* __srcBuffer;
+ int __srcBufferContext;
vdynamic* __srcCustom;
vdynamic* __srcHowl;
bool __isDisposed;
@@ -63,4 +64,4 @@ namespace lime {
}
-#endif
\ No newline at end of file
+#endif
diff --git a/project/include/ui/FileDialog.h b/project/include/ui/FileDialog.h
index 4a310b3198..1adf918f7b 100644
--- a/project/include/ui/FileDialog.h
+++ b/project/include/ui/FileDialog.h
@@ -9,14 +9,36 @@
namespace lime {
+ // Functions in this class return pointers to externally owned memory, which will be reused automatically
+ // for future dialogs and should not be freed.
class FileDialog {
public:
- static std::wstring* OpenDirectory (std::wstring* title = 0, std::wstring* filter = 0, std::wstring* defaultPath = 0);
- static std::wstring* OpenFile (std::wstring* title = 0, std::wstring* filter = 0, std::wstring* defaultPath = 0);
- static void OpenFiles (std::vector* files, std::wstring* title = 0, std::wstring* filter = 0, std::wstring* defaultPath = 0);
- static std::wstring* SaveFile (std::wstring* title = 0, std::wstring* filter = 0, std::wstring* defaultPath = 0);
+#ifdef HX_WINDOWS
+ using char_t = wchar_t;
+#else
+ using char_t = char;
+#endif
+
+ static const char_t* OpenDirectory(const char_t* title = nullptr, const char_t* filter = nullptr, const char_t* defaultPath = nullptr);
+ static const char_t* OpenFile(const char_t* title = nullptr, const char_t* filter = nullptr, const char_t* defaultPath = nullptr);
+
+ // Use actual string view once we can use c++17
+ class string_view {
+ public:
+ string_view(const char_t* c_str, size_t length) : c_str(c_str), length(length) {}
+
+ const char_t* data() const { return c_str; }
+ size_t size() const { return length; }
+
+ private:
+ const char_t* c_str;
+ size_t length;
+ };
+
+ static std::vector OpenFiles(const char_t* title = nullptr, const char_t* filter = nullptr, const char_t* defaultPath = nullptr);
+ static const char_t* SaveFile(const char_t* title = nullptr, const char_t* filter = nullptr, const char_t* defaultPath = nullptr);
};
@@ -24,4 +46,4 @@ namespace lime {
}
-#endif
\ No newline at end of file
+#endif
diff --git a/project/include/ui/GamepadEvent.h b/project/include/ui/GamepadEvent.h
index 607ef9cfc8..5543da20c2 100644
--- a/project/include/ui/GamepadEvent.h
+++ b/project/include/ui/GamepadEvent.h
@@ -28,6 +28,7 @@ namespace lime {
int id;
GamepadEventType type;
double axisValue;
+ int timestamp;
static ValuePointer* callback;
static ValuePointer* eventObject;
@@ -42,4 +43,4 @@ namespace lime {
}
-#endif
\ No newline at end of file
+#endif
diff --git a/project/include/ui/KeyEvent.h b/project/include/ui/KeyEvent.h
index 28e6fcc6fd..8d5ac047c0 100644
--- a/project/include/ui/KeyEvent.h
+++ b/project/include/ui/KeyEvent.h
@@ -25,6 +25,7 @@ namespace lime {
int modifier;
KeyEventType type;
int windowID;
+ int timestamp;
static ValuePointer* callback;
static ValuePointer* eventObject;
@@ -39,4 +40,4 @@ namespace lime {
}
-#endif
\ No newline at end of file
+#endif
diff --git a/project/include/ui/Window.h b/project/include/ui/Window.h
index 04321be0b2..81afa74fae 100644
--- a/project/include/ui/Window.h
+++ b/project/include/ui/Window.h
@@ -11,8 +11,13 @@
#include