Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 59a383736c | |||
| 1820f411ae | |||
| 8327942a9c | |||
| aec7f6001a | |||
| d377518632 | |||
| ad9b03fe56 | |||
| 3b490bc42f | |||
| dacd9abe73 | |||
| f74e21782b | |||
| 8fbe819493 | |||
| 626080d228 | |||
| f56e82de81 | |||
| 7d3950658a | |||
| 3c1246ee06 | |||
| d69965e3b1 | |||
| 30edac03a6 | |||
| dd4aface93 | |||
| b1350fdecd | |||
| f2d9b74490 | |||
| 84d09d0894 | |||
| e61f231316 | |||
| 33998aab5d | |||
| 9ce7379946 | |||
| b692474e24 | |||
| 6cfc85ca83 | |||
| 7b060c19f4 |
@@ -181,6 +181,85 @@ jobs:
|
|||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
retention-days: 7
|
retention-days: 7
|
||||||
|
|
||||||
|
xbox-uwp-changes:
|
||||||
|
name: detect Xbox UWP changes
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
changed: ${{ steps.paths.outputs.changed }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v7
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- id: paths
|
||||||
|
env:
|
||||||
|
BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }}
|
||||||
|
HEAD_SHA: ${{ github.sha }}
|
||||||
|
run: |
|
||||||
|
if [ -z "$BASE_SHA" ] || [ "$BASE_SHA" = "0000000000000000000000000000000000000000" ]; then
|
||||||
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if git diff --name-only "$BASE_SHA" "$HEAD_SHA" | grep -Eq '^(ports/uwp/|scripts/build_xbox_uwp\.sh$|scripts/xbox-uwp/|scripts/pack_love\.sh$|\.github/workflows/(ci|release)\.yml$|src/core/Platform\.lua$|src/import/(CacheFs|RomImporter)\.lua$|src/update/Check\.lua$|tests/engine/(platform_nx|uwp_native_picker)_test\.lua$|tests/rom_importer_double_pick_test\.lua$)'; then
|
||||||
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
xbox-uwp-selftest:
|
||||||
|
name: Xbox UWP offline selftest
|
||||||
|
needs: xbox-uwp-changes
|
||||||
|
if: needs.xbox-uwp-changes.outputs.changed == 'true'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v7
|
||||||
|
- name: Xbox UWP offline selftest
|
||||||
|
run: bash scripts/xbox-uwp/selftest_build_xbox_uwp.sh
|
||||||
|
- name: Build shared payload
|
||||||
|
run: |
|
||||||
|
scripts/pack_love.sh \
|
||||||
|
--output .bazinga/work/ci-game.love \
|
||||||
|
--listing .bazinga/work/ci-love-listing.txt \
|
||||||
|
--version 0.0.0
|
||||||
|
- name: Upload shared payload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: gen1recomp-xbox-uwp-payload
|
||||||
|
path: .bazinga/work/ci-game.love
|
||||||
|
if-no-files-found: error
|
||||||
|
retention-days: 1
|
||||||
|
|
||||||
|
xbox-uwp-build:
|
||||||
|
name: Xbox UWP build
|
||||||
|
needs: [xbox-uwp-changes, xbox-uwp-selftest]
|
||||||
|
if: |
|
||||||
|
always()
|
||||||
|
&& needs.xbox-uwp-changes.outputs.changed == 'true'
|
||||||
|
&& needs.xbox-uwp-selftest.result == 'success'
|
||||||
|
runs-on: windows-2022
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v7
|
||||||
|
- name: Download shared payload
|
||||||
|
uses: actions/download-artifact@v8
|
||||||
|
with:
|
||||||
|
name: gen1recomp-xbox-uwp-payload
|
||||||
|
path: .bazinga/work
|
||||||
|
- name: Build Xbox UWP package
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
bash scripts/build_xbox_uwp.sh \
|
||||||
|
--release \
|
||||||
|
--version 0.0.0 \
|
||||||
|
--game-love .bazinga/work/ci-game.love
|
||||||
|
- name: Upload Xbox UWP package
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: gen1recomp-xbox-uwp
|
||||||
|
path: |
|
||||||
|
dist/xbox-uwp/gen1recomp-0.0.0-xbox-uwp.zip
|
||||||
|
dist/xbox-uwp/gen1recomp-0.0.0-xbox-uwp.zip.sha256
|
||||||
|
if-no-files-found: error
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
headless:
|
headless:
|
||||||
name: headless suites (no ROM)
|
name: headless suites (no ROM)
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
name: Release
|
name: Release
|
||||||
|
|
||||||
# Builds the macOS, Windows, and Linux desktop apps, an Android APK, an iOS
|
# Builds the macOS, Windows, and Linux desktop apps, an Android APK, an iOS
|
||||||
# IPA, a Nintendo Switch SD-ready zip (experimental), and the Anbernic RG34XXSP
|
# IPA, a Nintendo Switch SD-ready zip (experimental), Xbox UWP, and the Anbernic
|
||||||
# (Stock OS 64-bit MOD / PortMaster) port on the self-hosted Mac runner, and
|
# RG34XXSP (Stock OS 64-bit MOD / PortMaster) port, then publishes them as a
|
||||||
# publishes them as a GitHub Release.
|
# GitHub Release.
|
||||||
#
|
#
|
||||||
# Versioning:
|
# Versioning:
|
||||||
# - First ever release is 0.1.0.
|
# - First ever release is 0.1.0.
|
||||||
@@ -43,22 +43,17 @@ concurrency:
|
|||||||
cancel-in-progress: false
|
cancel-in-progress: false
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
version:
|
||||||
runs-on: ${{ fromJSON(github.repository == 'bryanthaboi/gen1recomp' && '["self-hosted", "macOS"]' || '"macos-latest"') }}
|
name: determine release version
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
version: ${{ steps.ver.outputs.version }}
|
||||||
|
tag: ${{ steps.ver.outputs.tag }}
|
||||||
steps:
|
steps:
|
||||||
# The self-hosted runner lives under the machine owner's home
|
- uses: actions/checkout@v7
|
||||||
# directory; mask it first so absolute paths in every later step's
|
|
||||||
# output show up as *** in the public workflow logs.
|
|
||||||
- name: Mask runner paths
|
|
||||||
run: echo "::add-mask::$HOME"
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v7
|
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
fetch-tags: true
|
fetch-tags: true
|
||||||
|
|
||||||
- name: Determine version
|
- name: Determine version
|
||||||
id: ver
|
id: ver
|
||||||
env:
|
env:
|
||||||
@@ -66,7 +61,6 @@ jobs:
|
|||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
semver_re='^[0-9]+\.[0-9]+\.[0-9]+$'
|
semver_re='^[0-9]+\.[0-9]+\.[0-9]+$'
|
||||||
|
|
||||||
# 1) Explicit override from a manual run.
|
# 1) Explicit override from a manual run.
|
||||||
@@ -96,7 +90,6 @@ jobs:
|
|||||||
| grep -E "$semver_re" \
|
| grep -E "$semver_re" \
|
||||||
| sort -t. -k1,1n -k2,2n -k3,3n \
|
| sort -t. -k1,1n -k2,2n -k3,3n \
|
||||||
| tail -1 || true)"
|
| tail -1 || true)"
|
||||||
|
|
||||||
if [ -z "$latest" ]; then
|
if [ -z "$latest" ]; then
|
||||||
version="0.1.0"
|
version="0.1.0"
|
||||||
echo "No existing release tag; starting at $version"
|
echo "No existing release tag; starting at $version"
|
||||||
@@ -124,10 +117,127 @@ jobs:
|
|||||||
echo "::error::Release $tag already exists. Pick a different version."
|
echo "::error::Release $tag already exists. Pick a different version."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "version=$version" >> "$GITHUB_OUTPUT"
|
echo "version=$version" >> "$GITHUB_OUTPUT"
|
||||||
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
love-payload:
|
||||||
|
name: build release game.love
|
||||||
|
needs: version
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v7
|
||||||
|
- name: Build shared payload
|
||||||
|
run: |
|
||||||
|
scripts/pack_love.sh \
|
||||||
|
--output dist/payload/game.love \
|
||||||
|
--listing dist/payload/love-listing.txt \
|
||||||
|
--version "${{ needs.version.outputs.version }}"
|
||||||
|
- name: Upload shared payload
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: gen1recomp-release-love
|
||||||
|
path: dist/payload/game.love
|
||||||
|
if-no-files-found: error
|
||||||
|
retention-days: 1
|
||||||
|
|
||||||
|
xbox-uwp:
|
||||||
|
name: build Xbox UWP release
|
||||||
|
needs: [version, love-payload]
|
||||||
|
runs-on: windows-2022
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v7
|
||||||
|
- name: Download shared payload
|
||||||
|
uses: actions/download-artifact@v8
|
||||||
|
with:
|
||||||
|
name: gen1recomp-release-love
|
||||||
|
path: .bazinga/work
|
||||||
|
- name: Prepare signing certificate
|
||||||
|
shell: pwsh
|
||||||
|
env:
|
||||||
|
CERTIFICATE_BASE64: ${{ secrets.XBOX_UWP_SIGNING_CERTIFICATE }}
|
||||||
|
CERTIFICATE_PASSWORD: ${{ secrets.XBOX_UWP_SIGNING_PASSWORD }}
|
||||||
|
CANONICAL_REPOSITORY: ${{ github.repository == 'bryanthaboi/gen1recomp' }}
|
||||||
|
run: |
|
||||||
|
if ($env:CANONICAL_REPOSITORY -eq 'true' -and
|
||||||
|
[string]::IsNullOrWhiteSpace($env:CERTIFICATE_BASE64)) {
|
||||||
|
throw 'XBOX_UWP_SIGNING_CERTIFICATE is not configured.'
|
||||||
|
}
|
||||||
|
if ([string]::IsNullOrWhiteSpace($env:CERTIFICATE_BASE64)) {
|
||||||
|
"UWP_PUBLISHER=CN=Gen1Recomp" | Out-File $env:GITHUB_ENV -Append
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
$pfx = Join-Path $env:RUNNER_TEMP 'gen1recomp-uwp.pfx'
|
||||||
|
[IO.File]::WriteAllBytes($pfx, [Convert]::FromBase64String($env:CERTIFICATE_BASE64))
|
||||||
|
$flags = [Security.Cryptography.X509Certificates.X509KeyStorageFlags]::EphemeralKeySet
|
||||||
|
$cert = [Security.Cryptography.X509Certificates.X509Certificate2]::new(
|
||||||
|
$pfx, $env:CERTIFICATE_PASSWORD, $flags)
|
||||||
|
$cer = Join-Path $env:RUNNER_TEMP 'gen1recomp-uwp.cer'
|
||||||
|
[IO.File]::WriteAllBytes(
|
||||||
|
$cer,
|
||||||
|
$cert.Export([Security.Cryptography.X509Certificates.X509ContentType]::Cert))
|
||||||
|
Import-Certificate -FilePath $cer -CertStoreLocation Cert:\LocalMachine\TrustedPeople | Out-Null
|
||||||
|
"UWP_PFX=$pfx" | Out-File $env:GITHUB_ENV -Append
|
||||||
|
"UWP_CERT_THUMBPRINT=$($cert.Thumbprint)" | Out-File $env:GITHUB_ENV -Append
|
||||||
|
"UWP_PUBLISHER=$($cert.Subject)" | Out-File $env:GITHUB_ENV -Append
|
||||||
|
- name: Build Xbox UWP package
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
bash scripts/build_xbox_uwp.sh \
|
||||||
|
--release \
|
||||||
|
--version "${{ needs.version.outputs.version }}" \
|
||||||
|
--publisher "$UWP_PUBLISHER" \
|
||||||
|
--game-love .bazinga/work/game.love
|
||||||
|
- name: Sign and stage Xbox UWP release
|
||||||
|
shell: pwsh
|
||||||
|
env:
|
||||||
|
CERTIFICATE_PASSWORD: ${{ secrets.XBOX_UWP_SIGNING_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
if (-not $env:UWP_PFX) {
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
scripts/xbox-uwp/stage_release.ps1 `
|
||||||
|
-Version '${{ needs.version.outputs.version }}' `
|
||||||
|
-Configuration Release `
|
||||||
|
-BuildInfo .bazinga/work/xbox-uwp-build-info.json `
|
||||||
|
-CertificatePath $env:UWP_PFX `
|
||||||
|
-CertificatePassword $env:CERTIFICATE_PASSWORD
|
||||||
|
- name: Upload Xbox UWP release
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: gen1recomp-xbox-uwp-release
|
||||||
|
path: |
|
||||||
|
dist/xbox-uwp/gen1recomp-${{ needs.version.outputs.version }}-xbox-uwp.zip
|
||||||
|
dist/xbox-uwp/gen1recomp-${{ needs.version.outputs.version }}-xbox-uwp.zip.sha256
|
||||||
|
if-no-files-found: error
|
||||||
|
retention-days: 1
|
||||||
|
- name: Remove signing certificate
|
||||||
|
if: always()
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
if ($env:UWP_CERT_THUMBPRINT) {
|
||||||
|
Remove-Item "Cert:\LocalMachine\TrustedPeople\$env:UWP_CERT_THUMBPRINT" -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
if ($env:UWP_PFX) {
|
||||||
|
Remove-Item $env:UWP_PFX -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
|
||||||
|
release:
|
||||||
|
needs: [version, xbox-uwp]
|
||||||
|
runs-on: ${{ fromJSON(github.repository == 'bryanthaboi/gen1recomp' && '["self-hosted", "macOS"]' || '"macos-latest"') }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# The self-hosted runner lives under the machine owner's home
|
||||||
|
# directory; mask it first so absolute paths in every later step's
|
||||||
|
# output show up as *** in the public workflow logs.
|
||||||
|
- name: Mask runner paths
|
||||||
|
run: echo "::add-mask::$HOME"
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v7
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
fetch-tags: true
|
||||||
|
|
||||||
- name: Import signing certificate into a temporary keychain
|
- name: Import signing certificate into a temporary keychain
|
||||||
if: github.repository == 'bryanthaboi/gen1recomp'
|
if: github.repository == 'bryanthaboi/gen1recomp'
|
||||||
run: |
|
run: |
|
||||||
@@ -172,12 +282,12 @@ jobs:
|
|||||||
# notarize separately below so it uses secret credentials, not a
|
# notarize separately below so it uses secret credentials, not a
|
||||||
# login-keychain profile. "all" also builds the Linux AppImage,
|
# login-keychain profile. "all" also builds the Linux AppImage,
|
||||||
# which needs no signing/notarization.
|
# which needs no signing/notarization.
|
||||||
scripts/build.sh all --version "${{ steps.ver.outputs.version }}" --no-notarize
|
scripts/build.sh all --version "${{ needs.version.outputs.version }}" --no-notarize
|
||||||
|
|
||||||
- name: Build Android
|
- name: Build Android
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
scripts/build_android.sh --version "${{ steps.ver.outputs.version }}"
|
scripts/build_android.sh --version "${{ needs.version.outputs.version }}"
|
||||||
|
|
||||||
- name: Install xcbeautify
|
- name: Install xcbeautify
|
||||||
run: |
|
run: |
|
||||||
@@ -191,10 +301,10 @@ jobs:
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
if [ "$CANONICAL_REPOSITORY" = true ]; then
|
if [ "$CANONICAL_REPOSITORY" = true ]; then
|
||||||
scripts/build_ios.sh --fetch --device --release \
|
scripts/build_ios.sh --fetch --device --release \
|
||||||
--version "${{ steps.ver.outputs.version }}"
|
--version "${{ needs.version.outputs.version }}"
|
||||||
else
|
else
|
||||||
scripts/build_ios.sh --fetch --release \
|
scripts/build_ios.sh --fetch --release \
|
||||||
--version "${{ steps.ver.outputs.version }}"
|
--version "${{ needs.version.outputs.version }}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Build Switch
|
- name: Build Switch
|
||||||
@@ -206,14 +316,14 @@ jobs:
|
|||||||
# Needs native switch-tools (nacptool/elf2nro) and/or Docker on the
|
# Needs native switch-tools (nacptool/elf2nro) and/or Docker on the
|
||||||
# Mac self-hosted runner; see docs/switch-build.md.
|
# Mac self-hosted runner; see docs/switch-build.md.
|
||||||
scripts/build_switch.sh --fetch --fused \
|
scripts/build_switch.sh --fetch --fused \
|
||||||
--version "${{ steps.ver.outputs.version }}"
|
--version "${{ needs.version.outputs.version }}"
|
||||||
|
|
||||||
- name: Build Anbernic RG34XXSP port
|
- name: Build Anbernic RG34XXSP port
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
# Self-contained aarch64 PortMaster-style pack; pulls the LÖVE 11.5
|
# Self-contained aarch64 PortMaster-style pack; pulls the LÖVE 11.5
|
||||||
# runtime from PortMaster-GUI, so it needs no signing/notarization.
|
# runtime from PortMaster-GUI, so it needs no signing/notarization.
|
||||||
./build-rg34xxsp.sh --version "${{ steps.ver.outputs.version }}"
|
./build-rg34xxsp.sh --version "${{ needs.version.outputs.version }}"
|
||||||
|
|
||||||
- name: Notarize & staple macOS app
|
- name: Notarize & staple macOS app
|
||||||
if: github.repository == 'bryanthaboi/gen1recomp'
|
if: github.repository == 'bryanthaboi/gen1recomp'
|
||||||
@@ -250,12 +360,19 @@ jobs:
|
|||||||
ditto -c -k --sequesterRsrc --keepParent "$app" "$zip"
|
ditto -c -k --sequesterRsrc --keepParent "$app" "$zip"
|
||||||
echo "Notarized + stapled ✓"
|
echo "Notarized + stapled ✓"
|
||||||
|
|
||||||
|
- name: Download Xbox UWP release
|
||||||
|
if: github.repository == 'bryanthaboi/gen1recomp'
|
||||||
|
uses: actions/download-artifact@v8
|
||||||
|
with:
|
||||||
|
name: gen1recomp-xbox-uwp-release
|
||||||
|
path: dist/xbox-uwp
|
||||||
|
|
||||||
- name: Stage release assets
|
- name: Stage release assets
|
||||||
if: github.repository == 'bryanthaboi/gen1recomp'
|
if: github.repository == 'bryanthaboi/gen1recomp'
|
||||||
id: assets
|
id: assets
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
v="${{ steps.ver.outputs.version }}"
|
v="${{ needs.version.outputs.version }}"
|
||||||
outdir="dist/release"
|
outdir="dist/release"
|
||||||
rm -rf "$outdir"
|
rm -rf "$outdir"
|
||||||
mkdir -p "$outdir"
|
mkdir -p "$outdir"
|
||||||
@@ -276,6 +393,10 @@ jobs:
|
|||||||
# Local fused .nro stays under dist/switch/ for PR CI / debug; release
|
# Local fused .nro stays under dist/switch/ for PR CI / debug; release
|
||||||
# publishes the SD-ready zip only.
|
# publishes the SD-ready zip only.
|
||||||
|
|
||||||
|
uwp="dist/xbox-uwp/gen1recomp-${v}-xbox-uwp.zip"
|
||||||
|
[ -f "$uwp" ] || { echo "::error::$uwp not found (expected from the Xbox UWP job)"; exit 1; }
|
||||||
|
cp "$uwp" "$outdir/gen1recomp-${v}-xbox-uwp.zip"
|
||||||
|
|
||||||
# Anbernic handheld port (suffix names the CFW it targets, so a
|
# Anbernic handheld port (suffix names the CFW it targets, so a
|
||||||
# future RG35XX/other-CFW pack can ship alongside it).
|
# future RG35XX/other-CFW pack can ship alongside it).
|
||||||
rg34="dist/rg34xxsp/gen1recomp-rg34xxsp-stockos64-mod.zip"
|
rg34="dist/rg34xxsp/gen1recomp-rg34xxsp-stockos64-mod.zip"
|
||||||
@@ -302,8 +423,8 @@ jobs:
|
|||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
v="${{ steps.ver.outputs.version }}"
|
v="${{ needs.version.outputs.version }}"
|
||||||
tag="${{ steps.ver.outputs.tag }}"
|
tag="${{ needs.version.outputs.tag }}"
|
||||||
|
|
||||||
# Issues this release closes. Three sources, deduped by number:
|
# Issues this release closes. Three sources, deduped by number:
|
||||||
# 1. GitHub's own "closing issues" links on every PR whose
|
# 1. GitHub's own "closing issues" links on every PR whose
|
||||||
@@ -394,6 +515,7 @@ jobs:
|
|||||||
"dist/release/gen1recomp-${v}-android.apk"
|
"dist/release/gen1recomp-${v}-android.apk"
|
||||||
"dist/release/gen1recomp-${v}-ios.ipa"
|
"dist/release/gen1recomp-${v}-ios.ipa"
|
||||||
"dist/release/gen1recomp-${v}-switch.zip"
|
"dist/release/gen1recomp-${v}-switch.zip"
|
||||||
|
"dist/release/gen1recomp-${v}-xbox-uwp.zip"
|
||||||
"dist/release/gen1recomp-${v}-rg34xxsp-stockos64-mod.zip"
|
"dist/release/gen1recomp-${v}-rg34xxsp-stockos64-mod.zip"
|
||||||
"dist/release/gen1recomp-${v}.love"
|
"dist/release/gen1recomp-${v}.love"
|
||||||
"dist/release/sha256sums.txt"
|
"dist/release/sha256sums.txt"
|
||||||
@@ -411,7 +533,7 @@ jobs:
|
|||||||
if: github.repository == 'bryanthaboi/gen1recomp'
|
if: github.repository == 'bryanthaboi/gen1recomp'
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
v="${{ steps.ver.outputs.version }}"
|
v="${{ needs.version.outputs.version }}"
|
||||||
ipa="dist/release/gen1recomp-${v}-ios.ipa"
|
ipa="dist/release/gen1recomp-${v}-ios.ipa"
|
||||||
app_repo="mobile/ios/app-repo.json"
|
app_repo="mobile/ios/app-repo.json"
|
||||||
[ -f "$ipa" ] || { echo "::error::$ipa not found"; exit 1; }
|
[ -f "$ipa" ] || { echo "::error::$ipa not found"; exit 1; }
|
||||||
|
|||||||
@@ -46,3 +46,8 @@ mobile/dist/
|
|||||||
|
|
||||||
# per-machine iOS bundle-id pin (see scripts/build_ios.sh)
|
# per-machine iOS bundle-id pin (see scripts/build_ios.sh)
|
||||||
mobile/ios/bundle_id.local
|
mobile/ios/bundle_id.local
|
||||||
|
|
||||||
|
# Xbox UWP build output
|
||||||
|
/ports/uwp/build/
|
||||||
|
/ports/uwp/third_party/*/source/
|
||||||
|
/ports/uwp/third_party/angle/depot_tools/
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ local function gift(opts)
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
if opts.pre then say(opts.pre, "", give) else give() end
|
if opts.pre then say(opts.pre, opts.preFallback or "", give) else give() end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -118,11 +118,21 @@ M.CINNABAR_LAB_METRONOME_ROOM = {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
-- TM42 Dream Eater (scripts/ViridianCity.asm, the fisher; no pre text)
|
-- TM42 Dream Eater (scripts/ViridianCity.asm, the fisher). The fisher's
|
||||||
|
-- YouCanHaveThisText prints before GiveItem, so this gift needs a pre
|
||||||
|
-- text (#775). Like the SilphCo2F worker (#393) that label carries no
|
||||||
|
-- leading underscore, and on Red it sits outside the extractor's symbol
|
||||||
|
-- set, so the literal from text/ViridianCity.asm rides along as the
|
||||||
|
-- fallback; Yellow resolves the ROM string instead.
|
||||||
M.VIRIDIAN_CITY = {
|
M.VIRIDIAN_CITY = {
|
||||||
talk = {
|
talk = {
|
||||||
TEXT_VIRIDIANCITY_FISHER = gift({
|
TEXT_VIRIDIANCITY_FISHER = gift({
|
||||||
flag = "EVENT_GOT_TM42", item = "TM_DREAM_EATER",
|
flag = "EVENT_GOT_TM42", item = "TM_DREAM_EATER",
|
||||||
|
pre = "ViridianCityFisherYouCanHaveThisText",
|
||||||
|
preFallback = "Yawn!\nI must have dozed\voff in the sun."
|
||||||
|
.. "\fI had this dream\nabout a DROWZEE\veating my dream."
|
||||||
|
.. "\vWhat's this?\vWhere did this TM\vcome from?"
|
||||||
|
.. "\fThis is spooky!\nHere, you can\vhave this TM.",
|
||||||
received = "_ViridianCityFisherReceivedTM42Text",
|
received = "_ViridianCityFisherReceivedTM42Text",
|
||||||
explain = "_ViridianCityFisherTM42ExplanationText",
|
explain = "_ViridianCityFisherTM42ExplanationText",
|
||||||
noRoom = "_ViridianCityFisherTM42NoRoomText",
|
noRoom = "_ViridianCityFisherTM42NoRoomText",
|
||||||
|
|||||||
@@ -195,11 +195,13 @@ through `src/import/SaveFileIO.lua`, which sits on top of
|
|||||||
(checked against `listSlots`). `SaveFileIO.exportActiveSlot` loads the active
|
(checked against `listSlots`). `SaveFileIO.exportActiveSlot` loads the active
|
||||||
slot, encodes it back with `SaveConvert.exportSav` (a slot never keeps
|
slot, encodes it back with `SaveConvert.exportSav` (a slot never keeps
|
||||||
`rawImport`, so this is a zero-filled template export, which is valid), and
|
`rawImport`, so this is a zero-filled template export, which is valid), and
|
||||||
writes `exports/<version>/gen1recomp-<version>-<slotId>.sav` in the save
|
writes `exports/<version>/gen1recomp-<version>-<slotId>.sav` under the same
|
||||||
directory (`exports/` and `exports/<version>/` are created as needed). On
|
root `persistFs` writes slots to: the portable game folder when `portable.txt`
|
||||||
desktop it returns the absolute path (`love.filesystem.getSaveDirectory()`),
|
marks the install, otherwise the save directory (`exports/` and
|
||||||
which the notice line shows with an "Open folder" affordance
|
`exports/<version>/` are created as needed; #752). On desktop it returns the
|
||||||
(`love.system.openURL("file://" .. dir)`).
|
absolute path (`SaveData.portableBaseDir()` when portable, else
|
||||||
|
`love.filesystem.getSaveDirectory()`), which the notice line shows with an
|
||||||
|
"Open folder" affordance (`love.system.openURL("file://" .. dir)`).
|
||||||
On Android the bytes are also staged as `pending_export.sav` and
|
On Android the bytes are also staged as `pending_export.sav` and
|
||||||
`love.system.createFile(suggestedName)` opens `ACTION_CREATE_DOCUMENT` so the
|
`love.system.createFile(suggestedName)` opens `ACTION_CREATE_DOCUMENT` so the
|
||||||
player can save to Downloads / Drive / etc.; on return `export_done.flag`
|
player can save to Downloads / Drive / etc.; on return `export_done.flag`
|
||||||
|
|||||||
@@ -386,8 +386,17 @@ Vautour (Burpy Fresh), licensed under CC-BY 4.0 (5x11 base characters,
|
|||||||
the registry entry: `file` for a mod-shipped TTF, `size` (the font's
|
the registry entry: `file` for a mod-shipped TTF, `size` (the font's
|
||||||
design em; Plain Pixel rasterizes cleanly only at multiples of 15),
|
design em; Plain Pixel rasterizes cleanly only at multiples of 15),
|
||||||
`spacing` added to every advance, `yOffset` for vertical alignment
|
`spacing` added to every advance, `yOffset` for vertical alignment
|
||||||
against the 8px cell grid, and `bold`, which double-prints at a 1px
|
against the 8px cell grid, `bold`, which double-prints at a 1px
|
||||||
offset for fonts whose strokes read too light.
|
offset for fonts whose strokes read too light, and `tiles`, the
|
||||||
|
characters that keep their ROM tile instead of coming from the TTF.
|
||||||
|
|
||||||
|
`tiles` matters for a CJK translation. Sizing the font so a kana fills
|
||||||
|
the 8px cell leaves Latin narrower than the tile font it replaces, which
|
||||||
|
pulls the numeric columns out of line: the party menu's `:L12` stops
|
||||||
|
sitting over `34/ 34`. Naming `"0123456789/:"` keeps those on the
|
||||||
|
vanilla tiles, so numbers render exactly as they do in English while
|
||||||
|
kana still come from the font. It takes a string of characters, or a
|
||||||
|
list when a multi-character charmap sequence is meant.
|
||||||
|
|
||||||
See the wiki's Translations guide.
|
See the wiki's Translations guide.
|
||||||
|
|
||||||
@@ -471,6 +480,16 @@ automatically, so the tab opens on an "Add an index" prompt until you name
|
|||||||
one; paste an index URL or its `owner/repo` and it is remembered in
|
one; paste an index URL or its `owner/repo` and it is remembered in
|
||||||
`options.lua`. More than one index can be added, and the listings merge.
|
`options.lua`. More than one index can be added, and the listings merge.
|
||||||
|
|
||||||
|
A feed author can publish per-mod release stats by adding three optional
|
||||||
|
fields to an entry -- `downloads` (total across every release), and
|
||||||
|
`first_release` / `last_release` (ISO days) -- which the listing shows in
|
||||||
|
the same gold line the MODS tab uses. When a feed does not carry them,
|
||||||
|
the row fetches the mod's own GitHub releases instead -- the same cached
|
||||||
|
`ModUpdate` fetch the MODS tab uses, one entry per frame -- so the stats
|
||||||
|
appear for any mod with a `github` field regardless of feed maintenance.
|
||||||
|
The fields are additive: feeds that carry them stay readable by every
|
||||||
|
build that predates them, and feeds that do not render exactly as before.
|
||||||
|
|
||||||
## Soft reset (all versions)
|
## Soft reset (all versions)
|
||||||
|
|
||||||
Holding A, B, START and SELECT together restarts the game the way flicking
|
Holding A, B, START and SELECT together restarts the game the way flicking
|
||||||
|
|||||||
@@ -107,6 +107,11 @@ function FONT_CACHE.get(size, fontPath)
|
|||||||
font = love.graphics.newFont(size)
|
font = love.graphics.newFont(size)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Per-glyph fallback so a non-Latin UI string is not drawn as tofu.
|
||||||
|
-- pcall'd require: FlexLove is vendored and must still load standalone.
|
||||||
|
local okUi, UiFont = pcall(require, "src.render.UiFont")
|
||||||
|
if okUi and UiFont then UiFont.attach(font, size) end
|
||||||
|
|
||||||
-- Add to cache with LRU metadata
|
-- Add to cache with LRU metadata
|
||||||
FONT_CACHE[cacheKey] = {
|
FONT_CACHE[cacheKey] = {
|
||||||
font = font,
|
font = font,
|
||||||
|
|||||||
@@ -313,6 +313,18 @@ function love.load(args)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- The launcher draws before any game boots, so the mod loader has not run
|
||||||
|
-- and Strings has no catalog. Routing the launcher's text through Strings
|
||||||
|
-- (#767) only pays off if something fills that catalog this early, and no
|
||||||
|
-- restart could: the ordering is the same on every launch. Read the
|
||||||
|
-- enabled mods' string catalogs -- data only, no entry chunk -- so a
|
||||||
|
-- translation reaches the launcher too. Game:load replaces this with the
|
||||||
|
-- real merged catalog once a version boots.
|
||||||
|
do
|
||||||
|
local preload = require("src.mods.LauncherMods").translationStrings()
|
||||||
|
if preload then require("src.core.Strings").load({ strings = preload }) end
|
||||||
|
end
|
||||||
|
|
||||||
-- Interactive: the launcher always runs. Red, Blue, and Yellow are each
|
-- Interactive: the launcher always runs. Red, Blue, and Yellow are each
|
||||||
-- live: a column shows Play when that game's ROM is already imported, or
|
-- live: a column shows Play when that game's ROM is already imported, or
|
||||||
-- Choose ROM / drag-drop when it is not. Any dropped .gb is routed by its
|
-- Choose ROM / drag-drop when it is not. Any dropped .gb is routed by its
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 42 KiB |
@@ -12,6 +12,20 @@
|
|||||||
"tintColor": "3b5ca8",
|
"tintColor": "3b5ca8",
|
||||||
"category": "games",
|
"category": "games",
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"version": "0.1.67",
|
||||||
|
"date": "2026-08-04",
|
||||||
|
"size": 9767619,
|
||||||
|
"downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.67/gen1recomp-0.1.67-ios.ipa",
|
||||||
|
"localizedDescription": "Download the correct version for your computer below.\n\n## Issues closed\n\n- #373 Lines at Title Screen\n- #644 Substitute failing causes visual issues\n- #673 iOS: thin vertical seam below the START menu panel (v0.1.56, iPhone 15 Pro Max)\n- #703 Credits playing too fast (song ends after it should)\n- #726 Surfing Pikachu Minigame Broken\n- #737 Battle menu move cursor fails to reset to the first slot after switching Pokémon\n- #750 NPC (possibly player) trades still graphically broken\n- #752 Launcher exports save to AppData while in portable mode\n- #764 Trainer Fanfare doesn't play\n- #765 Text Advance broken in certain aspects\n- #768 Menu behaviour for Pokemon and HM moves\n- #773 Battle screen colours messed up when BG = World, battle in un-flashed Rock Tunnel\n- #774 bug(build): Desktop build can reject a valid game archive under pipefail\n- #775 TM42 Dream Eater dialog.\n- #777 Battle Screen is Very dark\n- #780 Do not delete save\n- #782 Giovanni battle at Silph Co plays wrong song\n\n## Contributors\n\n- @bryanthaboi\n- @luisgonzaleznf\n- @ShaneMcGovernIE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.1.66",
|
||||||
|
"date": "2026-08-04",
|
||||||
|
"size": 9749980,
|
||||||
|
"downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.66/gen1recomp-0.1.66-ios.ipa",
|
||||||
|
"localizedDescription": "Download the correct version for your computer below.\n\n## Issues closed\n\n- #691 Save file transfer\n- #743 Cannot Scroll Main Menu/Mod Menu\n- #779 \"Enemy \" untranslateable\n\n## Contributors\n\n- @bryanthaboi\n- @jherediagu\n- @ShaneMcGovernIE\n- @vegerot"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "0.1.65",
|
"version": "0.1.65",
|
||||||
"date": "2026-08-03",
|
"date": "2026-08-03",
|
||||||
|
|||||||
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,119 @@
|
|||||||
|
# Gen1Recomp Xbox UWP build notes
|
||||||
|
|
||||||
|
This is the Xbox Dev Mode package for Gen1Recomp.
|
||||||
|
|
||||||
|
The rough shape is:
|
||||||
|
|
||||||
|
- `Gen1RecompUWP.exe` starts LÖVE through SDL's WinRT wrapper
|
||||||
|
- the bundled LÖVE 11.5 UWP backend provides LuaJIT and the Xbox file picker
|
||||||
|
- the bundled SDL2 runtime contains the Xbox controller mapping
|
||||||
|
- ANGLE provides OpenGL ES over D3D11
|
||||||
|
- the bundled runtime contains the audio, font, video, and compression libraries
|
||||||
|
|
||||||
|
## What You Need
|
||||||
|
|
||||||
|
The tested toolchain is:
|
||||||
|
|
||||||
|
- Visual Studio 2022 17.14
|
||||||
|
- MSVC v143 x64/x86 build tools
|
||||||
|
- C++ Universal Windows Platform tools
|
||||||
|
- Windows 11 SDK `10.0.26100.0`
|
||||||
|
- CMake 3.24 or newer
|
||||||
|
- Git for Windows
|
||||||
|
- Info-ZIP `zip` and `unzip`
|
||||||
|
|
||||||
|
Use Visual Studio Installer to add **Universal Windows Platform development**, the v143 C++ tools, CMake tools for Windows, and Windows SDK `10.0.26100.0`.
|
||||||
|
|
||||||
|
The x64 UWP dependencies are committed under `third_party`. Their versions,
|
||||||
|
source revisions, licences, and hashes are recorded in `third_party/manifest.json`.
|
||||||
|
No additional checkout or environment variable is required for a normal game
|
||||||
|
build.
|
||||||
|
|
||||||
|
## Rebuild the Dependencies
|
||||||
|
|
||||||
|
Run the dependency rebuild from the repository root:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
.\scripts\xbox-uwp\rebuild_dependencies.ps1
|
||||||
|
```
|
||||||
|
|
||||||
|
The script clones the pinned SDL2, LÖVE, LuaJIT, vcpkg, depot_tools, and ANGLE
|
||||||
|
sources when they are missing. It applies the Xbox SDL2 patch, builds the x64
|
||||||
|
UWP Release libraries, stages the required DLLs, import libraries, headers, and
|
||||||
|
licences under `third_party`, updates every SHA-256 entry in the manifest, then
|
||||||
|
builds the Release MSIX.
|
||||||
|
|
||||||
|
The generated source checkouts are ignored by Git. A fresh ANGLE sync is about
|
||||||
|
10 GB, so allow at least 20 GB of free disk space for all sources and build
|
||||||
|
outputs. Use `-SkipAngle` to retain the existing pinned ANGLE runtime while
|
||||||
|
rebuilding SDL2, LÖVE, LuaJIT, and the vcpkg libraries. Use `-SkipPackage` when
|
||||||
|
only the dependency bundle needs to be refreshed. The rebuild stops if a source
|
||||||
|
checkout has local changes. Remove that generated `source` directory to restore
|
||||||
|
the pinned revision.
|
||||||
|
|
||||||
|
## Build the MSIX
|
||||||
|
|
||||||
|
Run the Xbox build from Git Bash at the repository root:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
scripts/build_xbox_uwp.sh --release --version 1.2.3
|
||||||
|
```
|
||||||
|
|
||||||
|
The build uses `scripts/pack_love.sh` to create and verify the same ROM-free
|
||||||
|
`game.love` payload used by the other release targets. It then links the UWP
|
||||||
|
host and stages LÖVE, LuaJIT, SDL2, ANGLE, and the vcpkg runtime DLLs.
|
||||||
|
|
||||||
|
Use `--relwithdebinfo` for a package with symbols. To package a `.love` produced
|
||||||
|
by another build or downloaded from CI, pass `--game-love path/to/game.love`.
|
||||||
|
The upstream `X.Y.Z` release becomes `X.Y.Z.0` in the generated MSIX manifest.
|
||||||
|
Neither the manifest template nor `src/core/Version.lua` is edited in place.
|
||||||
|
|
||||||
|
The manifest publisher must match the signing certificate subject. Pass it
|
||||||
|
when preparing a signed package:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
scripts/build_xbox_uwp.sh --release --version 1.2.3 \
|
||||||
|
--publisher "CN=Gen1Recomp"
|
||||||
|
```
|
||||||
|
|
||||||
|
The normal build is unsigned. Release CI supplies the private PFX and password
|
||||||
|
from `XBOX_UWP_SIGNING_CERTIFICATE` and `XBOX_UWP_SIGNING_PASSWORD`; neither may
|
||||||
|
be committed. The public certificate is safe to include with the release.
|
||||||
|
|
||||||
|
Run the offline packaging checks from Git Bash:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash scripts/xbox-uwp/selftest_build_xbox_uwp.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build Output
|
||||||
|
|
||||||
|
Visual Studio package output lands under:
|
||||||
|
|
||||||
|
```text
|
||||||
|
ports\uwp\build\release\AppPackages\Gen1RecompUWP
|
||||||
|
```
|
||||||
|
|
||||||
|
The build also stages the distributable archive and checksum under:
|
||||||
|
|
||||||
|
```text
|
||||||
|
dist\xbox-uwp\gen1recomp-X.Y.Z-xbox-uwp.zip
|
||||||
|
dist\xbox-uwp\gen1recomp-X.Y.Z-xbox-uwp.zip.sha256
|
||||||
|
```
|
||||||
|
|
||||||
|
The archive contains the MSIX, framework dependencies, build provenance and,
|
||||||
|
for a signed release, the public certificate. The third-party notices are
|
||||||
|
packaged inside the MSIX. Install the MSIX and dependency packages through
|
||||||
|
Xbox Device Portal.
|
||||||
|
|
||||||
|
## Runtime Data
|
||||||
|
|
||||||
|
The package contains no ROM, generated cache, save or mod data. The Xbox file
|
||||||
|
picker copies user-selected files into LocalState and the launcher imports them
|
||||||
|
from there. Saves, ROM cache and installed mods remain under the LÖVE save
|
||||||
|
directory in LocalState.
|
||||||
|
|
||||||
|
LuaJIT requires the `codeGeneration` capability. `removableStorage` exposes
|
||||||
|
external media to the Xbox picker. The network capabilities support relay play
|
||||||
|
and direct hosting. The package does not request full trust or broad filesystem
|
||||||
|
access.
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.24)
|
||||||
|
project(Gen1RecompUWP LANGUAGES CXX)
|
||||||
|
|
||||||
|
if(NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
|
||||||
|
message(FATAL_ERROR "Configure with a WindowsStore preset.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_filename_component(GAME_ROOT "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
|
||||||
|
set(THIRD_PARTY_ROOT "${CMAKE_CURRENT_LIST_DIR}/third_party")
|
||||||
|
set(LOVE_ROOT "${THIRD_PARTY_ROOT}/love")
|
||||||
|
set(SDL2_ROOT "${THIRD_PARTY_ROOT}/sdl2")
|
||||||
|
set(ANGLE_ROOT "${THIRD_PARTY_ROOT}/angle")
|
||||||
|
set(RUNTIME_ROOT "${THIRD_PARTY_ROOT}/runtime")
|
||||||
|
|
||||||
|
set(GEN1RECOMP_VERSION "0.0.0" CACHE STRING "Gen1Recomp release version")
|
||||||
|
if(NOT GEN1RECOMP_VERSION MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+$")
|
||||||
|
message(FATAL_ERROR "GEN1RECOMP_VERSION must use X.Y.Z format.")
|
||||||
|
endif()
|
||||||
|
string(REPLACE "." ";" VERSION_PARTS "${GEN1RECOMP_VERSION}")
|
||||||
|
foreach(part IN LISTS VERSION_PARTS)
|
||||||
|
if(part GREATER 65535)
|
||||||
|
message(FATAL_ERROR "MSIX version components cannot exceed 65535.")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
set(GEN1RECOMP_UWP_PUBLISHER "CN=Gen1Recomp" CACHE STRING
|
||||||
|
"Publisher subject from the MSIX signing certificate")
|
||||||
|
set(UWP_PUBLISHER_XML "${GEN1RECOMP_UWP_PUBLISHER}")
|
||||||
|
string(REPLACE "&" "&" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
||||||
|
string(REPLACE "\"" """ UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
||||||
|
string(REPLACE "<" "<" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
||||||
|
string(REPLACE ">" ">" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
||||||
|
set(UWP_PACKAGE_VERSION "${GEN1RECOMP_VERSION}.0")
|
||||||
|
set(PACKAGE_MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/Package.appxmanifest")
|
||||||
|
configure_file(
|
||||||
|
"${CMAKE_CURRENT_LIST_DIR}/Package.appxmanifest.in"
|
||||||
|
"${PACKAGE_MANIFEST}"
|
||||||
|
@ONLY
|
||||||
|
)
|
||||||
|
|
||||||
|
set(REQUIRED_FILES
|
||||||
|
"${THIRD_PARTY_ROOT}/manifest.json"
|
||||||
|
"${LOVE_ROOT}/lib/lovestatic.lib"
|
||||||
|
"${LOVE_ROOT}/lib/liblove.lib"
|
||||||
|
"${LOVE_ROOT}/lib/lua51.lib"
|
||||||
|
"${LOVE_ROOT}/bin/love.dll"
|
||||||
|
"${LOVE_ROOT}/bin/lua51.dll"
|
||||||
|
"${SDL2_ROOT}/include/SDL2/SDL.h"
|
||||||
|
"${SDL2_ROOT}/lib/SDL2.lib"
|
||||||
|
"${SDL2_ROOT}/bin/SDL2.dll"
|
||||||
|
"${ANGLE_ROOT}/bin/libEGL.dll"
|
||||||
|
"${ANGLE_ROOT}/bin/libGLESv2.dll"
|
||||||
|
"${ANGLE_ROOT}/bin/d3dcompiler_47.dll"
|
||||||
|
)
|
||||||
|
foreach(path IN LISTS REQUIRED_FILES)
|
||||||
|
if(NOT EXISTS "${path}")
|
||||||
|
message(FATAL_ERROR "Missing UWP dependency: ${path}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(GEN1RECOMP_LOVE "${GAME_ROOT}/.bazinga/work/game.love" CACHE FILEPATH
|
||||||
|
"Path to the game.love payload produced by scripts/pack_love.sh")
|
||||||
|
if(NOT EXISTS "${GEN1RECOMP_LOVE}")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Missing game.love payload: ${GEN1RECOMP_LOVE}\n"
|
||||||
|
"Build it with scripts/build_xbox_uwp.sh or scripts/pack_love.sh.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(GAME_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/gen1recomp.love")
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${GAME_ARCHIVE}"
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
|
||||||
|
"${GEN1RECOMP_LOVE}" "${GAME_ARCHIVE}"
|
||||||
|
DEPENDS "${GEN1RECOMP_LOVE}"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
add_custom_target(gen1recomp_love ALL DEPENDS "${GAME_ARCHIVE}")
|
||||||
|
set_source_files_properties("${GAME_ARCHIVE}" PROPERTIES GENERATED TRUE)
|
||||||
|
|
||||||
|
add_custom_target(verify_uwp_dependencies
|
||||||
|
COMMAND powershell -NoProfile -ExecutionPolicy Bypass -File
|
||||||
|
"${GAME_ROOT}/scripts/xbox-uwp/verify_dependencies.ps1"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} WIN32 "app/main.cpp")
|
||||||
|
add_dependencies(${PROJECT_NAME} gen1recomp_love verify_uwp_dependencies)
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
CXX_STANDARD 17
|
||||||
|
CXX_STANDARD_REQUIRED YES
|
||||||
|
VS_GLOBAL_DefaultLanguage "en-US"
|
||||||
|
VS_SDK_REFERENCES "Microsoft.VCLibs, Version=14.0"
|
||||||
|
)
|
||||||
|
target_include_directories(${PROJECT_NAME} PRIVATE "${SDL2_ROOT}/include/SDL2")
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||||
|
"${LOVE_ROOT}/lib/lovestatic.lib"
|
||||||
|
"${LOVE_ROOT}/lib/liblove.lib"
|
||||||
|
"${SDL2_ROOT}/lib/SDL2.lib"
|
||||||
|
"${LOVE_ROOT}/lib/lua51.lib"
|
||||||
|
WindowsApp.lib
|
||||||
|
)
|
||||||
|
|
||||||
|
set(PACKAGE_ROOT_FILES
|
||||||
|
"${PACKAGE_MANIFEST}"
|
||||||
|
"${GAME_ARCHIVE}"
|
||||||
|
"${LOVE_ROOT}/bin/love.dll"
|
||||||
|
"${LOVE_ROOT}/bin/lua51.dll"
|
||||||
|
"${SDL2_ROOT}/bin/SDL2.dll"
|
||||||
|
"${ANGLE_ROOT}/bin/libEGL.dll"
|
||||||
|
"${ANGLE_ROOT}/bin/libGLESv2.dll"
|
||||||
|
"${ANGLE_ROOT}/bin/d3dcompiler_47.dll"
|
||||||
|
)
|
||||||
|
set_source_files_properties("${PACKAGE_MANIFEST}" PROPERTIES GENERATED TRUE)
|
||||||
|
|
||||||
|
set(RUNTIME_NAMES
|
||||||
|
brotlicommon.dll brotlidec.dll bz2.dll fmt.dll freetype.dll libpng16.dll
|
||||||
|
OpenAL32.dll theora.dll theoradec.dll vorbis.dll vorbisfile.dll ogg.dll z.dll
|
||||||
|
)
|
||||||
|
foreach(name IN LISTS RUNTIME_NAMES)
|
||||||
|
set(runtime "${RUNTIME_ROOT}/bin/${name}")
|
||||||
|
if(NOT EXISTS "${runtime}")
|
||||||
|
message(FATAL_ERROR "Missing UWP runtime DLL: ${name}")
|
||||||
|
endif()
|
||||||
|
list(APPEND PACKAGE_ROOT_FILES "${runtime}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set_source_files_properties(${PACKAGE_ROOT_FILES} PROPERTIES
|
||||||
|
VS_COPY_TO_OUT_DIR Always
|
||||||
|
VS_DEPLOYMENT_CONTENT TRUE
|
||||||
|
VS_DEPLOYMENT_LOCATION "."
|
||||||
|
)
|
||||||
|
|
||||||
|
file(GLOB PACKAGE_ASSETS CONFIGURE_DEPENDS "${CMAKE_CURRENT_LIST_DIR}/Assets/*.png")
|
||||||
|
set_source_files_properties(${PACKAGE_ASSETS} PROPERTIES
|
||||||
|
VS_DEPLOYMENT_CONTENT TRUE
|
||||||
|
VS_DEPLOYMENT_LOCATION "Assets"
|
||||||
|
)
|
||||||
|
|
||||||
|
file(GLOB PACKAGE_LICENSES CONFIGURE_DEPENDS "${THIRD_PARTY_ROOT}/licenses/*.txt")
|
||||||
|
set_source_files_properties(${PACKAGE_LICENSES} PROPERTIES
|
||||||
|
VS_TOOL_OVERRIDE "Content"
|
||||||
|
VS_COPY_TO_OUT_DIR Always
|
||||||
|
VS_DEPLOYMENT_CONTENT TRUE
|
||||||
|
VS_DEPLOYMENT_LOCATION "licenses"
|
||||||
|
)
|
||||||
|
target_sources(${PROJECT_NAME} PRIVATE
|
||||||
|
${PACKAGE_ROOT_FILES}
|
||||||
|
${PACKAGE_ASSETS}
|
||||||
|
${PACKAGE_LICENSES}
|
||||||
|
)
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"version": 6,
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "uwp-common",
|
||||||
|
"hidden": true,
|
||||||
|
"generator": "Visual Studio 17 2022",
|
||||||
|
"architecture": "x64",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_SYSTEM_NAME": "WindowsStore",
|
||||||
|
"CMAKE_SYSTEM_VERSION": "10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "uwp-relwithdebinfo",
|
||||||
|
"inherits": "uwp-common",
|
||||||
|
"displayName": "Gen1Recomp Xbox UWP (RelWithDebInfo)",
|
||||||
|
"binaryDir": "${sourceDir}/build/relwithdebinfo"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "uwp-release",
|
||||||
|
"inherits": "uwp-common",
|
||||||
|
"displayName": "Gen1Recomp Xbox UWP (Release)",
|
||||||
|
"binaryDir": "${sourceDir}/build/release"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buildPresets": [
|
||||||
|
{
|
||||||
|
"name": "uwp-relwithdebinfo",
|
||||||
|
"configurePreset": "uwp-relwithdebinfo",
|
||||||
|
"configuration": "RelWithDebInfo",
|
||||||
|
"jobs": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "uwp-release",
|
||||||
|
"configurePreset": "uwp-release",
|
||||||
|
"configuration": "Release",
|
||||||
|
"jobs": 8
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Package
|
||||||
|
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||||
|
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
|
||||||
|
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
||||||
|
IgnorableNamespaces="uap mp">
|
||||||
|
<Identity Name="Gen1RecompUWP" Publisher="@UWP_PUBLISHER_XML@" Version="@UWP_PACKAGE_VERSION@" />
|
||||||
|
<mp:PhoneIdentity PhoneProductId="5074018d-a46b-4dd3-b7fa-93a1e39858ad" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
||||||
|
<Properties>
|
||||||
|
<DisplayName>Gen1Recomp</DisplayName>
|
||||||
|
<PublisherDisplayName>Gen1Recomp</PublisherDisplayName>
|
||||||
|
<Logo>Assets\StoreLogo.png</Logo>
|
||||||
|
</Properties>
|
||||||
|
<Dependencies>
|
||||||
|
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.19041.0" MaxVersionTested="10.0.26100.0" />
|
||||||
|
</Dependencies>
|
||||||
|
<Resources>
|
||||||
|
<Resource Language="x-generate" />
|
||||||
|
</Resources>
|
||||||
|
<Applications>
|
||||||
|
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="Gen1RecompUWP.App">
|
||||||
|
<uap:VisualElements
|
||||||
|
DisplayName="Gen1Recomp"
|
||||||
|
Description="Gen1Recomp for Xbox Dev Mode"
|
||||||
|
BackgroundColor="#101820"
|
||||||
|
Square150x150Logo="Assets\Square150x150Logo.png"
|
||||||
|
Square44x44Logo="Assets\Square44x44Logo.png">
|
||||||
|
<uap:DefaultTile
|
||||||
|
Square71x71Logo="Assets\SmallTile.png"
|
||||||
|
Wide310x150Logo="Assets\WideTile.png"
|
||||||
|
Square310x310Logo="Assets\LargeTile.png" />
|
||||||
|
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="#101820" />
|
||||||
|
</uap:VisualElements>
|
||||||
|
</Application>
|
||||||
|
</Applications>
|
||||||
|
<Capabilities>
|
||||||
|
<Capability Name="internetClient" />
|
||||||
|
<Capability Name="internetClientServer" />
|
||||||
|
<Capability Name="privateNetworkClientServer" />
|
||||||
|
<Capability Name="codeGeneration" />
|
||||||
|
<uap:Capability Name="removableStorage" />
|
||||||
|
</Capabilities>
|
||||||
|
</Package>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
#include <Windows.h>
|
||||||
|
#include <SDL.h>
|
||||||
|
#include <string>
|
||||||
|
#include <winrt/Windows.ApplicationModel.h>
|
||||||
|
#include <winrt/Windows.Storage.h>
|
||||||
|
|
||||||
|
extern "C" int SDL_main(int argc, char **argv);
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
int runLove(int, char **)
|
||||||
|
{
|
||||||
|
std::wstring packagePath = winrt::Windows::ApplicationModel::Package::Current()
|
||||||
|
.InstalledLocation().Path().c_str();
|
||||||
|
std::string gamePath = winrt::to_string(packagePath + L"\\gen1recomp.love");
|
||||||
|
|
||||||
|
char executable[] = "Gen1RecompUWP";
|
||||||
|
char fused[] = "--fused";
|
||||||
|
char *loveArgv[] = {executable, gamePath.data(), fused, nullptr};
|
||||||
|
return SDL_main(3, loveArgv);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||||
|
{
|
||||||
|
SDL_SetHint(SDL_HINT_WINRT_HANDLE_BACK_BUTTON, "1");
|
||||||
|
return SDL_WinRTRunApp(runLove, nullptr);
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# UWP dependencies
|
||||||
|
|
||||||
|
This directory contains the complete x64 UWP Release dependency bundle used by the package build:
|
||||||
|
|
||||||
|
- `love` contains the LÖVE 11.5 and LuaJIT binaries.
|
||||||
|
- `sdl2` contains the matching SDL headers, import library, and runtime.
|
||||||
|
- `angle` contains the EGL and GLES runtime.
|
||||||
|
- `runtime` contains the codec, font, compression, and audio DLLs used by LÖVE.
|
||||||
|
- `licenses` contains the corresponding third party notices.
|
||||||
|
|
||||||
|
`manifest.json` pins the source revisions and SHA-256 hashes. Run `scripts/xbox-uwp/verify_dependencies.ps1` from the repository root after updating any dependency.
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
# This is the official list of The ANGLE Project Authors
|
||||||
|
# for copyright purposes.
|
||||||
|
# This file is distinct from the CONTRIBUTORS files.
|
||||||
|
# See the latter for an explanation.
|
||||||
|
|
||||||
|
# Names should be added to this file as
|
||||||
|
# Name or Organization
|
||||||
|
# Email addresses for individuals are tracked elsewhere to avoid spam.
|
||||||
|
|
||||||
|
Google Inc.
|
||||||
|
TransGaming Inc.
|
||||||
|
3DLabs Inc. Ltd.
|
||||||
|
|
||||||
|
Adobe Systems Inc.
|
||||||
|
Autodesk, Inc.
|
||||||
|
BlackBerry Limited
|
||||||
|
Cable Television Laboratories, Inc.
|
||||||
|
Collabora, Ltd.
|
||||||
|
Cloud Party, Inc.
|
||||||
|
Igalia, S.L.
|
||||||
|
Imagination Technologies Ltd.
|
||||||
|
Intel Corporation
|
||||||
|
LunarG, Inc.
|
||||||
|
Mozilla Corporation
|
||||||
|
Turbulenz
|
||||||
|
Klarälvdalens Datakonsult AB
|
||||||
|
Microsoft Corporation
|
||||||
|
Microsoft Open Technologies, Inc.
|
||||||
|
NVIDIA Corporation
|
||||||
|
Opera Software ASA
|
||||||
|
The Qt Company Ltd.
|
||||||
|
Advanced Micro Devices, Inc.
|
||||||
|
LG Electronics, Inc.
|
||||||
|
IBM Inc.
|
||||||
|
AdaptVis GmbH
|
||||||
|
Samsung Electronics, Inc.
|
||||||
|
Arm Ltd.
|
||||||
|
Broadcom Inc.
|
||||||
|
Facebook, Inc.
|
||||||
|
The Khronos Group, Inc.
|
||||||
|
Numfum GmbH
|
||||||
|
Yandex LLC
|
||||||
|
Rive
|
||||||
|
Institute of Software, Chinese Academy of Sciences
|
||||||
|
Guangdong OPPO Mobile Telecommunications Corp., Ltd
|
||||||
|
Qualcomm Innovation Center, Inc.
|
||||||
|
|
||||||
|
Jacek Caban
|
||||||
|
Mark Callow
|
||||||
|
Ginn Chen
|
||||||
|
Tibor den Ouden
|
||||||
|
Régis Fénéon
|
||||||
|
James Hauxwell
|
||||||
|
Sam Hocevar
|
||||||
|
Pierre Leveille
|
||||||
|
Jonathan Liu
|
||||||
|
Boying Lu
|
||||||
|
Aitor Moreno
|
||||||
|
Yuri O'Donnell
|
||||||
|
Josh Soref
|
||||||
|
Ma Aiguo
|
||||||
|
Maks Naumov
|
||||||
|
Jinyoung Hur
|
||||||
|
Sebastian Bergstein
|
||||||
|
James Ross-Gowan
|
||||||
|
Nickolay Artamonov
|
||||||
|
Ihsan Akmal
|
||||||
|
Andrei Volykhin
|
||||||
|
Jérôme Duval
|
||||||
|
Руслан Ижбулатов
|
||||||
|
Thomas Miller
|
||||||
|
Till Rathmann
|
||||||
|
Nick Shaforostov
|
||||||
|
Jaime Bernardo
|
||||||
|
Le Hoang Quyen
|
||||||
|
Lu Yahan
|
||||||
|
Ethan Lee
|
||||||
|
Renaud Lepage
|
||||||
|
Artem Bolgar
|
||||||
|
Wander Lairson Costa
|
||||||
|
Stephan Hartmann
|
||||||
|
SeongHwan Park
|
||||||
|
Xiaopeng Li
|
||||||
|
Akihiko Odaki
|
||||||
|
Ho Cheung
|
||||||
|
Tao Wang
|
||||||
|
Phan Quang Minh
|
||||||
|
Hongchen Yan
|
||||||
|
Andrew Sumsion
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2018 The ANGLE Project Authors.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions
|
||||||
|
// are met:
|
||||||
|
//
|
||||||
|
// Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following
|
||||||
|
// disclaimer in the documentation and/or other materials provided
|
||||||
|
// with the distribution.
|
||||||
|
//
|
||||||
|
// Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
|
||||||
|
// Ltd., nor the names of their contributors may be used to endorse
|
||||||
|
// or promote products derived from this software without specific
|
||||||
|
// prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
// POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# ANGLE UWP runtime
|
||||||
|
|
||||||
|
`libEGL.dll` and `libGLESv2.dll` were built for x64 UWP from [SternXD/angle](https://github.com/SternXD/angle) commit `45b0b1e03400b7a10aaa9a077e196d1abcddafce`. ANGLE version `2.1.25011` and source hash `45b0b1e03400`.
|
||||||
|
|
||||||
|
`d3dcompiler_47.dll` is the x64 Direct3D HLSL compiler redistributable from Windows SDK `10.0.26100.7705`. Current hashes are recorded in `../manifest.json`.
|
||||||
|
|
||||||
|
ANGLE's upstream `LICENSE` and `AUTHORS` files are included beside its binaries.
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2018 The ANGLE Project Authors.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions
|
||||||
|
// are met:
|
||||||
|
//
|
||||||
|
// Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
//
|
||||||
|
// Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following
|
||||||
|
// disclaimer in the documentation and/or other materials provided
|
||||||
|
// with the distribution.
|
||||||
|
//
|
||||||
|
// Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
|
||||||
|
// Ltd., nor the names of their contributors may be used to endorse
|
||||||
|
// or promote products derived from this software without specific
|
||||||
|
// prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
// POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
This program, "bzip2", the associated library "libbzip2", and all
|
||||||
|
documentation, are copyright (C) 1996-2019 Julian R Seward. All
|
||||||
|
rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. The origin of this software must not be misrepresented; you must
|
||||||
|
not claim that you wrote the original software. If you use this
|
||||||
|
software in a product, an acknowledgment in the product
|
||||||
|
documentation would be appreciated but is not required.
|
||||||
|
|
||||||
|
3. Altered source versions must be plainly marked as such, and must
|
||||||
|
not be misrepresented as being the original software.
|
||||||
|
|
||||||
|
4. The name of the author may not be used to endorse or promote
|
||||||
|
products derived from this software without specific prior written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||||
|
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
Julian Seward, jseward@acm.org
|
||||||
|
bzip2/libbzip2 version 1.0.8 of 13 July 2019
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) 2012 - present, Victor Zverovich and {fmt} contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
--- Optional exception to the license ---
|
||||||
|
|
||||||
|
As an exception, if, as a result of your compiling your source code, portions
|
||||||
|
of this Software are embedded into a machine-executable object form of such
|
||||||
|
source code, you may redistribute such embedded portions in such object form
|
||||||
|
without including the above copyright and permission notices.
|
||||||
@@ -0,0 +1,568 @@
|
|||||||
|
LICENSE.TXT:
|
||||||
|
|
||||||
|
FREETYPE LICENSES
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The FreeType 2 font engine is copyrighted work and cannot be used
|
||||||
|
legally without a software license. In order to make this project
|
||||||
|
usable to a vast majority of developers, we distribute it under two
|
||||||
|
mutually exclusive open-source licenses.
|
||||||
|
|
||||||
|
This means that *you* must choose *one* of the two licenses described
|
||||||
|
below, then obey all its terms and conditions when using FreeType 2 in
|
||||||
|
any of your projects or products.
|
||||||
|
|
||||||
|
- The FreeType License, found in the file `docs/FTL.TXT`, which is
|
||||||
|
similar to the original BSD license *with* an advertising clause
|
||||||
|
that forces you to explicitly cite the FreeType project in your
|
||||||
|
product's documentation. All details are in the license file.
|
||||||
|
This license is suited to products which don't use the GNU General
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
Note that this license is compatible to the GNU General Public
|
||||||
|
License version 3, but not version 2.
|
||||||
|
|
||||||
|
- The GNU General Public License version 2, found in
|
||||||
|
`docs/GPLv2.TXT` (any later version can be used also), for
|
||||||
|
programs which already use the GPL. Note that the FTL is
|
||||||
|
incompatible with GPLv2 due to its advertisement clause.
|
||||||
|
|
||||||
|
The contributed BDF and PCF drivers come with a license similar to
|
||||||
|
that of the X Window System. It is compatible to the above two
|
||||||
|
licenses (see files `src/bdf/README` and `src/pcf/README`). The same
|
||||||
|
holds for the source code files `src/base/fthash.c` and
|
||||||
|
`include/freetype/internal/fthash.h`; they were part of the BDF driver
|
||||||
|
in earlier FreeType versions.
|
||||||
|
|
||||||
|
The gzip module uses the zlib license (see `src/gzip/zlib.h`) which
|
||||||
|
too is compatible to the above two licenses.
|
||||||
|
|
||||||
|
The files `src/autofit/ft-hb-ft.c`, `src/autofit/ft-hb-decls.h`,
|
||||||
|
`src/autofit/ft-hb-types.h`, and `src/autofit/hb-script-list.h`
|
||||||
|
contain code taken (almost) verbatim from the HarfBuzz library, which
|
||||||
|
uses the 'Old MIT' license compatible to the above two licenses.
|
||||||
|
|
||||||
|
The MD5 checksum support (only used for debugging in development
|
||||||
|
builds) is in the public domain.
|
||||||
|
|
||||||
|
|
||||||
|
--- end of LICENSE.TXT ---
|
||||||
|
|
||||||
|
|
||||||
|
FTL.TXT:
|
||||||
|
|
||||||
|
The FreeType Project LICENSE
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
2006-Jan-27
|
||||||
|
|
||||||
|
Copyright 1996-2002, 2006 by
|
||||||
|
David Turner, Robert Wilhelm, and Werner Lemberg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
The FreeType Project is distributed in several archive packages;
|
||||||
|
some of them may contain, in addition to the FreeType font engine,
|
||||||
|
various tools and contributions which rely on, or relate to, the
|
||||||
|
FreeType Project.
|
||||||
|
|
||||||
|
This license applies to all files found in such packages, and
|
||||||
|
which do not fall under their own explicit license. The license
|
||||||
|
affects thus the FreeType font engine, the test programs,
|
||||||
|
documentation and makefiles, at the very least.
|
||||||
|
|
||||||
|
This license was inspired by the BSD, Artistic, and IJG
|
||||||
|
(Independent JPEG Group) licenses, which all encourage inclusion
|
||||||
|
and use of free software in commercial and freeware products
|
||||||
|
alike. As a consequence, its main points are that:
|
||||||
|
|
||||||
|
o We don't promise that this software works. However, we will be
|
||||||
|
interested in any kind of bug reports. (`as is' distribution)
|
||||||
|
|
||||||
|
o You can use this software for whatever you want, in parts or
|
||||||
|
full form, without having to pay us. (`royalty-free' usage)
|
||||||
|
|
||||||
|
o You may not pretend that you wrote this software. If you use
|
||||||
|
it, or only parts of it, in a program, you must acknowledge
|
||||||
|
somewhere in your documentation that you have used the
|
||||||
|
FreeType code. (`credits')
|
||||||
|
|
||||||
|
We specifically permit and encourage the inclusion of this
|
||||||
|
software, with or without modifications, in commercial products.
|
||||||
|
We disclaim all warranties covering The FreeType Project and
|
||||||
|
assume no liability related to The FreeType Project.
|
||||||
|
|
||||||
|
|
||||||
|
Finally, many people asked us for a preferred form for a
|
||||||
|
credit/disclaimer to use in compliance with this license. We thus
|
||||||
|
encourage you to use the following text:
|
||||||
|
|
||||||
|
"""
|
||||||
|
Portions of this software are copyright © <year> The FreeType
|
||||||
|
Project (https://freetype.org). All rights reserved.
|
||||||
|
"""
|
||||||
|
|
||||||
|
Please replace <year> with the value from the FreeType version you
|
||||||
|
actually use.
|
||||||
|
|
||||||
|
|
||||||
|
Legal Terms
|
||||||
|
===========
|
||||||
|
|
||||||
|
0. Definitions
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Throughout this license, the terms `package', `FreeType Project',
|
||||||
|
and `FreeType archive' refer to the set of files originally
|
||||||
|
distributed by the authors (David Turner, Robert Wilhelm, and
|
||||||
|
Werner Lemberg) as the `FreeType Project', be they named as alpha,
|
||||||
|
beta or final release.
|
||||||
|
|
||||||
|
`You' refers to the licensee, or person using the project, where
|
||||||
|
`using' is a generic term including compiling the project's source
|
||||||
|
code as well as linking it to form a `program' or `executable'.
|
||||||
|
This program is referred to as `a program using the FreeType
|
||||||
|
engine'.
|
||||||
|
|
||||||
|
This license applies to all files distributed in the original
|
||||||
|
FreeType Project, including all source code, binaries and
|
||||||
|
documentation, unless otherwise stated in the file in its
|
||||||
|
original, unmodified form as distributed in the original archive.
|
||||||
|
If you are unsure whether or not a particular file is covered by
|
||||||
|
this license, you must contact us to verify this.
|
||||||
|
|
||||||
|
The FreeType Project is copyright (C) 1996-2000 by David Turner,
|
||||||
|
Robert Wilhelm, and Werner Lemberg. All rights reserved except as
|
||||||
|
specified below.
|
||||||
|
|
||||||
|
1. No Warranty
|
||||||
|
--------------
|
||||||
|
|
||||||
|
THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
|
||||||
|
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
|
||||||
|
USE, OF THE FREETYPE PROJECT.
|
||||||
|
|
||||||
|
2. Redistribution
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
This license grants a worldwide, royalty-free, perpetual and
|
||||||
|
irrevocable right and license to use, execute, perform, compile,
|
||||||
|
display, copy, create derivative works of, distribute and
|
||||||
|
sublicense the FreeType Project (in both source and object code
|
||||||
|
forms) and derivative works thereof for any purpose; and to
|
||||||
|
authorize others to exercise some or all of the rights granted
|
||||||
|
herein, subject to the following conditions:
|
||||||
|
|
||||||
|
o Redistribution of source code must retain this license file
|
||||||
|
(`FTL.TXT') unaltered; any additions, deletions or changes to
|
||||||
|
the original files must be clearly indicated in accompanying
|
||||||
|
documentation. The copyright notices of the unaltered,
|
||||||
|
original files must be preserved in all copies of source
|
||||||
|
files.
|
||||||
|
|
||||||
|
o Redistribution in binary form must provide a disclaimer that
|
||||||
|
states that the software is based in part of the work of the
|
||||||
|
FreeType Team, in the distribution documentation. We also
|
||||||
|
encourage you to put an URL to the FreeType web page in your
|
||||||
|
documentation, though this isn't mandatory.
|
||||||
|
|
||||||
|
These conditions apply to any software derived from or based on
|
||||||
|
the FreeType Project, not just the unmodified files. If you use
|
||||||
|
our work, you must acknowledge us. However, no fee need be paid
|
||||||
|
to us.
|
||||||
|
|
||||||
|
3. Advertising
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Neither the FreeType authors and contributors nor you shall use
|
||||||
|
the name of the other for commercial, advertising, or promotional
|
||||||
|
purposes without specific prior written permission.
|
||||||
|
|
||||||
|
We suggest, but do not require, that you use one or more of the
|
||||||
|
following phrases to refer to this software in your documentation
|
||||||
|
or advertising materials: `FreeType Project', `FreeType Engine',
|
||||||
|
`FreeType library', or `FreeType Distribution'.
|
||||||
|
|
||||||
|
As you have not signed this license, you are not required to
|
||||||
|
accept it. However, as the FreeType Project is copyrighted
|
||||||
|
material, only this license, or another one contracted with the
|
||||||
|
authors, grants you the right to use, distribute, and modify it.
|
||||||
|
Therefore, by using, distributing, or modifying the FreeType
|
||||||
|
Project, you indicate that you understand and accept all the terms
|
||||||
|
of this license.
|
||||||
|
|
||||||
|
4. Contacts
|
||||||
|
-----------
|
||||||
|
|
||||||
|
There are two mailing lists related to FreeType:
|
||||||
|
|
||||||
|
o freetype@nongnu.org
|
||||||
|
|
||||||
|
Discusses general use and applications of FreeType, as well as
|
||||||
|
future and wanted additions to the library and distribution.
|
||||||
|
If you are looking for support, start in this list if you
|
||||||
|
haven't found anything to help you in the documentation.
|
||||||
|
|
||||||
|
o freetype-devel@nongnu.org
|
||||||
|
|
||||||
|
Discusses bugs, as well as engine internals, design issues,
|
||||||
|
specific licenses, porting, etc.
|
||||||
|
|
||||||
|
Our home page can be found at
|
||||||
|
|
||||||
|
https://freetype.org
|
||||||
|
|
||||||
|
|
||||||
|
--- end of FTL.TXT ---
|
||||||
|
|
||||||
|
|
||||||
|
GPLv2.TXT:
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Library General
|
||||||
|
Public License instead of this License.
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
COPYRIGHT NOTICE, DISCLAIMER, and LICENSE
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
PNG Reference Library License version 2
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
* Copyright (c) 1995-2026 The PNG Reference Library Authors.
|
||||||
|
* Copyright (c) 2018-2026 Cosmin Truta.
|
||||||
|
* Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
|
||||||
|
* Copyright (c) 1996-1997 Andreas Dilger.
|
||||||
|
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
|
The software is supplied "as is", without warranty of any kind,
|
||||||
|
express or implied, including, without limitation, the warranties
|
||||||
|
of merchantability, fitness for a particular purpose, title, and
|
||||||
|
non-infringement. In no event shall the Copyright owners, or
|
||||||
|
anyone distributing the software, be liable for any damages or
|
||||||
|
other liability, whether in contract, tort or otherwise, arising
|
||||||
|
from, out of, or in connection with the software, or the use or
|
||||||
|
other dealings in the software, even if advised of the possibility
|
||||||
|
of such damage.
|
||||||
|
|
||||||
|
Permission is hereby granted to use, copy, modify, and distribute
|
||||||
|
this software, or portions hereof, for any purpose, without fee,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you
|
||||||
|
must not claim that you wrote the original software. If you
|
||||||
|
use this software in a product, an acknowledgment in the product
|
||||||
|
documentation would be appreciated, but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must
|
||||||
|
not be misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This Copyright notice may not be removed or altered from any
|
||||||
|
source or altered source distribution.
|
||||||
|
|
||||||
|
|
||||||
|
PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are
|
||||||
|
Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are
|
||||||
|
derived from libpng-1.0.6, and are distributed according to the same
|
||||||
|
disclaimer and license as libpng-1.0.6 with the following individuals
|
||||||
|
added to the list of Contributing Authors:
|
||||||
|
|
||||||
|
Simon-Pierre Cadieux
|
||||||
|
Eric S. Raymond
|
||||||
|
Mans Rullgard
|
||||||
|
Cosmin Truta
|
||||||
|
Gilles Vollant
|
||||||
|
James Yu
|
||||||
|
Mandar Sahastrabuddhe
|
||||||
|
Google Inc.
|
||||||
|
Vadim Barkov
|
||||||
|
|
||||||
|
and with the following additions to the disclaimer:
|
||||||
|
|
||||||
|
There is no warranty against interference with your enjoyment of
|
||||||
|
the library or against infringement. There is no warranty that our
|
||||||
|
efforts or the library will fulfill any of your particular purposes
|
||||||
|
or needs. This library is provided with all faults, and the entire
|
||||||
|
risk of satisfactory quality, performance, accuracy, and effort is
|
||||||
|
with the user.
|
||||||
|
|
||||||
|
Some files in the "contrib" directory and some configure-generated
|
||||||
|
files that are distributed with libpng have other copyright owners, and
|
||||||
|
are released under other open source licenses.
|
||||||
|
|
||||||
|
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||||
|
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
|
||||||
|
libpng-0.96, and are distributed according to the same disclaimer and
|
||||||
|
license as libpng-0.96, with the following individuals added to the
|
||||||
|
list of Contributing Authors:
|
||||||
|
|
||||||
|
Tom Lane
|
||||||
|
Glenn Randers-Pehrson
|
||||||
|
Willem van Schaik
|
||||||
|
|
||||||
|
libpng versions 0.89, June 1996, through 0.96, May 1997, are
|
||||||
|
Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
|
||||||
|
and are distributed according to the same disclaimer and license as
|
||||||
|
libpng-0.88, with the following individuals added to the list of
|
||||||
|
Contributing Authors:
|
||||||
|
|
||||||
|
John Bowler
|
||||||
|
Kevin Bracey
|
||||||
|
Sam Bushell
|
||||||
|
Magnus Holmgren
|
||||||
|
Greg Roelofs
|
||||||
|
Tom Tanner
|
||||||
|
|
||||||
|
Some files in the "scripts" directory have other copyright owners,
|
||||||
|
but are released under this license.
|
||||||
|
|
||||||
|
libpng versions 0.5, May 1995, through 0.88, January 1996, are
|
||||||
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
|
||||||
|
For the purposes of this copyright and license, "Contributing Authors"
|
||||||
|
is defined as the following set of individuals:
|
||||||
|
|
||||||
|
Andreas Dilger
|
||||||
|
Dave Martindale
|
||||||
|
Guy Eric Schalnat
|
||||||
|
Paul Schmidt
|
||||||
|
Tim Wegner
|
||||||
|
|
||||||
|
The PNG Reference Library is supplied "AS IS". The Contributing
|
||||||
|
Authors and Group 42, Inc. disclaim all warranties, expressed or
|
||||||
|
implied, including, without limitation, the warranties of
|
||||||
|
merchantability and of fitness for any purpose. The Contributing
|
||||||
|
Authors and Group 42, Inc. assume no liability for direct, indirect,
|
||||||
|
incidental, special, exemplary, or consequential damages, which may
|
||||||
|
result from the use of the PNG Reference Library, even if advised of
|
||||||
|
the possibility of such damage.
|
||||||
|
|
||||||
|
Permission is hereby granted to use, copy, modify, and distribute this
|
||||||
|
source code, or portions hereof, for any purpose, without fee, subject
|
||||||
|
to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this source code must not be misrepresented.
|
||||||
|
|
||||||
|
2. Altered versions must be plainly marked as such and must not
|
||||||
|
be misrepresented as being the original source.
|
||||||
|
|
||||||
|
3. This Copyright notice may not be removed or altered from any
|
||||||
|
source or altered source distribution.
|
||||||
|
|
||||||
|
The Contributing Authors and Group 42, Inc. specifically permit,
|
||||||
|
without fee, and encourage the use of this source code as a component
|
||||||
|
to supporting the PNG file format in commercial products. If you use
|
||||||
|
this source code in a product, acknowledgment is not required but would
|
||||||
|
be appreciated.
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
===============================================================================
|
||||||
|
LuaJIT -- a Just-In-Time Compiler for Lua. https://luajit.org/
|
||||||
|
|
||||||
|
Copyright (C) 2005-2026 Mike Pall. All rights reserved.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
[ MIT license: https://www.opensource.org/licenses/mit-license.php ]
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
[ LuaJIT includes code from Lua 5.1/5.2, which has this license statement: ]
|
||||||
|
|
||||||
|
Copyright (C) 1994-2012 Lua.org, PUC-Rio.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
[ LuaJIT includes code from dlmalloc, which has this license statement: ]
|
||||||
|
|
||||||
|
This is a version (aka dlmalloc) of malloc/free/realloc written by
|
||||||
|
Doug Lea and released to the public domain, as explained at
|
||||||
|
https://creativecommons.org/licenses/publicdomain
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
Copyright (c) 2002, Xiph.org Foundation
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
- Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
- Neither the name of the Xiph.org Foundation nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
|
||||||
|
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -0,0 +1,501 @@
|
|||||||
|
COPYING:
|
||||||
|
|
||||||
|
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1991 Free Software Foundation, Inc.
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
[This is the first released version of the library GPL. It is
|
||||||
|
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
Licenses are intended to guarantee your freedom to share and change
|
||||||
|
free software--to make sure the software is free for all its users.
|
||||||
|
|
||||||
|
This license, the Library General Public License, applies to some
|
||||||
|
specially designated Free Software Foundation software, and to any
|
||||||
|
other libraries whose authors decide to use it. You can use it for
|
||||||
|
your libraries, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if
|
||||||
|
you distribute copies of the library, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of the library, whether gratis
|
||||||
|
or for a fee, you must give the recipients all the rights that we gave
|
||||||
|
you. You must make sure that they, too, receive or can get the source
|
||||||
|
code. If you link a program with the library, you must provide
|
||||||
|
complete object files to the recipients so that they can relink them
|
||||||
|
with the library, after making changes to the library and recompiling
|
||||||
|
it. And you must show them these terms so they know their rights.
|
||||||
|
|
||||||
|
Our method of protecting your rights has two steps: (1) copyright
|
||||||
|
the library, and (2) offer you this license which gives you legal
|
||||||
|
permission to copy, distribute and/or modify the library.
|
||||||
|
|
||||||
|
Also, for each distributor's protection, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
library. If the library is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original
|
||||||
|
version, so that any problems introduced by others will not reflect on
|
||||||
|
the original authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that companies distributing free
|
||||||
|
software will individually obtain patent licenses, thus in effect
|
||||||
|
transforming the program into proprietary software. To prevent this,
|
||||||
|
we have made it clear that any patent must be licensed for everyone's
|
||||||
|
free use or not licensed at all.
|
||||||
|
|
||||||
|
Most GNU software, including some libraries, is covered by the ordinary
|
||||||
|
GNU General Public License, which was designed for utility programs. This
|
||||||
|
license, the GNU Library General Public License, applies to certain
|
||||||
|
designated libraries. This license is quite different from the ordinary
|
||||||
|
one; be sure to read it in full, and don't assume that anything in it is
|
||||||
|
the same as in the ordinary license.
|
||||||
|
|
||||||
|
The reason we have a separate public license for some libraries is that
|
||||||
|
they blur the distinction we usually make between modifying or adding to a
|
||||||
|
program and simply using it. Linking a program with a library, without
|
||||||
|
changing the library, is in some sense simply using the library, and is
|
||||||
|
analogous to running a utility program or application program. However, in
|
||||||
|
a textual and legal sense, the linked executable is a combined work, a
|
||||||
|
derivative of the original library, and the ordinary General Public License
|
||||||
|
treats it as such.
|
||||||
|
|
||||||
|
Because of this blurred distinction, using the ordinary General
|
||||||
|
Public License for libraries did not effectively promote software
|
||||||
|
sharing, because most developers did not use the libraries. We
|
||||||
|
concluded that weaker conditions might promote sharing better.
|
||||||
|
|
||||||
|
However, unrestricted linking of non-free programs would deprive the
|
||||||
|
users of those programs of all benefit from the free status of the
|
||||||
|
libraries themselves. This Library General Public License is intended to
|
||||||
|
permit developers of non-free programs to use free libraries, while
|
||||||
|
preserving your freedom as a user of such programs to change the free
|
||||||
|
libraries that are incorporated in them. (We have not seen how to achieve
|
||||||
|
this as regards changes in header files, but we have achieved it as regards
|
||||||
|
changes in the actual functions of the Library.) The hope is that this
|
||||||
|
will lead to faster development of free libraries.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow. Pay close attention to the difference between a
|
||||||
|
"work based on the library" and a "work that uses the library". The
|
||||||
|
former contains code derived from the library, while the latter only
|
||||||
|
works together with the library.
|
||||||
|
|
||||||
|
Note that it is possible for a library to be covered by the ordinary
|
||||||
|
General Public License rather than by this special one.
|
||||||
|
|
||||||
|
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License Agreement applies to any software library which
|
||||||
|
contains a notice placed by the copyright holder or other authorized
|
||||||
|
party saying it may be distributed under the terms of this Library
|
||||||
|
General Public License (also called "this License"). Each licensee is
|
||||||
|
addressed as "you".
|
||||||
|
|
||||||
|
A "library" means a collection of software functions and/or data
|
||||||
|
prepared so as to be conveniently linked with application programs
|
||||||
|
(which use some of those functions and data) to form executables.
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or work
|
||||||
|
which has been distributed under these terms. A "work based on the
|
||||||
|
Library" means either the Library or any derivative work under
|
||||||
|
copyright law: that is to say, a work containing the Library or a
|
||||||
|
portion of it, either verbatim or with modifications and/or translated
|
||||||
|
straightforwardly into another language. (Hereinafter, translation is
|
||||||
|
included without limitation in the term "modification".)
|
||||||
|
|
||||||
|
"Source code" for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For a library, complete source code means
|
||||||
|
all the source code for all modules it contains, plus any associated
|
||||||
|
interface definition files, plus the scripts used to control compilation
|
||||||
|
and installation of the library.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running a program using the Library is not restricted, and output from
|
||||||
|
such a program is covered only if its contents constitute a work based
|
||||||
|
on the Library (independent of the use of the Library in a tool for
|
||||||
|
writing it). Whether that is true depends on what the Library does
|
||||||
|
and what the program that uses the Library does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Library's
|
||||||
|
complete source code as you receive it, in any medium, provided that
|
||||||
|
you conspicuously and appropriately publish on each copy an
|
||||||
|
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||||
|
all the notices that refer to this License and to the absence of any
|
||||||
|
warranty; and distribute a copy of this License along with the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy,
|
||||||
|
and you may at your option offer warranty protection in exchange for a
|
||||||
|
fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Library or any portion
|
||||||
|
of it, thus forming a work based on the Library, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The modified work must itself be a software library.
|
||||||
|
|
||||||
|
b) You must cause the files modified to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
c) You must cause the whole of the work to be licensed at no
|
||||||
|
charge to all third parties under the terms of this License.
|
||||||
|
|
||||||
|
d) If a facility in the modified Library refers to a function or a
|
||||||
|
table of data to be supplied by an application program that uses
|
||||||
|
the facility, other than as an argument passed when the facility
|
||||||
|
is invoked, then you must make a good faith effort to ensure that,
|
||||||
|
in the event an application does not supply such function or
|
||||||
|
table, the facility still operates, and performs whatever part of
|
||||||
|
its purpose remains meaningful.
|
||||||
|
|
||||||
|
(For example, a function in a library to compute square roots has
|
||||||
|
a purpose that is entirely well-defined independent of the
|
||||||
|
application. Therefore, Subsection 2d requires that any
|
||||||
|
application-supplied function or table used by this function must
|
||||||
|
be optional: if the application does not supply it, the square
|
||||||
|
root function must still compute square roots.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Library,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Library, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Library.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Library
|
||||||
|
with the Library (or with a work based on the Library) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||||
|
License instead of this License to a given copy of the Library. To do
|
||||||
|
this, you must alter all the notices that refer to this License, so
|
||||||
|
that they refer to the ordinary GNU General Public License, version 2,
|
||||||
|
instead of to this License. (If a newer version than version 2 of the
|
||||||
|
ordinary GNU General Public License has appeared, then you can specify
|
||||||
|
that version instead if you wish.) Do not make any other change in
|
||||||
|
these notices.
|
||||||
|
|
||||||
|
Once this change is made in a given copy, it is irreversible for
|
||||||
|
that copy, so the ordinary GNU General Public License applies to all
|
||||||
|
subsequent copies and derivative works made from that copy.
|
||||||
|
|
||||||
|
This option is useful when you wish to copy part of the code of
|
||||||
|
the Library into a program that is not a library.
|
||||||
|
|
||||||
|
4. You may copy and distribute the Library (or a portion or
|
||||||
|
derivative of it, under Section 2) in object code or executable form
|
||||||
|
under the terms of Sections 1 and 2 above provided that you accompany
|
||||||
|
it with the complete corresponding machine-readable source code, which
|
||||||
|
must be distributed under the terms of Sections 1 and 2 above on a
|
||||||
|
medium customarily used for software interchange.
|
||||||
|
|
||||||
|
If distribution of object code is made by offering access to copy
|
||||||
|
from a designated place, then offering equivalent access to copy the
|
||||||
|
source code from the same place satisfies the requirement to
|
||||||
|
distribute the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
5. A program that contains no derivative of any portion of the
|
||||||
|
Library, but is designed to work with the Library by being compiled or
|
||||||
|
linked with it, is called a "work that uses the Library". Such a
|
||||||
|
work, in isolation, is not a derivative work of the Library, and
|
||||||
|
therefore falls outside the scope of this License.
|
||||||
|
|
||||||
|
However, linking a "work that uses the Library" with the Library
|
||||||
|
creates an executable that is a derivative of the Library (because it
|
||||||
|
contains portions of the Library), rather than a "work that uses the
|
||||||
|
library". The executable is therefore covered by this License.
|
||||||
|
Section 6 states terms for distribution of such executables.
|
||||||
|
|
||||||
|
When a "work that uses the Library" uses material from a header file
|
||||||
|
that is part of the Library, the object code for the work may be a
|
||||||
|
derivative work of the Library even though the source code is not.
|
||||||
|
Whether this is true is especially significant if the work can be
|
||||||
|
linked without the Library, or if the work is itself a library. The
|
||||||
|
threshold for this to be true is not precisely defined by law.
|
||||||
|
|
||||||
|
If such an object file uses only numerical parameters, data
|
||||||
|
structure layouts and accessors, and small macros and small inline
|
||||||
|
functions (ten lines or less in length), then the use of the object
|
||||||
|
file is unrestricted, regardless of whether it is legally a derivative
|
||||||
|
work. (Executables containing this object code plus portions of the
|
||||||
|
Library will still fall under Section 6.)
|
||||||
|
|
||||||
|
Otherwise, if the work is a derivative of the Library, you may
|
||||||
|
distribute the object code for the work under the terms of Section 6.
|
||||||
|
Any executables containing that work also fall under Section 6,
|
||||||
|
whether or not they are linked directly with the Library itself.
|
||||||
|
|
||||||
|
6. As an exception to the Sections above, you may also compile or
|
||||||
|
link a "work that uses the Library" with the Library to produce a
|
||||||
|
work containing portions of the Library, and distribute that work
|
||||||
|
under terms of your choice, provided that the terms permit
|
||||||
|
modification of the work for the customer's own use and reverse
|
||||||
|
engineering for debugging such modifications.
|
||||||
|
|
||||||
|
You must give prominent notice with each copy of the work that the
|
||||||
|
Library is used in it and that the Library and its use are covered by
|
||||||
|
this License. You must supply a copy of this License. If the work
|
||||||
|
during execution displays copyright notices, you must include the
|
||||||
|
copyright notice for the Library among them, as well as a reference
|
||||||
|
directing the user to the copy of this License. Also, you must do one
|
||||||
|
of these things:
|
||||||
|
|
||||||
|
a) Accompany the work with the complete corresponding
|
||||||
|
machine-readable source code for the Library including whatever
|
||||||
|
changes were used in the work (which must be distributed under
|
||||||
|
Sections 1 and 2 above); and, if the work is an executable linked
|
||||||
|
with the Library, with the complete machine-readable "work that
|
||||||
|
uses the Library", as object code and/or source code, so that the
|
||||||
|
user can modify the Library and then relink to produce a modified
|
||||||
|
executable containing the modified Library. (It is understood
|
||||||
|
that the user who changes the contents of definitions files in the
|
||||||
|
Library will not necessarily be able to recompile the application
|
||||||
|
to use the modified definitions.)
|
||||||
|
|
||||||
|
b) Accompany the work with a written offer, valid for at
|
||||||
|
least three years, to give the same user the materials
|
||||||
|
specified in Subsection 6a, above, for a charge no more
|
||||||
|
than the cost of performing this distribution.
|
||||||
|
|
||||||
|
c) If distribution of the work is made by offering access to copy
|
||||||
|
from a designated place, offer equivalent access to copy the above
|
||||||
|
specified materials from the same place.
|
||||||
|
|
||||||
|
d) Verify that the user has already received a copy of these
|
||||||
|
materials or that you have already sent this user a copy.
|
||||||
|
|
||||||
|
For an executable, the required form of the "work that uses the
|
||||||
|
Library" must include any data and utility programs needed for
|
||||||
|
reproducing the executable from it. However, as a special exception,
|
||||||
|
the source code distributed need not include anything that is normally
|
||||||
|
distributed (in either source or binary form) with the major
|
||||||
|
components (compiler, kernel, and so on) of the operating system on
|
||||||
|
which the executable runs, unless that component itself accompanies
|
||||||
|
the executable.
|
||||||
|
|
||||||
|
It may happen that this requirement contradicts the license
|
||||||
|
restrictions of other proprietary libraries that do not normally
|
||||||
|
accompany the operating system. Such a contradiction means you cannot
|
||||||
|
use both them and the Library together in an executable that you
|
||||||
|
distribute.
|
||||||
|
|
||||||
|
7. You may place library facilities that are a work based on the
|
||||||
|
Library side-by-side in a single library together with other library
|
||||||
|
facilities not covered by this License, and distribute such a combined
|
||||||
|
library, provided that the separate distribution of the work based on
|
||||||
|
the Library and of the other library facilities is otherwise
|
||||||
|
permitted, and provided that you do these two things:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work
|
||||||
|
based on the Library, uncombined with any other library
|
||||||
|
facilities. This must be distributed under the terms of the
|
||||||
|
Sections above.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library of the fact
|
||||||
|
that part of it is a work based on the Library, and explaining
|
||||||
|
where to find the accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
8. You may not copy, modify, sublicense, link with, or distribute
|
||||||
|
the Library except as expressly provided under this License. Any
|
||||||
|
attempt otherwise to copy, modify, sublicense, link with, or
|
||||||
|
distribute the Library is void, and will automatically terminate your
|
||||||
|
rights under this License. However, parties who have received copies,
|
||||||
|
or rights, from you under this License will not have their licenses
|
||||||
|
terminated so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
9. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Library or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Library (or any work based on the
|
||||||
|
Library), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Library or works based on it.
|
||||||
|
|
||||||
|
10. Each time you redistribute the Library (or any work based on the
|
||||||
|
Library), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute, link with or modify the Library
|
||||||
|
subject to these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
11. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Library at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Library by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Library.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply,
|
||||||
|
and the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
12. If the distribution and/or use of the Library is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Library under this License may add
|
||||||
|
an explicit geographical distribution limitation excluding those countries,
|
||||||
|
so that distribution is permitted only in or among countries not thus
|
||||||
|
excluded. In such case, this License incorporates the limitation as if
|
||||||
|
written in the body of this License.
|
||||||
|
|
||||||
|
13. The Free Software Foundation may publish revised and/or new
|
||||||
|
versions of the Library General Public License from time to time.
|
||||||
|
Such new versions will be similar in spirit to the present version,
|
||||||
|
but may differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Library
|
||||||
|
specifies a version number of this License which applies to it and
|
||||||
|
"any later version", you have the option of following the terms and
|
||||||
|
conditions either of that version or of any later version published by
|
||||||
|
the Free Software Foundation. If the Library does not specify a
|
||||||
|
license version number, you may choose any version ever published by
|
||||||
|
the Free Software Foundation.
|
||||||
|
|
||||||
|
14. If you wish to incorporate parts of the Library into other free
|
||||||
|
programs whose distribution conditions are incompatible with these,
|
||||||
|
write to the author to ask for permission. For software which is
|
||||||
|
copyrighted by the Free Software Foundation, write to the Free
|
||||||
|
Software Foundation; we sometimes make exceptions for this. Our
|
||||||
|
decision will be guided by the two goals of preserving the free status
|
||||||
|
of all derivatives of our free software and of promoting the sharing
|
||||||
|
and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||||
|
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||||
|
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||||
|
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||||
|
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||||
|
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||||
|
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||||
|
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||||
|
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||||
|
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||||
|
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||||
|
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||||
|
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||||
|
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
|
||||||
|
pffft Notice:
|
||||||
|
|
||||||
|
//$ nobt
|
||||||
|
|
||||||
|
/* Copyright (c) 2013 Julien Pommier ( pommier@modartt.com )
|
||||||
|
* Copyright (c) 2023 Christopher Robinson
|
||||||
|
*
|
||||||
|
* Based on original fortran 77 code from FFTPACKv4 from NETLIB
|
||||||
|
* (http://www.netlib.org/fftpack), authored by Dr Paul Swarztrauber
|
||||||
|
* of NCAR, in 1985.
|
||||||
|
*
|
||||||
|
* As confirmed by the NCAR fftpack software curators, the following
|
||||||
|
* FFTPACKv5 license applies to FFTPACKv4 sources. My changes are
|
||||||
|
* released under the same terms.
|
||||||
|
*
|
||||||
|
* FFTPACK license:
|
||||||
|
*
|
||||||
|
* http://www.cisl.ucar.edu/css/software/fftpack5/ftpk.html
|
||||||
|
*
|
||||||
|
* Copyright (c) 2004 the University Corporation for Atmospheric
|
||||||
|
* Research ("UCAR"). All rights reserved. Developed by NCAR's
|
||||||
|
* Computational and Information Systems Laboratory, UCAR,
|
||||||
|
* www.cisl.ucar.edu.
|
||||||
|
*
|
||||||
|
* Redistribution and use of the Software in source and binary forms,
|
||||||
|
* with or without modification, is permitted provided that the
|
||||||
|
* following conditions are met:
|
||||||
|
*
|
||||||
|
* - Neither the names of NCAR's Computational and Information Systems
|
||||||
|
* Laboratory, the University Corporation for Atmospheric Research,
|
||||||
|
* nor the names of its sponsors or contributors may be used to
|
||||||
|
* endorse or promote products derived from this Software without
|
||||||
|
* specific prior written permission.
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notices, this list of conditions, and the disclaimer below.
|
||||||
|
*
|
||||||
|
* - Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions, and the disclaimer below in the
|
||||||
|
* documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
|
||||||
|
* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* PFFFT : a Pretty Fast FFT.
|
||||||
|
*
|
||||||
|
* This file is largerly based on the original FFTPACK implementation, modified
|
||||||
|
* in order to take advantage of SIMD instructions of modern CPUs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
COPYING:
|
||||||
|
|
||||||
|
Copyright (C) 2002-2009 Xiph.org Foundation
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
- Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
- Neither the name of the Xiph.org Foundation nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
|
||||||
|
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
|
||||||
|
Please see the file COPYING for the copyright license for this software.
|
||||||
|
|
||||||
|
In addition to and irrespective of the copyright license associated
|
||||||
|
with this software, On2 Technologies, Inc. makes the following statement
|
||||||
|
regarding technology used in this software:
|
||||||
|
|
||||||
|
On2 represents and warrants that it shall not assert any rights
|
||||||
|
relating to infringement of On2's registered patents, nor initiate
|
||||||
|
any litigation asserting such rights, against any person who, or
|
||||||
|
entity which utilizes the On2 VP3 Codec Software, including any
|
||||||
|
use, distribution, and sale of said Software; which make changes,
|
||||||
|
modifications, and improvements in said Software; and to use,
|
||||||
|
distribute, and sell said changes as well as applications for other
|
||||||
|
fields of use.
|
||||||
|
|
||||||
|
This reference implementation is originally derived from the On2 VP3
|
||||||
|
Codec Software, and the Theora video format is essentially compatible
|
||||||
|
with the VP3 video format, consisting of a backward-compatible superset.
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
Copyright (c) 2002-2020 Xiph.org Foundation
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
- Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
- Neither the name of the Xiph.org Foundation nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
|
||||||
|
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
Copyright notice:
|
||||||
|
|
||||||
|
(C) 1995-2026 Jean-loup Gailly and Mark Adler
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
Jean-loup Gailly Mark Adler
|
||||||
|
jloup@gzip.org madler@alumni.caltech.edu
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# LÖVE UWP binaries
|
||||||
|
|
||||||
|
These x64 UWP Release binaries were built from [`caorthann-celt/love-xbox-uwp`](https://github.com/caorthann-celt/love-xbox-uwp) at commit `62275ed10190afbec01f65754b3bcc04f244dd35`.
|
||||||
|
|
||||||
|
The build uses LÖVE 11.5, LuaJIT, SDL2, and ANGLE. Keep the DLLs and import libraries together; they are one binary interface.
|
||||||
|
|
||||||
|
The normal package build consumes these files directly. Rebuilding the backend is a separate dependency maintenance task.
|
||||||
@@ -0,0 +1,497 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"platform": "uwp",
|
||||||
|
"architecture": "x64",
|
||||||
|
"configuration": "Release",
|
||||||
|
"sources": {
|
||||||
|
"love": {
|
||||||
|
"version": "11.5",
|
||||||
|
"repository": "https://github.com/caorthann-celt/love-xbox-uwp.git",
|
||||||
|
"commit": "62275ed10190afbec01f65754b3bcc04f244dd35"
|
||||||
|
},
|
||||||
|
"luajit": {
|
||||||
|
"repository": "https://github.com/LuaJIT/LuaJIT.git",
|
||||||
|
"commit": "4886b676a698acc4bbdf54adfabb3e33a8c020e8"
|
||||||
|
},
|
||||||
|
"sdl2": {
|
||||||
|
"version": "2.32.10",
|
||||||
|
"repository": "https://github.com/libsdl-org/SDL.git",
|
||||||
|
"ref": "release-2.32.10",
|
||||||
|
"commit": "5d249570393f7a37e037abf22cd6012a4cc56a71",
|
||||||
|
"revision": "release-2.32.10-xbox-uwp",
|
||||||
|
"patch": "sdl2/patches/xbox-wgi-controller.patch"
|
||||||
|
},
|
||||||
|
"angle": {
|
||||||
|
"repository": "https://github.com/SternXD/angle.git",
|
||||||
|
"commit": "45b0b1e03400b7a10aaa9a077e196d1abcddafce",
|
||||||
|
"gnArgs": [
|
||||||
|
"target_os = \"winuwp\"",
|
||||||
|
"target_cpu = \"x64\"",
|
||||||
|
"is_debug = false",
|
||||||
|
"is_component_build = false",
|
||||||
|
"is_clang = false",
|
||||||
|
"use_custom_libcxx = false",
|
||||||
|
"use_custom_libcxx_for_host = false",
|
||||||
|
"angle_enable_vulkan = false",
|
||||||
|
"angle_enable_gl = false",
|
||||||
|
"angle_enable_d3d9 = false",
|
||||||
|
"angle_enable_d3d11 = true",
|
||||||
|
"angle_build_tests = false",
|
||||||
|
"treat_warnings_as_errors = false"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"depotTools": {
|
||||||
|
"repository": "https://chromium.googlesource.com/chromium/tools/depot_tools.git",
|
||||||
|
"commit": "edcece7fb3d5e266a0f60ceb77fb37e94bfff3ca"
|
||||||
|
},
|
||||||
|
"vcpkg": {
|
||||||
|
"repository": "https://github.com/microsoft/vcpkg.git",
|
||||||
|
"commit": "80f9bcfa455e875d9c1bf7a7c6692d7e1e481061",
|
||||||
|
"packages": [
|
||||||
|
"freetype[brotli,bzip2,png,zlib]",
|
||||||
|
"libogg",
|
||||||
|
"libtheora",
|
||||||
|
"libvorbis",
|
||||||
|
"openal-soft",
|
||||||
|
"zlib"
|
||||||
|
],
|
||||||
|
"runtimeFiles": [
|
||||||
|
"brotlicommon.dll",
|
||||||
|
"brotlidec.dll",
|
||||||
|
"bz2.dll",
|
||||||
|
"fmt.dll",
|
||||||
|
"freetype.dll",
|
||||||
|
"libpng16.dll",
|
||||||
|
"ogg.dll",
|
||||||
|
"OpenAL32.dll",
|
||||||
|
"theora.dll",
|
||||||
|
"theoradec.dll",
|
||||||
|
"vorbis.dll",
|
||||||
|
"vorbisfile.dll",
|
||||||
|
"z.dll"
|
||||||
|
],
|
||||||
|
"licenses": {
|
||||||
|
"brotli": "brotli.txt",
|
||||||
|
"bzip2": "bzip2.txt",
|
||||||
|
"fmt": "fmt.txt",
|
||||||
|
"freetype": "freetype.txt",
|
||||||
|
"libogg": "ogg.txt",
|
||||||
|
"libpng": "libpng.txt",
|
||||||
|
"libtheora": "theora.txt",
|
||||||
|
"libvorbis": "vorbis.txt",
|
||||||
|
"openal-soft": "openal-soft.txt",
|
||||||
|
"zlib": "zlib.txt"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "angle/bin/d3dcompiler_47.dll",
|
||||||
|
"sha256": "A05F99734F7C4822FEFC12B367AF21FD0976ED6608752FB1E1E80B6ECE7ECBBB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "angle/bin/libEGL.dll",
|
||||||
|
"sha256": "B0E0C6BAC9D9F0F084DC8F56083A2EEFFB866C0629A64D52B5E33616B4F90CBE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "angle/bin/libGLESv2.dll",
|
||||||
|
"sha256": "6DE6940EDB728396CBA6F3C0D79172A8EFD33E37671A13B1721C652EECEBF4C4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "love/bin/love.dll",
|
||||||
|
"sha256": "7B1BE4699AC950173474BB0C03B5DD52E1202ABA6F60C29E294957057F587692"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "love/bin/lua51.dll",
|
||||||
|
"sha256": "08380FB9A7C8A8A85D3425C1FD6F1CB826D980FF31925453E353227E9A23BC70"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "love/lib/liblove.lib",
|
||||||
|
"sha256": "C93A358D5EAE8BE3D74DDFDFA767657E96E95E0151F843FEB4E587CF2D89320A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "love/lib/lovestatic.lib",
|
||||||
|
"sha256": "15FB3A9CB3C3CDAB8B33DE5B1D1F8D8FF6CE9719E9AA7BC2CF3D7B51CDCE0C98"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "love/lib/lua51.lib",
|
||||||
|
"sha256": "A4F4F0942A432B88A3541A185B3D3D5B4D58413B3CEEE10A2E48CAF9D8439759"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/brotlicommon.dll",
|
||||||
|
"sha256": "6A1D267564FE5BE6D601C1F5301F45DD0D0CCBDA2AE8975CACA4424A9FD452AF"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/brotlidec.dll",
|
||||||
|
"sha256": "C12C983AEE4E7EF966982AD11D71B32456CB445B18B8E11D9A35E781619085E2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/bz2.dll",
|
||||||
|
"sha256": "28ADC0239EAF51D13F8C7075B8514420CAE92EFF14471EC6F5B56A11D9345F00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/fmt.dll",
|
||||||
|
"sha256": "B4ED319D0733EA619D11770558957AFBDF99021D86A4ED068628AE34426C6090"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/freetype.dll",
|
||||||
|
"sha256": "3727B17849902FE12DED3C76BD71D2907C523CF67D1A7CB516025522E260F9D4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/libpng16.dll",
|
||||||
|
"sha256": "9B3B823A59ABCB4BA43D1E6DB4C35855AE66384106E32FD5F9D486A7DECB81AF"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/ogg.dll",
|
||||||
|
"sha256": "283B0890599450AE4BE486C07241ECCC7B14B480465AF7F8D9F2A84528064A65"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/OpenAL32.dll",
|
||||||
|
"sha256": "D37D04CDD1EEE2005ACF64B558DFB16F0A0D83991F3B2A75E5C69FF314054F8B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/theora.dll",
|
||||||
|
"sha256": "C90101C9C169B68F4FA155E63C71F28B271BBB68649085C8ACEFB26816663857"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/theoradec.dll",
|
||||||
|
"sha256": "53A5A3A0B24F72B7D8812DE4B78FD3BB222399B9293B577A8FCF80009B72F004"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/vorbis.dll",
|
||||||
|
"sha256": "A4B2D0A4C032A7E60AA297ADAE134E8A2C1BE61D7EC639CAA93AF85BF7EAC2C7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/vorbisfile.dll",
|
||||||
|
"sha256": "0BFFA35539F0A8233A8EFF4C6680F8A7CF3B9DBE3B437A3F94D5301B66A2F134"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "runtime/bin/z.dll",
|
||||||
|
"sha256": "8B86502ADC15A13C0E136FB9D63AA6583C59AD93EC608A9A7C901757354744C3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/bin/SDL2.dll",
|
||||||
|
"sha256": "B02D13F77221A335AB9F21304F2B4E003FE59C6DF10F21BA6D49023016D35CA8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/begin_code.h",
|
||||||
|
"sha256": "9803DAB29FB4522CE3500AB789260E9622DF6307CE90F92AD20C1808E19C4E7B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/close_code.h",
|
||||||
|
"sha256": "4599E9CEDBA7451FF07A6306F0B7531BEED05B1C5A65B1A2613D1B771BE43FDA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_assert.h",
|
||||||
|
"sha256": "32FC342E0A5F3A55EA1CE2A5D9195E77215EDCB6F4595C0DC3674DCCA1CC81D8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_atomic.h",
|
||||||
|
"sha256": "C561CE8F94DE18CCB4F708BDA45880BA6D3C9F052E166BEB5DADC5544F35221E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_audio.h",
|
||||||
|
"sha256": "047AFC29591AC43A90F06169F67EE7D99A6256C6BBE5EFE5DE79A52565BB6853"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_bits.h",
|
||||||
|
"sha256": "63D22D1C8FE0D83BBA5A49ABA9BB700592F14462F7F7BF87E5838064047E3FA9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_blendmode.h",
|
||||||
|
"sha256": "1985F81B886D9BC681821AF4F23D28E6E51BF51F21E5EF28CCC13BC8C7CDFBAE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_clipboard.h",
|
||||||
|
"sha256": "3E8C73FB9B3CA5A544B70B66B683B78DB53E1A187E066912A068C0ED7BB3E8CE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_config.h",
|
||||||
|
"sha256": "108A953419E1638AE2FF09148E2927C3AC4FF3E15B72A56FF41B542F356021BA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_copying.h",
|
||||||
|
"sha256": "3F90BE470C18F99F4AEF39444E9374EDBA166CFEB1B90F99F35286CC33924642"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_cpuinfo.h",
|
||||||
|
"sha256": "FEE0C489ED4364C21FE0B726A47F72DF167FBCBF42CF569807B2BBF77DC30C54"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_egl.h",
|
||||||
|
"sha256": "72C119F4F7EC30F13B03D3E33D2266CB012EE103F0AD1973786D84D538A0B53D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_endian.h",
|
||||||
|
"sha256": "7907CB3AB7B8D7BC99274F5AEF5294BEF215B01EA49D97226CBE6E911DE557D5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_error.h",
|
||||||
|
"sha256": "0931656A5825E5F1F319F2CD3F573FC527393BB02FA7A1ED3F7FAE6C790328BE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_events.h",
|
||||||
|
"sha256": "CEB7BC717342E652E2C432FD1DD08A5508575CEA6BD8615FB4DDEA63C071DDC4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_filesystem.h",
|
||||||
|
"sha256": "DCFAA010C73150E7B0D56F50F5ADB3FC2E35621091A55BC5436B2FB85FE71675"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_gamecontroller.h",
|
||||||
|
"sha256": "C77C1D8287EE441843B9D8BE87B71252BDB1CE76B7BFC4FCFF46889AD8E9CFEC"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_gesture.h",
|
||||||
|
"sha256": "A5A8F8BB8EFB26860FAA9694189AAF76DF1CDB7755CCD30A8599B46B237A5D82"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_guid.h",
|
||||||
|
"sha256": "DA8FEF1D047B31E55D1B167DE301A806481B6948E7C2497779FD71934C45D5DB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_haptic.h",
|
||||||
|
"sha256": "4267B6F039BEA7AD0F5CB37C37D63D0704AF84F73A36D2680684FF302F49F153"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_hidapi.h",
|
||||||
|
"sha256": "489A83D1073E528F82E821C23C515AF8B5A59357EC5AB132C854BB588648F59F"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_hints.h",
|
||||||
|
"sha256": "96C1056E0734F019B1DAFED5129D4A9D36253559ED8C7577A23C188BB75A48C1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_joystick.h",
|
||||||
|
"sha256": "A39FC5DA97EDC94EABFF8616A413CF850EFB35D1DAF437A8CC16CAA837766482"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_keyboard.h",
|
||||||
|
"sha256": "F68DFA4F784F0B22949A8DF94F3C3653EA01A03AE02297D17579EB9E7EA94054"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_keycode.h",
|
||||||
|
"sha256": "291C769A05BC3E1EAD011DB3E07CB52415E1AA306F484904D203E94CBB3186CD"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_loadso.h",
|
||||||
|
"sha256": "8D3653B7B774B406A289519C74AE695EB5B52D71060712A88FCE4C72D82B1BD3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_locale.h",
|
||||||
|
"sha256": "C4A663CE8EA4CA22F961796CAE644A04FC521FA2D0681333F7DA8A581909560C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_log.h",
|
||||||
|
"sha256": "3342CB31280C2DBF0E5809B03E5499F0CF5EDF193EFA5E3C5B17814526A92033"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_main.h",
|
||||||
|
"sha256": "622FFCD0E7FE0C755A987C5EB9DAD6B3672774026B8250B66AD3C40D3A4DDA9A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_messagebox.h",
|
||||||
|
"sha256": "65DF549CAB0A515145AE55325C447159AE1D60171331A7508EAC06034D25C972"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_metal.h",
|
||||||
|
"sha256": "1F3D0251522B735B0E37677EB1A0594440599FBBB2AF86BBB508606CCA001A06"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_misc.h",
|
||||||
|
"sha256": "5D5E4B42481A5EF44EC9D66159E88426BE5632262731A3C3B223277771D30006"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_mouse.h",
|
||||||
|
"sha256": "66B5353387D011A54B232931E86121CB5551E251B9491B9ED15AFE293D5856FF"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_mutex.h",
|
||||||
|
"sha256": "C5EF9A8AEB056422EF878672770E1F60AE965933693DF6D8EBD53D0E514A1794"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_name.h",
|
||||||
|
"sha256": "FDC6C648734220285056AD8B8273511C75D5BE00D17FC1EA3EB4C06526B13FA3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_opengl_glext.h",
|
||||||
|
"sha256": "1ABB28891C9B0661B6FF3749DE2671DA5FE12BEB5BCB1833B2D6BDF5C89ECDF8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_opengl.h",
|
||||||
|
"sha256": "C4D2857E757B2B2A83D7531CBEDA19C383AD6D16648AB9B7544FC0A74EB2FF13"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_opengles.h",
|
||||||
|
"sha256": "0542791816FCDD84B74D98347AC1B00A97BC6C2CDF31334CD9083789FFB6594A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_opengles2_gl2.h",
|
||||||
|
"sha256": "D6EC44B1D73F3AFCE3A20AC6976DB7FB3DAC656C5190F0B563E4CE90D79A15AA"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_opengles2_gl2ext.h",
|
||||||
|
"sha256": "4FC5B0034DCDE9C125922E3E70D01489A6B335076856EE660294E1A6305A3719"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_opengles2_gl2platform.h",
|
||||||
|
"sha256": "4779BE999ACD1904458238F09C86983B7960AC40E612E05DB2DB97DB615F1E0F"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_opengles2_khrplatform.h",
|
||||||
|
"sha256": "7B1E01AAA7AD8F6FC34B5C7BDF79EBF5189BB09E2C4D2E79FC5D350623D11E83"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_opengles2.h",
|
||||||
|
"sha256": "73A3B042F7B3D296904BFF91268730D5180638F4EC1836D57258FE53EE60DF8B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_pixels.h",
|
||||||
|
"sha256": "FEE61AEE337A3823E832F5C26B3000315D6EB95DA91BA20D4FB0B5BAC9D4967A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_platform.h",
|
||||||
|
"sha256": "9CE62823791D7A16B9AD17AD11F4DE8DCBCDE7918F67BF6D1DD4FC625B69E50C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_power.h",
|
||||||
|
"sha256": "FBBDF3FF13B21095623EDFC5659C1B76C6DBB1364A4DD14D8F9E5CF329048784"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_quit.h",
|
||||||
|
"sha256": "9C902ABAEA7560F98FC546BD35A04629A205D047DF5433FC30B0C1D81AF58B21"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_rect.h",
|
||||||
|
"sha256": "01DB368D4B7736E2358CD29EEC0D187D964CFD6182CFFAB57A938ADF73B6A418"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_render.h",
|
||||||
|
"sha256": "A0CF0DB1A13D0DD0D8BFDC01FFB371E2B19BE36326F85058200AC9481876C7F0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_revision.h",
|
||||||
|
"sha256": "EF28EADA36B000C710B033317A37677B5484A4DE224547CB7293A77FA0C97195"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_rwops.h",
|
||||||
|
"sha256": "10DA91C08E96E5FCA452E06E11029908A6F237356E4DB11AF1AD13FFA2E57A47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_scancode.h",
|
||||||
|
"sha256": "EB14F3CEDDE58358F6456D185F473D7551E8234DE260151AD0319861FF1444C2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_sensor.h",
|
||||||
|
"sha256": "F4DABF5BAE217FA6370D8AF73ABDCBBA99AEA626F35E17A381B636AFE01BB81B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_shape.h",
|
||||||
|
"sha256": "CBDCDD8EAD6D61A7BFA09BC4C538CC598919D1C060D70524C0828D3AF7418667"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_stdinc.h",
|
||||||
|
"sha256": "33EDC0B35512B86162D1AFFE9DF95165B4BC514A90B17238420EFE85D24CA8A1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_surface.h",
|
||||||
|
"sha256": "92299233370D645F78D9C655CE7F102C16F9D4DDDE28A59BD82A962C49B51D94"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_system.h",
|
||||||
|
"sha256": "FFC5F3662A85F795C0B2E2B87B9FBF493BCEEDA4AACF7721A68225C5E318CA67"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_syswm.h",
|
||||||
|
"sha256": "34FEC1A5F1089BD395EE11C3A25AD0FC10E7ABC56D4A77CC6F17EB9E4E8A9607"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_assert.h",
|
||||||
|
"sha256": "FE826FEB054929284764718C67AE95B920729AE1336FFEEC88A23D611E6498F0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_common.h",
|
||||||
|
"sha256": "B619CC3020FFDC8F8A12F5D9D4AF8B83E9B7C6C3BFC05C6502933C4B3F0103DE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_compare.h",
|
||||||
|
"sha256": "713AF284D8520E910D94090396BFD2DB2B2292096EDD93E4D60AA69163B9C510"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_crc32.h",
|
||||||
|
"sha256": "74CB4C2F7F7130D6048A2C716260D6403620F0E358FA928136ED3560BF71A378"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_font.h",
|
||||||
|
"sha256": "B0B7E6AC8BCF7B9E5BF28695B05D3A084CD530C90322CBC9A0B198114B174231"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_fuzzer.h",
|
||||||
|
"sha256": "494E0E49882A9C2745D07DA7B04761D8D992DD90A7A29DD34B605051ED8DCEE5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_harness.h",
|
||||||
|
"sha256": "30B9CCB36E07FF0442429A27540F6A796AEE073355B538BD50EF0B98CC47982E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_images.h",
|
||||||
|
"sha256": "35E7AD856A201FBAAFE7EC3FC48DB47FB5D9452C292267F8936AEC5E5C77B81D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_log.h",
|
||||||
|
"sha256": "3A8736E6D757666420616F83E7929493FCBE816A0CDDF10347F3446818870BE8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_md5.h",
|
||||||
|
"sha256": "BE73865B584B5EB207CAB3D8DCFF6AD057286B75053B547B0238DF275E282491"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_memory.h",
|
||||||
|
"sha256": "556F676637FBB1A85F1998545C59ADDCA358B8B95C71812337B370184F27483F"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test_random.h",
|
||||||
|
"sha256": "1D8C7987AE39B74D83F40FB54394FD32C61037716C77EBCAF7CE87788934C035"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_test.h",
|
||||||
|
"sha256": "55E453735FB6A14CF350F663E8C7BC9AA273DB95BB31BCF3ABBFB5B3A91A414E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_thread.h",
|
||||||
|
"sha256": "0E546047DD407CA0E1D2D686CF2650AC77A987047184E3645F6BA2EC958DDC5C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_timer.h",
|
||||||
|
"sha256": "D0497AD3D75701613A227134D63FDCBC62ED72F645153D52753E386EE4B498C7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_touch.h",
|
||||||
|
"sha256": "4E5D7A083BBF5237DAF5CCF06FAED3FAE81B1CAA693E27841EBF4EC9BF8FF769"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_types.h",
|
||||||
|
"sha256": "ED0C92BED5EEC2648F744E8451F3AC5140C1EF11510175FA1B726273DBDED9ED"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_version.h",
|
||||||
|
"sha256": "EE97570D0D6507B4687076336C07FD4A7FA1F5E7986C9B61893A279950FEBCE8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_video.h",
|
||||||
|
"sha256": "82AB63FF37834CD4BFCEE490B8E37FB892BBB0B31A1A7913EC13C329271CA5FF"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL_vulkan.h",
|
||||||
|
"sha256": "98ED6B3D354191019AE208FC861799237BA8FFB11FA6BD41B3569E6CE05555B8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/include/SDL2/SDL.h",
|
||||||
|
"sha256": "952E89E1DC4E0DD1A7BEA6A153DF632B8CDB6E433A9B3B0702C5FFE15B9B9360"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "sdl2/lib/SDL2.lib",
|
||||||
|
"sha256": "37B330EE42407B405BD2432E79CB9B9036245309B3ACC445AD70CB8E555B7288"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# LÖVE runtime dependencies
|
||||||
|
|
||||||
|
These x64 UWP Release DLLs are the runtime closure used by the bundled LÖVE backend. They were installed by vcpkg at commit `80f9bcfa455e875d9c1bf7a7c6692d7e1e481061`.
|
||||||
|
|
||||||
|
The bundle contains Brotli 1.2.0, bzip2 1.0.8#6, fmt 12.1.0, FreeType 2.14.3, libogg 1.3.6#1, libpng 1.6.58, libtheora 1.2.0, libvorbis 1.3.7#4, OpenAL Soft 1.25.1, and zlib 1.3.2. Corresponding notices are under `../licenses`.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# SDL2 UWP binaries
|
||||||
|
|
||||||
|
The bundled x64 UWP Release binaries use SDL 2.32.10 from the official `release-2.32.10` commit recorded in the dependency manifest. The rebuild script creates `source` and applies the WinRT only controller changes there.
|
||||||
|
|
||||||
|
`patches/xbox-wgi-controller.patch` records those changes for review. They read Xbox gamepads through `IGamepad::GetCurrentReading` and expose the standard SDL button, axis, trigger, and D-pad layout.
|
||||||
|
|
||||||
|
`SDL2.dll`, `SDL2.lib`, and the headers must be updated together.
|
||||||
|
|
||||||
|
`scripts/xbox-uwp/build_sdl2_angle.ps1` builds the source for x64 WindowsStore with GLES enabled and desktop OpenGL and Vulkan disabled. ANGLE supplies EGL and GLES at runtime.
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file SDL.h
|
||||||
|
*
|
||||||
|
* Main include header for the SDL library
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_h_
|
||||||
|
#define SDL_h_
|
||||||
|
|
||||||
|
#include "SDL_main.h"
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_assert.h"
|
||||||
|
#include "SDL_atomic.h"
|
||||||
|
#include "SDL_audio.h"
|
||||||
|
#include "SDL_clipboard.h"
|
||||||
|
#include "SDL_cpuinfo.h"
|
||||||
|
#include "SDL_endian.h"
|
||||||
|
#include "SDL_error.h"
|
||||||
|
#include "SDL_events.h"
|
||||||
|
#include "SDL_filesystem.h"
|
||||||
|
#include "SDL_gamecontroller.h"
|
||||||
|
#include "SDL_guid.h"
|
||||||
|
#include "SDL_haptic.h"
|
||||||
|
#include "SDL_hidapi.h"
|
||||||
|
#include "SDL_hints.h"
|
||||||
|
#include "SDL_joystick.h"
|
||||||
|
#include "SDL_loadso.h"
|
||||||
|
#include "SDL_log.h"
|
||||||
|
#include "SDL_messagebox.h"
|
||||||
|
#include "SDL_metal.h"
|
||||||
|
#include "SDL_mutex.h"
|
||||||
|
#include "SDL_power.h"
|
||||||
|
#include "SDL_render.h"
|
||||||
|
#include "SDL_rwops.h"
|
||||||
|
#include "SDL_sensor.h"
|
||||||
|
#include "SDL_shape.h"
|
||||||
|
#include "SDL_system.h"
|
||||||
|
#include "SDL_thread.h"
|
||||||
|
#include "SDL_timer.h"
|
||||||
|
#include "SDL_version.h"
|
||||||
|
#include "SDL_video.h"
|
||||||
|
#include "SDL_locale.h"
|
||||||
|
#include "SDL_misc.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* WIKI CATEGORY: Init */
|
||||||
|
|
||||||
|
/* As of version 0.5, SDL is loaded dynamically into the application */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \name SDL_INIT_*
|
||||||
|
*
|
||||||
|
* These are the flags which may be passed to SDL_Init(). You should
|
||||||
|
* specify the subsystems which you will be using in your application.
|
||||||
|
*/
|
||||||
|
/* @{ */
|
||||||
|
#define SDL_INIT_TIMER 0x00000001u
|
||||||
|
#define SDL_INIT_AUDIO 0x00000010u
|
||||||
|
#define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */
|
||||||
|
#define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */
|
||||||
|
#define SDL_INIT_HAPTIC 0x00001000u
|
||||||
|
#define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */
|
||||||
|
#define SDL_INIT_EVENTS 0x00004000u
|
||||||
|
#define SDL_INIT_SENSOR 0x00008000u
|
||||||
|
#define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */
|
||||||
|
#define SDL_INIT_EVERYTHING ( \
|
||||||
|
SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \
|
||||||
|
SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \
|
||||||
|
)
|
||||||
|
/* @} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the SDL library.
|
||||||
|
*
|
||||||
|
* SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the
|
||||||
|
* two may be used interchangeably. Though for readability of your code
|
||||||
|
* SDL_InitSubSystem() might be preferred.
|
||||||
|
*
|
||||||
|
* The file I/O (for example: SDL_RWFromFile) and threading (SDL_CreateThread)
|
||||||
|
* subsystems are initialized by default. Message boxes
|
||||||
|
* (SDL_ShowSimpleMessageBox) also attempt to work without initializing the
|
||||||
|
* video subsystem, in hopes of being useful in showing an error dialog when
|
||||||
|
* SDL_Init fails. You must specifically initialize other subsystems if you
|
||||||
|
* use them in your application.
|
||||||
|
*
|
||||||
|
* Logging (such as SDL_Log) works without initialization, too.
|
||||||
|
*
|
||||||
|
* `flags` may be any of the following OR'd together:
|
||||||
|
*
|
||||||
|
* - `SDL_INIT_TIMER`: timer subsystem
|
||||||
|
* - `SDL_INIT_AUDIO`: audio subsystem
|
||||||
|
* - `SDL_INIT_VIDEO`: video subsystem; automatically initializes the events
|
||||||
|
* subsystem
|
||||||
|
* - `SDL_INIT_JOYSTICK`: joystick subsystem; automatically initializes the
|
||||||
|
* events subsystem
|
||||||
|
* - `SDL_INIT_HAPTIC`: haptic (force feedback) subsystem
|
||||||
|
* - `SDL_INIT_GAMECONTROLLER`: controller subsystem; automatically
|
||||||
|
* initializes the joystick subsystem
|
||||||
|
* - `SDL_INIT_EVENTS`: events subsystem
|
||||||
|
* - `SDL_INIT_EVERYTHING`: all of the above subsystems
|
||||||
|
* - `SDL_INIT_NOPARACHUTE`: compatibility; this flag is ignored
|
||||||
|
*
|
||||||
|
* Subsystem initialization is ref-counted, you must call SDL_QuitSubSystem()
|
||||||
|
* for each SDL_InitSubSystem() to correctly shutdown a subsystem manually (or
|
||||||
|
* call SDL_Quit() to force shutdown). If a subsystem is already loaded then
|
||||||
|
* this call will increase the ref-count and return.
|
||||||
|
*
|
||||||
|
* \param flags subsystem initialization flags.
|
||||||
|
* \returns 0 on success or a negative error code on failure; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_InitSubSystem
|
||||||
|
* \sa SDL_Quit
|
||||||
|
* \sa SDL_SetMainReady
|
||||||
|
* \sa SDL_WasInit
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compatibility function to initialize the SDL library.
|
||||||
|
*
|
||||||
|
* In SDL2, this function and SDL_Init() are interchangeable.
|
||||||
|
*
|
||||||
|
* \param flags any of the flags used by SDL_Init(); see SDL_Init for details.
|
||||||
|
* \returns 0 on success or a negative error code on failure; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Init
|
||||||
|
* \sa SDL_Quit
|
||||||
|
* \sa SDL_QuitSubSystem
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shut down specific SDL subsystems.
|
||||||
|
*
|
||||||
|
* If you start a subsystem using a call to that subsystem's init function
|
||||||
|
* (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(),
|
||||||
|
* SDL_QuitSubSystem() and SDL_WasInit() will not work. You will need to use
|
||||||
|
* that subsystem's quit function (SDL_VideoQuit()) directly instead. But
|
||||||
|
* generally, you should not be using those functions directly anyhow; use
|
||||||
|
* SDL_Init() instead.
|
||||||
|
*
|
||||||
|
* You still need to call SDL_Quit() even if you close all open subsystems
|
||||||
|
* with SDL_QuitSubSystem().
|
||||||
|
*
|
||||||
|
* \param flags any of the flags used by SDL_Init(); see SDL_Init for details.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_InitSubSystem
|
||||||
|
* \sa SDL_Quit
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a mask of the specified subsystems which are currently initialized.
|
||||||
|
*
|
||||||
|
* \param flags any of the flags used by SDL_Init(); see SDL_Init for details.
|
||||||
|
* \returns a mask of all initialized subsystems if `flags` is 0, otherwise it
|
||||||
|
* returns the initialization status of the specified subsystems.
|
||||||
|
*
|
||||||
|
* The return value does not include SDL_INIT_NOPARACHUTE.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Init
|
||||||
|
* \sa SDL_InitSubSystem
|
||||||
|
*/
|
||||||
|
extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up all initialized subsystems.
|
||||||
|
*
|
||||||
|
* You should call this function even if you have already shutdown each
|
||||||
|
* initialized subsystem with SDL_QuitSubSystem(). It is safe to call this
|
||||||
|
* function even in the case of errors in initialization.
|
||||||
|
*
|
||||||
|
* If you start a subsystem using a call to that subsystem's init function
|
||||||
|
* (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(),
|
||||||
|
* then you must use that subsystem's quit function (SDL_VideoQuit()) to shut
|
||||||
|
* it down before calling SDL_Quit(). But generally, you should not be using
|
||||||
|
* those functions directly anyhow; use SDL_Init() instead.
|
||||||
|
*
|
||||||
|
* You can use this function with atexit() to ensure that it is run when your
|
||||||
|
* application is shutdown, but it is not wise to do this from a library or
|
||||||
|
* other dynamically loaded code.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Init
|
||||||
|
* \sa SDL_QuitSubSystem
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_Quit(void);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,324 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_assert_h_
|
||||||
|
#define SDL_assert_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SDL_ASSERT_LEVEL
|
||||||
|
#ifdef SDL_DEFAULT_ASSERT_LEVEL
|
||||||
|
#define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL
|
||||||
|
#elif defined(_DEBUG) || defined(DEBUG) || \
|
||||||
|
(defined(__GNUC__) && !defined(__OPTIMIZE__))
|
||||||
|
#define SDL_ASSERT_LEVEL 2
|
||||||
|
#else
|
||||||
|
#define SDL_ASSERT_LEVEL 1
|
||||||
|
#endif
|
||||||
|
#endif /* SDL_ASSERT_LEVEL */
|
||||||
|
|
||||||
|
/*
|
||||||
|
These are macros and not first class functions so that the debugger breaks
|
||||||
|
on the assertion line and not in some random guts of SDL, and so each
|
||||||
|
assert can have unique static variables associated with it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
/* Don't include intrin.h here because it contains C++ code */
|
||||||
|
extern void __cdecl __debugbreak(void);
|
||||||
|
#define SDL_TriggerBreakpoint() __debugbreak()
|
||||||
|
#elif _SDL_HAS_BUILTIN(__builtin_debugtrap)
|
||||||
|
#define SDL_TriggerBreakpoint() __builtin_debugtrap()
|
||||||
|
#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) )
|
||||||
|
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
|
||||||
|
#elif (defined(__GNUC__) || defined(__clang__)) && defined(__riscv)
|
||||||
|
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "ebreak\n\t" )
|
||||||
|
#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */
|
||||||
|
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" )
|
||||||
|
#elif defined(__APPLE__) && defined(__arm__)
|
||||||
|
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" )
|
||||||
|
#elif defined(_WIN32) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__arm64__) || defined(__aarch64__)) )
|
||||||
|
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #0xF000\n\t" )
|
||||||
|
#elif defined(__386__) && defined(__WATCOMC__)
|
||||||
|
#define SDL_TriggerBreakpoint() { _asm { int 0x03 } }
|
||||||
|
#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__)
|
||||||
|
#include <signal.h>
|
||||||
|
#define SDL_TriggerBreakpoint() raise(SIGTRAP)
|
||||||
|
#else
|
||||||
|
/* How do we trigger breakpoints on this platform? */
|
||||||
|
#define SDL_TriggerBreakpoint()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */
|
||||||
|
# define SDL_FUNCTION __func__
|
||||||
|
#elif ((defined(__GNUC__) && (__GNUC__ >= 2)) || defined(_MSC_VER) || defined (__WATCOMC__))
|
||||||
|
# define SDL_FUNCTION __FUNCTION__
|
||||||
|
#else
|
||||||
|
# define SDL_FUNCTION "???"
|
||||||
|
#endif
|
||||||
|
#define SDL_FILE __FILE__
|
||||||
|
#define SDL_LINE __LINE__
|
||||||
|
|
||||||
|
/*
|
||||||
|
sizeof (x) makes the compiler still parse the expression even without
|
||||||
|
assertions enabled, so the code is always checked at compile time, but
|
||||||
|
doesn't actually generate code for it, so there are no side effects or
|
||||||
|
expensive checks at run time, just the constant size of what x WOULD be,
|
||||||
|
which presumably gets optimized out as unused.
|
||||||
|
This also solves the problem of...
|
||||||
|
|
||||||
|
int somevalue = blah();
|
||||||
|
SDL_assert(somevalue == 1);
|
||||||
|
|
||||||
|
...which would cause compiles to complain that somevalue is unused if we
|
||||||
|
disable assertions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking
|
||||||
|
this condition isn't constant. And looks like an owl's face! */
|
||||||
|
#ifdef _MSC_VER /* stupid /W4 warnings. */
|
||||||
|
#define SDL_NULL_WHILE_LOOP_CONDITION (0,0)
|
||||||
|
#else
|
||||||
|
#define SDL_NULL_WHILE_LOOP_CONDITION (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SDL_disabled_assert(condition) \
|
||||||
|
do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION)
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */
|
||||||
|
SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */
|
||||||
|
SDL_ASSERTION_ABORT, /**< Terminate the program. */
|
||||||
|
SDL_ASSERTION_IGNORE, /**< Ignore the assert. */
|
||||||
|
SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */
|
||||||
|
} SDL_AssertState;
|
||||||
|
|
||||||
|
typedef struct SDL_AssertData
|
||||||
|
{
|
||||||
|
int always_ignore;
|
||||||
|
unsigned int trigger_count;
|
||||||
|
const char *condition;
|
||||||
|
const char *filename;
|
||||||
|
int linenum;
|
||||||
|
const char *function;
|
||||||
|
const struct SDL_AssertData *next;
|
||||||
|
} SDL_AssertData;
|
||||||
|
|
||||||
|
/* Never call this directly. Use the SDL_assert* macros. */
|
||||||
|
extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *,
|
||||||
|
const char *,
|
||||||
|
const char *, int)
|
||||||
|
#if defined(__clang__)
|
||||||
|
#if __has_feature(attribute_analyzer_noreturn)
|
||||||
|
/* this tells Clang's static analysis that we're a custom assert function,
|
||||||
|
and that the analyzer should assume the condition was always true past this
|
||||||
|
SDL_assert test. */
|
||||||
|
__attribute__((analyzer_noreturn))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
|
/* the do {} while(0) avoids dangling else problems:
|
||||||
|
if (x) SDL_assert(y); else blah();
|
||||||
|
... without the do/while, the "else" could attach to this macro's "if".
|
||||||
|
We try to handle just the minimum we need here in a macro...the loop,
|
||||||
|
the static vars, and break points. The heavy lifting is handled in
|
||||||
|
SDL_ReportAssertion(), in SDL_assert.c.
|
||||||
|
*/
|
||||||
|
#define SDL_enabled_assert(condition) \
|
||||||
|
do { \
|
||||||
|
while ( !(condition) ) { \
|
||||||
|
static struct SDL_AssertData sdl_assert_data = { 0, 0, #condition, NULL, 0, NULL, NULL }; \
|
||||||
|
const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \
|
||||||
|
if (sdl_assert_state == SDL_ASSERTION_RETRY) { \
|
||||||
|
continue; /* go again. */ \
|
||||||
|
} else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \
|
||||||
|
SDL_TriggerBreakpoint(); \
|
||||||
|
} \
|
||||||
|
break; /* not retrying. */ \
|
||||||
|
} \
|
||||||
|
} while (SDL_NULL_WHILE_LOOP_CONDITION)
|
||||||
|
|
||||||
|
/* Enable various levels of assertions. */
|
||||||
|
#if SDL_ASSERT_LEVEL == 0 /* assertions disabled */
|
||||||
|
# define SDL_assert(condition) SDL_disabled_assert(condition)
|
||||||
|
# define SDL_assert_release(condition) SDL_disabled_assert(condition)
|
||||||
|
# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition)
|
||||||
|
#elif SDL_ASSERT_LEVEL == 1 /* release settings. */
|
||||||
|
# define SDL_assert(condition) SDL_disabled_assert(condition)
|
||||||
|
# define SDL_assert_release(condition) SDL_enabled_assert(condition)
|
||||||
|
# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition)
|
||||||
|
#elif SDL_ASSERT_LEVEL == 2 /* normal settings. */
|
||||||
|
# define SDL_assert(condition) SDL_enabled_assert(condition)
|
||||||
|
# define SDL_assert_release(condition) SDL_enabled_assert(condition)
|
||||||
|
# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition)
|
||||||
|
#elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */
|
||||||
|
# define SDL_assert(condition) SDL_enabled_assert(condition)
|
||||||
|
# define SDL_assert_release(condition) SDL_enabled_assert(condition)
|
||||||
|
# define SDL_assert_paranoid(condition) SDL_enabled_assert(condition)
|
||||||
|
#else
|
||||||
|
# error Unknown assertion level.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* this assertion is never disabled at any level. */
|
||||||
|
#define SDL_assert_always(condition) SDL_enabled_assert(condition)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A callback that fires when an SDL assertion fails.
|
||||||
|
*
|
||||||
|
* \param data a pointer to the SDL_AssertData structure corresponding to the
|
||||||
|
* current assertion.
|
||||||
|
* \param userdata what was passed as `userdata` to SDL_SetAssertionHandler().
|
||||||
|
* \returns an SDL_AssertState value indicating how to handle the failure.
|
||||||
|
*/
|
||||||
|
typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)(
|
||||||
|
const SDL_AssertData* data, void* userdata);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set an application-defined assertion handler.
|
||||||
|
*
|
||||||
|
* This function allows an application to show its own assertion UI and/or
|
||||||
|
* force the response to an assertion failure. If the application doesn't
|
||||||
|
* provide this, SDL will try to do the right thing, popping up a
|
||||||
|
* system-specific GUI dialog, and probably minimizing any fullscreen windows.
|
||||||
|
*
|
||||||
|
* This callback may fire from any thread, but it runs wrapped in a mutex, so
|
||||||
|
* it will only fire from one thread at a time.
|
||||||
|
*
|
||||||
|
* This callback is NOT reset to SDL's internal handler upon SDL_Quit()!
|
||||||
|
*
|
||||||
|
* \param handler the SDL_AssertionHandler function to call when an assertion
|
||||||
|
* fails or NULL for the default handler.
|
||||||
|
* \param userdata a pointer that is passed to `handler`.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetAssertionHandler
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_SetAssertionHandler(
|
||||||
|
SDL_AssertionHandler handler,
|
||||||
|
void *userdata);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default assertion handler.
|
||||||
|
*
|
||||||
|
* This returns the function pointer that is called by default when an
|
||||||
|
* assertion is triggered. This is an internal function provided by SDL, that
|
||||||
|
* is used for assertions when SDL_SetAssertionHandler() hasn't been used to
|
||||||
|
* provide a different function.
|
||||||
|
*
|
||||||
|
* \returns the default SDL_AssertionHandler that is called when an assert
|
||||||
|
* triggers.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetAssertionHandler
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current assertion handler.
|
||||||
|
*
|
||||||
|
* This returns the function pointer that is called when an assertion is
|
||||||
|
* triggered. This is either the value last passed to
|
||||||
|
* SDL_SetAssertionHandler(), or if no application-specified function is set,
|
||||||
|
* is equivalent to calling SDL_GetDefaultAssertionHandler().
|
||||||
|
*
|
||||||
|
* The parameter `puserdata` is a pointer to a void*, which will store the
|
||||||
|
* "userdata" pointer that was passed to SDL_SetAssertionHandler(). This value
|
||||||
|
* will always be NULL for the default handler. If you don't care about this
|
||||||
|
* data, it is safe to pass a NULL pointer to this function to ignore it.
|
||||||
|
*
|
||||||
|
* \param puserdata pointer which is filled with the "userdata" pointer that
|
||||||
|
* was passed to SDL_SetAssertionHandler().
|
||||||
|
* \returns the SDL_AssertionHandler that is called when an assert triggers.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*
|
||||||
|
* \sa SDL_SetAssertionHandler
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of all assertion failures.
|
||||||
|
*
|
||||||
|
* This function gets all assertions triggered since the last call to
|
||||||
|
* SDL_ResetAssertionReport(), or the start of the program.
|
||||||
|
*
|
||||||
|
* The proper way to examine this data looks something like this:
|
||||||
|
*
|
||||||
|
* ```c
|
||||||
|
* const SDL_AssertData *item = SDL_GetAssertionReport();
|
||||||
|
* while (item) {
|
||||||
|
* printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n",
|
||||||
|
* item->condition, item->function, item->filename,
|
||||||
|
* item->linenum, item->trigger_count,
|
||||||
|
* item->always_ignore ? "yes" : "no");
|
||||||
|
* item = item->next;
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* \returns a list of all failed assertions or NULL if the list is empty. This
|
||||||
|
* memory should not be modified or freed by the application.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_ResetAssertionReport
|
||||||
|
*/
|
||||||
|
extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear the list of all assertion failures.
|
||||||
|
*
|
||||||
|
* This function will clear the list of all assertions triggered up to that
|
||||||
|
* point. Immediately following this call, SDL_GetAssertionReport will return
|
||||||
|
* no items. In addition, any previously-triggered assertions will be reset to
|
||||||
|
* a trigger_count of zero, and their always_ignore state will be false.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetAssertionReport
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void);
|
||||||
|
|
||||||
|
|
||||||
|
/* these had wrong naming conventions until 2.0.4. Please update your app! */
|
||||||
|
#define SDL_assert_state SDL_AssertState
|
||||||
|
#define SDL_assert_data SDL_AssertData
|
||||||
|
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_assert_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,408 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryAtomic
|
||||||
|
*
|
||||||
|
* Atomic operations.
|
||||||
|
*
|
||||||
|
* IMPORTANT: If you are not an expert in concurrent lockless programming, you
|
||||||
|
* should not be using any functions in this file. You should be protecting
|
||||||
|
* your data structures with full mutexes instead.
|
||||||
|
*
|
||||||
|
* ***Seriously, here be dragons!***
|
||||||
|
*
|
||||||
|
* You can find out a little more about lockless programming and the subtle
|
||||||
|
* issues that can arise here:
|
||||||
|
* https://learn.microsoft.com/en-us/windows/win32/dxtecharts/lockless-programming
|
||||||
|
*
|
||||||
|
* There's also lots of good information here:
|
||||||
|
*
|
||||||
|
* - https://www.1024cores.net/home/lock-free-algorithms
|
||||||
|
* - https://preshing.com/
|
||||||
|
*
|
||||||
|
* These operations may or may not actually be implemented using processor
|
||||||
|
* specific atomic operations. When possible they are implemented as true
|
||||||
|
* processor specific atomic operations. When that is not possible the are
|
||||||
|
* implemented using locks that *do* use the available atomic operations.
|
||||||
|
*
|
||||||
|
* All of the atomic operations that modify memory are full memory barriers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_atomic_h_
|
||||||
|
#define SDL_atomic_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_platform.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \name SDL AtomicLock
|
||||||
|
*
|
||||||
|
* The atomic locks are efficient spinlocks using CPU instructions,
|
||||||
|
* but are vulnerable to starvation and can spin forever if a thread
|
||||||
|
* holding a lock has been terminated. For this reason you should
|
||||||
|
* minimize the code executed inside an atomic lock and never do
|
||||||
|
* expensive things like API or system calls while holding them.
|
||||||
|
*
|
||||||
|
* The atomic locks are not safe to lock recursively.
|
||||||
|
*
|
||||||
|
* Porting Note:
|
||||||
|
* The spin lock functions and type are required and can not be
|
||||||
|
* emulated because they are used in the atomic emulation code.
|
||||||
|
*/
|
||||||
|
/* @{ */
|
||||||
|
|
||||||
|
typedef int SDL_SpinLock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to lock a spin lock by setting it to a non-zero value.
|
||||||
|
*
|
||||||
|
* ***Please note that spinlocks are dangerous if you don't know what you're
|
||||||
|
* doing. Please be careful using any sort of spinlock!***
|
||||||
|
*
|
||||||
|
* \param lock a pointer to a lock variable.
|
||||||
|
* \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already
|
||||||
|
* held.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicLock
|
||||||
|
* \sa SDL_AtomicUnlock
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a spin lock by setting it to a non-zero value.
|
||||||
|
*
|
||||||
|
* ***Please note that spinlocks are dangerous if you don't know what you're
|
||||||
|
* doing. Please be careful using any sort of spinlock!***
|
||||||
|
*
|
||||||
|
* \param lock a pointer to a lock variable.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicTryLock
|
||||||
|
* \sa SDL_AtomicUnlock
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unlock a spin lock by setting it to 0.
|
||||||
|
*
|
||||||
|
* Always returns immediately.
|
||||||
|
*
|
||||||
|
* ***Please note that spinlocks are dangerous if you don't know what you're
|
||||||
|
* doing. Please be careful using any sort of spinlock!***
|
||||||
|
*
|
||||||
|
* \param lock a pointer to a lock variable.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicLock
|
||||||
|
* \sa SDL_AtomicTryLock
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock);
|
||||||
|
|
||||||
|
/* @} *//* SDL AtomicLock */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The compiler barrier prevents the compiler from reordering
|
||||||
|
* reads and writes to globally visible variables across the call.
|
||||||
|
*/
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__)
|
||||||
|
void _ReadWriteBarrier(void);
|
||||||
|
#pragma intrinsic(_ReadWriteBarrier)
|
||||||
|
#define SDL_CompilerBarrier() _ReadWriteBarrier()
|
||||||
|
#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
|
||||||
|
/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */
|
||||||
|
#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory")
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
extern __inline void SDL_CompilerBarrier(void);
|
||||||
|
#pragma aux SDL_CompilerBarrier = "" parm [] modify exact [];
|
||||||
|
#else
|
||||||
|
#define SDL_CompilerBarrier() \
|
||||||
|
{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Memory barriers are designed to prevent reads and writes from being
|
||||||
|
* reordered by the compiler and being seen out of order on multi-core CPUs.
|
||||||
|
*
|
||||||
|
* A typical pattern would be for thread A to write some data and a flag, and
|
||||||
|
* for thread B to read the flag and get the data. In this case you would
|
||||||
|
* insert a release barrier between writing the data and the flag,
|
||||||
|
* guaranteeing that the data write completes no later than the flag is
|
||||||
|
* written, and you would insert an acquire barrier between reading the flag
|
||||||
|
* and reading the data, to ensure that all the reads associated with the flag
|
||||||
|
* have completed.
|
||||||
|
*
|
||||||
|
* In this pattern you should always see a release barrier paired with an
|
||||||
|
* acquire barrier and you should gate the data reads/writes with a single
|
||||||
|
* flag variable.
|
||||||
|
*
|
||||||
|
* For more information on these semantics, take a look at the blog post:
|
||||||
|
* http://preshing.com/20120913/acquire-and-release-semantics
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.6.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void);
|
||||||
|
extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void);
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
|
||||||
|
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory")
|
||||||
|
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory")
|
||||||
|
#elif defined(__GNUC__) && defined(__aarch64__)
|
||||||
|
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
|
||||||
|
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory")
|
||||||
|
#elif defined(__GNUC__) && defined(__arm__)
|
||||||
|
#if 0 /* defined(__LINUX__) || defined(__ANDROID__) */
|
||||||
|
/* Information from:
|
||||||
|
https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19
|
||||||
|
|
||||||
|
The Linux kernel provides a helper function which provides the right code for a memory barrier,
|
||||||
|
hard-coded at address 0xffff0fa0
|
||||||
|
*/
|
||||||
|
typedef void (*SDL_KernelMemoryBarrierFunc)();
|
||||||
|
#define SDL_MemoryBarrierRelease() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)()
|
||||||
|
#define SDL_MemoryBarrierAcquire() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)()
|
||||||
|
#elif 0 /* defined(__QNXNTO__) */
|
||||||
|
#include <sys/cpuinline.h>
|
||||||
|
|
||||||
|
#define SDL_MemoryBarrierRelease() __cpu_membarrier()
|
||||||
|
#define SDL_MemoryBarrierAcquire() __cpu_membarrier()
|
||||||
|
#else
|
||||||
|
#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__)
|
||||||
|
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
|
||||||
|
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory")
|
||||||
|
#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
|
||||||
|
#ifdef __thumb__
|
||||||
|
/* The mcr instruction isn't available in thumb mode, use real functions */
|
||||||
|
#define SDL_MEMORY_BARRIER_USES_FUNCTION
|
||||||
|
#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction()
|
||||||
|
#define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction()
|
||||||
|
#else
|
||||||
|
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
|
||||||
|
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
|
||||||
|
#endif /* __thumb__ */
|
||||||
|
#else
|
||||||
|
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory")
|
||||||
|
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory")
|
||||||
|
#endif /* __LINUX__ || __ANDROID__ */
|
||||||
|
#endif /* __GNUC__ && __arm__ */
|
||||||
|
#else
|
||||||
|
#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
|
||||||
|
/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */
|
||||||
|
#include <mbarrier.h>
|
||||||
|
#define SDL_MemoryBarrierRelease() __machine_rel_barrier()
|
||||||
|
#define SDL_MemoryBarrierAcquire() __machine_acq_barrier()
|
||||||
|
#else
|
||||||
|
/* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */
|
||||||
|
#define SDL_MemoryBarrierRelease() SDL_CompilerBarrier()
|
||||||
|
#define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier()
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* "REP NOP" is PAUSE, coded for tools that don't know it by that name. */
|
||||||
|
#if (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))
|
||||||
|
#define SDL_CPUPauseInstruction() __asm__ __volatile__("pause\n") /* Some assemblers can't do REP NOP, so go with PAUSE. */
|
||||||
|
#elif (defined(__arm__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7) || defined(__aarch64__)
|
||||||
|
#define SDL_CPUPauseInstruction() __asm__ __volatile__("yield" ::: "memory")
|
||||||
|
#elif (defined(__powerpc__) || defined(__powerpc64__))
|
||||||
|
#define SDL_CPUPauseInstruction() __asm__ __volatile__("or 27,27,27");
|
||||||
|
#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
|
||||||
|
#define SDL_CPUPauseInstruction() _mm_pause() /* this is actually "rep nop" and not a SIMD instruction. No inline asm in MSVC x86-64! */
|
||||||
|
#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64))
|
||||||
|
#define SDL_CPUPauseInstruction() __yield()
|
||||||
|
#elif defined(__WATCOMC__) && defined(__386__)
|
||||||
|
extern __inline void SDL_CPUPauseInstruction(void);
|
||||||
|
#pragma aux SDL_CPUPauseInstruction = ".686p" ".xmm2" "pause"
|
||||||
|
#else
|
||||||
|
#define SDL_CPUPauseInstruction()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A type representing an atomic integer value.
|
||||||
|
*
|
||||||
|
* It is a struct so people don't accidentally use numeric operations on it.
|
||||||
|
*/
|
||||||
|
typedef struct SDL_atomic_t {
|
||||||
|
int value;
|
||||||
|
} SDL_atomic_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set an atomic variable to a new value if it is currently an old value.
|
||||||
|
*
|
||||||
|
* ***Note: If you don't know what this function is for, you shouldn't use
|
||||||
|
* it!***
|
||||||
|
*
|
||||||
|
* \param a a pointer to an SDL_atomic_t variable to be modified.
|
||||||
|
* \param oldval the old value.
|
||||||
|
* \param newval the new value.
|
||||||
|
* \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicCASPtr
|
||||||
|
* \sa SDL_AtomicGet
|
||||||
|
* \sa SDL_AtomicSet
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set an atomic variable to a value.
|
||||||
|
*
|
||||||
|
* This function also acts as a full memory barrier.
|
||||||
|
*
|
||||||
|
* ***Note: If you don't know what this function is for, you shouldn't use
|
||||||
|
* it!***
|
||||||
|
*
|
||||||
|
* \param a a pointer to an SDL_atomic_t variable to be modified.
|
||||||
|
* \param v the desired value.
|
||||||
|
* \returns the previous value of the atomic variable.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicGet
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the value of an atomic variable.
|
||||||
|
*
|
||||||
|
* ***Note: If you don't know what this function is for, you shouldn't use
|
||||||
|
* it!***
|
||||||
|
*
|
||||||
|
* \param a a pointer to an SDL_atomic_t variable.
|
||||||
|
* \returns the current value of an atomic variable.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicSet
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add to an atomic variable.
|
||||||
|
*
|
||||||
|
* This function also acts as a full memory barrier.
|
||||||
|
*
|
||||||
|
* ***Note: If you don't know what this function is for, you shouldn't use
|
||||||
|
* it!***
|
||||||
|
*
|
||||||
|
* \param a a pointer to an SDL_atomic_t variable to be modified.
|
||||||
|
* \param v the desired value to add.
|
||||||
|
* \returns the previous value of the atomic variable.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicDecRef
|
||||||
|
* \sa SDL_AtomicIncRef
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Increment an atomic variable used as a reference count.
|
||||||
|
*/
|
||||||
|
#ifndef SDL_AtomicIncRef
|
||||||
|
#define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Decrement an atomic variable used as a reference count.
|
||||||
|
*
|
||||||
|
* \return SDL_TRUE if the variable reached zero after decrementing,
|
||||||
|
* SDL_FALSE otherwise
|
||||||
|
*/
|
||||||
|
#ifndef SDL_AtomicDecRef
|
||||||
|
#define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a pointer to a new value if it is currently an old value.
|
||||||
|
*
|
||||||
|
* ***Note: If you don't know what this function is for, you shouldn't use
|
||||||
|
* it!***
|
||||||
|
*
|
||||||
|
* \param a a pointer to a pointer.
|
||||||
|
* \param oldval the old pointer value.
|
||||||
|
* \param newval the new pointer value.
|
||||||
|
* \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicCAS
|
||||||
|
* \sa SDL_AtomicGetPtr
|
||||||
|
* \sa SDL_AtomicSetPtr
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a pointer to a value atomically.
|
||||||
|
*
|
||||||
|
* ***Note: If you don't know what this function is for, you shouldn't use
|
||||||
|
* it!***
|
||||||
|
*
|
||||||
|
* \param a a pointer to a pointer.
|
||||||
|
* \param v the desired pointer value.
|
||||||
|
* \returns the previous value of the pointer.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicCASPtr
|
||||||
|
* \sa SDL_AtomicGetPtr
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the value of a pointer atomically.
|
||||||
|
*
|
||||||
|
* ***Note: If you don't know what this function is for, you shouldn't use
|
||||||
|
* it!***
|
||||||
|
*
|
||||||
|
* \param a a pointer to a pointer.
|
||||||
|
* \returns the current value of a pointer.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*
|
||||||
|
* \sa SDL_AtomicCASPtr
|
||||||
|
* \sa SDL_AtomicSetPtr
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_atomic_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryBits
|
||||||
|
*
|
||||||
|
* Functions for fiddling with bits and bitmasks.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_bits_h_
|
||||||
|
#define SDL_bits_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file SDL_bits.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the index of the most significant bit. Result is undefined when called
|
||||||
|
* with 0. This operation can also be stated as "count leading zeroes" and
|
||||||
|
* "log base 2".
|
||||||
|
*
|
||||||
|
* \return the index of the most significant bit, or -1 if the value is 0.
|
||||||
|
*/
|
||||||
|
#if defined(__WATCOMC__) && defined(__386__)
|
||||||
|
extern __inline int _SDL_bsr_watcom(Uint32);
|
||||||
|
#pragma aux _SDL_bsr_watcom = \
|
||||||
|
"bsr eax, eax" \
|
||||||
|
parm [eax] nomemory \
|
||||||
|
value [eax] \
|
||||||
|
modify exact [eax] nomemory;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this function to get the index of the most significant (set) bit in a
|
||||||
|
*
|
||||||
|
* \param x the number to find the MSB of.
|
||||||
|
* \returns the index of the most significant bit of x, or -1 if x is 0.
|
||||||
|
*/
|
||||||
|
SDL_FORCE_INLINE int
|
||||||
|
SDL_MostSignificantBitIndex32(Uint32 x)
|
||||||
|
{
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
|
||||||
|
/* Count Leading Zeroes builtin in GCC.
|
||||||
|
* http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html
|
||||||
|
*/
|
||||||
|
if (x == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 31 - __builtin_clz(x);
|
||||||
|
#elif defined(__WATCOMC__) && defined(__386__)
|
||||||
|
if (x == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return _SDL_bsr_watcom(x);
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
unsigned long index;
|
||||||
|
if (_BitScanReverse(&index, x)) {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
#else
|
||||||
|
/* Based off of Bit Twiddling Hacks by Sean Eron Anderson
|
||||||
|
* <seander@cs.stanford.edu>, released in the public domain.
|
||||||
|
* http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
|
||||||
|
*/
|
||||||
|
const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
|
||||||
|
const int S[] = {1, 2, 4, 8, 16};
|
||||||
|
|
||||||
|
int msbIndex = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (x == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 4; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (x & b[i])
|
||||||
|
{
|
||||||
|
x >>= S[i];
|
||||||
|
msbIndex |= S[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return msbIndex;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_FORCE_INLINE SDL_bool
|
||||||
|
SDL_HasExactlyOneBitSet32(Uint32 x)
|
||||||
|
{
|
||||||
|
if (x && !(x & (x - 1))) {
|
||||||
|
return SDL_TRUE;
|
||||||
|
}
|
||||||
|
return SDL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_bits_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryBlendmode
|
||||||
|
*
|
||||||
|
* Header file declaring the SDL_BlendMode enumeration
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_blendmode_h_
|
||||||
|
#define SDL_blendmode_h_
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The blend mode used in SDL_RenderCopy() and drawing operations.
|
||||||
|
*/
|
||||||
|
typedef enum SDL_BlendMode
|
||||||
|
{
|
||||||
|
SDL_BLENDMODE_NONE = 0x00000000, /**< no blending
|
||||||
|
dstRGBA = srcRGBA */
|
||||||
|
SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending
|
||||||
|
dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA))
|
||||||
|
dstA = srcA + (dstA * (1-srcA)) */
|
||||||
|
SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending
|
||||||
|
dstRGB = (srcRGB * srcA) + dstRGB
|
||||||
|
dstA = dstA */
|
||||||
|
SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate
|
||||||
|
dstRGB = srcRGB * dstRGB
|
||||||
|
dstA = dstA */
|
||||||
|
SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply
|
||||||
|
dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA))
|
||||||
|
dstA = dstA */
|
||||||
|
SDL_BLENDMODE_INVALID = 0x7FFFFFFF
|
||||||
|
|
||||||
|
/* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */
|
||||||
|
|
||||||
|
} SDL_BlendMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The blend operation used when combining source and destination pixel
|
||||||
|
* components
|
||||||
|
*/
|
||||||
|
typedef enum SDL_BlendOperation
|
||||||
|
{
|
||||||
|
SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */
|
||||||
|
SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */
|
||||||
|
SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */
|
||||||
|
SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D9, D3D11 */
|
||||||
|
SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D9, D3D11 */
|
||||||
|
} SDL_BlendOperation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The normalized factor used to multiply pixel components
|
||||||
|
*/
|
||||||
|
typedef enum SDL_BlendFactor
|
||||||
|
{
|
||||||
|
SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */
|
||||||
|
SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */
|
||||||
|
SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */
|
||||||
|
SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */
|
||||||
|
SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */
|
||||||
|
SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */
|
||||||
|
SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */
|
||||||
|
SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */
|
||||||
|
SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */
|
||||||
|
SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */
|
||||||
|
} SDL_BlendFactor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compose a custom blend mode for renderers.
|
||||||
|
*
|
||||||
|
* The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept
|
||||||
|
* the SDL_BlendMode returned by this function if the renderer supports it.
|
||||||
|
*
|
||||||
|
* A blend mode controls how the pixels from a drawing operation (source) get
|
||||||
|
* combined with the pixels from the render target (destination). First, the
|
||||||
|
* components of the source and destination pixels get multiplied with their
|
||||||
|
* blend factors. Then, the blend operation takes the two products and
|
||||||
|
* calculates the result that will get stored in the render target.
|
||||||
|
*
|
||||||
|
* Expressed in pseudocode, it would look like this:
|
||||||
|
*
|
||||||
|
* ```c
|
||||||
|
* dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor);
|
||||||
|
* dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Where the functions `colorOperation(src, dst)` and `alphaOperation(src,
|
||||||
|
* dst)` can return one of the following:
|
||||||
|
*
|
||||||
|
* - `src + dst`
|
||||||
|
* - `src - dst`
|
||||||
|
* - `dst - src`
|
||||||
|
* - `min(src, dst)`
|
||||||
|
* - `max(src, dst)`
|
||||||
|
*
|
||||||
|
* The red, green, and blue components are always multiplied with the first,
|
||||||
|
* second, and third components of the SDL_BlendFactor, respectively. The
|
||||||
|
* fourth component is not used.
|
||||||
|
*
|
||||||
|
* The alpha component is always multiplied with the fourth component of the
|
||||||
|
* SDL_BlendFactor. The other components are not used in the alpha
|
||||||
|
* calculation.
|
||||||
|
*
|
||||||
|
* Support for these blend modes varies for each renderer. To check if a
|
||||||
|
* specific SDL_BlendMode is supported, create a renderer and pass it to
|
||||||
|
* either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will
|
||||||
|
* return with an error if the blend mode is not supported.
|
||||||
|
*
|
||||||
|
* This list describes the support of custom blend modes for each renderer in
|
||||||
|
* SDL 2.0.6. All renderers support the four blend modes listed in the
|
||||||
|
* SDL_BlendMode enumeration.
|
||||||
|
*
|
||||||
|
* - **direct3d**: Supports all operations with all factors. However, some
|
||||||
|
* factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and
|
||||||
|
* `SDL_BLENDOPERATION_MAXIMUM`.
|
||||||
|
* - **direct3d11**: Same as Direct3D 9.
|
||||||
|
* - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all
|
||||||
|
* factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL
|
||||||
|
* 2.0.6.
|
||||||
|
* - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all
|
||||||
|
* factors. Color and alpha factors need to be the same. OpenGL ES 1
|
||||||
|
* implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT`
|
||||||
|
* and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha
|
||||||
|
* operations being different from each other. May support color and alpha
|
||||||
|
* factors being different from each other.
|
||||||
|
* - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`,
|
||||||
|
* `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT`
|
||||||
|
* operations with all factors.
|
||||||
|
* - **psp**: No custom blend mode support.
|
||||||
|
* - **software**: No custom blend mode support.
|
||||||
|
*
|
||||||
|
* Some renderers do not provide an alpha component for the default render
|
||||||
|
* target. The `SDL_BLENDFACTOR_DST_ALPHA` and
|
||||||
|
* `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this
|
||||||
|
* case.
|
||||||
|
*
|
||||||
|
* \param srcColorFactor the SDL_BlendFactor applied to the red, green, and
|
||||||
|
* blue components of the source pixels.
|
||||||
|
* \param dstColorFactor the SDL_BlendFactor applied to the red, green, and
|
||||||
|
* blue components of the destination pixels.
|
||||||
|
* \param colorOperation the SDL_BlendOperation used to combine the red,
|
||||||
|
* green, and blue components of the source and
|
||||||
|
* destination pixels.
|
||||||
|
* \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of
|
||||||
|
* the source pixels.
|
||||||
|
* \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of
|
||||||
|
* the destination pixels.
|
||||||
|
* \param alphaOperation the SDL_BlendOperation used to combine the alpha
|
||||||
|
* component of the source and destination pixels.
|
||||||
|
* \returns an SDL_BlendMode that represents the chosen factors and
|
||||||
|
* operations.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.6.
|
||||||
|
*
|
||||||
|
* \sa SDL_SetRenderDrawBlendMode
|
||||||
|
* \sa SDL_GetRenderDrawBlendMode
|
||||||
|
* \sa SDL_SetTextureBlendMode
|
||||||
|
* \sa SDL_GetTextureBlendMode
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor,
|
||||||
|
SDL_BlendFactor dstColorFactor,
|
||||||
|
SDL_BlendOperation colorOperation,
|
||||||
|
SDL_BlendFactor srcAlphaFactor,
|
||||||
|
SDL_BlendFactor dstAlphaFactor,
|
||||||
|
SDL_BlendOperation alphaOperation);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_blendmode_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,141 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryClipboard
|
||||||
|
*
|
||||||
|
* Include file for SDL clipboard handling
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_clipboard_h_
|
||||||
|
#define SDL_clipboard_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Function prototypes */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put UTF-8 text into the clipboard.
|
||||||
|
*
|
||||||
|
* \param text the text to store in the clipboard.
|
||||||
|
* \returns 0 on success or a negative error code on failure; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetClipboardText
|
||||||
|
* \sa SDL_HasClipboardText
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get UTF-8 text from the clipboard, which must be freed with SDL_free().
|
||||||
|
*
|
||||||
|
* This functions returns empty string if there was not enough memory left for
|
||||||
|
* a copy of the clipboard's content.
|
||||||
|
*
|
||||||
|
* \returns the clipboard text on success or an empty string on failure; call
|
||||||
|
* SDL_GetError() for more information. Caller must call SDL_free()
|
||||||
|
* on the returned pointer when done with it (even if there was an
|
||||||
|
* error).
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_HasClipboardText
|
||||||
|
* \sa SDL_SetClipboardText
|
||||||
|
*/
|
||||||
|
extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query whether the clipboard exists and contains a non-empty text string.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetClipboardText
|
||||||
|
* \sa SDL_SetClipboardText
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put UTF-8 text into the primary selection.
|
||||||
|
*
|
||||||
|
* \param text the text to store in the primary selection.
|
||||||
|
* \returns 0 on success or a negative error code on failure; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.26.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetPrimarySelectionText
|
||||||
|
* \sa SDL_HasPrimarySelectionText
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_SetPrimarySelectionText(const char *text);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get UTF-8 text from the primary selection, which must be freed with
|
||||||
|
* SDL_free().
|
||||||
|
*
|
||||||
|
* This functions returns empty string if there was not enough memory left for
|
||||||
|
* a copy of the primary selection's content.
|
||||||
|
*
|
||||||
|
* \returns the primary selection text on success or an empty string on
|
||||||
|
* failure; call SDL_GetError() for more information. Caller must
|
||||||
|
* call SDL_free() on the returned pointer when done with it (even if
|
||||||
|
* there was an error).
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.26.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_HasPrimarySelectionText
|
||||||
|
* \sa SDL_SetPrimarySelectionText
|
||||||
|
*/
|
||||||
|
extern DECLSPEC char * SDLCALL SDL_GetPrimarySelectionText(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query whether the primary selection exists and contains a non-empty text
|
||||||
|
* string.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the primary selection has text, or SDL_FALSE if it
|
||||||
|
* does not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.26.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetPrimarySelectionText
|
||||||
|
* \sa SDL_SetPrimarySelectionText
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasPrimarySelectionText(void);
|
||||||
|
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_clipboard_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,571 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_config_h_
|
||||||
|
#define SDL_config_h_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file SDL_config.h.in
|
||||||
|
*
|
||||||
|
* This is a set of defines to configure the SDL features
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* General platform specific identifiers */
|
||||||
|
#include "SDL_platform.h"
|
||||||
|
|
||||||
|
/* C language features */
|
||||||
|
/* #undef const */
|
||||||
|
/* #undef inline */
|
||||||
|
/* #undef volatile */
|
||||||
|
|
||||||
|
/* C datatypes */
|
||||||
|
/* Define SIZEOF_VOIDP for 64/32 architectures */
|
||||||
|
#if defined(__LP64__) || defined(_LP64) || defined(_WIN64)
|
||||||
|
#define SIZEOF_VOIDP 8
|
||||||
|
#else
|
||||||
|
#define SIZEOF_VOIDP 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* #undef HAVE_GCC_ATOMICS */
|
||||||
|
/* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */
|
||||||
|
|
||||||
|
/* Comment this if you want to build without any C library requirements */
|
||||||
|
/* #undef HAVE_LIBC */
|
||||||
|
#ifdef HAVE_LIBC
|
||||||
|
|
||||||
|
/* Useful headers */
|
||||||
|
/* #undef STDC_HEADERS */
|
||||||
|
/* #undef HAVE_ALLOCA_H */
|
||||||
|
/* #undef HAVE_CTYPE_H */
|
||||||
|
/* #undef HAVE_FLOAT_H */
|
||||||
|
/* #undef HAVE_ICONV_H */
|
||||||
|
/* #undef HAVE_INTTYPES_H */
|
||||||
|
/* #undef HAVE_LIMITS_H */
|
||||||
|
/* #undef HAVE_MALLOC_H */
|
||||||
|
/* #undef HAVE_MATH_H */
|
||||||
|
/* #undef HAVE_MEMORY_H */
|
||||||
|
/* #undef HAVE_SIGNAL_H */
|
||||||
|
#define HAVE_STDARG_H 1
|
||||||
|
#define HAVE_STDDEF_H 1
|
||||||
|
#define HAVE_STDINT_H 1
|
||||||
|
/* #undef HAVE_STDIO_H */
|
||||||
|
/* #undef HAVE_STDLIB_H */
|
||||||
|
/* #undef HAVE_STRINGS_H */
|
||||||
|
/* #undef HAVE_STRING_H */
|
||||||
|
/* #undef HAVE_SYS_TYPES_H */
|
||||||
|
/* #undef HAVE_WCHAR_H */
|
||||||
|
/* #undef HAVE_LINUX_INPUT_H */
|
||||||
|
/* #undef HAVE_PTHREAD_NP_H */
|
||||||
|
/* #undef HAVE_LIBUNWIND_H */
|
||||||
|
|
||||||
|
/* C library functions */
|
||||||
|
/* #undef HAVE_DLOPEN */
|
||||||
|
/* #undef HAVE_MALLOC */
|
||||||
|
/* #undef HAVE_CALLOC */
|
||||||
|
/* #undef HAVE_REALLOC */
|
||||||
|
/* #undef HAVE_FREE */
|
||||||
|
/* #undef HAVE_ALLOCA */
|
||||||
|
#ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */
|
||||||
|
/* #undef HAVE_GETENV */
|
||||||
|
/* #undef HAVE_SETENV */
|
||||||
|
/* #undef HAVE_PUTENV */
|
||||||
|
/* #undef HAVE_UNSETENV */
|
||||||
|
#endif
|
||||||
|
/* #undef HAVE_QSORT */
|
||||||
|
/* #undef HAVE_BSEARCH */
|
||||||
|
/* #undef HAVE_ABS */
|
||||||
|
/* #undef HAVE_BCOPY */
|
||||||
|
/* #undef HAVE_MEMSET */
|
||||||
|
/* #undef HAVE_MEMCPY */
|
||||||
|
/* #undef HAVE_MEMMOVE */
|
||||||
|
/* #undef HAVE_MEMCMP */
|
||||||
|
/* #undef HAVE_WCSLEN */
|
||||||
|
/* #undef HAVE_WCSLCPY */
|
||||||
|
/* #undef HAVE_WCSLCAT */
|
||||||
|
/* #undef HAVE__WCSDUP */
|
||||||
|
/* #undef HAVE_WCSDUP */
|
||||||
|
/* #undef HAVE_WCSSTR */
|
||||||
|
/* #undef HAVE_WCSCMP */
|
||||||
|
/* #undef HAVE_WCSNCMP */
|
||||||
|
/* #undef HAVE_WCSCASECMP */
|
||||||
|
/* #undef HAVE__WCSICMP */
|
||||||
|
/* #undef HAVE_WCSNCASECMP */
|
||||||
|
/* #undef HAVE__WCSNICMP */
|
||||||
|
/* #undef HAVE_STRLEN */
|
||||||
|
/* #undef HAVE_STRLCPY */
|
||||||
|
/* #undef HAVE_STRLCAT */
|
||||||
|
/* #undef HAVE__STRREV */
|
||||||
|
/* #undef HAVE__STRUPR */
|
||||||
|
/* #undef HAVE__STRLWR */
|
||||||
|
/* #undef HAVE_INDEX */
|
||||||
|
/* #undef HAVE_RINDEX */
|
||||||
|
/* #undef HAVE_STRCHR */
|
||||||
|
/* #undef HAVE_STRRCHR */
|
||||||
|
/* #undef HAVE_STRSTR */
|
||||||
|
/* #undef HAVE_STRTOK_R */
|
||||||
|
/* #undef HAVE_ITOA */
|
||||||
|
/* #undef HAVE__LTOA */
|
||||||
|
/* #undef HAVE__UITOA */
|
||||||
|
/* #undef HAVE__ULTOA */
|
||||||
|
/* #undef HAVE_STRTOL */
|
||||||
|
/* #undef HAVE_STRTOUL */
|
||||||
|
/* #undef HAVE__I64TOA */
|
||||||
|
/* #undef HAVE__UI64TOA */
|
||||||
|
/* #undef HAVE_STRTOLL */
|
||||||
|
/* #undef HAVE_STRTOULL */
|
||||||
|
/* #undef HAVE_STRTOD */
|
||||||
|
/* #undef HAVE_ATOI */
|
||||||
|
/* #undef HAVE_ATOF */
|
||||||
|
/* #undef HAVE_STRCMP */
|
||||||
|
/* #undef HAVE_STRNCMP */
|
||||||
|
/* #undef HAVE__STRICMP */
|
||||||
|
/* #undef HAVE_STRCASECMP */
|
||||||
|
/* #undef HAVE__STRNICMP */
|
||||||
|
/* #undef HAVE_STRNCASECMP */
|
||||||
|
/* #undef HAVE_STRCASESTR */
|
||||||
|
/* #undef HAVE_SSCANF */
|
||||||
|
/* #undef HAVE_VSSCANF */
|
||||||
|
/* #undef HAVE_VSNPRINTF */
|
||||||
|
/* #undef HAVE_M_PI */
|
||||||
|
/* #undef HAVE_ACOS */
|
||||||
|
/* #undef HAVE_ACOSF */
|
||||||
|
/* #undef HAVE_ASIN */
|
||||||
|
/* #undef HAVE_ASINF */
|
||||||
|
/* #undef HAVE_ATAN */
|
||||||
|
/* #undef HAVE_ATANF */
|
||||||
|
/* #undef HAVE_ATAN2 */
|
||||||
|
/* #undef HAVE_ATAN2F */
|
||||||
|
/* #undef HAVE_CEIL */
|
||||||
|
/* #undef HAVE_CEILF */
|
||||||
|
/* #undef HAVE_COPYSIGN */
|
||||||
|
/* #undef HAVE_COPYSIGNF */
|
||||||
|
/* #undef HAVE_COS */
|
||||||
|
/* #undef HAVE_COSF */
|
||||||
|
/* #undef HAVE_EXP */
|
||||||
|
/* #undef HAVE_EXPF */
|
||||||
|
/* #undef HAVE_FABS */
|
||||||
|
/* #undef HAVE_FABSF */
|
||||||
|
/* #undef HAVE_FLOOR */
|
||||||
|
/* #undef HAVE_FLOORF */
|
||||||
|
/* #undef HAVE_FMOD */
|
||||||
|
/* #undef HAVE_FMODF */
|
||||||
|
/* #undef HAVE_LOG */
|
||||||
|
/* #undef HAVE_LOGF */
|
||||||
|
/* #undef HAVE_LOG10 */
|
||||||
|
/* #undef HAVE_LOG10F */
|
||||||
|
/* #undef HAVE_LROUND */
|
||||||
|
/* #undef HAVE_LROUNDF */
|
||||||
|
/* #undef HAVE_POW */
|
||||||
|
/* #undef HAVE_POWF */
|
||||||
|
/* #undef HAVE_ROUND */
|
||||||
|
/* #undef HAVE_ROUNDF */
|
||||||
|
/* #undef HAVE_SCALBN */
|
||||||
|
/* #undef HAVE_SCALBNF */
|
||||||
|
/* #undef HAVE_SIN */
|
||||||
|
/* #undef HAVE_SINF */
|
||||||
|
/* #undef HAVE_SQRT */
|
||||||
|
/* #undef HAVE_SQRTF */
|
||||||
|
/* #undef HAVE_TAN */
|
||||||
|
/* #undef HAVE_TANF */
|
||||||
|
/* #undef HAVE_TRUNC */
|
||||||
|
/* #undef HAVE_TRUNCF */
|
||||||
|
/* #undef HAVE_FOPEN64 */
|
||||||
|
/* #undef HAVE_FSEEKO */
|
||||||
|
/* #undef HAVE_FSEEKO64 */
|
||||||
|
/* #undef HAVE_MEMFD_CREATE */
|
||||||
|
/* #undef HAVE_POSIX_FALLOCATE */
|
||||||
|
/* #undef HAVE_SIGACTION */
|
||||||
|
/* #undef HAVE_SIGTIMEDWAIT */
|
||||||
|
/* #undef HAVE_SA_SIGACTION */
|
||||||
|
/* #undef HAVE_SETJMP */
|
||||||
|
/* #undef HAVE_NANOSLEEP */
|
||||||
|
/* #undef HAVE_SYSCONF */
|
||||||
|
/* #undef HAVE_SYSCTLBYNAME */
|
||||||
|
/* #undef HAVE_CLOCK_GETTIME */
|
||||||
|
/* #undef HAVE_GETPAGESIZE */
|
||||||
|
/* #undef HAVE_MPROTECT */
|
||||||
|
/* #undef HAVE_ICONV */
|
||||||
|
/* #undef SDL_USE_LIBICONV */
|
||||||
|
/* #undef HAVE_PTHREAD_SETNAME_NP */
|
||||||
|
/* #undef HAVE_PTHREAD_SET_NAME_NP */
|
||||||
|
/* #undef HAVE_SEM_TIMEDWAIT */
|
||||||
|
/* #undef HAVE_GETAUXVAL */
|
||||||
|
/* #undef HAVE_ELF_AUX_INFO */
|
||||||
|
/* #undef HAVE_POLL */
|
||||||
|
/* #undef HAVE__EXIT */
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define HAVE_STDARG_H 1
|
||||||
|
#define HAVE_STDDEF_H 1
|
||||||
|
#define HAVE_STDINT_H 1
|
||||||
|
/* #undef HAVE_FLOAT_H */
|
||||||
|
#endif /* HAVE_LIBC */
|
||||||
|
|
||||||
|
/* #undef HAVE_ALTIVEC_H */
|
||||||
|
/* #undef HAVE_DBUS_DBUS_H */
|
||||||
|
/* #undef HAVE_FCITX */
|
||||||
|
/* #undef HAVE_IBUS_IBUS_H */
|
||||||
|
/* #undef HAVE_SYS_INOTIFY_H */
|
||||||
|
/* #undef HAVE_INOTIFY_INIT */
|
||||||
|
/* #undef HAVE_INOTIFY_INIT1 */
|
||||||
|
/* #undef HAVE_INOTIFY */
|
||||||
|
/* #undef HAVE_LIBUSB */
|
||||||
|
/* #undef HAVE_O_CLOEXEC */
|
||||||
|
|
||||||
|
/* Apple platforms might be building universal binaries, where Intel builds
|
||||||
|
can use immintrin.h but other architectures can't. */
|
||||||
|
#ifdef __APPLE__
|
||||||
|
# if defined(__has_include) && (defined(__i386__) || defined(__x86_64))
|
||||||
|
# if __has_include(<immintrin.h>)
|
||||||
|
# define HAVE_IMMINTRIN_H 1
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#else /* non-Apple platforms can use the normal CMake check for this. */
|
||||||
|
#define HAVE_IMMINTRIN_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* #undef HAVE_LIBUDEV_H */
|
||||||
|
/* #undef HAVE_LIBSAMPLERATE_H */
|
||||||
|
/* #undef HAVE_LIBDECOR_H */
|
||||||
|
|
||||||
|
#define HAVE_D3D_H 1
|
||||||
|
#define HAVE_D3D11_H 1
|
||||||
|
#define HAVE_D3D12_H 1
|
||||||
|
#define HAVE_DDRAW_H 1
|
||||||
|
#define HAVE_DSOUND_H 1
|
||||||
|
/* #undef HAVE_DINPUT_H */
|
||||||
|
#define HAVE_XINPUT_H 1
|
||||||
|
#define HAVE_WINDOWS_GAMING_INPUT_H 1
|
||||||
|
#define HAVE_DXGI_H 1
|
||||||
|
|
||||||
|
#define HAVE_MMDEVICEAPI_H 1
|
||||||
|
#define HAVE_AUDIOCLIENT_H 1
|
||||||
|
#define HAVE_TPCSHRD_H 1
|
||||||
|
#define HAVE_SENSORSAPI_H 1
|
||||||
|
#define HAVE_ROAPI_H 1
|
||||||
|
#define HAVE_SHELLSCALINGAPI_H 1
|
||||||
|
|
||||||
|
/* #undef USE_POSIX_SPAWN */
|
||||||
|
|
||||||
|
/* SDL internal assertion support */
|
||||||
|
#if 0
|
||||||
|
/* #undef SDL_DEFAULT_ASSERT_LEVEL */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Allow disabling of core subsystems */
|
||||||
|
/* #undef SDL_ATOMIC_DISABLED */
|
||||||
|
/* #undef SDL_AUDIO_DISABLED */
|
||||||
|
/* #undef SDL_CPUINFO_DISABLED */
|
||||||
|
/* #undef SDL_EVENTS_DISABLED */
|
||||||
|
/* #undef SDL_FILE_DISABLED */
|
||||||
|
/* #undef SDL_JOYSTICK_DISABLED */
|
||||||
|
/* #undef SDL_HAPTIC_DISABLED */
|
||||||
|
/* #undef SDL_HIDAPI_DISABLED */
|
||||||
|
/* #undef SDL_SENSOR_DISABLED */
|
||||||
|
/* #undef SDL_LOADSO_DISABLED */
|
||||||
|
/* #undef SDL_RENDER_DISABLED */
|
||||||
|
/* #undef SDL_THREADS_DISABLED */
|
||||||
|
/* #undef SDL_TIMERS_DISABLED */
|
||||||
|
/* #undef SDL_VIDEO_DISABLED */
|
||||||
|
/* #undef SDL_POWER_DISABLED */
|
||||||
|
/* #undef SDL_FILESYSTEM_DISABLED */
|
||||||
|
/* #undef SDL_LOCALE_DISABLED */
|
||||||
|
/* #undef SDL_MISC_DISABLED */
|
||||||
|
|
||||||
|
/* Enable various audio drivers */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_ALSA */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_ANDROID */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_OPENSLES */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_AAUDIO */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_ARTS */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_COREAUDIO */
|
||||||
|
#define SDL_AUDIO_DRIVER_DISK 1
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_DSOUND */
|
||||||
|
#define SDL_AUDIO_DRIVER_DUMMY 1
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_EMSCRIPTEN */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_ESD */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_HAIKU */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_JACK */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_JACK_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_NAS */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_NETBSD */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_OSS */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_PAUDIO */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_PIPEWIRE */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_PULSEAUDIO */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_QSA */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_SNDIO */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_SUNAUDIO */
|
||||||
|
#define SDL_AUDIO_DRIVER_WASAPI 1
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_WINMM */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_OS2 */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_VITA */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_PSP */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_PS2 */
|
||||||
|
/* #undef SDL_AUDIO_DRIVER_N3DS */
|
||||||
|
|
||||||
|
/* Enable various input drivers */
|
||||||
|
/* #undef SDL_INPUT_LINUXEV */
|
||||||
|
/* #undef SDL_INPUT_LINUXKD */
|
||||||
|
/* #undef SDL_INPUT_FBSDKBIO */
|
||||||
|
/* #undef SDL_INPUT_WSCONS */
|
||||||
|
/* #undef SDL_JOYSTICK_ANDROID */
|
||||||
|
/* #undef SDL_JOYSTICK_HAIKU */
|
||||||
|
#define SDL_JOYSTICK_WGI 1
|
||||||
|
/* #undef SDL_JOYSTICK_DINPUT */
|
||||||
|
/* #undef SDL_JOYSTICK_XINPUT */
|
||||||
|
/* #undef SDL_JOYSTICK_DUMMY */
|
||||||
|
/* #undef SDL_JOYSTICK_IOKIT */
|
||||||
|
/* #undef SDL_JOYSTICK_MFI */
|
||||||
|
/* #undef SDL_JOYSTICK_LINUX */
|
||||||
|
/* #undef SDL_JOYSTICK_OS2 */
|
||||||
|
/* #undef SDL_JOYSTICK_USBHID */
|
||||||
|
/* #undef SDL_HAVE_MACHINE_JOYSTICK_H */
|
||||||
|
#define SDL_JOYSTICK_HIDAPI 1
|
||||||
|
/* #undef SDL_JOYSTICK_RAWINPUT */
|
||||||
|
/* #undef SDL_JOYSTICK_EMSCRIPTEN */
|
||||||
|
#define SDL_JOYSTICK_VIRTUAL 1
|
||||||
|
/* #undef SDL_JOYSTICK_VITA */
|
||||||
|
/* #undef SDL_JOYSTICK_PSP */
|
||||||
|
/* #undef SDL_JOYSTICK_PS2 */
|
||||||
|
/* #undef SDL_JOYSTICK_N3DS */
|
||||||
|
#define SDL_HAPTIC_DUMMY 1
|
||||||
|
/* #undef SDL_HAPTIC_LINUX */
|
||||||
|
/* #undef SDL_HAPTIC_IOKIT */
|
||||||
|
/* #undef SDL_HAPTIC_DINPUT */
|
||||||
|
/* #undef SDL_HAPTIC_XINPUT */
|
||||||
|
/* #undef SDL_HAPTIC_ANDROID */
|
||||||
|
/* #undef SDL_LIBUSB_DYNAMIC */
|
||||||
|
/* #undef SDL_UDEV_DYNAMIC */
|
||||||
|
|
||||||
|
/* Enable various sensor drivers */
|
||||||
|
/* #undef SDL_SENSOR_ANDROID */
|
||||||
|
/* #undef SDL_SENSOR_COREMOTION */
|
||||||
|
/* #undef SDL_SENSOR_WINDOWS */
|
||||||
|
#define SDL_SENSOR_DUMMY 1
|
||||||
|
/* #undef SDL_SENSOR_VITA */
|
||||||
|
/* #undef SDL_SENSOR_N3DS */
|
||||||
|
|
||||||
|
/* Enable various shared object loading systems */
|
||||||
|
/* #undef SDL_LOADSO_DLOPEN */
|
||||||
|
/* #undef SDL_LOADSO_DUMMY */
|
||||||
|
/* #undef SDL_LOADSO_LDG */
|
||||||
|
#define SDL_LOADSO_WINDOWS 1
|
||||||
|
/* #undef SDL_LOADSO_OS2 */
|
||||||
|
|
||||||
|
/* Enable various threading systems */
|
||||||
|
#define SDL_THREAD_GENERIC_COND_SUFFIX 1
|
||||||
|
/* #undef SDL_THREAD_PTHREAD */
|
||||||
|
/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX */
|
||||||
|
/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */
|
||||||
|
#define SDL_THREAD_WINDOWS 1
|
||||||
|
/* #undef SDL_THREAD_OS2 */
|
||||||
|
/* #undef SDL_THREAD_VITA */
|
||||||
|
/* #undef SDL_THREAD_PSP */
|
||||||
|
/* #undef SDL_THREAD_PS2 */
|
||||||
|
/* #undef SDL_THREAD_N3DS */
|
||||||
|
|
||||||
|
/* Enable various timer systems */
|
||||||
|
/* #undef SDL_TIMER_HAIKU */
|
||||||
|
/* #undef SDL_TIMER_DUMMY */
|
||||||
|
/* #undef SDL_TIMER_UNIX */
|
||||||
|
#define SDL_TIMER_WINDOWS 1
|
||||||
|
/* #undef SDL_TIMER_OS2 */
|
||||||
|
/* #undef SDL_TIMER_VITA */
|
||||||
|
/* #undef SDL_TIMER_PSP */
|
||||||
|
/* #undef SDL_TIMER_PS2 */
|
||||||
|
/* #undef SDL_TIMER_N3DS */
|
||||||
|
|
||||||
|
/* Enable various video drivers */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_ANDROID */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_EMSCRIPTEN */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_HAIKU */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_COCOA */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_UIKIT */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_DIRECTFB */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */
|
||||||
|
#define SDL_VIDEO_DRIVER_DUMMY 1
|
||||||
|
#define SDL_VIDEO_DRIVER_OFFSCREEN 1
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_WINDOWS */
|
||||||
|
#define SDL_VIDEO_DRIVER_WINRT 1
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_WAYLAND */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_RPI */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_VIVANTE */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_VIVANTE_VDK */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_OS2 */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_QNX */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_RISCOS */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_PSP */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_PS2 */
|
||||||
|
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_KMSDRM */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM */
|
||||||
|
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR */
|
||||||
|
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11 */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_XCURSOR */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_XDBE */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_XINPUT2 */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_XFIXES */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_XRANDR */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_XSHAPE */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_VITA */
|
||||||
|
/* #undef SDL_VIDEO_DRIVER_N3DS */
|
||||||
|
|
||||||
|
/* #undef SDL_VIDEO_RENDER_D3D */
|
||||||
|
#define SDL_VIDEO_RENDER_D3D11 1
|
||||||
|
/* #undef SDL_VIDEO_RENDER_D3D12 */
|
||||||
|
/* #undef SDL_VIDEO_RENDER_OGL */
|
||||||
|
/* #undef SDL_VIDEO_RENDER_OGL_ES */
|
||||||
|
#define SDL_VIDEO_RENDER_OGL_ES2 1
|
||||||
|
/* #undef SDL_VIDEO_RENDER_DIRECTFB */
|
||||||
|
/* #undef SDL_VIDEO_RENDER_METAL */
|
||||||
|
/* #undef SDL_VIDEO_RENDER_VITA_GXM */
|
||||||
|
/* #undef SDL_VIDEO_RENDER_PS2 */
|
||||||
|
/* #undef SDL_VIDEO_RENDER_PSP */
|
||||||
|
|
||||||
|
/* Enable OpenGL support */
|
||||||
|
/* #undef SDL_VIDEO_OPENGL */
|
||||||
|
/* #undef SDL_VIDEO_OPENGL_ES */
|
||||||
|
#define SDL_VIDEO_OPENGL_ES2 1
|
||||||
|
/* #undef SDL_VIDEO_OPENGL_BGL */
|
||||||
|
/* #undef SDL_VIDEO_OPENGL_CGL */
|
||||||
|
/* #undef SDL_VIDEO_OPENGL_GLX */
|
||||||
|
/* #undef SDL_VIDEO_OPENGL_WGL */
|
||||||
|
#define SDL_VIDEO_OPENGL_EGL 1
|
||||||
|
/* #undef SDL_VIDEO_OPENGL_OSMESA */
|
||||||
|
/* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */
|
||||||
|
|
||||||
|
/* Enable Vulkan support */
|
||||||
|
/* #undef SDL_VIDEO_VULKAN */
|
||||||
|
|
||||||
|
/* Enable Metal support */
|
||||||
|
/* #undef SDL_VIDEO_METAL */
|
||||||
|
|
||||||
|
/* Enable system power support */
|
||||||
|
/* #undef SDL_POWER_ANDROID */
|
||||||
|
/* #undef SDL_POWER_LINUX */
|
||||||
|
/* #undef SDL_POWER_WINDOWS */
|
||||||
|
#define SDL_POWER_WINRT 1
|
||||||
|
/* #undef SDL_POWER_MACOSX */
|
||||||
|
/* #undef SDL_POWER_UIKIT */
|
||||||
|
/* #undef SDL_POWER_HAIKU */
|
||||||
|
/* #undef SDL_POWER_EMSCRIPTEN */
|
||||||
|
/* #undef SDL_POWER_HARDWIRED */
|
||||||
|
/* #undef SDL_POWER_VITA */
|
||||||
|
/* #undef SDL_POWER_PSP */
|
||||||
|
/* #undef SDL_POWER_N3DS */
|
||||||
|
|
||||||
|
/* Enable system filesystem support */
|
||||||
|
/* #undef SDL_FILESYSTEM_ANDROID */
|
||||||
|
/* #undef SDL_FILESYSTEM_HAIKU */
|
||||||
|
/* #undef SDL_FILESYSTEM_COCOA */
|
||||||
|
/* #undef SDL_FILESYSTEM_DUMMY */
|
||||||
|
/* #undef SDL_FILESYSTEM_RISCOS */
|
||||||
|
/* #undef SDL_FILESYSTEM_UNIX */
|
||||||
|
#define SDL_FILESYSTEM_WINDOWS 1
|
||||||
|
/* #undef SDL_FILESYSTEM_EMSCRIPTEN */
|
||||||
|
/* #undef SDL_FILESYSTEM_OS2 */
|
||||||
|
/* #undef SDL_FILESYSTEM_VITA */
|
||||||
|
/* #undef SDL_FILESYSTEM_PSP */
|
||||||
|
/* #undef SDL_FILESYSTEM_PS2 */
|
||||||
|
/* #undef SDL_FILESYSTEM_N3DS */
|
||||||
|
|
||||||
|
/* Enable misc subsystem */
|
||||||
|
/* #undef SDL_MISC_DUMMY */
|
||||||
|
|
||||||
|
/* Enable locale subsystem */
|
||||||
|
/* #undef SDL_LOCALE_DUMMY */
|
||||||
|
|
||||||
|
/* Enable assembly routines */
|
||||||
|
/* #undef SDL_ALTIVEC_BLITTERS */
|
||||||
|
/* #undef SDL_ARM_SIMD_BLITTERS */
|
||||||
|
/* #undef SDL_ARM_NEON_BLITTERS */
|
||||||
|
|
||||||
|
/* Whether SDL_DYNAMIC_API needs dlopen */
|
||||||
|
/* #undef DYNAPI_NEEDS_DLOPEN */
|
||||||
|
|
||||||
|
/* Enable dynamic libsamplerate support */
|
||||||
|
/* #undef SDL_LIBSAMPLERATE_DYNAMIC */
|
||||||
|
|
||||||
|
/* Enable ime support */
|
||||||
|
/* #undef SDL_USE_IME */
|
||||||
|
|
||||||
|
/* Platform specific definitions */
|
||||||
|
/* #undef SDL_IPHONE_KEYBOARD */
|
||||||
|
/* #undef SDL_IPHONE_LAUNCHSCREEN */
|
||||||
|
|
||||||
|
/* #undef SDL_VIDEO_VITA_PIB */
|
||||||
|
/* #undef SDL_VIDEO_VITA_PVR */
|
||||||
|
/* #undef SDL_VIDEO_VITA_PVR_OGL */
|
||||||
|
|
||||||
|
/* #undef SDL_HAVE_LIBDECOR_GET_MIN_MAX */
|
||||||
|
|
||||||
|
#if !defined(HAVE_STDINT_H) && !defined(_STDINT_H_)
|
||||||
|
/* Most everything except Visual Studio 2008 and earlier has stdint.h now */
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER < 1600)
|
||||||
|
typedef signed __int8 int8_t;
|
||||||
|
typedef unsigned __int8 uint8_t;
|
||||||
|
typedef signed __int16 int16_t;
|
||||||
|
typedef unsigned __int16 uint16_t;
|
||||||
|
typedef signed __int32 int32_t;
|
||||||
|
typedef unsigned __int32 uint32_t;
|
||||||
|
typedef signed __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
#ifndef _UINTPTR_T_DEFINED
|
||||||
|
#ifdef _WIN64
|
||||||
|
typedef unsigned __int64 uintptr_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned int uintptr_t;
|
||||||
|
#endif
|
||||||
|
#define _UINTPTR_T_DEFINED
|
||||||
|
#endif
|
||||||
|
#endif /* Visual Studio 2008 */
|
||||||
|
#endif /* !_STDINT_H_ && !HAVE_STDINT_H */
|
||||||
|
|
||||||
|
#endif /* SDL_config_h_ */
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
@@ -0,0 +1,603 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* WIKI CATEGORY: CPUInfo */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryCPUInfo
|
||||||
|
*
|
||||||
|
* CPU feature detection for SDL.
|
||||||
|
*
|
||||||
|
* These functions are largely concerned with reporting if the system has
|
||||||
|
* access to various SIMD instruction sets, but also has other important info
|
||||||
|
* to share, such as number of logical CPU cores.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_cpuinfo_h_
|
||||||
|
#define SDL_cpuinfo_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
/* Need to do this here because intrin.h has C++ code in it */
|
||||||
|
/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64))
|
||||||
|
#ifdef __clang__
|
||||||
|
/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version,
|
||||||
|
so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */
|
||||||
|
|
||||||
|
#ifndef __PRFCHWINTRIN_H
|
||||||
|
#define __PRFCHWINTRIN_H
|
||||||
|
|
||||||
|
static __inline__ void __attribute__((__always_inline__, __nodebug__))
|
||||||
|
_m_prefetch(void *__P)
|
||||||
|
{
|
||||||
|
__builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __PRFCHWINTRIN_H */
|
||||||
|
#endif /* __clang__ */
|
||||||
|
#include <intrin.h>
|
||||||
|
#ifndef _WIN64
|
||||||
|
#ifndef __MMX__
|
||||||
|
#define __MMX__
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
#ifndef __3dNOW__
|
||||||
|
#define __3dNOW__
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
#ifndef __SSE__
|
||||||
|
#define __SSE__
|
||||||
|
#endif
|
||||||
|
#ifndef __SSE2__
|
||||||
|
#define __SSE2__
|
||||||
|
#endif
|
||||||
|
#ifndef __SSE3__
|
||||||
|
#define __SSE3__
|
||||||
|
#endif
|
||||||
|
#elif defined(__MINGW64_VERSION_MAJOR)
|
||||||
|
#include <intrin.h>
|
||||||
|
#if !defined(SDL_DISABLE_ARM_NEON_H) && defined(__ARM_NEON)
|
||||||
|
# include <arm_neon.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */
|
||||||
|
#if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H)
|
||||||
|
#include <altivec.h>
|
||||||
|
#endif
|
||||||
|
#if !defined(SDL_DISABLE_ARM_NEON_H)
|
||||||
|
# if defined(__ARM_NEON)
|
||||||
|
# include <arm_neon.h>
|
||||||
|
# elif defined(__WINDOWS__) || defined(__WINRT__) || defined(__GDK__)
|
||||||
|
/* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */
|
||||||
|
# if defined(_M_ARM)
|
||||||
|
# include <armintr.h>
|
||||||
|
# include <arm_neon.h>
|
||||||
|
# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */
|
||||||
|
# endif
|
||||||
|
# if defined (_M_ARM64)
|
||||||
|
# include <arm64intr.h>
|
||||||
|
# include <arm64_neon.h>
|
||||||
|
# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */
|
||||||
|
# define __ARM_ARCH 8
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#endif /* compiler version */
|
||||||
|
|
||||||
|
#if defined(__3dNOW__) && !defined(SDL_DISABLE_MM3DNOW_H)
|
||||||
|
#include <mm3dnow.h>
|
||||||
|
#endif
|
||||||
|
#if defined(__loongarch_sx) && !defined(SDL_DISABLE_LSX_H)
|
||||||
|
#include <lsxintrin.h>
|
||||||
|
#define __LSX__
|
||||||
|
#endif
|
||||||
|
#if defined(__loongarch_asx) && !defined(SDL_DISABLE_LASX_H)
|
||||||
|
#include <lasxintrin.h>
|
||||||
|
#define __LASX__
|
||||||
|
#endif
|
||||||
|
#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) && \
|
||||||
|
(defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86))
|
||||||
|
#include <immintrin.h>
|
||||||
|
#else
|
||||||
|
#if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H)
|
||||||
|
#include <mmintrin.h>
|
||||||
|
#endif
|
||||||
|
#if defined(__SSE__) && !defined(SDL_DISABLE_XMMINTRIN_H)
|
||||||
|
#include <xmmintrin.h>
|
||||||
|
#endif
|
||||||
|
#if defined(__SSE2__) && !defined(SDL_DISABLE_EMMINTRIN_H)
|
||||||
|
#include <emmintrin.h>
|
||||||
|
#endif
|
||||||
|
#if defined(__SSE3__) && !defined(SDL_DISABLE_PMMINTRIN_H)
|
||||||
|
#include <pmmintrin.h>
|
||||||
|
#endif
|
||||||
|
#endif /* HAVE_IMMINTRIN_H */
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This is a guess for the cacheline size used for padding.
|
||||||
|
* Most x86 processors have a 64 byte cache line.
|
||||||
|
* The 64-bit PowerPC processors have a 128 byte cache line.
|
||||||
|
* We'll use the larger value to be generally safe.
|
||||||
|
*/
|
||||||
|
#define SDL_CACHELINE_SIZE 128
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of CPU cores available.
|
||||||
|
*
|
||||||
|
* \returns the total number of logical CPU cores. On CPUs that include
|
||||||
|
* technologies such as hyperthreading, the number of logical cores
|
||||||
|
* may be more than the number of physical cores.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_GetCPUCount(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine the L1 cache line size of the CPU.
|
||||||
|
*
|
||||||
|
* This is useful for determining multi-threaded structure padding or SIMD
|
||||||
|
* prefetch sizes.
|
||||||
|
*
|
||||||
|
* \returns the L1 cache line size of the CPU, in bytes.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has the RDTSC instruction.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has the RDTSC instruction or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has AltiVec features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using PowerPC instruction
|
||||||
|
* sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has AltiVec features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has MMX features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has MMX features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has 3DNow! features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using AMD instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has 3DNow! features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has SSE features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has SSE features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has SSE2 features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has SSE2 features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has SSE3 features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has SSE3 features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has SSE4.1 features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has SSE4.1 features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has SSE4.2 features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has SSE4.2 features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has AVX features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has AVX features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX2
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has AVX2 features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has AVX2 features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.4.
|
||||||
|
*
|
||||||
|
* \sa SDL_Has3DNow
|
||||||
|
* \sa SDL_HasAltiVec
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
* \sa SDL_HasMMX
|
||||||
|
* \sa SDL_HasRDTSC
|
||||||
|
* \sa SDL_HasSSE
|
||||||
|
* \sa SDL_HasSSE2
|
||||||
|
* \sa SDL_HasSSE3
|
||||||
|
* \sa SDL_HasSSE41
|
||||||
|
* \sa SDL_HasSSE42
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has AVX-512F (foundation) features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using Intel instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has AVX-512F features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.9.
|
||||||
|
*
|
||||||
|
* \sa SDL_HasAVX
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has ARM SIMD (ARMv6) features.
|
||||||
|
*
|
||||||
|
* This is different from ARM NEON, which is a different instruction set.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using ARM instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has ARM SIMD features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.12.
|
||||||
|
*
|
||||||
|
* \sa SDL_HasNEON
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has NEON (ARM SIMD) features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using ARM instruction sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has ARM NEON features or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.6.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has LSX (LOONGARCH SIMD) features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using LOONGARCH instruction
|
||||||
|
* sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has LOONGARCH LSX features or SDL_FALSE if
|
||||||
|
* not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.24.0.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasLSX(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the CPU has LASX (LOONGARCH SIMD) features.
|
||||||
|
*
|
||||||
|
* This always returns false on CPUs that aren't using LOONGARCH instruction
|
||||||
|
* sets.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the CPU has LOONGARCH LASX features or SDL_FALSE if
|
||||||
|
* not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.24.0.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasLASX(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the amount of RAM configured in the system.
|
||||||
|
*
|
||||||
|
* \returns the amount of RAM configured in the system in MiB.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.1.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Report the alignment this system needs for SIMD allocations.
|
||||||
|
*
|
||||||
|
* This will return the minimum number of bytes to which a pointer must be
|
||||||
|
* aligned to be compatible with SIMD instructions on the current machine. For
|
||||||
|
* example, if the machine supports SSE only, it will return 16, but if it
|
||||||
|
* supports AVX-512F, it'll return 64 (etc). This only reports values for
|
||||||
|
* instruction sets SDL knows about, so if your SDL build doesn't have
|
||||||
|
* SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and
|
||||||
|
* not 64 for the AVX-512 instructions that exist but SDL doesn't know about.
|
||||||
|
* Plan accordingly.
|
||||||
|
*
|
||||||
|
* \returns the alignment in bytes needed for available, known SIMD
|
||||||
|
* instructions.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.10.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate memory in a SIMD-friendly way.
|
||||||
|
*
|
||||||
|
* This will allocate a block of memory that is suitable for use with SIMD
|
||||||
|
* instructions. Specifically, it will be properly aligned and padded for the
|
||||||
|
* system's supported vector instructions.
|
||||||
|
*
|
||||||
|
* The memory returned will be padded such that it is safe to read or write an
|
||||||
|
* incomplete vector at the end of the memory block. This can be useful so you
|
||||||
|
* don't have to drop back to a scalar fallback at the end of your SIMD
|
||||||
|
* processing loop to deal with the final elements without overflowing the
|
||||||
|
* allocated buffer.
|
||||||
|
*
|
||||||
|
* You must free this memory with SDL_FreeSIMD(), not free() or SDL_free() or
|
||||||
|
* delete[], etc.
|
||||||
|
*
|
||||||
|
* Note that SDL will only deal with SIMD instruction sets it is aware of; for
|
||||||
|
* example, SDL 2.0.8 knows that SSE wants 16-byte vectors (SDL_HasSSE()), and
|
||||||
|
* AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't know that AVX-512 wants
|
||||||
|
* 64. To be clear: if you can't decide to use an instruction set with an
|
||||||
|
* SDL_Has*() function, don't use that instruction set with memory allocated
|
||||||
|
* through here.
|
||||||
|
*
|
||||||
|
* SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't
|
||||||
|
* out of memory, but you are not allowed to dereference it (because you only
|
||||||
|
* own zero bytes of that buffer).
|
||||||
|
*
|
||||||
|
* \param len The length, in bytes, of the block to allocate. The actual
|
||||||
|
* allocated block might be larger due to padding, etc.
|
||||||
|
* \returns a pointer to the newly-allocated block, NULL if out of memory.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.10.
|
||||||
|
*
|
||||||
|
* \sa SDL_SIMDGetAlignment
|
||||||
|
* \sa SDL_SIMDRealloc
|
||||||
|
* \sa SDL_SIMDFree
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void * SDLCALL SDL_SIMDAlloc(const size_t len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reallocate memory obtained from SDL_SIMDAlloc
|
||||||
|
*
|
||||||
|
* It is not valid to use this function on a pointer from anything but
|
||||||
|
* SDL_SIMDAlloc(). It can't be used on pointers from malloc, realloc,
|
||||||
|
* SDL_malloc, memalign, new[], etc.
|
||||||
|
*
|
||||||
|
* \param mem The pointer obtained from SDL_SIMDAlloc. This function also
|
||||||
|
* accepts NULL, at which point this function is the same as
|
||||||
|
* calling SDL_SIMDAlloc with a NULL pointer.
|
||||||
|
* \param len The length, in bytes, of the block to allocated. The actual
|
||||||
|
* allocated block might be larger due to padding, etc. Passing 0
|
||||||
|
* will return a non-NULL pointer, assuming the system isn't out of
|
||||||
|
* memory.
|
||||||
|
* \returns a pointer to the newly-reallocated block, NULL if out of memory.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.14.
|
||||||
|
*
|
||||||
|
* \sa SDL_SIMDGetAlignment
|
||||||
|
* \sa SDL_SIMDAlloc
|
||||||
|
* \sa SDL_SIMDFree
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void * SDLCALL SDL_SIMDRealloc(void *mem, const size_t len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deallocate memory obtained from SDL_SIMDAlloc
|
||||||
|
*
|
||||||
|
* It is not valid to use this function on a pointer from anything but
|
||||||
|
* SDL_SIMDAlloc() or SDL_SIMDRealloc(). It can't be used on pointers from
|
||||||
|
* malloc, realloc, SDL_malloc, memalign, new[], etc.
|
||||||
|
*
|
||||||
|
* However, SDL_SIMDFree(NULL) is a legal no-op.
|
||||||
|
*
|
||||||
|
* The memory pointed to by `ptr` is no longer valid for access upon return,
|
||||||
|
* and may be returned to the system or reused by a future allocation. The
|
||||||
|
* pointer passed to this function is no longer safe to dereference once this
|
||||||
|
* function returns, and should be discarded.
|
||||||
|
*
|
||||||
|
* \param ptr The pointer, returned from SDL_SIMDAlloc or SDL_SIMDRealloc, to
|
||||||
|
* deallocate. NULL is a legal no-op.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.10.
|
||||||
|
*
|
||||||
|
* \sa SDL_SIMDAlloc
|
||||||
|
* \sa SDL_SIMDRealloc
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_SIMDFree(void *ptr);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_cpuinfo_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,396 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryEndian
|
||||||
|
*
|
||||||
|
* Functions for reading and writing endian-specific values
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_endian_h_
|
||||||
|
#define SDL_endian_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||||
|
/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version,
|
||||||
|
so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */
|
||||||
|
#ifdef __clang__
|
||||||
|
#ifndef __PRFCHWINTRIN_H
|
||||||
|
#define __PRFCHWINTRIN_H
|
||||||
|
static __inline__ void __attribute__((__always_inline__, __nodebug__))
|
||||||
|
_m_prefetch(void *__P)
|
||||||
|
{
|
||||||
|
__builtin_prefetch(__P, 0, 3 /* _MM_HINT_T0 */);
|
||||||
|
}
|
||||||
|
#endif /* __PRFCHWINTRIN_H */
|
||||||
|
#endif /* __clang__ */
|
||||||
|
|
||||||
|
#include <intrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \name The two types of endianness
|
||||||
|
*/
|
||||||
|
/* @{ */
|
||||||
|
#define SDL_LIL_ENDIAN 1234
|
||||||
|
#define SDL_BIG_ENDIAN 4321
|
||||||
|
/* @} */
|
||||||
|
|
||||||
|
#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <endian.h>
|
||||||
|
#define SDL_BYTEORDER __BYTE_ORDER
|
||||||
|
#elif defined(__sun) && defined(__SVR4) /* Solaris */
|
||||||
|
#include <sys/byteorder.h>
|
||||||
|
#if defined(_LITTLE_ENDIAN)
|
||||||
|
#define SDL_BYTEORDER SDL_LIL_ENDIAN
|
||||||
|
#elif defined(_BIG_ENDIAN)
|
||||||
|
#define SDL_BYTEORDER SDL_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#error Unsupported endianness
|
||||||
|
#endif
|
||||||
|
#elif defined(__OpenBSD__) || defined(__DragonFly__)
|
||||||
|
#include <endian.h>
|
||||||
|
#define SDL_BYTEORDER BYTE_ORDER
|
||||||
|
#elif defined(__FreeBSD__) || defined(__NetBSD__)
|
||||||
|
#include <sys/endian.h>
|
||||||
|
#define SDL_BYTEORDER BYTE_ORDER
|
||||||
|
/* predefs from newer gcc and clang versions: */
|
||||||
|
#elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__)
|
||||||
|
#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
||||||
|
#define SDL_BYTEORDER SDL_LIL_ENDIAN
|
||||||
|
#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||||
|
#define SDL_BYTEORDER SDL_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#error Unsupported endianness
|
||||||
|
#endif /**/
|
||||||
|
#else
|
||||||
|
#if defined(__hppa__) || \
|
||||||
|
defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \
|
||||||
|
(defined(__MIPS__) && defined(__MIPSEB__)) || \
|
||||||
|
defined(__ppc__) || defined(__POWERPC__) || defined(__powerpc__) || defined(__PPC__) || \
|
||||||
|
defined(__sparc__) || defined(__sparc)
|
||||||
|
#define SDL_BYTEORDER SDL_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define SDL_BYTEORDER SDL_LIL_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif /* __linux__ */
|
||||||
|
#endif /* !SDL_BYTEORDER */
|
||||||
|
|
||||||
|
#ifndef SDL_FLOATWORDORDER /* Not defined in SDL_config.h? */
|
||||||
|
/* predefs from newer gcc versions: */
|
||||||
|
#if defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__FLOAT_WORD_ORDER__)
|
||||||
|
#if (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
||||||
|
#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
|
||||||
|
#elif (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||||
|
#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#error Unsupported endianness
|
||||||
|
#endif /**/
|
||||||
|
#elif defined(__MAVERICK__)
|
||||||
|
/* For Maverick, float words are always little-endian. */
|
||||||
|
#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN
|
||||||
|
#elif (defined(__arm__) || defined(__thumb__)) && !defined(__VFP_FP__) && !defined(__ARM_EABI__)
|
||||||
|
/* For FPA, float words are always big-endian. */
|
||||||
|
#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
/* By default, assume that floats words follow the memory system mode. */
|
||||||
|
#define SDL_FLOATWORDORDER SDL_BYTEORDER
|
||||||
|
#endif /* __FLOAT_WORD_ORDER__ */
|
||||||
|
#endif /* !SDL_FLOATWORDORDER */
|
||||||
|
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file SDL_endian.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* various modern compilers may have builtin swap */
|
||||||
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
|
# define HAS_BUILTIN_BSWAP16 (_SDL_HAS_BUILTIN(__builtin_bswap16)) || \
|
||||||
|
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))
|
||||||
|
# define HAS_BUILTIN_BSWAP32 (_SDL_HAS_BUILTIN(__builtin_bswap32)) || \
|
||||||
|
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
|
||||||
|
# define HAS_BUILTIN_BSWAP64 (_SDL_HAS_BUILTIN(__builtin_bswap64)) || \
|
||||||
|
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
|
||||||
|
|
||||||
|
/* this one is broken */
|
||||||
|
# define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95)
|
||||||
|
#else
|
||||||
|
# define HAS_BUILTIN_BSWAP16 0
|
||||||
|
# define HAS_BUILTIN_BSWAP32 0
|
||||||
|
# define HAS_BUILTIN_BSWAP64 0
|
||||||
|
# define HAS_BROKEN_BSWAP 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAS_BUILTIN_BSWAP16
|
||||||
|
#define SDL_Swap16(x) __builtin_bswap16(x)
|
||||||
|
#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
|
||||||
|
#pragma intrinsic(_byteswap_ushort)
|
||||||
|
#define SDL_Swap16(x) _byteswap_ushort(x)
|
||||||
|
#elif defined(__i386__) && !HAS_BROKEN_BSWAP
|
||||||
|
SDL_FORCE_INLINE Uint16
|
||||||
|
SDL_Swap16(Uint16 x)
|
||||||
|
{
|
||||||
|
__asm__("xchgb %b0,%h0": "=q"(x):"0"(x));
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#elif defined(__x86_64__)
|
||||||
|
SDL_FORCE_INLINE Uint16
|
||||||
|
SDL_Swap16(Uint16 x)
|
||||||
|
{
|
||||||
|
__asm__("xchgb %b0,%h0": "=Q"(x):"0"(x));
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#elif (defined(__powerpc__) || defined(__ppc__))
|
||||||
|
SDL_FORCE_INLINE Uint16
|
||||||
|
SDL_Swap16(Uint16 x)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
__asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x));
|
||||||
|
return (Uint16)result;
|
||||||
|
}
|
||||||
|
#elif (defined(__m68k__) && !defined(__mcoldfire__))
|
||||||
|
SDL_FORCE_INLINE Uint16
|
||||||
|
SDL_Swap16(Uint16 x)
|
||||||
|
{
|
||||||
|
__asm__("rorw #8,%0": "=d"(x): "0"(x):"cc");
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#elif defined(__WATCOMC__) && defined(__386__)
|
||||||
|
extern __inline Uint16 SDL_Swap16(Uint16);
|
||||||
|
#pragma aux SDL_Swap16 = \
|
||||||
|
"xchg al, ah" \
|
||||||
|
parm [ax] \
|
||||||
|
modify [ax];
|
||||||
|
#else
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this function to swap the byte order of a 16-bit value.
|
||||||
|
*
|
||||||
|
* \param x the value to be swapped.
|
||||||
|
* \returns the swapped value.
|
||||||
|
*
|
||||||
|
* \sa SDL_SwapBE16
|
||||||
|
* \sa SDL_SwapLE16
|
||||||
|
*/
|
||||||
|
SDL_FORCE_INLINE Uint16
|
||||||
|
SDL_Swap16(Uint16 x)
|
||||||
|
{
|
||||||
|
return SDL_static_cast(Uint16, ((x << 8) | (x >> 8)));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAS_BUILTIN_BSWAP32
|
||||||
|
#define SDL_Swap32(x) __builtin_bswap32(x)
|
||||||
|
#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
|
||||||
|
#pragma intrinsic(_byteswap_ulong)
|
||||||
|
#define SDL_Swap32(x) _byteswap_ulong(x)
|
||||||
|
#elif defined(__i386__) && !HAS_BROKEN_BSWAP
|
||||||
|
SDL_FORCE_INLINE Uint32
|
||||||
|
SDL_Swap32(Uint32 x)
|
||||||
|
{
|
||||||
|
__asm__("bswap %0": "=r"(x):"0"(x));
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#elif defined(__x86_64__)
|
||||||
|
SDL_FORCE_INLINE Uint32
|
||||||
|
SDL_Swap32(Uint32 x)
|
||||||
|
{
|
||||||
|
__asm__("bswapl %0": "=r"(x):"0"(x));
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#elif (defined(__powerpc__) || defined(__ppc__))
|
||||||
|
SDL_FORCE_INLINE Uint32
|
||||||
|
SDL_Swap32(Uint32 x)
|
||||||
|
{
|
||||||
|
Uint32 result;
|
||||||
|
|
||||||
|
__asm__("rlwimi %0,%2,24,16,23": "=&r"(result): "0" (x>>24), "r"(x));
|
||||||
|
__asm__("rlwimi %0,%2,8,8,15" : "=&r"(result): "0" (result), "r"(x));
|
||||||
|
__asm__("rlwimi %0,%2,24,0,7" : "=&r"(result): "0" (result), "r"(x));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#elif (defined(__m68k__) && !defined(__mcoldfire__))
|
||||||
|
SDL_FORCE_INLINE Uint32
|
||||||
|
SDL_Swap32(Uint32 x)
|
||||||
|
{
|
||||||
|
__asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc");
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#elif defined(__WATCOMC__) && defined(__386__)
|
||||||
|
extern __inline Uint32 SDL_Swap32(Uint32);
|
||||||
|
#pragma aux SDL_Swap32 = \
|
||||||
|
"bswap eax" \
|
||||||
|
parm [eax] \
|
||||||
|
modify [eax];
|
||||||
|
#else
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this function to swap the byte order of a 32-bit value.
|
||||||
|
*
|
||||||
|
* \param x the value to be swapped.
|
||||||
|
* \returns the swapped value.
|
||||||
|
*
|
||||||
|
* \sa SDL_SwapBE32
|
||||||
|
* \sa SDL_SwapLE32
|
||||||
|
*/
|
||||||
|
SDL_FORCE_INLINE Uint32
|
||||||
|
SDL_Swap32(Uint32 x)
|
||||||
|
{
|
||||||
|
return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) |
|
||||||
|
((x >> 8) & 0x0000FF00) | (x >> 24)));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAS_BUILTIN_BSWAP64
|
||||||
|
#define SDL_Swap64(x) __builtin_bswap64(x)
|
||||||
|
#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL)
|
||||||
|
#pragma intrinsic(_byteswap_uint64)
|
||||||
|
#define SDL_Swap64(x) _byteswap_uint64(x)
|
||||||
|
#elif defined(__i386__) && !HAS_BROKEN_BSWAP
|
||||||
|
SDL_FORCE_INLINE Uint64
|
||||||
|
SDL_Swap64(Uint64 x)
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
Uint32 a, b;
|
||||||
|
} s;
|
||||||
|
Uint64 u;
|
||||||
|
} v;
|
||||||
|
v.u = x;
|
||||||
|
__asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1"
|
||||||
|
: "=r"(v.s.a), "=r"(v.s.b)
|
||||||
|
: "0" (v.s.a), "1"(v.s.b));
|
||||||
|
return v.u;
|
||||||
|
}
|
||||||
|
#elif defined(__x86_64__)
|
||||||
|
SDL_FORCE_INLINE Uint64
|
||||||
|
SDL_Swap64(Uint64 x)
|
||||||
|
{
|
||||||
|
__asm__("bswapq %0": "=r"(x):"0"(x));
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#elif defined(__WATCOMC__) && defined(__386__)
|
||||||
|
extern __inline Uint64 SDL_Swap64(Uint64);
|
||||||
|
#pragma aux SDL_Swap64 = \
|
||||||
|
"bswap eax" \
|
||||||
|
"bswap edx" \
|
||||||
|
"xchg eax,edx" \
|
||||||
|
parm [eax edx] \
|
||||||
|
modify [eax edx];
|
||||||
|
#else
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this function to swap the byte order of a 64-bit value.
|
||||||
|
*
|
||||||
|
* \param x the value to be swapped.
|
||||||
|
* \returns the swapped value.
|
||||||
|
*
|
||||||
|
* \sa SDL_SwapBE64
|
||||||
|
* \sa SDL_SwapLE64
|
||||||
|
*/
|
||||||
|
SDL_FORCE_INLINE Uint64
|
||||||
|
SDL_Swap64(Uint64 x)
|
||||||
|
{
|
||||||
|
Uint32 hi, lo;
|
||||||
|
|
||||||
|
/* Separate into high and low 32-bit values and swap them */
|
||||||
|
lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
|
||||||
|
x >>= 32;
|
||||||
|
hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF);
|
||||||
|
x = SDL_Swap32(lo);
|
||||||
|
x <<= 32;
|
||||||
|
x |= SDL_Swap32(hi);
|
||||||
|
return (x);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this function to swap the byte order of a floating point value.
|
||||||
|
*
|
||||||
|
* \param x the value to be swapped.
|
||||||
|
* \returns the swapped value.
|
||||||
|
*
|
||||||
|
* \sa SDL_SwapFloatBE
|
||||||
|
* \sa SDL_SwapFloatLE
|
||||||
|
*/
|
||||||
|
SDL_FORCE_INLINE float
|
||||||
|
SDL_SwapFloat(float x)
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
float f;
|
||||||
|
Uint32 ui32;
|
||||||
|
} swapper;
|
||||||
|
swapper.f = x;
|
||||||
|
swapper.ui32 = SDL_Swap32(swapper.ui32);
|
||||||
|
return swapper.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove extra macros */
|
||||||
|
#undef HAS_BROKEN_BSWAP
|
||||||
|
#undef HAS_BUILTIN_BSWAP16
|
||||||
|
#undef HAS_BUILTIN_BSWAP32
|
||||||
|
#undef HAS_BUILTIN_BSWAP64
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \name Swap to native
|
||||||
|
* Byteswap item from the specified endianness to the native endianness.
|
||||||
|
*/
|
||||||
|
/* @{ */
|
||||||
|
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
||||||
|
#define SDL_SwapLE16(X) (X)
|
||||||
|
#define SDL_SwapLE32(X) (X)
|
||||||
|
#define SDL_SwapLE64(X) (X)
|
||||||
|
#define SDL_SwapFloatLE(X) (X)
|
||||||
|
#define SDL_SwapBE16(X) SDL_Swap16(X)
|
||||||
|
#define SDL_SwapBE32(X) SDL_Swap32(X)
|
||||||
|
#define SDL_SwapBE64(X) SDL_Swap64(X)
|
||||||
|
#define SDL_SwapFloatBE(X) SDL_SwapFloat(X)
|
||||||
|
#else
|
||||||
|
#define SDL_SwapLE16(X) SDL_Swap16(X)
|
||||||
|
#define SDL_SwapLE32(X) SDL_Swap32(X)
|
||||||
|
#define SDL_SwapLE64(X) SDL_Swap64(X)
|
||||||
|
#define SDL_SwapFloatLE(X) SDL_SwapFloat(X)
|
||||||
|
#define SDL_SwapBE16(X) (X)
|
||||||
|
#define SDL_SwapBE32(X) (X)
|
||||||
|
#define SDL_SwapBE64(X) (X)
|
||||||
|
#define SDL_SwapFloatBE(X) (X)
|
||||||
|
#endif
|
||||||
|
/* @} *//* Swap to native */
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_endian_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryError
|
||||||
|
*
|
||||||
|
* Simple error message routines for SDL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_error_h_
|
||||||
|
#define SDL_error_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Public functions */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the SDL error message for the current thread.
|
||||||
|
*
|
||||||
|
* Calling this function will replace any previous error message that was set.
|
||||||
|
*
|
||||||
|
* This function always returns -1, since SDL frequently uses -1 to signify an
|
||||||
|
* failing result, leading to this idiom:
|
||||||
|
*
|
||||||
|
* ```c
|
||||||
|
* if (error_code) {
|
||||||
|
* return SDL_SetError("This operation has failed: %d", error_code);
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* \param fmt a printf()-style message format string.
|
||||||
|
* \param ... additional parameters matching % tokens in the `fmt` string, if
|
||||||
|
* any.
|
||||||
|
* \returns always -1.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_ClearError
|
||||||
|
* \sa SDL_GetError
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a message about the last error that occurred on the current
|
||||||
|
* thread.
|
||||||
|
*
|
||||||
|
* It is possible for multiple errors to occur before calling SDL_GetError().
|
||||||
|
* Only the last error is returned.
|
||||||
|
*
|
||||||
|
* The message is only applicable when an SDL function has signaled an error.
|
||||||
|
* You must check the return values of SDL function calls to determine when to
|
||||||
|
* appropriately call SDL_GetError(). You should *not* use the results of
|
||||||
|
* SDL_GetError() to decide if an error has occurred! Sometimes SDL will set
|
||||||
|
* an error string even when reporting success.
|
||||||
|
*
|
||||||
|
* SDL will *not* clear the error string for successful API calls. You *must*
|
||||||
|
* check return values for failure cases before you can assume the error
|
||||||
|
* string applies.
|
||||||
|
*
|
||||||
|
* Error strings are set per-thread, so an error set in a different thread
|
||||||
|
* will not interfere with the current thread's operation.
|
||||||
|
*
|
||||||
|
* The returned string is internally allocated and must not be freed by the
|
||||||
|
* application.
|
||||||
|
*
|
||||||
|
* \returns a message with information about the specific error that occurred,
|
||||||
|
* or an empty string if there hasn't been an error message set since
|
||||||
|
* the last call to SDL_ClearError(). The message is only applicable
|
||||||
|
* when an SDL function has signaled an error. You must check the
|
||||||
|
* return values of SDL function calls to determine when to
|
||||||
|
* appropriately call SDL_GetError().
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_ClearError
|
||||||
|
* \sa SDL_SetError
|
||||||
|
*/
|
||||||
|
extern DECLSPEC const char *SDLCALL SDL_GetError(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the last error message that was set for the current thread.
|
||||||
|
*
|
||||||
|
* This allows the caller to copy the error string into a provided buffer, but
|
||||||
|
* otherwise operates exactly the same as SDL_GetError().
|
||||||
|
*
|
||||||
|
* \param errstr A buffer to fill with the last error message that was set for
|
||||||
|
* the current thread.
|
||||||
|
* \param maxlen The size of the buffer pointed to by the errstr parameter.
|
||||||
|
* \returns the pointer passed in as the `errstr` parameter.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.14.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetError
|
||||||
|
*/
|
||||||
|
extern DECLSPEC char * SDLCALL SDL_GetErrorMsg(char *errstr, int maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear any previous error message for this thread.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetError
|
||||||
|
* \sa SDL_SetError
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_ClearError(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \name Internal error functions
|
||||||
|
*
|
||||||
|
* \internal
|
||||||
|
* Private error reporting function - used internally.
|
||||||
|
*/
|
||||||
|
/* @{ */
|
||||||
|
#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM)
|
||||||
|
#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED)
|
||||||
|
#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param))
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SDL_ENOMEM,
|
||||||
|
SDL_EFREAD,
|
||||||
|
SDL_EFWRITE,
|
||||||
|
SDL_EFSEEK,
|
||||||
|
SDL_UNSUPPORTED,
|
||||||
|
SDL_LASTERROR
|
||||||
|
} SDL_errorcode;
|
||||||
|
/* SDL_Error() unconditionally returns -1. */
|
||||||
|
extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code);
|
||||||
|
/* @} *//* Internal error functions */
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_error_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryFilesystem
|
||||||
|
*
|
||||||
|
* Include file for filesystem SDL API functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_filesystem_h_
|
||||||
|
#define SDL_filesystem_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the directory where the application was run from.
|
||||||
|
*
|
||||||
|
* This is not necessarily a fast call, so you should call this once near
|
||||||
|
* startup and save the string if you need it.
|
||||||
|
*
|
||||||
|
* **Mac OS X and iOS Specific Functionality**: If the application is in a
|
||||||
|
* ".app" bundle, this function returns the Resource directory (e.g.
|
||||||
|
* MyApp.app/Contents/Resources/). This behaviour can be overridden by adding
|
||||||
|
* a property to the Info.plist file. Adding a string key with the name
|
||||||
|
* SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the
|
||||||
|
* behaviour.
|
||||||
|
*
|
||||||
|
* Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an
|
||||||
|
* application in /Applications/SDLApp/MyApp.app):
|
||||||
|
*
|
||||||
|
* - `resource`: bundle resource directory (the default). For example:
|
||||||
|
* `/Applications/SDLApp/MyApp.app/Contents/Resources`
|
||||||
|
* - `bundle`: the Bundle directory. For example:
|
||||||
|
* `/Applications/SDLApp/MyApp.app/`
|
||||||
|
* - `parent`: the containing directory of the bundle. For example:
|
||||||
|
* `/Applications/SDLApp/`
|
||||||
|
*
|
||||||
|
* **Nintendo 3DS Specific Functionality**: This function returns "romfs"
|
||||||
|
* directory of the application as it is uncommon to store resources outside
|
||||||
|
* the executable. As such it is not a writable directory.
|
||||||
|
*
|
||||||
|
* The returned path is guaranteed to end with a path separator ('\\' on
|
||||||
|
* Windows, '/' on most other platforms).
|
||||||
|
*
|
||||||
|
* The pointer returned is owned by the caller. Please call SDL_free() on the
|
||||||
|
* pointer when done with it.
|
||||||
|
*
|
||||||
|
* \returns an absolute path in UTF-8 encoding to the application data
|
||||||
|
* directory. NULL will be returned on error or when the platform
|
||||||
|
* doesn't implement this functionality, call SDL_GetError() for more
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.1.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetPrefPath
|
||||||
|
*/
|
||||||
|
extern DECLSPEC char *SDLCALL SDL_GetBasePath(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the user-and-app-specific path where files can be written.
|
||||||
|
*
|
||||||
|
* Get the "pref dir". This is meant to be where users can write personal
|
||||||
|
* files (preferences and save games, etc) that are specific to your
|
||||||
|
* application. This directory is unique per user, per application.
|
||||||
|
*
|
||||||
|
* This function will decide the appropriate location in the native
|
||||||
|
* filesystem, create the directory if necessary, and return a string of the
|
||||||
|
* absolute path to the directory in UTF-8 encoding.
|
||||||
|
*
|
||||||
|
* On Windows, the string might look like:
|
||||||
|
*
|
||||||
|
* `C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\`
|
||||||
|
*
|
||||||
|
* On Linux, the string might look like:
|
||||||
|
*
|
||||||
|
* `/home/bob/.local/share/My Program Name/`
|
||||||
|
*
|
||||||
|
* On Mac OS X, the string might look like:
|
||||||
|
*
|
||||||
|
* `/Users/bob/Library/Application Support/My Program Name/`
|
||||||
|
*
|
||||||
|
* You should assume the path returned by this function is the only safe place
|
||||||
|
* to write files (and that SDL_GetBasePath(), while it might be writable, or
|
||||||
|
* even the parent of the returned path, isn't where you should be writing
|
||||||
|
* things).
|
||||||
|
*
|
||||||
|
* Both the org and app strings may become part of a directory name, so please
|
||||||
|
* follow these rules:
|
||||||
|
*
|
||||||
|
* - Try to use the same org string (_including case-sensitivity_) for all
|
||||||
|
* your applications that use this function.
|
||||||
|
* - Always use a unique app string for each one, and make sure it never
|
||||||
|
* changes for an app once you've decided on it.
|
||||||
|
* - Unicode characters are legal, as long as it's UTF-8 encoded, but...
|
||||||
|
* - ...only use letters, numbers, and spaces. Avoid punctuation like "Game
|
||||||
|
* Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient.
|
||||||
|
*
|
||||||
|
* The returned path is guaranteed to end with a path separator ('\\' on
|
||||||
|
* Windows, '/' on most other platforms).
|
||||||
|
*
|
||||||
|
* The pointer returned is owned by the caller. Please call SDL_free() on the
|
||||||
|
* pointer when done with it.
|
||||||
|
*
|
||||||
|
* \param org the name of your organization.
|
||||||
|
* \param app the name of your application.
|
||||||
|
* \returns a UTF-8 string of the user directory in platform-dependent
|
||||||
|
* notation. NULL if there's a problem (creating directory failed,
|
||||||
|
* etc.).
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.1.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetBasePath
|
||||||
|
*/
|
||||||
|
extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_filesystem_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryGesture
|
||||||
|
*
|
||||||
|
* Include file for SDL gesture event handling.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_gesture_h_
|
||||||
|
#define SDL_gesture_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_error.h"
|
||||||
|
#include "SDL_video.h"
|
||||||
|
|
||||||
|
#include "SDL_touch.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef Sint64 SDL_GestureID;
|
||||||
|
|
||||||
|
/* Function prototypes */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Begin recording a gesture on a specified touch device or all touch devices.
|
||||||
|
*
|
||||||
|
* If the parameter `touchId` is -1 (i.e., all devices), this function will
|
||||||
|
* always return 1, regardless of whether there actually are any devices.
|
||||||
|
*
|
||||||
|
* \param touchId the touch device id, or -1 for all touch devices.
|
||||||
|
* \returns 1 on success or 0 if the specified device could not be found.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetTouchDevice
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save all currently loaded Dollar Gesture templates.
|
||||||
|
*
|
||||||
|
* \param dst a SDL_RWops to save to.
|
||||||
|
* \returns the number of saved templates on success or 0 on failure; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LoadDollarTemplates
|
||||||
|
* \sa SDL_SaveDollarTemplate
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save a currently loaded Dollar Gesture template.
|
||||||
|
*
|
||||||
|
* \param gestureId a gesture id.
|
||||||
|
* \param dst a SDL_RWops to save to.
|
||||||
|
* \returns 1 on success or 0 on failure; call SDL_GetError() for more
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LoadDollarTemplates
|
||||||
|
* \sa SDL_SaveAllDollarTemplates
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load Dollar Gesture templates from a file.
|
||||||
|
*
|
||||||
|
* \param touchId a touch id.
|
||||||
|
* \param src a SDL_RWops to load from.
|
||||||
|
* \returns the number of loaded templates on success or a negative error code
|
||||||
|
* (or 0) on failure; call SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_SaveAllDollarTemplates
|
||||||
|
* \sa SDL_SaveDollarTemplate
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_gesture_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* WIKI CATEGORY: GUID */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryGUID
|
||||||
|
*
|
||||||
|
* A GUID is a 128-bit value that represents something that is uniquely
|
||||||
|
* identifiable by this value: "globally unique."
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_guid_h_
|
||||||
|
#define SDL_guid_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_error.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An SDL_GUID is a 128-bit identifier.
|
||||||
|
*
|
||||||
|
* This is an acronym for "Globally Unique ID."
|
||||||
|
*
|
||||||
|
* While a GUID can be used to assign a unique value to almost anything, in
|
||||||
|
* SDL these are largely used to identify input devices across runs of SDL
|
||||||
|
* programs on the same platform.If the device is detached and then
|
||||||
|
* re-attached to a different port, or if the base system is rebooted, the
|
||||||
|
* device should still report the same GUID.
|
||||||
|
*
|
||||||
|
* GUIDs are as precise as possible but are not guaranteed to distinguish
|
||||||
|
* physically distinct but equivalent devices. For example, two game
|
||||||
|
* controllers from the same vendor with the same product ID and revision may
|
||||||
|
* have the same GUID.
|
||||||
|
*
|
||||||
|
* GUIDs may be platform-dependent (i.e., the same device may report different
|
||||||
|
* GUIDs on different operating systems).
|
||||||
|
*/
|
||||||
|
typedef struct SDL_GUID {
|
||||||
|
Uint8 data[16];
|
||||||
|
} SDL_GUID;
|
||||||
|
|
||||||
|
/* Function prototypes */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an ASCII string representation for a given SDL_GUID.
|
||||||
|
*
|
||||||
|
* You should supply at least 33 bytes for pszGUID.
|
||||||
|
*
|
||||||
|
* \param guid the SDL_GUID you wish to convert to string.
|
||||||
|
* \param pszGUID buffer in which to write the ASCII string.
|
||||||
|
* \param cbGUID the size of pszGUID.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.24.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GUIDFromString
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a GUID string into a SDL_GUID structure.
|
||||||
|
*
|
||||||
|
* Performs no error checking. If this function is given a string containing
|
||||||
|
* an invalid GUID, the function will silently succeed, but the GUID generated
|
||||||
|
* will not be useful.
|
||||||
|
*
|
||||||
|
* \param pchGUID string containing an ASCII representation of a GUID.
|
||||||
|
* \returns a SDL_GUID structure.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.24.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GUIDToString
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_GUID SDLCALL SDL_GUIDFromString(const char *pchGUID);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_guid_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,443 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* WIKI CATEGORY: HIDAPI */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryHIDAPI
|
||||||
|
*
|
||||||
|
* Header file for SDL HIDAPI functions.
|
||||||
|
*
|
||||||
|
* This is an adaptation of the original HIDAPI interface by Alan Ott, and
|
||||||
|
* includes source code licensed under the following license:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* HIDAPI - Multi-Platform library for
|
||||||
|
* communication with HID devices.
|
||||||
|
*
|
||||||
|
* Copyright 2009, Alan Ott, Signal 11 Software.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This software may be used by anyone for any reason so
|
||||||
|
* long as the copyright notice in the source files
|
||||||
|
* remains intact.
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* (Note that this license is the same as item three of SDL's zlib license, so
|
||||||
|
* it adds no new requirements on the user.)
|
||||||
|
*
|
||||||
|
* If you would like a version of SDL without this code, you can build SDL
|
||||||
|
* with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for
|
||||||
|
* example on iOS or tvOS to avoid a dependency on the CoreBluetooth
|
||||||
|
* framework.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_hidapi_h_
|
||||||
|
#define SDL_hidapi_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A handle representing an open HID device
|
||||||
|
*/
|
||||||
|
struct SDL_hid_device_;
|
||||||
|
typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */
|
||||||
|
|
||||||
|
/** hidapi info structure */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information about a connected HID device
|
||||||
|
*/
|
||||||
|
typedef struct SDL_hid_device_info
|
||||||
|
{
|
||||||
|
/** Platform-specific device path */
|
||||||
|
char *path;
|
||||||
|
/** Device Vendor ID */
|
||||||
|
unsigned short vendor_id;
|
||||||
|
/** Device Product ID */
|
||||||
|
unsigned short product_id;
|
||||||
|
/** Serial Number */
|
||||||
|
wchar_t *serial_number;
|
||||||
|
/** Device Release Number in binary-coded decimal,
|
||||||
|
also known as Device Version Number */
|
||||||
|
unsigned short release_number;
|
||||||
|
/** Manufacturer String */
|
||||||
|
wchar_t *manufacturer_string;
|
||||||
|
/** Product string */
|
||||||
|
wchar_t *product_string;
|
||||||
|
/** Usage Page for this Device/Interface
|
||||||
|
(Windows/Mac only). */
|
||||||
|
unsigned short usage_page;
|
||||||
|
/** Usage for this Device/Interface
|
||||||
|
(Windows/Mac only).*/
|
||||||
|
unsigned short usage;
|
||||||
|
/** The USB interface which this logical device
|
||||||
|
represents.
|
||||||
|
|
||||||
|
* Valid on both Linux implementations in all cases.
|
||||||
|
* Valid on the Windows implementation only if the device
|
||||||
|
contains more than one interface. */
|
||||||
|
int interface_number;
|
||||||
|
|
||||||
|
/** Additional information about the USB interface.
|
||||||
|
Valid on libusb and Android implementations. */
|
||||||
|
int interface_class;
|
||||||
|
int interface_subclass;
|
||||||
|
int interface_protocol;
|
||||||
|
|
||||||
|
/** Pointer to the next device */
|
||||||
|
struct SDL_hid_device_info *next;
|
||||||
|
} SDL_hid_device_info;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the HIDAPI library.
|
||||||
|
*
|
||||||
|
* This function initializes the HIDAPI library. Calling it is not strictly
|
||||||
|
* necessary, as it will be called automatically by SDL_hid_enumerate() and
|
||||||
|
* any of the SDL_hid_open_*() functions if it is needed. This function should
|
||||||
|
* be called at the beginning of execution however, if there is a chance of
|
||||||
|
* HIDAPI handles being opened by different threads simultaneously.
|
||||||
|
*
|
||||||
|
* Each call to this function should have a matching call to SDL_hid_exit()
|
||||||
|
*
|
||||||
|
* \returns 0 on success and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*
|
||||||
|
* \sa SDL_hid_exit
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_init(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finalize the HIDAPI library.
|
||||||
|
*
|
||||||
|
* This function frees all of the static data associated with HIDAPI. It
|
||||||
|
* should be called at the end of execution to avoid memory leaks.
|
||||||
|
*
|
||||||
|
* \returns 0 on success and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*
|
||||||
|
* \sa SDL_hid_init
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_exit(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check to see if devices may have been added or removed.
|
||||||
|
*
|
||||||
|
* Enumerating the HID devices is an expensive operation, so you can call this
|
||||||
|
* to see if there have been any system device changes since the last call to
|
||||||
|
* this function. A change in the counter returned doesn't necessarily mean
|
||||||
|
* that anything has changed, but you can call SDL_hid_enumerate() to get an
|
||||||
|
* updated device list.
|
||||||
|
*
|
||||||
|
* Calling this function for the first time may cause a thread or other system
|
||||||
|
* resource to be allocated to track device change notifications.
|
||||||
|
*
|
||||||
|
* \returns a change counter that is incremented with each potential device
|
||||||
|
* change, or 0 if device change detection isn't available.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*
|
||||||
|
* \sa SDL_hid_enumerate
|
||||||
|
*/
|
||||||
|
extern DECLSPEC Uint32 SDLCALL SDL_hid_device_change_count(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enumerate the HID Devices.
|
||||||
|
*
|
||||||
|
* This function returns a linked list of all the HID devices attached to the
|
||||||
|
* system which match vendor_id and product_id. If `vendor_id` is set to 0
|
||||||
|
* then any vendor matches. If `product_id` is set to 0 then any product
|
||||||
|
* matches. If `vendor_id` and `product_id` are both set to 0, then all HID
|
||||||
|
* devices will be returned.
|
||||||
|
*
|
||||||
|
* \param vendor_id The Vendor ID (VID) of the types of device to open.
|
||||||
|
* \param product_id The Product ID (PID) of the types of device to open.
|
||||||
|
* \returns a pointer to a linked list of type SDL_hid_device_info, containing
|
||||||
|
* information about the HID devices attached to the system, or NULL
|
||||||
|
* in the case of failure. Free this linked list by calling
|
||||||
|
* SDL_hid_free_enumeration().
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*
|
||||||
|
* \sa SDL_hid_device_change_count
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free an enumeration Linked List
|
||||||
|
*
|
||||||
|
* This function frees a linked list created by SDL_hid_enumerate().
|
||||||
|
*
|
||||||
|
* \param devs Pointer to a list of struct_device returned from
|
||||||
|
* SDL_hid_enumerate().
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally
|
||||||
|
* a serial number.
|
||||||
|
*
|
||||||
|
* If `serial_number` is NULL, the first device with the specified VID and PID
|
||||||
|
* is opened.
|
||||||
|
*
|
||||||
|
* \param vendor_id The Vendor ID (VID) of the device to open.
|
||||||
|
* \param product_id The Product ID (PID) of the device to open.
|
||||||
|
* \param serial_number The Serial Number of the device to open (Optionally
|
||||||
|
* NULL).
|
||||||
|
* \returns a pointer to a SDL_hid_device object on success or NULL on
|
||||||
|
* failure.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a HID device by its path name.
|
||||||
|
*
|
||||||
|
* The path name be determined by calling SDL_hid_enumerate(), or a
|
||||||
|
* platform-specific path name can be used (eg: /dev/hidraw0 on Linux).
|
||||||
|
*
|
||||||
|
* \param path The path name of the device to open.
|
||||||
|
* \returns a pointer to a SDL_hid_device object on success or NULL on
|
||||||
|
* failure.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write an Output report to a HID device.
|
||||||
|
*
|
||||||
|
* The first byte of `data` must contain the Report ID. For devices which only
|
||||||
|
* support a single report, this must be set to 0x0. The remaining bytes
|
||||||
|
* contain the report data. Since the Report ID is mandatory, calls to
|
||||||
|
* SDL_hid_write() will always contain one more byte than the report contains.
|
||||||
|
* For example, if a hid report is 16 bytes long, 17 bytes must be passed to
|
||||||
|
* SDL_hid_write(), the Report ID (or 0x0, for devices with a single report),
|
||||||
|
* followed by the report data (16 bytes). In this example, the length passed
|
||||||
|
* in would be 17.
|
||||||
|
*
|
||||||
|
* SDL_hid_write() will send the data on the first OUT endpoint, if one
|
||||||
|
* exists. If it does not, it will send the data through the Control Endpoint
|
||||||
|
* (Endpoint 0).
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param data The data to send, including the report number as the first
|
||||||
|
* byte.
|
||||||
|
* \param length The length in bytes of the data to send.
|
||||||
|
* \returns the actual number of bytes written and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read an Input report from a HID device with timeout.
|
||||||
|
*
|
||||||
|
* Input reports are returned to the host through the INTERRUPT IN endpoint.
|
||||||
|
* The first byte will contain the Report number if the device uses numbered
|
||||||
|
* reports.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param data A buffer to put the read data into.
|
||||||
|
* \param length The number of bytes to read. For devices with multiple
|
||||||
|
* reports, make sure to read an extra byte for the report
|
||||||
|
* number.
|
||||||
|
* \param milliseconds timeout in milliseconds or -1 for blocking wait.
|
||||||
|
* \returns the actual number of bytes read and -1 on error. If no packet was
|
||||||
|
* available to be read within the timeout period, this function
|
||||||
|
* returns 0.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read an Input report from a HID device.
|
||||||
|
*
|
||||||
|
* Input reports are returned to the host through the INTERRUPT IN endpoint.
|
||||||
|
* The first byte will contain the Report number if the device uses numbered
|
||||||
|
* reports.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param data A buffer to put the read data into.
|
||||||
|
* \param length The number of bytes to read. For devices with multiple
|
||||||
|
* reports, make sure to read an extra byte for the report
|
||||||
|
* number.
|
||||||
|
* \returns the actual number of bytes read and -1 on error. If no packet was
|
||||||
|
* available to be read and the handle is in non-blocking mode, this
|
||||||
|
* function returns 0.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the device handle to be non-blocking.
|
||||||
|
*
|
||||||
|
* In non-blocking mode calls to SDL_hid_read() will return immediately with a
|
||||||
|
* value of 0 if there is no data to be read. In blocking mode, SDL_hid_read()
|
||||||
|
* will wait (block) until there is data to read before returning.
|
||||||
|
*
|
||||||
|
* Nonblocking can be turned on and off at any time.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param nonblock enable or not the nonblocking reads - 1 to enable
|
||||||
|
* nonblocking - 0 to disable nonblocking.
|
||||||
|
* \returns 0 on success and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a Feature report to the device.
|
||||||
|
*
|
||||||
|
* Feature reports are sent over the Control endpoint as a Set_Report
|
||||||
|
* transfer. The first byte of `data` must contain the Report ID. For devices
|
||||||
|
* which only support a single report, this must be set to 0x0. The remaining
|
||||||
|
* bytes contain the report data. Since the Report ID is mandatory, calls to
|
||||||
|
* SDL_hid_send_feature_report() will always contain one more byte than the
|
||||||
|
* report contains. For example, if a hid report is 16 bytes long, 17 bytes
|
||||||
|
* must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for
|
||||||
|
* devices which do not use numbered reports), followed by the report data (16
|
||||||
|
* bytes). In this example, the length passed in would be 17.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param data The data to send, including the report number as the first
|
||||||
|
* byte.
|
||||||
|
* \param length The length in bytes of the data to send, including the report
|
||||||
|
* number.
|
||||||
|
* \returns the actual number of bytes written and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a feature report from a HID device.
|
||||||
|
*
|
||||||
|
* Set the first byte of `data` to the Report ID of the report to be read.
|
||||||
|
* Make sure to allow space for this extra byte in `data`. Upon return, the
|
||||||
|
* first byte will still contain the Report ID, and the report data will start
|
||||||
|
* in data[1].
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param data A buffer to put the read data into, including the Report ID.
|
||||||
|
* Set the first byte of `data` to the Report ID of the report to
|
||||||
|
* be read, or set it to zero if your device does not use numbered
|
||||||
|
* reports.
|
||||||
|
* \param length The number of bytes to read, including an extra byte for the
|
||||||
|
* report ID. The buffer can be longer than the actual report.
|
||||||
|
* \returns the number of bytes read plus one for the report ID (which is
|
||||||
|
* still in the first byte), or -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close a HID device.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_hid_close(SDL_hid_device *dev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get The Manufacturer String from a HID device.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param string A wide string buffer to put the data into.
|
||||||
|
* \param maxlen The length of the buffer in multiples of wchar_t.
|
||||||
|
* \returns 0 on success and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get The Product String from a HID device.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param string A wide string buffer to put the data into.
|
||||||
|
* \param maxlen The length of the buffer in multiples of wchar_t.
|
||||||
|
* \returns 0 on success and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get The Serial Number String from a HID device.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param string A wide string buffer to put the data into.
|
||||||
|
* \param maxlen The length of the buffer in multiples of wchar_t.
|
||||||
|
* \returns 0 on success and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a string from a HID device, based on its string index.
|
||||||
|
*
|
||||||
|
* \param dev A device handle returned from SDL_hid_open().
|
||||||
|
* \param string_index The index of the string to get.
|
||||||
|
* \param string A wide string buffer to put the data into.
|
||||||
|
* \param maxlen The length of the buffer in multiples of wchar_t.
|
||||||
|
* \returns 0 on success and -1 on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers
|
||||||
|
*
|
||||||
|
* \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.18.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_hid_ble_scan(SDL_bool active);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_hidapi_h_ */
|
||||||
|
|
||||||
|
/* vi: set sts=4 ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,361 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryKeyboard
|
||||||
|
*
|
||||||
|
* Include file for SDL keyboard event handling
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_keyboard_h_
|
||||||
|
#define SDL_keyboard_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_error.h"
|
||||||
|
#include "SDL_keycode.h"
|
||||||
|
#include "SDL_video.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The SDL keysym structure, used in key events.
|
||||||
|
*
|
||||||
|
* If you are looking for translated character input, see the SDL_TEXTINPUT
|
||||||
|
* event.
|
||||||
|
*/
|
||||||
|
typedef struct SDL_Keysym
|
||||||
|
{
|
||||||
|
SDL_Scancode scancode; /**< SDL physical key code - see SDL_Scancode for details */
|
||||||
|
SDL_Keycode sym; /**< SDL virtual key code - see SDL_Keycode for details */
|
||||||
|
Uint16 mod; /**< current key modifiers - see SDL_Keymod for details */
|
||||||
|
Uint32 unused;
|
||||||
|
} SDL_Keysym;
|
||||||
|
|
||||||
|
/* Function prototypes */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query the window which currently has keyboard focus.
|
||||||
|
*
|
||||||
|
* \returns the window with keyboard focus.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a snapshot of the current state of the keyboard.
|
||||||
|
*
|
||||||
|
* The pointer returned is a pointer to an internal SDL array. It will be
|
||||||
|
* valid for the whole lifetime of the application and should not be freed by
|
||||||
|
* the caller.
|
||||||
|
*
|
||||||
|
* A array element with a value of 1 means that the key is pressed and a value
|
||||||
|
* of 0 means that it is not. Indexes into this array are obtained by using
|
||||||
|
* SDL_Scancode values.
|
||||||
|
*
|
||||||
|
* Use SDL_PumpEvents() to update the state array.
|
||||||
|
*
|
||||||
|
* This function gives you the current state after all events have been
|
||||||
|
* processed, so if a key or button has been pressed and released before you
|
||||||
|
* process events, then the pressed state will never show up in the
|
||||||
|
* SDL_GetKeyboardState() calls.
|
||||||
|
*
|
||||||
|
* Note: This function doesn't take into account whether shift has been
|
||||||
|
* pressed or not.
|
||||||
|
*
|
||||||
|
* \param numkeys if non-NULL, receives the length of the returned array.
|
||||||
|
* \returns a pointer to an array of key states.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_PumpEvents
|
||||||
|
* \sa SDL_ResetKeyboard
|
||||||
|
*/
|
||||||
|
extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear the state of the keyboard
|
||||||
|
*
|
||||||
|
* This function will generate key up events for all pressed keys.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.24.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetKeyboardState
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_ResetKeyboard(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current key modifier state for the keyboard.
|
||||||
|
*
|
||||||
|
* \returns an OR'd combination of the modifier keys for the keyboard. See
|
||||||
|
* SDL_Keymod for details.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetKeyboardState
|
||||||
|
* \sa SDL_SetModState
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current key modifier state for the keyboard.
|
||||||
|
*
|
||||||
|
* The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose
|
||||||
|
* modifier key states on your application. Simply pass your desired modifier
|
||||||
|
* states into `modstate`. This value may be a bitwise, OR'd combination of
|
||||||
|
* SDL_Keymod values.
|
||||||
|
*
|
||||||
|
* This does not change the keyboard state, only the key modifier flags that
|
||||||
|
* SDL reports.
|
||||||
|
*
|
||||||
|
* \param modstate the desired SDL_Keymod for the keyboard.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetModState
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the key code corresponding to the given scancode according to the
|
||||||
|
* current keyboard layout.
|
||||||
|
*
|
||||||
|
* See SDL_Keycode for details.
|
||||||
|
*
|
||||||
|
* \param scancode the desired SDL_Scancode to query.
|
||||||
|
* \returns the SDL_Keycode that corresponds to the given SDL_Scancode.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetKeyName
|
||||||
|
* \sa SDL_GetScancodeFromKey
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the scancode corresponding to the given key code according to the
|
||||||
|
* current keyboard layout.
|
||||||
|
*
|
||||||
|
* See SDL_Scancode for details.
|
||||||
|
*
|
||||||
|
* \param key the desired SDL_Keycode to query.
|
||||||
|
* \returns the SDL_Scancode that corresponds to the given SDL_Keycode.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetKeyFromScancode
|
||||||
|
* \sa SDL_GetScancodeName
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a human-readable name for a scancode.
|
||||||
|
*
|
||||||
|
* See SDL_Scancode for details.
|
||||||
|
*
|
||||||
|
* **Warning**: The returned name is by design not stable across platforms,
|
||||||
|
* e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left
|
||||||
|
* Windows" under Microsoft Windows, and some scancodes like
|
||||||
|
* `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even
|
||||||
|
* scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and
|
||||||
|
* `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore
|
||||||
|
* unsuitable for creating a stable cross-platform two-way mapping between
|
||||||
|
* strings and scancodes.
|
||||||
|
*
|
||||||
|
* \param scancode the desired SDL_Scancode to query.
|
||||||
|
* \returns a pointer to the name for the scancode. If the scancode doesn't
|
||||||
|
* have a name this function returns an empty string ("").
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetScancodeFromKey
|
||||||
|
* \sa SDL_GetScancodeFromName
|
||||||
|
*/
|
||||||
|
extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a scancode from a human-readable name.
|
||||||
|
*
|
||||||
|
* \param name the human-readable scancode name.
|
||||||
|
* \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't
|
||||||
|
* recognized; call SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetKeyFromName
|
||||||
|
* \sa SDL_GetScancodeFromKey
|
||||||
|
* \sa SDL_GetScancodeName
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a human-readable name for a key.
|
||||||
|
*
|
||||||
|
* See SDL_Scancode and SDL_Keycode for details.
|
||||||
|
*
|
||||||
|
* \param key the desired SDL_Keycode to query.
|
||||||
|
* \returns a pointer to a UTF-8 string that stays valid at least until the
|
||||||
|
* next call to this function. If you need it around any longer, you
|
||||||
|
* must copy it. If the key doesn't have a name, this function
|
||||||
|
* returns an empty string ("").
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetKeyFromName
|
||||||
|
* \sa SDL_GetKeyFromScancode
|
||||||
|
* \sa SDL_GetScancodeFromKey
|
||||||
|
*/
|
||||||
|
extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a key code from a human-readable name.
|
||||||
|
*
|
||||||
|
* \param name the human-readable key name.
|
||||||
|
* \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetKeyFromScancode
|
||||||
|
* \sa SDL_GetKeyName
|
||||||
|
* \sa SDL_GetScancodeFromName
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start accepting Unicode text input events.
|
||||||
|
*
|
||||||
|
* This function will start accepting Unicode text input events in the focused
|
||||||
|
* SDL window, and start emitting SDL_TextInputEvent (SDL_TEXTINPUT) and
|
||||||
|
* SDL_TextEditingEvent (SDL_TEXTEDITING) events. Please use this function in
|
||||||
|
* pair with SDL_StopTextInput().
|
||||||
|
*
|
||||||
|
* On some platforms using this function activates the screen keyboard.
|
||||||
|
*
|
||||||
|
* On desktop platforms, SDL_StartTextInput() is implicitly called on SDL
|
||||||
|
* video subsystem initialization which will cause SDL_TextInputEvent and
|
||||||
|
* SDL_TextEditingEvent to begin emitting.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_SetTextInputRect
|
||||||
|
* \sa SDL_StopTextInput
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_StartTextInput(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether or not Unicode text input events are enabled.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if text input events are enabled else SDL_FALSE.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_StartTextInput
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop receiving any text input events.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_StartTextInput
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_StopTextInput(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dismiss the composition window/IME without disabling the subsystem.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.22.
|
||||||
|
*
|
||||||
|
* \sa SDL_StartTextInput
|
||||||
|
* \sa SDL_StopTextInput
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_ClearComposition(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if an IME Composite or Candidate window is currently shown.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.22.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the rectangle used to type Unicode text inputs.
|
||||||
|
*
|
||||||
|
* Native input methods will place a window with word suggestions near it,
|
||||||
|
* without covering the text being inputted.
|
||||||
|
*
|
||||||
|
* To start text input in a given location, this function is intended to be
|
||||||
|
* called before SDL_StartTextInput, although some platforms support moving
|
||||||
|
* the rectangle even while text input (and a composition) is active.
|
||||||
|
*
|
||||||
|
* Note: If you want to use the system native IME window, try setting hint
|
||||||
|
* **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you
|
||||||
|
* any feedback.
|
||||||
|
*
|
||||||
|
* \param rect the SDL_Rect structure representing the rectangle to receive
|
||||||
|
* text (ignored if NULL).
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_StartTextInput
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_SetTextInputRect(const SDL_Rect *rect);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the platform has screen keyboard support.
|
||||||
|
*
|
||||||
|
* \returns SDL_TRUE if the platform has some screen keyboard support or
|
||||||
|
* SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_StartTextInput
|
||||||
|
* \sa SDL_IsScreenKeyboardShown
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the screen keyboard is shown for given window.
|
||||||
|
*
|
||||||
|
* \param window the window for which screen keyboard should be queried.
|
||||||
|
* \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_HasScreenKeyboardSupport
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_keyboard_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,358 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryKeycode
|
||||||
|
*
|
||||||
|
* Defines constants which identify keyboard keys and modifiers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_keycode_h_
|
||||||
|
#define SDL_keycode_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_scancode.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The SDL virtual key representation.
|
||||||
|
*
|
||||||
|
* Values of this type are used to represent keyboard keys using the current
|
||||||
|
* layout of the keyboard. These values include Unicode values representing
|
||||||
|
* the unmodified character that would be generated by pressing the key, or an
|
||||||
|
* SDLK_* constant for those keys that do not generate characters.
|
||||||
|
*
|
||||||
|
* A special exception is the number keys at the top of the keyboard which map
|
||||||
|
* to SDLK_0...SDLK_9 on AZERTY layouts.
|
||||||
|
*/
|
||||||
|
typedef Sint32 SDL_Keycode;
|
||||||
|
|
||||||
|
#define SDLK_SCANCODE_MASK (1<<30)
|
||||||
|
#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK)
|
||||||
|
|
||||||
|
typedef enum SDL_KeyCode
|
||||||
|
{
|
||||||
|
SDLK_UNKNOWN = 0,
|
||||||
|
|
||||||
|
SDLK_RETURN = '\r',
|
||||||
|
SDLK_ESCAPE = '\x1B',
|
||||||
|
SDLK_BACKSPACE = '\b',
|
||||||
|
SDLK_TAB = '\t',
|
||||||
|
SDLK_SPACE = ' ',
|
||||||
|
SDLK_EXCLAIM = '!',
|
||||||
|
SDLK_QUOTEDBL = '"',
|
||||||
|
SDLK_HASH = '#',
|
||||||
|
SDLK_PERCENT = '%',
|
||||||
|
SDLK_DOLLAR = '$',
|
||||||
|
SDLK_AMPERSAND = '&',
|
||||||
|
SDLK_QUOTE = '\'',
|
||||||
|
SDLK_LEFTPAREN = '(',
|
||||||
|
SDLK_RIGHTPAREN = ')',
|
||||||
|
SDLK_ASTERISK = '*',
|
||||||
|
SDLK_PLUS = '+',
|
||||||
|
SDLK_COMMA = ',',
|
||||||
|
SDLK_MINUS = '-',
|
||||||
|
SDLK_PERIOD = '.',
|
||||||
|
SDLK_SLASH = '/',
|
||||||
|
SDLK_0 = '0',
|
||||||
|
SDLK_1 = '1',
|
||||||
|
SDLK_2 = '2',
|
||||||
|
SDLK_3 = '3',
|
||||||
|
SDLK_4 = '4',
|
||||||
|
SDLK_5 = '5',
|
||||||
|
SDLK_6 = '6',
|
||||||
|
SDLK_7 = '7',
|
||||||
|
SDLK_8 = '8',
|
||||||
|
SDLK_9 = '9',
|
||||||
|
SDLK_COLON = ':',
|
||||||
|
SDLK_SEMICOLON = ';',
|
||||||
|
SDLK_LESS = '<',
|
||||||
|
SDLK_EQUALS = '=',
|
||||||
|
SDLK_GREATER = '>',
|
||||||
|
SDLK_QUESTION = '?',
|
||||||
|
SDLK_AT = '@',
|
||||||
|
|
||||||
|
/*
|
||||||
|
Skip uppercase letters
|
||||||
|
*/
|
||||||
|
|
||||||
|
SDLK_LEFTBRACKET = '[',
|
||||||
|
SDLK_BACKSLASH = '\\',
|
||||||
|
SDLK_RIGHTBRACKET = ']',
|
||||||
|
SDLK_CARET = '^',
|
||||||
|
SDLK_UNDERSCORE = '_',
|
||||||
|
SDLK_BACKQUOTE = '`',
|
||||||
|
SDLK_a = 'a',
|
||||||
|
SDLK_b = 'b',
|
||||||
|
SDLK_c = 'c',
|
||||||
|
SDLK_d = 'd',
|
||||||
|
SDLK_e = 'e',
|
||||||
|
SDLK_f = 'f',
|
||||||
|
SDLK_g = 'g',
|
||||||
|
SDLK_h = 'h',
|
||||||
|
SDLK_i = 'i',
|
||||||
|
SDLK_j = 'j',
|
||||||
|
SDLK_k = 'k',
|
||||||
|
SDLK_l = 'l',
|
||||||
|
SDLK_m = 'm',
|
||||||
|
SDLK_n = 'n',
|
||||||
|
SDLK_o = 'o',
|
||||||
|
SDLK_p = 'p',
|
||||||
|
SDLK_q = 'q',
|
||||||
|
SDLK_r = 'r',
|
||||||
|
SDLK_s = 's',
|
||||||
|
SDLK_t = 't',
|
||||||
|
SDLK_u = 'u',
|
||||||
|
SDLK_v = 'v',
|
||||||
|
SDLK_w = 'w',
|
||||||
|
SDLK_x = 'x',
|
||||||
|
SDLK_y = 'y',
|
||||||
|
SDLK_z = 'z',
|
||||||
|
|
||||||
|
SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK),
|
||||||
|
|
||||||
|
SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1),
|
||||||
|
SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2),
|
||||||
|
SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3),
|
||||||
|
SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4),
|
||||||
|
SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5),
|
||||||
|
SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6),
|
||||||
|
SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7),
|
||||||
|
SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8),
|
||||||
|
SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9),
|
||||||
|
SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10),
|
||||||
|
SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11),
|
||||||
|
SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12),
|
||||||
|
|
||||||
|
SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN),
|
||||||
|
SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK),
|
||||||
|
SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE),
|
||||||
|
SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT),
|
||||||
|
SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME),
|
||||||
|
SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP),
|
||||||
|
SDLK_DELETE = '\x7F',
|
||||||
|
SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END),
|
||||||
|
SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN),
|
||||||
|
SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT),
|
||||||
|
SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT),
|
||||||
|
SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN),
|
||||||
|
SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP),
|
||||||
|
|
||||||
|
SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR),
|
||||||
|
SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE),
|
||||||
|
SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY),
|
||||||
|
SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS),
|
||||||
|
SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS),
|
||||||
|
SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER),
|
||||||
|
SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1),
|
||||||
|
SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2),
|
||||||
|
SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3),
|
||||||
|
SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4),
|
||||||
|
SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5),
|
||||||
|
SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6),
|
||||||
|
SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7),
|
||||||
|
SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8),
|
||||||
|
SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9),
|
||||||
|
SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0),
|
||||||
|
SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD),
|
||||||
|
|
||||||
|
SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION),
|
||||||
|
SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER),
|
||||||
|
SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS),
|
||||||
|
SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13),
|
||||||
|
SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14),
|
||||||
|
SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15),
|
||||||
|
SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16),
|
||||||
|
SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17),
|
||||||
|
SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18),
|
||||||
|
SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19),
|
||||||
|
SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20),
|
||||||
|
SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21),
|
||||||
|
SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22),
|
||||||
|
SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23),
|
||||||
|
SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24),
|
||||||
|
SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE),
|
||||||
|
SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP),
|
||||||
|
SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU),
|
||||||
|
SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT),
|
||||||
|
SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP),
|
||||||
|
SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN),
|
||||||
|
SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO),
|
||||||
|
SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT),
|
||||||
|
SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY),
|
||||||
|
SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE),
|
||||||
|
SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND),
|
||||||
|
SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE),
|
||||||
|
SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP),
|
||||||
|
SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN),
|
||||||
|
SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA),
|
||||||
|
SDLK_KP_EQUALSAS400 =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400),
|
||||||
|
|
||||||
|
SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE),
|
||||||
|
SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ),
|
||||||
|
SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL),
|
||||||
|
SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR),
|
||||||
|
SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR),
|
||||||
|
SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2),
|
||||||
|
SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR),
|
||||||
|
SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT),
|
||||||
|
SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER),
|
||||||
|
SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN),
|
||||||
|
SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL),
|
||||||
|
SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL),
|
||||||
|
|
||||||
|
SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00),
|
||||||
|
SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000),
|
||||||
|
SDLK_THOUSANDSSEPARATOR =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR),
|
||||||
|
SDLK_DECIMALSEPARATOR =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR),
|
||||||
|
SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT),
|
||||||
|
SDLK_CURRENCYSUBUNIT =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT),
|
||||||
|
SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN),
|
||||||
|
SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN),
|
||||||
|
SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE),
|
||||||
|
SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE),
|
||||||
|
SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB),
|
||||||
|
SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE),
|
||||||
|
SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A),
|
||||||
|
SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B),
|
||||||
|
SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C),
|
||||||
|
SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D),
|
||||||
|
SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E),
|
||||||
|
SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F),
|
||||||
|
SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR),
|
||||||
|
SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER),
|
||||||
|
SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT),
|
||||||
|
SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS),
|
||||||
|
SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER),
|
||||||
|
SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND),
|
||||||
|
SDLK_KP_DBLAMPERSAND =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND),
|
||||||
|
SDLK_KP_VERTICALBAR =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR),
|
||||||
|
SDLK_KP_DBLVERTICALBAR =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR),
|
||||||
|
SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON),
|
||||||
|
SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH),
|
||||||
|
SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE),
|
||||||
|
SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT),
|
||||||
|
SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM),
|
||||||
|
SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE),
|
||||||
|
SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL),
|
||||||
|
SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR),
|
||||||
|
SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD),
|
||||||
|
SDLK_KP_MEMSUBTRACT =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT),
|
||||||
|
SDLK_KP_MEMMULTIPLY =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY),
|
||||||
|
SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE),
|
||||||
|
SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS),
|
||||||
|
SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR),
|
||||||
|
SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY),
|
||||||
|
SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY),
|
||||||
|
SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL),
|
||||||
|
SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL),
|
||||||
|
SDLK_KP_HEXADECIMAL =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL),
|
||||||
|
|
||||||
|
SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL),
|
||||||
|
SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT),
|
||||||
|
SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT),
|
||||||
|
SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI),
|
||||||
|
SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL),
|
||||||
|
SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT),
|
||||||
|
SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT),
|
||||||
|
SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI),
|
||||||
|
|
||||||
|
SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE),
|
||||||
|
|
||||||
|
SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT),
|
||||||
|
SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV),
|
||||||
|
SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP),
|
||||||
|
SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY),
|
||||||
|
SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE),
|
||||||
|
SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT),
|
||||||
|
SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW),
|
||||||
|
SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL),
|
||||||
|
SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR),
|
||||||
|
SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER),
|
||||||
|
SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH),
|
||||||
|
SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME),
|
||||||
|
SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK),
|
||||||
|
SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD),
|
||||||
|
SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP),
|
||||||
|
SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH),
|
||||||
|
SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS),
|
||||||
|
|
||||||
|
SDLK_BRIGHTNESSDOWN =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN),
|
||||||
|
SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP),
|
||||||
|
SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH),
|
||||||
|
SDLK_KBDILLUMTOGGLE =
|
||||||
|
SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE),
|
||||||
|
SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN),
|
||||||
|
SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP),
|
||||||
|
SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT),
|
||||||
|
SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP),
|
||||||
|
SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1),
|
||||||
|
SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2),
|
||||||
|
|
||||||
|
SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND),
|
||||||
|
SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD),
|
||||||
|
|
||||||
|
SDLK_SOFTLEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTLEFT),
|
||||||
|
SDLK_SOFTRIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTRIGHT),
|
||||||
|
SDLK_CALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALL),
|
||||||
|
SDLK_ENDCALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ENDCALL)
|
||||||
|
} SDL_KeyCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enumeration of valid key mods (possibly OR'd together).
|
||||||
|
*/
|
||||||
|
typedef enum SDL_Keymod
|
||||||
|
{
|
||||||
|
KMOD_NONE = 0x0000,
|
||||||
|
KMOD_LSHIFT = 0x0001,
|
||||||
|
KMOD_RSHIFT = 0x0002,
|
||||||
|
KMOD_LCTRL = 0x0040,
|
||||||
|
KMOD_RCTRL = 0x0080,
|
||||||
|
KMOD_LALT = 0x0100,
|
||||||
|
KMOD_RALT = 0x0200,
|
||||||
|
KMOD_LGUI = 0x0400,
|
||||||
|
KMOD_RGUI = 0x0800,
|
||||||
|
KMOD_NUM = 0x1000,
|
||||||
|
KMOD_CAPS = 0x2000,
|
||||||
|
KMOD_MODE = 0x4000,
|
||||||
|
KMOD_SCROLL = 0x8000,
|
||||||
|
|
||||||
|
KMOD_CTRL = KMOD_LCTRL | KMOD_RCTRL,
|
||||||
|
KMOD_SHIFT = KMOD_LSHIFT | KMOD_RSHIFT,
|
||||||
|
KMOD_ALT = KMOD_LALT | KMOD_RALT,
|
||||||
|
KMOD_GUI = KMOD_LGUI | KMOD_RGUI,
|
||||||
|
|
||||||
|
KMOD_RESERVED = KMOD_SCROLL /* This is for source-level compatibility with SDL 2.0.0. */
|
||||||
|
} SDL_Keymod;
|
||||||
|
|
||||||
|
#endif /* SDL_keycode_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* WIKI CATEGORY: LoadSO */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryLoadSO
|
||||||
|
*
|
||||||
|
* System-dependent library loading routines.
|
||||||
|
*
|
||||||
|
* Some things to keep in mind:
|
||||||
|
*
|
||||||
|
* - These functions only work on C function names. Other languages may have
|
||||||
|
* name mangling and intrinsic language support that varies from compiler to
|
||||||
|
* compiler.
|
||||||
|
* - Make sure you declare your function pointers with the same calling
|
||||||
|
* convention as the actual library function. Your code will crash
|
||||||
|
* mysteriously if you do not do this.
|
||||||
|
* - Avoid namespace collisions. If you load a symbol from the library, it is
|
||||||
|
* not defined whether or not it goes into the global symbol namespace for
|
||||||
|
* the application. If it does and it conflicts with symbols in your code or
|
||||||
|
* other shared libraries, you will not get the results you expect. :)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_loadso_h_
|
||||||
|
#define SDL_loadso_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_error.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dynamically load a shared object.
|
||||||
|
*
|
||||||
|
* \param sofile a system-dependent name of the object file.
|
||||||
|
* \returns an opaque pointer to the object handle or NULL if there was an
|
||||||
|
* error; call SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LoadFunction
|
||||||
|
* \sa SDL_UnloadObject
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Look up the address of the named function in a shared object.
|
||||||
|
*
|
||||||
|
* This function pointer is no longer valid after calling SDL_UnloadObject().
|
||||||
|
*
|
||||||
|
* This function can only look up C function names. Other languages may have
|
||||||
|
* name mangling and intrinsic language support that varies from compiler to
|
||||||
|
* compiler.
|
||||||
|
*
|
||||||
|
* Make sure you declare your function pointers with the same calling
|
||||||
|
* convention as the actual library function. Your code will crash
|
||||||
|
* mysteriously if you do not do this.
|
||||||
|
*
|
||||||
|
* If the requested function doesn't exist, NULL is returned.
|
||||||
|
*
|
||||||
|
* \param handle a valid shared object handle returned by SDL_LoadObject().
|
||||||
|
* \param name the name of the function to look up.
|
||||||
|
* \returns a pointer to the function or NULL if there was an error; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LoadObject
|
||||||
|
* \sa SDL_UnloadObject
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unload a shared object from memory.
|
||||||
|
*
|
||||||
|
* \param handle a valid shared object handle returned by SDL_LoadObject().
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LoadFunction
|
||||||
|
* \sa SDL_LoadObject
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_loadso_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryLocale
|
||||||
|
*
|
||||||
|
* Include file for SDL locale services
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SDL_locale_h
|
||||||
|
#define _SDL_locale_h
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_error.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
/* *INDENT-OFF* */
|
||||||
|
extern "C" {
|
||||||
|
/* *INDENT-ON* */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct SDL_Locale
|
||||||
|
{
|
||||||
|
const char *language; /**< A language name, like "en" for English. */
|
||||||
|
const char *country; /**< A country, like "US" for America. Can be NULL. */
|
||||||
|
} SDL_Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Report the user's preferred locale.
|
||||||
|
*
|
||||||
|
* This returns an array of SDL_Locale structs, the final item zeroed out.
|
||||||
|
* When the caller is done with this array, it should call SDL_free() on the
|
||||||
|
* returned value; all the memory involved is allocated in a single block, so
|
||||||
|
* a single SDL_free() will suffice.
|
||||||
|
*
|
||||||
|
* Returned language strings are in the format xx, where 'xx' is an ISO-639
|
||||||
|
* language specifier (such as "en" for English, "de" for German, etc).
|
||||||
|
* Country strings are in the format YY, where "YY" is an ISO-3166 country
|
||||||
|
* code (such as "US" for the United States, "CA" for Canada, etc). Country
|
||||||
|
* might be NULL if there's no specific guidance on them (so you might get {
|
||||||
|
* "en", "US" } for American English, but { "en", NULL } means "English
|
||||||
|
* language, generically"). Language strings are never NULL, except to
|
||||||
|
* terminate the array.
|
||||||
|
*
|
||||||
|
* Please note that not all of these strings are 2 characters; some are three
|
||||||
|
* or more.
|
||||||
|
*
|
||||||
|
* The returned list of locales are in the order of the user's preference. For
|
||||||
|
* example, a German citizen that is fluent in US English and knows enough
|
||||||
|
* Japanese to navigate around Tokyo might have a list like: { "de", "en_US",
|
||||||
|
* "jp", NULL }. Someone from England might prefer British English (where
|
||||||
|
* "color" is spelled "colour", etc), but will settle for anything like it: {
|
||||||
|
* "en_GB", "en", NULL }.
|
||||||
|
*
|
||||||
|
* This function returns NULL on error, including when the platform does not
|
||||||
|
* supply this information at all.
|
||||||
|
*
|
||||||
|
* This might be a "slow" call that has to query the operating system. It's
|
||||||
|
* best to ask for this once and save the results. However, this list can
|
||||||
|
* change, usually because the user has changed a system preference outside of
|
||||||
|
* your program; SDL will send an SDL_LOCALECHANGED event in this case, if
|
||||||
|
* possible, and you can call this function again to get an updated copy of
|
||||||
|
* preferred locales.
|
||||||
|
*
|
||||||
|
* \return array of locales, terminated with a locale with a NULL language
|
||||||
|
* field. Will return NULL on error.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.14.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Locale * SDLCALL SDL_GetPreferredLocales(void);
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
/* *INDENT-OFF* */
|
||||||
|
}
|
||||||
|
/* *INDENT-ON* */
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* _SDL_locale_h */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,405 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryLog
|
||||||
|
*
|
||||||
|
* Simple log messages with categories and priorities.
|
||||||
|
*
|
||||||
|
* By default logs are quiet, but if you're debugging SDL you might want:
|
||||||
|
*
|
||||||
|
* SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);
|
||||||
|
*
|
||||||
|
* Here's where the messages go on different platforms:
|
||||||
|
*
|
||||||
|
* - Windows: debug output stream
|
||||||
|
* - Android: log output
|
||||||
|
* - Others: standard error output (stderr)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_log_h_
|
||||||
|
#define SDL_log_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum size of a log message prior to SDL 2.0.24
|
||||||
|
*
|
||||||
|
* As of 2.0.24 there is no limit to the length of SDL log messages.
|
||||||
|
*/
|
||||||
|
#define SDL_MAX_LOG_MESSAGE 4096
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The predefined log categories
|
||||||
|
*
|
||||||
|
* By default the application category is enabled at the INFO level, the
|
||||||
|
* assert category is enabled at the WARN level, test is enabled at the
|
||||||
|
* VERBOSE level and all other categories are enabled at the ERROR level.
|
||||||
|
*/
|
||||||
|
typedef enum SDL_LogCategory
|
||||||
|
{
|
||||||
|
SDL_LOG_CATEGORY_APPLICATION,
|
||||||
|
SDL_LOG_CATEGORY_ERROR,
|
||||||
|
SDL_LOG_CATEGORY_ASSERT,
|
||||||
|
SDL_LOG_CATEGORY_SYSTEM,
|
||||||
|
SDL_LOG_CATEGORY_AUDIO,
|
||||||
|
SDL_LOG_CATEGORY_VIDEO,
|
||||||
|
SDL_LOG_CATEGORY_RENDER,
|
||||||
|
SDL_LOG_CATEGORY_INPUT,
|
||||||
|
SDL_LOG_CATEGORY_TEST,
|
||||||
|
|
||||||
|
/* Reserved for future SDL library use */
|
||||||
|
SDL_LOG_CATEGORY_RESERVED1,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED2,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED3,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED4,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED5,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED6,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED7,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED8,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED9,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED10,
|
||||||
|
|
||||||
|
/* Beyond this point is reserved for application use, e.g.
|
||||||
|
enum {
|
||||||
|
MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM,
|
||||||
|
MYAPP_CATEGORY_AWESOME2,
|
||||||
|
MYAPP_CATEGORY_AWESOME3,
|
||||||
|
...
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
SDL_LOG_CATEGORY_CUSTOM
|
||||||
|
} SDL_LogCategory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The predefined log priorities
|
||||||
|
*/
|
||||||
|
typedef enum SDL_LogPriority
|
||||||
|
{
|
||||||
|
SDL_LOG_PRIORITY_VERBOSE = 1,
|
||||||
|
SDL_LOG_PRIORITY_DEBUG,
|
||||||
|
SDL_LOG_PRIORITY_INFO,
|
||||||
|
SDL_LOG_PRIORITY_WARN,
|
||||||
|
SDL_LOG_PRIORITY_ERROR,
|
||||||
|
SDL_LOG_PRIORITY_CRITICAL,
|
||||||
|
SDL_NUM_LOG_PRIORITIES
|
||||||
|
} SDL_LogPriority;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the priority of all log categories.
|
||||||
|
*
|
||||||
|
* \param priority the SDL_LogPriority to assign.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LogSetPriority
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the priority of a particular log category.
|
||||||
|
*
|
||||||
|
* \param category the category to assign a priority to.
|
||||||
|
* \param priority the SDL_LogPriority to assign.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LogGetPriority
|
||||||
|
* \sa SDL_LogSetAllPriority
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category,
|
||||||
|
SDL_LogPriority priority);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the priority of a particular log category.
|
||||||
|
*
|
||||||
|
* \param category the category to query.
|
||||||
|
* \returns the SDL_LogPriority for the requested category.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LogSetPriority
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset all priorities to default.
|
||||||
|
*
|
||||||
|
* This is called by SDL_Quit().
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LogSetAllPriority
|
||||||
|
* \sa SDL_LogSetPriority
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.
|
||||||
|
*
|
||||||
|
* = * \param fmt a printf() style message format string
|
||||||
|
*
|
||||||
|
* \param ... additional parameters matching % tokens in the `fmt` string, if
|
||||||
|
* any.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LogCritical
|
||||||
|
* \sa SDL_LogDebug
|
||||||
|
* \sa SDL_LogError
|
||||||
|
* \sa SDL_LogInfo
|
||||||
|
* \sa SDL_LogMessage
|
||||||
|
* \sa SDL_LogMessageV
|
||||||
|
* \sa SDL_LogVerbose
|
||||||
|
* \sa SDL_LogWarn
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with SDL_LOG_PRIORITY_VERBOSE.
|
||||||
|
*
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param fmt a printf() style message format string.
|
||||||
|
* \param ... additional parameters matching % tokens in the **fmt** string,
|
||||||
|
* if any.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Log
|
||||||
|
* \sa SDL_LogCritical
|
||||||
|
* \sa SDL_LogDebug
|
||||||
|
* \sa SDL_LogError
|
||||||
|
* \sa SDL_LogInfo
|
||||||
|
* \sa SDL_LogMessage
|
||||||
|
* \sa SDL_LogMessageV
|
||||||
|
* \sa SDL_LogWarn
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with SDL_LOG_PRIORITY_DEBUG.
|
||||||
|
*
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param fmt a printf() style message format string.
|
||||||
|
* \param ... additional parameters matching % tokens in the **fmt** string,
|
||||||
|
* if any.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Log
|
||||||
|
* \sa SDL_LogCritical
|
||||||
|
* \sa SDL_LogError
|
||||||
|
* \sa SDL_LogInfo
|
||||||
|
* \sa SDL_LogMessage
|
||||||
|
* \sa SDL_LogMessageV
|
||||||
|
* \sa SDL_LogVerbose
|
||||||
|
* \sa SDL_LogWarn
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with SDL_LOG_PRIORITY_INFO.
|
||||||
|
*
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param fmt a printf() style message format string.
|
||||||
|
* \param ... additional parameters matching % tokens in the **fmt** string,
|
||||||
|
* if any.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Log
|
||||||
|
* \sa SDL_LogCritical
|
||||||
|
* \sa SDL_LogDebug
|
||||||
|
* \sa SDL_LogError
|
||||||
|
* \sa SDL_LogMessage
|
||||||
|
* \sa SDL_LogMessageV
|
||||||
|
* \sa SDL_LogVerbose
|
||||||
|
* \sa SDL_LogWarn
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with SDL_LOG_PRIORITY_WARN.
|
||||||
|
*
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param fmt a printf() style message format string.
|
||||||
|
* \param ... additional parameters matching % tokens in the **fmt** string,
|
||||||
|
* if any.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Log
|
||||||
|
* \sa SDL_LogCritical
|
||||||
|
* \sa SDL_LogDebug
|
||||||
|
* \sa SDL_LogError
|
||||||
|
* \sa SDL_LogInfo
|
||||||
|
* \sa SDL_LogMessage
|
||||||
|
* \sa SDL_LogMessageV
|
||||||
|
* \sa SDL_LogVerbose
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with SDL_LOG_PRIORITY_ERROR.
|
||||||
|
*
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param fmt a printf() style message format string.
|
||||||
|
* \param ... additional parameters matching % tokens in the **fmt** string,
|
||||||
|
* if any.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Log
|
||||||
|
* \sa SDL_LogCritical
|
||||||
|
* \sa SDL_LogDebug
|
||||||
|
* \sa SDL_LogInfo
|
||||||
|
* \sa SDL_LogMessage
|
||||||
|
* \sa SDL_LogMessageV
|
||||||
|
* \sa SDL_LogVerbose
|
||||||
|
* \sa SDL_LogWarn
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with SDL_LOG_PRIORITY_CRITICAL.
|
||||||
|
*
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param fmt a printf() style message format string.
|
||||||
|
* \param ... additional parameters matching % tokens in the **fmt** string,
|
||||||
|
* if any.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Log
|
||||||
|
* \sa SDL_LogDebug
|
||||||
|
* \sa SDL_LogError
|
||||||
|
* \sa SDL_LogInfo
|
||||||
|
* \sa SDL_LogMessage
|
||||||
|
* \sa SDL_LogMessageV
|
||||||
|
* \sa SDL_LogVerbose
|
||||||
|
* \sa SDL_LogWarn
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with the specified category and priority.
|
||||||
|
*
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param priority the priority of the message.
|
||||||
|
* \param fmt a printf() style message format string.
|
||||||
|
* \param ... additional parameters matching % tokens in the **fmt** string,
|
||||||
|
* if any.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Log
|
||||||
|
* \sa SDL_LogCritical
|
||||||
|
* \sa SDL_LogDebug
|
||||||
|
* \sa SDL_LogError
|
||||||
|
* \sa SDL_LogInfo
|
||||||
|
* \sa SDL_LogMessageV
|
||||||
|
* \sa SDL_LogVerbose
|
||||||
|
* \sa SDL_LogWarn
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogMessage(int category,
|
||||||
|
SDL_LogPriority priority,
|
||||||
|
SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log a message with the specified category and priority.
|
||||||
|
*
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param priority the priority of the message.
|
||||||
|
* \param fmt a printf() style message format string.
|
||||||
|
* \param ap a variable argument list.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Log
|
||||||
|
* \sa SDL_LogCritical
|
||||||
|
* \sa SDL_LogDebug
|
||||||
|
* \sa SDL_LogError
|
||||||
|
* \sa SDL_LogInfo
|
||||||
|
* \sa SDL_LogMessage
|
||||||
|
* \sa SDL_LogVerbose
|
||||||
|
* \sa SDL_LogWarn
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogMessageV(int category,
|
||||||
|
SDL_LogPriority priority,
|
||||||
|
SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The prototype for the log output callback function.
|
||||||
|
*
|
||||||
|
* This function is called by SDL when there is new text to be logged.
|
||||||
|
*
|
||||||
|
* \param userdata what was passed as `userdata` to
|
||||||
|
* SDL_LogSetOutputFunction().
|
||||||
|
* \param category the category of the message.
|
||||||
|
* \param priority the priority of the message.
|
||||||
|
* \param message the message being output.
|
||||||
|
*/
|
||||||
|
typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current log output function.
|
||||||
|
*
|
||||||
|
* \param callback an SDL_LogOutputFunction filled in with the current log
|
||||||
|
* callback.
|
||||||
|
* \param userdata a pointer filled in with the pointer that is passed to
|
||||||
|
* `callback`.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LogSetOutputFunction
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace the default log output function with one of your own.
|
||||||
|
*
|
||||||
|
* \param callback an SDL_LogOutputFunction to call instead of the default.
|
||||||
|
* \param userdata a pointer that is passed to `callback`.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_LogGetOutputFunction
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata);
|
||||||
|
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_log_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,282 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_main_h_
|
||||||
|
#define SDL_main_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryMain
|
||||||
|
*
|
||||||
|
* Redefine main() on some platforms so that it is called by SDL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_MAIN_HANDLED
|
||||||
|
#if defined(__WIN32__)
|
||||||
|
/* On Windows SDL provides WinMain(), which parses the command line and passes
|
||||||
|
the arguments to your main function.
|
||||||
|
|
||||||
|
If you provide your own WinMain(), you may define SDL_MAIN_HANDLED
|
||||||
|
*/
|
||||||
|
#define SDL_MAIN_AVAILABLE
|
||||||
|
|
||||||
|
#elif defined(__WINRT__)
|
||||||
|
/* On WinRT, SDL provides a main function that initializes CoreApplication,
|
||||||
|
creating an instance of IFrameworkView in the process.
|
||||||
|
|
||||||
|
Please note that #include'ing SDL_main.h is not enough to get a main()
|
||||||
|
function working. In non-XAML apps, the file,
|
||||||
|
src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled
|
||||||
|
into the app itself. In XAML apps, the function, SDL_WinRTRunApp must be
|
||||||
|
called, with a pointer to the Direct3D-hosted XAML control passed in.
|
||||||
|
*/
|
||||||
|
#define SDL_MAIN_NEEDED
|
||||||
|
|
||||||
|
#elif defined(__GDK__)
|
||||||
|
/* On GDK, SDL provides a main function that initializes the game runtime.
|
||||||
|
|
||||||
|
Please note that #include'ing SDL_main.h is not enough to get a main()
|
||||||
|
function working. You must either link against SDL2main or, if not possible,
|
||||||
|
call the SDL_GDKRunApp function from your entry point.
|
||||||
|
*/
|
||||||
|
#define SDL_MAIN_NEEDED
|
||||||
|
|
||||||
|
#elif defined(__IPHONEOS__)
|
||||||
|
/* On iOS SDL provides a main function that creates an application delegate
|
||||||
|
and starts the iOS application run loop.
|
||||||
|
|
||||||
|
If you link with SDL dynamically on iOS, the main function can't be in a
|
||||||
|
shared library, so you need to link with libSDLmain.a, which includes a
|
||||||
|
stub main function that calls into the shared library to start execution.
|
||||||
|
|
||||||
|
See src/video/uikit/SDL_uikitappdelegate.m for more details.
|
||||||
|
*/
|
||||||
|
#define SDL_MAIN_NEEDED
|
||||||
|
|
||||||
|
#elif defined(__ANDROID__)
|
||||||
|
/* On Android SDL provides a Java class in SDLActivity.java that is the
|
||||||
|
main activity entry point.
|
||||||
|
|
||||||
|
See docs/README-android.md for more details on extending that class.
|
||||||
|
*/
|
||||||
|
#define SDL_MAIN_NEEDED
|
||||||
|
|
||||||
|
/* We need to export SDL_main so it can be launched from Java */
|
||||||
|
#define SDLMAIN_DECLSPEC DECLSPEC
|
||||||
|
|
||||||
|
#elif defined(__NACL__)
|
||||||
|
/* On NACL we use ppapi_simple to set up the application helper code,
|
||||||
|
then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before
|
||||||
|
starting the user main function.
|
||||||
|
All user code is run in a separate thread by ppapi_simple, thus
|
||||||
|
allowing for blocking io to take place via nacl_io
|
||||||
|
*/
|
||||||
|
#define SDL_MAIN_NEEDED
|
||||||
|
|
||||||
|
#elif defined(__PSP__)
|
||||||
|
/* On PSP SDL provides a main function that sets the module info,
|
||||||
|
activates the GPU and starts the thread required to be able to exit
|
||||||
|
the software.
|
||||||
|
|
||||||
|
If you provide this yourself, you may define SDL_MAIN_HANDLED
|
||||||
|
*/
|
||||||
|
#define SDL_MAIN_AVAILABLE
|
||||||
|
|
||||||
|
#elif defined(__PS2__)
|
||||||
|
#define SDL_MAIN_AVAILABLE
|
||||||
|
|
||||||
|
#define SDL_PS2_SKIP_IOP_RESET() \
|
||||||
|
void reset_IOP(); \
|
||||||
|
void reset_IOP() {}
|
||||||
|
|
||||||
|
#elif defined(__3DS__)
|
||||||
|
/*
|
||||||
|
On N3DS, SDL provides a main function that sets up the screens
|
||||||
|
and storage.
|
||||||
|
|
||||||
|
If you provide this yourself, you may define SDL_MAIN_HANDLED
|
||||||
|
*/
|
||||||
|
#define SDL_MAIN_AVAILABLE
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif /* SDL_MAIN_HANDLED */
|
||||||
|
|
||||||
|
#ifndef SDLMAIN_DECLSPEC
|
||||||
|
#define SDLMAIN_DECLSPEC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file SDL_main.h
|
||||||
|
*
|
||||||
|
* The application's main() function must be called with C linkage,
|
||||||
|
* and should be declared like this:
|
||||||
|
* ```c
|
||||||
|
* #ifdef __cplusplus
|
||||||
|
* extern "C"
|
||||||
|
* #endif
|
||||||
|
* int main(int argc, char *argv[])
|
||||||
|
* {
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE)
|
||||||
|
#define main SDL_main
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The prototype for the application's main() function
|
||||||
|
*/
|
||||||
|
typedef int (*SDL_main_func)(int argc, char *argv[]);
|
||||||
|
extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Circumvent failure of SDL_Init() when not using SDL_main() as an entry
|
||||||
|
* point.
|
||||||
|
*
|
||||||
|
* This function is defined in SDL_main.h, along with the preprocessor rule to
|
||||||
|
* redefine main() as SDL_main(). Thus to ensure that your main() function
|
||||||
|
* will not be changed it is necessary to define SDL_MAIN_HANDLED before
|
||||||
|
* including SDL.h.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_Init
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_SetMainReady(void);
|
||||||
|
|
||||||
|
#if defined(__WIN32__) || defined(__GDK__)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a win32 window class for SDL's use.
|
||||||
|
*
|
||||||
|
* This can be called to set the application window class at startup. It is
|
||||||
|
* safe to call this multiple times, as long as every call is eventually
|
||||||
|
* paired with a call to SDL_UnregisterApp, but a second registration attempt
|
||||||
|
* while a previous registration is still active will be ignored, other than
|
||||||
|
* to increment a counter.
|
||||||
|
*
|
||||||
|
* Most applications do not need to, and should not, call this directly; SDL
|
||||||
|
* will call it when initializing the video subsystem.
|
||||||
|
*
|
||||||
|
* \param name the window class name, in UTF-8 encoding. If NULL, SDL
|
||||||
|
* currently uses "SDL_app" but this isn't guaranteed.
|
||||||
|
* \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL
|
||||||
|
* currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of
|
||||||
|
* what is specified here.
|
||||||
|
* \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL
|
||||||
|
* will use `GetModuleHandle(NULL)` instead.
|
||||||
|
* \returns 0 on success, -1 on error. SDL_GetError() may have details.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deregister the win32 window class from an SDL_RegisterApp call.
|
||||||
|
*
|
||||||
|
* This can be called to undo the effects of SDL_RegisterApp.
|
||||||
|
*
|
||||||
|
* Most applications do not need to, and should not, call this directly; SDL
|
||||||
|
* will call it when deinitializing the video subsystem.
|
||||||
|
*
|
||||||
|
* It is safe to call this multiple times, as long as every call is eventually
|
||||||
|
* paired with a prior call to SDL_RegisterApp. The window class will only be
|
||||||
|
* deregistered when the registration counter in SDL_RegisterApp decrements to
|
||||||
|
* zero through calls to this function.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.2.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_UnregisterApp(void);
|
||||||
|
|
||||||
|
#endif /* defined(__WIN32__) || defined(__GDK__) */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __WINRT__
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize and launch an SDL/WinRT application.
|
||||||
|
*
|
||||||
|
* \param mainFunction the SDL app's C-style main(), an SDL_main_func.
|
||||||
|
* \param reserved reserved for future use; should be NULL.
|
||||||
|
* \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
|
||||||
|
* more information on the failure.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.3.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * reserved);
|
||||||
|
|
||||||
|
#endif /* __WINRT__ */
|
||||||
|
|
||||||
|
#if defined(__IPHONEOS__)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes and launches an SDL application.
|
||||||
|
*
|
||||||
|
* \param argc The argc parameter from the application's main() function.
|
||||||
|
* \param argv The argv parameter from the application's main() function.
|
||||||
|
* \param mainFunction The SDL app's C-style main(), an SDL_main_func.
|
||||||
|
* \return the return value from mainFunction.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.10.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_func mainFunction);
|
||||||
|
|
||||||
|
#endif /* __IPHONEOS__ */
|
||||||
|
|
||||||
|
#ifdef __GDK__
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize and launch an SDL GDK application.
|
||||||
|
*
|
||||||
|
* \param mainFunction the SDL app's C-style main(), an SDL_main_func.
|
||||||
|
* \param reserved reserved for future use; should be NULL.
|
||||||
|
* \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
|
||||||
|
* more information on the failure.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.24.0.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback from the application to let the suspend continue.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.28.0.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_GDKSuspendComplete(void);
|
||||||
|
|
||||||
|
#endif /* __GDK__ */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_main_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_messagebox_h_
|
||||||
|
#define SDL_messagebox_h_
|
||||||
|
|
||||||
|
#include "SDL_stdinc.h"
|
||||||
|
#include "SDL_video.h" /* For SDL_Window */
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SDL_MessageBox flags.
|
||||||
|
*
|
||||||
|
* If supported will display warning icon, etc.
|
||||||
|
*/
|
||||||
|
typedef enum SDL_MessageBoxFlags
|
||||||
|
{
|
||||||
|
SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */
|
||||||
|
SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */
|
||||||
|
SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */
|
||||||
|
SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */
|
||||||
|
SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */
|
||||||
|
} SDL_MessageBoxFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flags for SDL_MessageBoxButtonData.
|
||||||
|
*/
|
||||||
|
typedef enum SDL_MessageBoxButtonFlags
|
||||||
|
{
|
||||||
|
SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */
|
||||||
|
SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */
|
||||||
|
} SDL_MessageBoxButtonFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Individual button data.
|
||||||
|
*/
|
||||||
|
typedef struct SDL_MessageBoxButtonData
|
||||||
|
{
|
||||||
|
Uint32 flags; /**< SDL_MessageBoxButtonFlags */
|
||||||
|
int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */
|
||||||
|
const char * text; /**< The UTF-8 button text */
|
||||||
|
} SDL_MessageBoxButtonData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RGB value used in a message box color scheme
|
||||||
|
*/
|
||||||
|
typedef struct SDL_MessageBoxColor
|
||||||
|
{
|
||||||
|
Uint8 r, g, b;
|
||||||
|
} SDL_MessageBoxColor;
|
||||||
|
|
||||||
|
typedef enum SDL_MessageBoxColorType
|
||||||
|
{
|
||||||
|
SDL_MESSAGEBOX_COLOR_BACKGROUND,
|
||||||
|
SDL_MESSAGEBOX_COLOR_TEXT,
|
||||||
|
SDL_MESSAGEBOX_COLOR_BUTTON_BORDER,
|
||||||
|
SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND,
|
||||||
|
SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED,
|
||||||
|
SDL_MESSAGEBOX_COLOR_MAX
|
||||||
|
} SDL_MessageBoxColorType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A set of colors to use for message box dialogs
|
||||||
|
*/
|
||||||
|
typedef struct SDL_MessageBoxColorScheme
|
||||||
|
{
|
||||||
|
SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX];
|
||||||
|
} SDL_MessageBoxColorScheme;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MessageBox structure containing title, text, window, etc.
|
||||||
|
*/
|
||||||
|
typedef struct SDL_MessageBoxData
|
||||||
|
{
|
||||||
|
Uint32 flags; /**< SDL_MessageBoxFlags */
|
||||||
|
SDL_Window *window; /**< Parent window, can be NULL */
|
||||||
|
const char *title; /**< UTF-8 title */
|
||||||
|
const char *message; /**< UTF-8 message text */
|
||||||
|
|
||||||
|
int numbuttons;
|
||||||
|
const SDL_MessageBoxButtonData *buttons;
|
||||||
|
|
||||||
|
const SDL_MessageBoxColorScheme *colorScheme; /**< SDL_MessageBoxColorScheme, can be NULL to use system settings */
|
||||||
|
} SDL_MessageBoxData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a modal message box.
|
||||||
|
*
|
||||||
|
* If your needs aren't complex, it might be easier to use
|
||||||
|
* SDL_ShowSimpleMessageBox.
|
||||||
|
*
|
||||||
|
* This function should be called on the thread that created the parent
|
||||||
|
* window, or on the main thread if the messagebox has no parent. It will
|
||||||
|
* block execution of that thread until the user clicks a button or closes the
|
||||||
|
* messagebox.
|
||||||
|
*
|
||||||
|
* This function may be called at any time, even before SDL_Init(). This makes
|
||||||
|
* it useful for reporting errors like a failure to create a renderer or
|
||||||
|
* OpenGL context.
|
||||||
|
*
|
||||||
|
* On X11, SDL rolls its own dialog box with X11 primitives instead of a
|
||||||
|
* formal toolkit like GTK+ or Qt.
|
||||||
|
*
|
||||||
|
* Note that if SDL_Init() would fail because there isn't any available video
|
||||||
|
* target, this function is likely to fail for the same reasons. If this is a
|
||||||
|
* concern, check the return value from this function and fall back to writing
|
||||||
|
* to stderr if you can.
|
||||||
|
*
|
||||||
|
* \param messageboxdata the SDL_MessageBoxData structure with title, text and
|
||||||
|
* other options.
|
||||||
|
* \param buttonid the pointer to which user id of hit button should be
|
||||||
|
* copied.
|
||||||
|
* \returns 0 on success or a negative error code on failure; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_ShowSimpleMessageBox
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display a simple modal message box.
|
||||||
|
*
|
||||||
|
* If your needs aren't complex, this function is preferred over
|
||||||
|
* SDL_ShowMessageBox.
|
||||||
|
*
|
||||||
|
* `flags` may be any of the following:
|
||||||
|
*
|
||||||
|
* - `SDL_MESSAGEBOX_ERROR`: error dialog
|
||||||
|
* - `SDL_MESSAGEBOX_WARNING`: warning dialog
|
||||||
|
* - `SDL_MESSAGEBOX_INFORMATION`: informational dialog
|
||||||
|
*
|
||||||
|
* This function should be called on the thread that created the parent
|
||||||
|
* window, or on the main thread if the messagebox has no parent. It will
|
||||||
|
* block execution of that thread until the user clicks a button or closes the
|
||||||
|
* messagebox.
|
||||||
|
*
|
||||||
|
* This function may be called at any time, even before SDL_Init(). This makes
|
||||||
|
* it useful for reporting errors like a failure to create a renderer or
|
||||||
|
* OpenGL context.
|
||||||
|
*
|
||||||
|
* On X11, SDL rolls its own dialog box with X11 primitives instead of a
|
||||||
|
* formal toolkit like GTK+ or Qt.
|
||||||
|
*
|
||||||
|
* Note that if SDL_Init() would fail because there isn't any available video
|
||||||
|
* target, this function is likely to fail for the same reasons. If this is a
|
||||||
|
* concern, check the return value from this function and fall back to writing
|
||||||
|
* to stderr if you can.
|
||||||
|
*
|
||||||
|
* \param flags an SDL_MessageBoxFlags value.
|
||||||
|
* \param title UTF-8 title text.
|
||||||
|
* \param message UTF-8 message text.
|
||||||
|
* \param window the parent window, or NULL for no parent.
|
||||||
|
* \returns 0 on success or a negative error code on failure; call
|
||||||
|
* SDL_GetError() for more information.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.0.
|
||||||
|
*
|
||||||
|
* \sa SDL_ShowMessageBox
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window);
|
||||||
|
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_messagebox_h_ */
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* # CategoryMetal
|
||||||
|
*
|
||||||
|
* Header file for functions to creating Metal layers and views on SDL
|
||||||
|
* windows.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_metal_h_
|
||||||
|
#define SDL_metal_h_
|
||||||
|
|
||||||
|
#include "SDL_video.h"
|
||||||
|
|
||||||
|
#include "begin_code.h"
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS).
|
||||||
|
*
|
||||||
|
* This can be cast directly to an NSView or UIView.
|
||||||
|
*/
|
||||||
|
typedef void *SDL_MetalView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \name Metal support functions
|
||||||
|
*/
|
||||||
|
/* @{ */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a CAMetalLayer-backed NSView/UIView and attach it to the specified
|
||||||
|
* window.
|
||||||
|
*
|
||||||
|
* On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on
|
||||||
|
* its own. It is up to user code to do that.
|
||||||
|
*
|
||||||
|
* The returned handle can be casted directly to a NSView or UIView. To access
|
||||||
|
* the backing CAMetalLayer, call SDL_Metal_GetLayer().
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.12.
|
||||||
|
*
|
||||||
|
* \sa SDL_Metal_DestroyView
|
||||||
|
* \sa SDL_Metal_GetLayer
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy an existing SDL_MetalView object.
|
||||||
|
*
|
||||||
|
* This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was
|
||||||
|
* called after SDL_CreateWindow.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.12.
|
||||||
|
*
|
||||||
|
* \sa SDL_Metal_CreateView
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a pointer to the backing CAMetalLayer for the given view.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.14.
|
||||||
|
*
|
||||||
|
* \sa SDL_Metal_CreateView
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the size of a window's underlying drawable in pixels (for use with
|
||||||
|
* setting viewport, scissor & etc).
|
||||||
|
*
|
||||||
|
* \param window SDL_Window from which the drawable size should be queried.
|
||||||
|
* \param w Pointer to variable for storing the width in pixels, may be NULL.
|
||||||
|
* \param h Pointer to variable for storing the height in pixels, may be NULL.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 2.0.14.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetWindowSize
|
||||||
|
* \sa SDL_CreateWindow
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_Metal_GetDrawableSize(SDL_Window* window, int *w,
|
||||||
|
int *h);
|
||||||
|
|
||||||
|
/* @} *//* Metal support functions */
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* SDL_metal_h_ */
|
||||||