Merge remote-tracking branch 'actualsrb2/next' into next
This commit is contained in:
commit
d85c9b5abc
|
@ -0,0 +1,60 @@
|
||||||
|
version: 2
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
working_directory: /root/SRB2
|
||||||
|
docker:
|
||||||
|
- image: debian:jessie
|
||||||
|
environment:
|
||||||
|
CC: ccache gcc -m32
|
||||||
|
PKG_CONFIG_LIBDIR: /usr/lib/i386-linux-gnu/pkgconfig
|
||||||
|
LIBGME_CFLAGS: -I/usr/include
|
||||||
|
LIBGME_LDFLAGS: -lgme
|
||||||
|
CCACHE_COMPRESS: true
|
||||||
|
WFLAGS: -Wno-unsuffixed-float-constants
|
||||||
|
GCC49: true
|
||||||
|
#- image: ubuntu:trusty
|
||||||
|
# environment:
|
||||||
|
# CC: ccache gcc -m32
|
||||||
|
# PKG_CONFIG_LIBDIR: /usr/lib/i386-linux-gnu/pkgconfig
|
||||||
|
# LIBGME_CFLAGS: -I/usr/include
|
||||||
|
# LIBGME_LDFLAGS: -lgme
|
||||||
|
# CCACHE_COMPRESS: true
|
||||||
|
# WFLAGS: -Wno-unsuffixed-float-constants
|
||||||
|
# GCC48: true
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
name: Add i386 arch
|
||||||
|
command: dpkg --add-architecture i386
|
||||||
|
- run:
|
||||||
|
name: Update APT listing
|
||||||
|
command: apt-get -qq update
|
||||||
|
- run:
|
||||||
|
name: Support S3 upload
|
||||||
|
command: apt-get -qq -y install ca-certificates
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- v1-SRB2-APT
|
||||||
|
- run:
|
||||||
|
name: Install SDK
|
||||||
|
command: apt-get -qq -y install git build-essential nasm libpng12-dev:i386 libsdl2-mixer-dev:i386 libgme-dev:i386 gettext ccache wget gcc-multilib upx
|
||||||
|
- save_cache:
|
||||||
|
key: v1-SRB2-APT
|
||||||
|
paths:
|
||||||
|
- /var/cache/apt/archives
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
name: Clean build
|
||||||
|
command: make -C src LINUX=1 clean
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- v1-SRB2-{{ .Branch }}-{{ checksum "objs/Linux/SDL/Release/depend.dep" }}
|
||||||
|
- run:
|
||||||
|
name: Compile
|
||||||
|
command: make -C src LINUX=1 ERRORMODE=1 -k
|
||||||
|
- store_artifacts:
|
||||||
|
path: /root/SRB2/bin/Linux/Release/
|
||||||
|
destination: bin
|
||||||
|
- save_cache:
|
||||||
|
key: v1-SRB2-{{ .Branch }}-{{ checksum "objs/Linux/SDL/Release/depend.dep" }}
|
||||||
|
paths:
|
||||||
|
- /root/.ccache
|
|
@ -18,3 +18,4 @@ Win32_LIB_ASM_Release
|
||||||
*.user
|
*.user
|
||||||
*.db
|
*.db
|
||||||
*.opendb
|
*.opendb
|
||||||
|
/.vs
|
||||||
|
|
82
.travis.yml
82
.travis.yml
|
@ -68,9 +68,10 @@ matrix:
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-4.9
|
- gcc-7
|
||||||
compiler: gcc-4.9
|
compiler: gcc-7
|
||||||
#gcc-4.9 (Ubuntu 4.9.3-8ubuntu2~14.04) 4.9.3
|
env: WFLAGS="-Wno-tautological-compare -Wno-error=implicit-fallthrough -Wno-implicit-fallthrough"
|
||||||
|
#gcc-7 (Ubuntu 7.2.0-1ubuntu1~14.04) 7.2.0 20170802
|
||||||
- os: linux
|
- os: linux
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
@ -82,24 +83,10 @@ matrix:
|
||||||
- libgl1-mesa-dev
|
- libgl1-mesa-dev
|
||||||
- libgme-dev
|
- libgme-dev
|
||||||
- p7zip-full
|
- p7zip-full
|
||||||
- gcc-5
|
- gcc-8
|
||||||
compiler: gcc-5
|
compiler: gcc-8
|
||||||
#gcc-5 (Ubuntu 5.3.0-3ubuntu1~14.04) 5.3.0 20151204
|
env: WFLAGS="-Wno-tautological-compare -Wno-error=implicit-fallthrough -Wno-implicit-fallthrough -Wno-error=format-overflow"
|
||||||
- os: linux
|
#gcc-8 (Ubuntu 7.2.0-1ubuntu1~14.04) 8.1.0
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- libsdl2-mixer-dev
|
|
||||||
- libpng-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- libgme-dev
|
|
||||||
- p7zip-full
|
|
||||||
- gcc-6
|
|
||||||
compiler: gcc-6
|
|
||||||
env: WFLAGS="-Wno-tautological-compare"
|
|
||||||
#gcc-6 (Ubuntu 6.1.1-3ubuntu11~14.04.1) 6.1.1 20160511
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang
|
compiler: clang
|
||||||
#clang version 3.5.0 (tags/RELEASE_350/final)
|
#clang version 3.5.0 (tags/RELEASE_350/final)
|
||||||
|
@ -162,6 +149,51 @@ matrix:
|
||||||
- clang-3.8
|
- clang-3.8
|
||||||
compiler: clang-3.8
|
compiler: clang-3.8
|
||||||
#clang version 3.8.1-svn271127-1~exp1 (branches/release_38)
|
#clang version 3.8.1-svn271127-1~exp1 (branches/release_38)
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-precise-3.9
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- libsdl2-mixer-dev
|
||||||
|
- libpng-dev
|
||||||
|
- libgl1-mesa-dev
|
||||||
|
- libgme-dev
|
||||||
|
- p7zip-full
|
||||||
|
- clang-3.9
|
||||||
|
compiler: clang-3.9
|
||||||
|
#clang version 3.9.X
|
||||||
|
# - os: linux
|
||||||
|
# addons:
|
||||||
|
# apt:
|
||||||
|
# sources:
|
||||||
|
# - llvm-toolchain-precise-4.0
|
||||||
|
# - ubuntu-toolchain-r-test
|
||||||
|
# packages:
|
||||||
|
# - libsdl2-mixer-dev
|
||||||
|
# - libpng-dev
|
||||||
|
# - libgl1-mesa-dev
|
||||||
|
# - libgme-dev
|
||||||
|
# - p7zip-full
|
||||||
|
# - clang-4.0
|
||||||
|
# compiler: clang-4.0
|
||||||
|
# #clang version 4.0.X
|
||||||
|
# - os: linux
|
||||||
|
# addons:
|
||||||
|
# apt:
|
||||||
|
# sources:
|
||||||
|
# - llvm-toolchain-precise-5.0
|
||||||
|
# - ubuntu-toolchain-r-test
|
||||||
|
# packages:
|
||||||
|
# - libsdl2-mixer-dev
|
||||||
|
# - libpng-dev
|
||||||
|
# - libgl1-mesa-dev
|
||||||
|
# - libgme-dev
|
||||||
|
# - p7zip-full
|
||||||
|
# - clang-5.0
|
||||||
|
# compiler: clang-5.0
|
||||||
|
# #clang version 5.0.X
|
||||||
# - os: osx
|
# - os: osx
|
||||||
# osx_image: beta-xcode6.1
|
# osx_image: beta-xcode6.1
|
||||||
# #Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
|
# #Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
|
||||||
|
@ -192,6 +224,10 @@ matrix:
|
||||||
- compiler: clang-3.6
|
- compiler: clang-3.6
|
||||||
- compiler: clang-3.7
|
- compiler: clang-3.7
|
||||||
- compiler: clang-3.8
|
- compiler: clang-3.8
|
||||||
|
- compiler: clang-3.9
|
||||||
|
- compiler: clang-4.0
|
||||||
|
- compiler: clang-5.0
|
||||||
|
- compiler: gcc-8
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
apt: true
|
apt: true
|
||||||
|
@ -219,9 +255,9 @@ before_script:
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install sdl2_mixer game-music-emu p7zip; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install sdl2 sdl2_mixer game-music-emu p7zip; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install cmake||true; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install cmake||true; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -O -L https://www.libsdl.org/release/SDL2-2.0.4.dmg; hdiutil attach SDL2-2.0.4.dmg; sudo cp -a /Volumes/SDL2/SDL2.framework /Library/Frameworks/; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -O -L https://www.libsdl.org/release/SDL2-2.0.6.dmg; hdiutil attach SDL2-2.0.6.dmg; sudo cp -a /Volumes/SDL2/SDL2.framework /Library/Frameworks/; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -O -L https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.dmg; hdiutil attach SDL2_mixer-2.0.1.dmg; sudo cp -a /Volumes/SDL2_mixer/SDL2_mixer.framework /Library/Frameworks/; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl -O -L https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.dmg; hdiutil attach SDL2_mixer-2.0.1.dmg; sudo cp -a /Volumes/SDL2_mixer/SDL2_mixer.framework /Library/Frameworks/; fi
|
||||||
- mkdir -p $HOME/srb2_cache
|
- mkdir -p $HOME/srb2_cache
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
project(SRB2
|
project(SRB2
|
||||||
VERSION 2.1.14
|
VERSION 2.1.21
|
||||||
LANGUAGES C)
|
LANGUAGES C)
|
||||||
|
|
||||||
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
||||||
|
@ -98,10 +98,10 @@ add_subdirectory(assets)
|
||||||
## config.h generation
|
## config.h generation
|
||||||
set(GIT_EXECUTABLE "git" CACHE FILEPATH "Path to git binary")
|
set(GIT_EXECUTABLE "git" CACHE FILEPATH "Path to git binary")
|
||||||
include(GitUtilities)
|
include(GitUtilities)
|
||||||
git_describe(SRB2_GIT_DESCRIBE "${CMAKE_SOURCE_DIR}")
|
git_latest_commit(SRB2_COMP_COMMIT "${CMAKE_SOURCE_DIR}")
|
||||||
git_current_branch(SRB2_GIT_BRANCH "${CMAKE_SOURCE_DIR}")
|
git_current_branch(SRB2_GIT_BRANCH "${CMAKE_SOURCE_DIR}")
|
||||||
set(SRB2_COMP_BRANCH "${SRB2_GIT_BRANCH}")
|
set(SRB2_COMP_BRANCH "${SRB2_GIT_BRANCH}")
|
||||||
set(SRB2_COMP_REVISION "${SRB2_GIT_DESCRIBE}")
|
set(SRB2_COMP_REVISION "${SRB2_COMP_COMMIT}")
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/config.h)
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/config.h)
|
||||||
|
|
||||||
##### PACKAGE CONFIGURATION #####
|
##### PACKAGE CONFIGURATION #####
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
[![Build status](https://ci.appveyor.com/api/projects/status/399d4hcw9yy7hg2y?svg=true)](https://ci.appveyor.com/project/STJr/srb2)
|
[![Build status](https://ci.appveyor.com/api/projects/status/399d4hcw9yy7hg2y?svg=true)](https://ci.appveyor.com/project/STJr/srb2)
|
||||||
[![Build status](https://travis-ci.org/STJr/SRB2.svg?branch=master)](https://travis-ci.org/STJr/SRB2)
|
[![Build status](https://travis-ci.org/STJr/SRB2.svg?branch=master)](https://travis-ci.org/STJr/SRB2)
|
||||||
|
[![CircleCI](https://circleci.com/gh/STJr/SRB2/tree/master.svg?style=svg)](https://circleci.com/gh/STJr/SRB2/tree/master)
|
||||||
|
|
||||||
[Sonic Robo Blast 2](https://srb2.org/) is a 3D Sonic the Hedgehog fangame based on a modified version of [Doom Legacy](http://doomlegacy.sourceforge.net/).
|
[Sonic Robo Blast 2](https://srb2.org/) is a 3D Sonic the Hedgehog fangame based on a modified version of [Doom Legacy](http://doomlegacy.sourceforge.net/).
|
||||||
|
|
||||||
|
@ -12,8 +13,6 @@
|
||||||
- libupnp (Linux/OS X only)
|
- libupnp (Linux/OS X only)
|
||||||
- libgme (Linux/OS X only)
|
- libgme (Linux/OS X only)
|
||||||
|
|
||||||
Warning: 64-bit builds are not netgame compatible with 32-bit builds. Use at your own risk.
|
|
||||||
|
|
||||||
## Compiling
|
## Compiling
|
||||||
|
|
||||||
See [SRB2 Wiki/Source code compiling](http://wiki.srb2.org/wiki/Source_code_compiling)
|
See [SRB2 Wiki/Source code compiling](http://wiki.srb2.org/wiki/Source_code_compiling)
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<AssemblerOutput>All</AssemblerOutput>
|
<AssemblerOutput>All</AssemblerOutput>
|
||||||
<SmallerTypeCheck>true</SmallerTypeCheck>
|
<SmallerTypeCheck>false</SmallerTypeCheck>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|
43
appveyor.yml
43
appveyor.yml
|
@ -1,4 +1,4 @@
|
||||||
version: 2.1.16.{branch}-{build}
|
version: 2.1.21.{branch}-{build}
|
||||||
os: MinGW
|
os: MinGW
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
@ -6,7 +6,7 @@ environment:
|
||||||
CCACHE_CC: i686-w64-mingw32-gcc
|
CCACHE_CC: i686-w64-mingw32-gcc
|
||||||
WINDRES: windres
|
WINDRES: windres
|
||||||
MINGW_SDK: c:\msys64\mingw32
|
MINGW_SDK: c:\msys64\mingw32
|
||||||
CFLAGS: -Wall -W -Werror
|
CFLAGS: -Wall -W -Werror -Wno-error=implicit-fallthrough -Wimplicit-fallthrough=3 -Wno-tautological-compare -Wno-error=suggest-attribute=noreturn
|
||||||
NASM_ZIP: nasm-2.12.01
|
NASM_ZIP: nasm-2.12.01
|
||||||
NASM_URL: http://www.nasm.us/pub/nasm/releasebuilds/2.12.01/win64/nasm-2.12.01-win64.zip
|
NASM_URL: http://www.nasm.us/pub/nasm/releasebuilds/2.12.01/win64/nasm-2.12.01-win64.zip
|
||||||
UPX_ZIP: upx391w
|
UPX_ZIP: upx391w
|
||||||
|
@ -39,6 +39,10 @@ configuration:
|
||||||
- SDL
|
- SDL
|
||||||
- DD
|
- DD
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
allow_failures:
|
||||||
|
- configuration: DD
|
||||||
|
|
||||||
before_build:
|
before_build:
|
||||||
- set Path=%MINGW_SDK%\bin;%Path%
|
- set Path=%MINGW_SDK%\bin;%Path%
|
||||||
- i686-w64-mingw32-gcc --version
|
- i686-w64-mingw32-gcc --version
|
||||||
|
@ -47,7 +51,7 @@ before_build:
|
||||||
- upx -V
|
- upx -V
|
||||||
- ccache -V
|
- ccache -V
|
||||||
- ccache -s
|
- ccache -s
|
||||||
- set SRB2_MFLAGS=-C src MINGW=1 WARNINGMODE=1 GCC53=1 CCACHE=1
|
- set SRB2_MFLAGS=-C src MINGW=1 WARNINGMODE=1 GCC72=1 CCACHE=1 NOOBJDUMP=1
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cmd: mingw32-make.exe %SRB2_MFLAGS% %CONFIGURATION%=1 clean
|
- cmd: mingw32-make.exe %SRB2_MFLAGS% %CONFIGURATION%=1 clean
|
||||||
|
@ -58,26 +62,29 @@ after_build:
|
||||||
- cmd: git rev-parse --short %APPVEYOR_REPO_COMMIT%>%TMP%/gitshort.txt
|
- cmd: git rev-parse --short %APPVEYOR_REPO_COMMIT%>%TMP%/gitshort.txt
|
||||||
- cmd: set /P GITSHORT=<%TMP%/gitshort.txt
|
- cmd: set /P GITSHORT=<%TMP%/gitshort.txt
|
||||||
- set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%GITSHORT%-%CONFIGURATION%.7z
|
- set BUILD_ARCHIVE=%APPVEYOR_REPO_BRANCH%-%GITSHORT%-%CONFIGURATION%.7z
|
||||||
|
- set BUILDSARCHIVE=%APPVEYOR_REPO_BRANCH%-%CONFIGURATION%.7z
|
||||||
- cmd: 7z a %BUILD_ARCHIVE% bin\Mingw\Release -xr!.gitignore
|
- cmd: 7z a %BUILD_ARCHIVE% bin\Mingw\Release -xr!.gitignore
|
||||||
- appveyor PushArtifact %BUILD_ARCHIVE%
|
- appveyor PushArtifact %BUILD_ARCHIVE%
|
||||||
|
- cmd: copy %BUILD_ARCHIVE% %BUILDSARCHIVE%
|
||||||
|
- appveyor PushArtifact %BUILDSARCHIVE%
|
||||||
|
|
||||||
test: off
|
test: off
|
||||||
|
|
||||||
deploy:
|
#deploy:
|
||||||
- provider: FTP
|
# - provider: FTP
|
||||||
protocol: ftps
|
# protocol: ftps
|
||||||
host:
|
# host:
|
||||||
secure: NsLJEPIBvmwCOj8Tg8RoRQ==
|
# secure: NsLJEPIBvmwCOj8Tg8RoRQ==
|
||||||
username:
|
# username:
|
||||||
secure: ejxi5mvk7oLYu7QtbYojajEPigMy0mokaKhuEVuDZcA=
|
# secure: ejxi5mvk7oLYu7QtbYojajEPigMy0mokaKhuEVuDZcA=
|
||||||
password:
|
# password:
|
||||||
secure: Hbn6Uy3lT0YZ88yFJ3aW4w==
|
# secure: Hbn6Uy3lT0YZ88yFJ3aW4w==
|
||||||
folder: appveyor
|
# folder: appveyor
|
||||||
application:
|
# application:
|
||||||
active_mode: false
|
# active_mode: false
|
||||||
on:
|
# on:
|
||||||
branch: master
|
# branch: master
|
||||||
appveyor_repo_tag: true
|
# appveyor_repo_tag: true
|
||||||
|
|
||||||
|
|
||||||
on_finish:
|
on_finish:
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
*
|
*
|
||||||
*.*
|
*.*
|
||||||
|
!README.txt
|
||||||
|
!LICENSE.txt
|
||||||
|
!LICENSE-3RD-PARTY.txt
|
|
@ -8,6 +8,9 @@ set(SRB2_ASSET_ALL
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/zones.dta
|
${CMAKE_CURRENT_SOURCE_DIR}/zones.dta
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/patch.dta
|
${CMAKE_CURRENT_SOURCE_DIR}/patch.dta
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/music.dta
|
${CMAKE_CURRENT_SOURCE_DIR}/music.dta
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/README.txt
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE-3RD-PARTY.txt
|
||||||
)
|
)
|
||||||
|
|
||||||
set(SRB2_ASSET_HASHED
|
set(SRB2_ASSET_HASHED
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,339 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 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.
|
||||||
|
|
||||||
|
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 Lesser 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 Street, 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 Lesser General
|
||||||
|
Public License instead of this License.
|
|
@ -0,0 +1,51 @@
|
||||||
|
SONIC ROBO BLAST 2
|
||||||
|
|
||||||
|
Sonic Robo Blast 2 (SRB2) is a 3D Sonic the Hedgehog fangame based on a
|
||||||
|
modified version of Doom Legacy.
|
||||||
|
|
||||||
|
LICENSE
|
||||||
|
|
||||||
|
The source code for SRB2 is licensed under the GNU General Public
|
||||||
|
License, Version 2. See LICENSE.txt for the full text of this license.
|
||||||
|
|
||||||
|
SRB2 uses various third-party libraries, including SDL, SDL Mixer, and
|
||||||
|
their dependencies. See LICENSE-3RD-PARTY.txt for the licenses of these
|
||||||
|
libraries.
|
||||||
|
|
||||||
|
SOURCE CODE
|
||||||
|
|
||||||
|
You may obtain the source code for SRB2, including the source code for
|
||||||
|
specific version releases, at the following web sites:
|
||||||
|
|
||||||
|
STJr GitLab:
|
||||||
|
https://git.magicalgirl.moe/STJr/SRB2
|
||||||
|
|
||||||
|
GitHub:
|
||||||
|
https://github.com/STJr/SRB2
|
||||||
|
|
||||||
|
CONTACT
|
||||||
|
|
||||||
|
You may contact Sonic Team Junior via the following web sites:
|
||||||
|
|
||||||
|
SRB2.ORG:
|
||||||
|
https://www.srb2.org
|
||||||
|
|
||||||
|
SRB2 Message Board:
|
||||||
|
https://mb.srb2.org
|
||||||
|
|
||||||
|
SRB2 Official Discord:
|
||||||
|
https://discord.gg/pYDXzpX
|
||||||
|
|
||||||
|
COPYRIGHT AND DISCLAIMER
|
||||||
|
|
||||||
|
Design and content on SRB2 is copyright 1998-2018 by Sonic Team Junior.
|
||||||
|
All non-original material on SRB2.ORG is copyrighted by their
|
||||||
|
respective owners, and no copyright infringement is intended. The owner
|
||||||
|
of the SRB2.ORG domain is only acting as an ISP, and is therefore not
|
||||||
|
responsible for any content on SRB2.ORG under the 1998 DMCA. This
|
||||||
|
site, its webmaster, and its staff make no profit whatsoever (in fact,
|
||||||
|
we lose money). Sonic Team Junior assumes no responsibility for the
|
||||||
|
content on any Sonic Team Junior fan sites.
|
||||||
|
|
||||||
|
Sonic Team Junior is in no way affiliated with SEGA or Sonic Team. We do
|
||||||
|
not claim ownership of any of SEGA's intellectual property used in SRB2.
|
|
@ -3,10 +3,45 @@ srb2 for Debian
|
||||||
|
|
||||||
SRB2 Debian package!
|
SRB2 Debian package!
|
||||||
Hi there, to rebuild this package just use the SRB2 Makefile system, or, optionally, run
|
Hi there, to rebuild this package just use the SRB2 Makefile system, or, optionally, run
|
||||||
dpkg-buildpackage in the in /bin/Resources directory. You can build these with or without a key
|
dpkg-buildpackage in the in /assets directory. You can build these with or without a key
|
||||||
if you want, but if you want to put these on a repo, generate your own GnuPG key as per the
|
if you want, but if you want to put these on a repo, generate your own GnuPG key as per the
|
||||||
https://help.ubuntu.com/community/GnuPrivacyGuardHowto instructions and pass the -k<keyid>
|
https://help.ubuntu.com/community/GnuPrivacyGuardHowto instructions and pass the -k<keyid>
|
||||||
command to debuild. Make sure you export the key footprint and give them to your users to install
|
command to debuild. Make sure you export the key footprint and give them to your users to install
|
||||||
with apt-key add. Thanks!
|
with apt-key add. Thanks!
|
||||||
|
|
||||||
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Fri, 26 Nov 2010 18:25:31 +1300
|
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Fri, 26 Nov 2010 18:25:31 +1300
|
||||||
|
|
||||||
|
|
||||||
|
Signing for Launchpad PPA
|
||||||
|
|
||||||
|
First, follow the above instructions to generate a GnuPG key with your identity. You will need
|
||||||
|
to publish the fingerprint of that key to Ubuntu's key server.
|
||||||
|
|
||||||
|
https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Uploading_the_key_to_Ubuntu_keyserver
|
||||||
|
|
||||||
|
Next, you will have to add that key fingerprint to your Launchpad account. Go to your Launchpad
|
||||||
|
profile and click the yellow Edit button next to "OpenPGP keys". Once you add the key, you can
|
||||||
|
upload signed source packages and publish them onto your PPA.
|
||||||
|
|
||||||
|
IF YOU UPLOAD A PACKAGE and Launchpad does NOT send you a confirmation or rejection email, that
|
||||||
|
means your key is not set up correctly with your Launchpad account.
|
||||||
|
|
||||||
|
|
||||||
|
Building for Launchpad PPA
|
||||||
|
|
||||||
|
Use these steps to prepare building a source package for Launchpad:
|
||||||
|
|
||||||
|
1. Highly recommend copying the assets/ folder to outside your repo folder, or else the asset
|
||||||
|
files may be included in the main source package, when you build that.
|
||||||
|
2. cd [wherever-your-assets-folder-is]/assets/
|
||||||
|
3. debuild -T clean (optional, if you already have asset files)
|
||||||
|
|
||||||
|
Building the source package is a two-step process:
|
||||||
|
|
||||||
|
1. debuild -T build (this downloads the asset files from srb2.org if necessary)
|
||||||
|
2. debuild -S (builds the source package for Launchpad, including the asset files)
|
||||||
|
|
||||||
|
Then follow the instructions at <https://help.launchpad.net/Packaging/PPA/Uploading> to upload
|
||||||
|
to your PPA and have Launchpad build your binary deb packages.
|
||||||
|
|
||||||
|
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 21:13:00 -0500
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
srb2-data (2.1.21~7) trusty; urgency=high
|
||||||
|
|
||||||
|
* Updated for SRB2 v2.1.21
|
||||||
|
|
||||||
|
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 14:31:00 -0500
|
||||||
|
|
||||||
|
|
||||||
srb2-data (2.1.14~1) unstable; urgency=low
|
srb2-data (2.1.14~1) unstable; urgency=low
|
||||||
|
|
||||||
* Updated for SRB2 v2.1.14
|
* Updated for SRB2 v2.1.14
|
||||||
|
|
|
@ -3,8 +3,9 @@
|
||||||
Source: srb2-data
|
Source: srb2-data
|
||||||
Section: games
|
Section: games
|
||||||
Priority: extra
|
Priority: extra
|
||||||
Maintainer: Callum Dickinson <gcfreak_ag20@hotmail.com>
|
Maintainer: Sonic Team Junior <stjr@srb2.org>
|
||||||
Build-Depends: debhelper (>= 7.0.50~)
|
Build-Depends: debhelper (>= 7.0.50~),
|
||||||
|
wget
|
||||||
Standards-Version: 3.8.4
|
Standards-Version: 3.8.4
|
||||||
Homepage: http://www.srb2.org
|
Homepage: http://www.srb2.org
|
||||||
|
|
||||||
|
@ -15,8 +16,7 @@ Description: A cross-platform 3D Sonic fangame
|
||||||
fangame built using a modified version of the Doom Legacy
|
fangame built using a modified version of the Doom Legacy
|
||||||
port of Doom. SRB2 is closely inspired by the original
|
port of Doom. SRB2 is closely inspired by the original
|
||||||
Sonic games from the Sega Genesis, and attempts to recreate
|
Sonic games from the Sega Genesis, and attempts to recreate
|
||||||
the design in 3D. While SRB2 isn't fully completed, it already
|
the design in 3D. It features tons of levels, enemies, speed,
|
||||||
features tons of levels, enemies, speed, and quite a lot
|
and quite a lot of the fun that the original Sonic games provided.
|
||||||
of the fun that the original Sonic games provided.
|
|
||||||
This is the data package that provides the data files that
|
This is the data package that provides the data files that
|
||||||
SRB2 requires to run, it will not work without it.
|
SRB2 requires to run; it will not work without it.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
This work was packaged for Debian by:
|
This work was packaged for Debian by:
|
||||||
|
|
||||||
Callum Dickinson <gcfreak_ag20@hotmail.com> on Fri, 26 Nov 2010 15:19:16 +1300
|
Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 14:31:00 -0500
|
||||||
|
|
||||||
It was downloaded from:
|
It was downloaded from:
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ Upstream Author(s):
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
Copyright (C) 1998-2010 Sonic Team Junior
|
Copyright (C) 1998-2018 Sonic Team Junior
|
||||||
|
|
||||||
License:
|
License:
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ License:
|
||||||
The Debian packaging is:
|
The Debian packaging is:
|
||||||
|
|
||||||
Copyright (C) 2010 Callum Dickinson <gcfreak_ag20@hotmail.com>
|
Copyright (C) 2010 Callum Dickinson <gcfreak_ag20@hotmail.com>
|
||||||
|
Copyright (C) 2010-2018 Sonic Team Junior <stjr@srb2.org>
|
||||||
|
|
||||||
and is licensed under the GPL version 2,
|
and is licensed under the GPL version 2,
|
||||||
see "/usr/share/common-licenses/GPL-2".
|
see "/usr/share/common-licenses/GPL-2".
|
||||||
|
|
|
@ -37,7 +37,7 @@ RM := rm -rf
|
||||||
DIR := $(shell pwd)
|
DIR := $(shell pwd)
|
||||||
|
|
||||||
PACKAGE := $(shell cat $(DIR)/debian/control | grep 'Package:' | sed -e 's/Package: //g')
|
PACKAGE := $(shell cat $(DIR)/debian/control | grep 'Package:' | sed -e 's/Package: //g')
|
||||||
DATAFILES := srb2.srb zones.dta player.dta rings.dta music.dta
|
DATAFILES := srb2.srb zones.dta player.dta rings.dta music.dta patch.dta README.txt LICENSE.txt LICENSE-3RD-PARTY.txt
|
||||||
|
|
||||||
DATADIR := usr/games/SRB2
|
DATADIR := usr/games/SRB2
|
||||||
RESOURCEDIR := .
|
RESOURCEDIR := .
|
||||||
|
@ -45,16 +45,21 @@ WGET := wget -P $(RESOURCEDIR) -c -nc
|
||||||
|
|
||||||
build:
|
build:
|
||||||
$(MKDIR) $(DIR)/debian/tmp/$(DATADIR)
|
$(MKDIR) $(DIR)/debian/tmp/$(DATADIR)
|
||||||
|
> $(DIR)/debian/source/include-binaries
|
||||||
# This will need to be updated every time SRB2 official version is
|
# This will need to be updated every time SRB2 official version is
|
||||||
# Copy data files to their install locations, and add data files to include-binaries
|
# Copy data files to their install locations, and add data files to include-binaries
|
||||||
for file in $(DATAFILES); do \
|
for file in $(DATAFILES); do \
|
||||||
$(WGET) http://alam.srb2.org/SRB2/2.1.14-Final/Resources/$$file; \
|
if [ ! -f $(RESOURCEDIR)/$$file ]; then \
|
||||||
if test "$$file" = "srb2.wad"; then \
|
$(WGET) http://alam.srb2.org/SRB2/2.1.21-Final/Resources/$$file; \
|
||||||
$(INSTALL) $(RESOURCEDIR)/$$file $(DIR)/debian/tmp/$(DATADIR)/srb2.srb; \
|
fi; \
|
||||||
else \
|
if [ -f $(RESOURCEDIR)/$$file ]; then \
|
||||||
$(INSTALL) $(RESOURCEDIR)/$$file $(DIR)/debian/tmp/$(DATADIR)/$$file; \
|
$(INSTALL) $(RESOURCEDIR)/$$file $(DIR)/debian/tmp/$(DATADIR)/$$file; \
|
||||||
|
echo $(RESOURCEDIR)/$$file >> $(DIR)/debian/source/include-binaries; \
|
||||||
|
fi; \
|
||||||
|
if [ ! -f $(DIR)/debian/tmp/$(DATADIR)/$$file ]; then \
|
||||||
|
echo $(DIR)/debian/tmp/$(DATADIR)/$$file not found and could not be downloaded!; \
|
||||||
|
return 1; \
|
||||||
fi; \
|
fi; \
|
||||||
echo $(RESOURCEDIR)/$$file >> $(DIR)/debian/source/include-binaries; \
|
|
||||||
done
|
done
|
||||||
|
|
||||||
binary-indep:
|
binary-indep:
|
||||||
|
@ -95,15 +100,18 @@ binary: binary-indep
|
||||||
dh_builddeb
|
dh_builddeb
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(RESOURCEDIR)/*.wad
|
$(RM) $(DIR)/debian/tmp/*; \
|
||||||
$(RM) $(RESOURCEDIR)/*.dta
|
$(RM) $(DIR)/debian/$(PACKAGE).install; \
|
||||||
$(RM) $(RESOURCEDIR)/*.plr
|
$(RM) $(DIR)/debian/files; \
|
||||||
$(RM) $(RESOURCEDIR)/*.wpn
|
|
||||||
$(RM) $(RESOURCEDIR)/*.srb
|
clean-all: clean
|
||||||
$(RM) $(RESOURCEDIR)/*.dll
|
$(RM) $(RESOURCEDIR)/*.wad; \
|
||||||
$(RM) $(DIR)/debian/tmp/*
|
$(RM) $(RESOURCEDIR)/*.dta; \
|
||||||
$(RM) $(DIR)/debian/$(PACKAGE).install
|
$(RM) $(RESOURCEDIR)/*.plr; \
|
||||||
$(RM) $(DIR)/debian/files
|
$(RM) $(RESOURCEDIR)/*.wpn; \
|
||||||
$(RM) $(DIR)/debian/source/include-binaries
|
$(RM) $(RESOURCEDIR)/*.srb; \
|
||||||
|
$(RM) $(RESOURCEDIR)/*.dll; \
|
||||||
|
$(RM) $(RESOURCEDIR)/*.txt; \
|
||||||
|
$(RM) $(DIR)/debian/source/include-binaries; \
|
||||||
|
|
||||||
.PHONY: all clean binary binary-arch binary-indep build
|
.PHONY: all clean binary binary-arch binary-indep build
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
tar-ignore = "tmp/*"
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -1,3 +1,3 @@
|
||||||
/srb2sdl.exe
|
*.exe
|
||||||
/srb2win.exe
|
*.mo
|
||||||
/r_opengl.dll
|
r_opengl.dll
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
/srb2sdl.exe
|
*.exe
|
||||||
/srb2win.exe
|
*.mo
|
||||||
/r_opengl.dll
|
r_opengl.dll
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -0,0 +1,2 @@
|
||||||
|
# DON'T REMOVE
|
||||||
|
# This keeps the folder from disappearing
|
|
@ -27,5 +27,17 @@ function(git_current_branch variable path)
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(${variable} "${output}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_latest_commit variable path)
|
||||||
|
execute_process(COMMAND ${GIT_EXECUTABLE} "rev-parse" "--short" "HEAD"
|
||||||
|
WORKING_DIRECTORY "${path}"
|
||||||
|
RESULT_VARIABLE result
|
||||||
|
OUTPUT_VARIABLE output
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
set(${variable} "${output}" PARENT_SCOPE)
|
set(${variable} "${output}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
|
@ -9,3 +9,38 @@ instructions and pass the -k<keyid> command to debuild. Make sure you export the
|
||||||
and give them to your users to install with apt-key add. Thanks!
|
and give them to your users to install with apt-key add. Thanks!
|
||||||
|
|
||||||
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Fri, 26 Nov 2010 18:25:31 +1300
|
-- Callum Dickinson <gcfreak_ag20@hotmail.com> Fri, 26 Nov 2010 18:25:31 +1300
|
||||||
|
|
||||||
|
|
||||||
|
Signing for Launchpad PPA
|
||||||
|
|
||||||
|
First, follow the above instructions to generate a GnuPG key with your identity. You will need
|
||||||
|
to publish the fingerprint of that key to Ubuntu's key server.
|
||||||
|
|
||||||
|
https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Uploading_the_key_to_Ubuntu_keyserver
|
||||||
|
|
||||||
|
Next, you will have to add that key fingerprint to your Launchpad account. Go to your Launchpad
|
||||||
|
profile and click the yellow Edit button next to "OpenPGP keys". Once you add the key, you can
|
||||||
|
upload signed source packages and publish them onto your PPA.
|
||||||
|
|
||||||
|
IF YOU UPLOAD A PACKAGE and Launchpad does NOT send you a confirmation or rejection email, that
|
||||||
|
means your key is not set up correctly with your Launchpad account.
|
||||||
|
|
||||||
|
|
||||||
|
Building for Launchpad PPA
|
||||||
|
|
||||||
|
Use these steps to prepare building a source package for Launchpad:
|
||||||
|
|
||||||
|
1. cd [srb2repo]
|
||||||
|
2. git reset --hard; git clean -fd; git clean -fx;
|
||||||
|
* Resets your repo folder to a committed state and removes untracked files
|
||||||
|
* If you built srb2-data in the assets/ folder, MAKE SURE THAT FOLDER DOES NOT HAVE ASSETS,
|
||||||
|
OR THEY MAY BE INCLUDED IN THE MAIN SOURCE PACKAGE!
|
||||||
|
|
||||||
|
Building the source package takes just one step:
|
||||||
|
|
||||||
|
1. debuild -S (builds the source package for Launchpad)
|
||||||
|
|
||||||
|
Then follow the instructions at <https://help.launchpad.net/Packaging/PPA/Uploading> to upload
|
||||||
|
to your PPA and have Launchpad build your binary deb packages.
|
||||||
|
|
||||||
|
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 21:13:00 -0500
|
||||||
|
|
|
@ -22,6 +22,10 @@ Build instructions:
|
||||||
|
|
||||||
make -C src LINUX=1
|
make -C src LINUX=1
|
||||||
|
|
||||||
|
Build instructions for non-X86 devices (such as X64):
|
||||||
|
|
||||||
|
make -C src LINUX=1 NONX86=1
|
||||||
|
|
||||||
Build instructions to build for Wii Linux/SRB2Wii on a PowerPC system,
|
Build instructions to build for Wii Linux/SRB2Wii on a PowerPC system,
|
||||||
follow cross-compiling instructions for cross-compiling on a x86 system:
|
follow cross-compiling instructions for cross-compiling on a x86 system:
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
srb2 (2.1.21~9) trusty; urgency=high
|
||||||
|
|
||||||
|
* SRB2 v2.1.21 release
|
||||||
|
|
||||||
|
-- Marco Zafra <marco.a.zafra@gmail.com> Mon, 27 Nov 2018 16:45:00 -0500
|
||||||
|
|
||||||
|
|
||||||
srb2 (2.0.6-5) maverick; urgency=high
|
srb2 (2.0.6-5) maverick; urgency=high
|
||||||
|
|
||||||
* Initial proper release..
|
* Initial proper release..
|
||||||
|
|
|
@ -3,11 +3,13 @@
|
||||||
Source: srb2
|
Source: srb2
|
||||||
Section: games
|
Section: games
|
||||||
Priority: extra
|
Priority: extra
|
||||||
Maintainer: Callum Dickinson <gcfreak_ag20@hotmail.com>
|
Maintainer: Sonic Team Junior <stjr@srb2.org>
|
||||||
Build-Depends: debhelper (>= 7.0.50~),
|
Build-Depends: debhelper (>= 7.0.50~),
|
||||||
libsdl2-dev,
|
libsdl2-dev,
|
||||||
libsdl2-mixer-dev,
|
libsdl2-mixer-dev,
|
||||||
libpng12-dev (>= 1.2.7),
|
libpng12-dev (>= 1.2.7) | libpng-dev,
|
||||||
|
zlib1g-dev,
|
||||||
|
libgme-dev,
|
||||||
libglu1-dev | libglu-dev,
|
libglu1-dev | libglu-dev,
|
||||||
libosmesa6-dev | libgl-dev,
|
libosmesa6-dev | libgl-dev,
|
||||||
nasm [i386]
|
nasm [i386]
|
||||||
|
@ -16,27 +18,26 @@ Homepage: http://www.srb2.org
|
||||||
|
|
||||||
Package: srb2
|
Package: srb2
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14)
|
Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (>= 2.1.15), srb2-data (<= 2.1.21)
|
||||||
Description: A cross-platform 3D Sonic fangame
|
Description: A cross-platform 3D Sonic fangame
|
||||||
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
||||||
fangame built using a modified version of the Doom Legacy
|
fangame built using a modified version of the Doom Legacy
|
||||||
port of Doom. SRB2 is closely inspired by the original
|
port of Doom. SRB2 is closely inspired by the original
|
||||||
Sonic games from the Sega Genesis, and attempts to recreate
|
Sonic games from the Sega Genesis, and attempts to recreate
|
||||||
the design in 3D. While SRB2 isn't fully completed, it already
|
the design in 3D. It features tons of levels, enemies, speed,
|
||||||
features tons of levels, enemies, speed, and quite a lot
|
and quite a lot of the fun that the original Sonic games provided.
|
||||||
of the fun that the original Sonic games provided.
|
|
||||||
|
|
||||||
Package: srb2-dbg
|
Package: srb2-dbg
|
||||||
Architecture: any
|
Architecture: any
|
||||||
# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat
|
# FIXME: should be Depends: ${shlibs:Depends}, ${misc:Depends}, srb2-data (= 2.1.14), srb2 but dh_shlibdeps is being an asshat
|
||||||
Depends: libc6, ${misc:Depends}, srb2-data (= 2.1.14), srb2
|
Depends: libc6, ${misc:Depends}, srb2-data (>= 2.1.15), srb2-data (<= 2.1.21), srb2
|
||||||
Description: A cross-platform 3D Sonic fangame
|
Description: A cross-platform 3D Sonic fangame
|
||||||
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
Sonic Robo Blast 2 is a 3D open-source Sonic the Hedgehog
|
||||||
fangame built using a modified version of the Doom Legacy
|
fangame built using a modified version of the Doom Legacy
|
||||||
port of Doom. SRB2 is closely inspired by the original
|
port of Doom. SRB2 is closely inspired by the original
|
||||||
Sonic games from the Sega Genesis, and attempts to recreate
|
Sonic games from the Sega Genesis, and attempts to recreate
|
||||||
the design in 3D. While SRB2 isn't fully completed, it already
|
the design in 3D. It features tons of levels, enemies, speed,
|
||||||
features tons of levels, enemies, speed, and quite a lot
|
and quite a lot of the fun that the original Sonic games provided.
|
||||||
of the fun that the original Sonic games provided.
|
This is a debug binary; its symbols will be loaded by gdb
|
||||||
This is a debug binary, its symbols will be loaded by gdb
|
|
||||||
when the user starts the game with gdb for debugging.
|
when the user starts the game with gdb for debugging.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
This work was packaged for Debian by:
|
This work was packaged for Debian by:
|
||||||
|
|
||||||
Callum Dickinson <gcfreak_ag20@hotmail.com> on Fri, 26 Nov 2010 15:19:16 +1300
|
Marco Zafra <marco.a.zafra@gmail.com> Mon, 26 Nov 2018 14:31:00 -0500
|
||||||
|
|
||||||
It was downloaded from:
|
It was downloaded from:
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ Upstream Author(s):
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
Copyright (C) 1998-2010 Sonic Team Junior
|
Copyright (C) 1998-2018 Sonic Team Junior
|
||||||
|
|
||||||
License:
|
License:
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ License:
|
||||||
The Debian packaging is:
|
The Debian packaging is:
|
||||||
|
|
||||||
Copyright (C) 2010 Callum Dickinson <gcfreak_ag20@hotmail.com>
|
Copyright (C) 2010 Callum Dickinson <gcfreak_ag20@hotmail.com>
|
||||||
|
Copyright (C) 2010-2018 Sonic Team Junior <stjr@srb2.org>
|
||||||
|
|
||||||
and is licensed under the GPL version 2,
|
and is licensed under the GPL version 2,
|
||||||
see "/usr/share/common-licenses/GPL-2".
|
see "/usr/share/common-licenses/GPL-2".
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
readme.txt
|
README.md
|
||||||
readme.txt
|
assets/README.txt
|
||||||
|
assets/LICENSE.txt
|
||||||
|
assets/LICENSE-3RD-PARTY.txt
|
||||||
|
|
|
@ -57,21 +57,32 @@ SECTION = Games/Action
|
||||||
EXENAME = srb2
|
EXENAME = srb2
|
||||||
DBGNAME = debug/$(EXENAME)
|
DBGNAME = debug/$(EXENAME)
|
||||||
|
|
||||||
PKGDIR = usr/games
|
PKGDIR = usr/games/SRB2
|
||||||
DBGDIR = usr/lib/debug/$(PKGDIR)
|
DBGDIR = usr/lib/debug/$(PKGDIR)
|
||||||
PIXMAPS_DIR = usr/share/pixmaps
|
PIXMAPS_DIR = usr/share/pixmaps
|
||||||
DESKTOP_DIR = usr/share/applications
|
DESKTOP_DIR = usr/share/applications
|
||||||
PREFIX = $(shell test "$(CROSS_COMPILE_BUILD)" != "$(CROSS_COMPILE_HOST)" && echo "PREFIX=$(CROSS_COMPILE_HOST)")
|
PREFIX = $(shell test "$(CROSS_COMPILE_BUILD)" != "$(CROSS_COMPILE_HOST)" && echo "PREFIX=$(CROSS_COMPILE_HOST)")
|
||||||
OS = LINUX=1
|
OS = LINUX=1
|
||||||
NONX86 = $(shell test "`echo $(CROSS_COMPILE_HOST) | grep 'i[3-6]86'`" || echo "NONX86=1")
|
NONX86 = $(shell test "`echo $(CROSS_COMPILE_HOST) | grep 'i[3-6]86'`" || echo "NONX86=1")
|
||||||
MAKEARGS = $(OS) $(NONX86) $(PREFIX) EXENAME=$(EXENAME) DBGNAME=$(DBGNAME) SDL_PKGCONFIG=sdl2 PNG_PKGCONFIG=libpng NOOBJDUMP=1
|
MAKEARGS = $(OS) $(NONX86) $(PREFIX) EXENAME=$(EXENAME) DBGNAME=$(DBGNAME) NOOBJDUMP=1 # SDL_PKGCONFIG=sdl2 PNG_PKGCONFIG=libpng
|
||||||
MENUFILE1 = ?package($(PACKAGE)):needs="X11" section="$(SECTION)"
|
MENUFILE1 = ?package($(PACKAGE)):needs="X11" section="$(SECTION)"
|
||||||
MENUFILE2 = title="$(TITLE)" command="/$(PKGDIR)/$(PACKAGE)"
|
MENUFILE2 = title="$(TITLE)" command="/$(PKGDIR)/$(PACKAGE)"
|
||||||
# FIXME pkg-config dir hacks
|
|
||||||
export PKG_CONFIG_LIBDIR = /usr/lib/$(CROSS_COMPILE_HOST)/pkgconfig
|
|
||||||
BINDIR := $(DIR)/bin/Linux/Release
|
BINDIR := $(DIR)/bin/Linux/Release
|
||||||
|
|
||||||
|
# FIXME pkg-config dir hacks
|
||||||
|
# Launchpad doesn't need this; it actually makes i386 builds fail due to cross-compile
|
||||||
|
# export PKG_CONFIG_LIBDIR = /usr/lib/$(CROSS_COMPILE_HOST)/pkgconfig
|
||||||
LDFLAGS += "-Wl,-rpath=/usr/lib/$(CROSS_COMPILE_HOST)"
|
LDFLAGS += "-Wl,-rpath=/usr/lib/$(CROSS_COMPILE_HOST)"
|
||||||
|
|
||||||
|
# Some libgme-dev packages don't use pkg-config yet, so include the linker flag ourselves
|
||||||
|
PKG_CONFIG?=pkg-config
|
||||||
|
LIBGME_PKGCONFIG?=libgme
|
||||||
|
LIBGME_LDFLAGS?=$(shell $(PKG_CONFIG) $(LIBGME_PKGCONFIG) --libs)
|
||||||
|
|
||||||
|
ifeq ($(LIBGME_LDFLAGS),)
|
||||||
|
MAKEARGS += LIBGME_LDFLAGS=-lgme
|
||||||
|
endif
|
||||||
|
|
||||||
build:
|
build:
|
||||||
$(MKDIR) $(BINDIR)/debug
|
$(MKDIR) $(BINDIR)/debug
|
||||||
$(MAKE) -C $(DIR)/src $(MAKEARGS)
|
$(MAKE) -C $(DIR)/src $(MAKEARGS)
|
||||||
|
@ -100,8 +111,8 @@ binary-arch:
|
||||||
echo $(DESKTOP_DIR) >> $(DIR)/debian/$(PACKAGE).install
|
echo $(DESKTOP_DIR) >> $(DIR)/debian/$(PACKAGE).install
|
||||||
echo $(PIXMAPS_DIR) >> $(DIR)/debian/$(PACKAGE).install
|
echo $(PIXMAPS_DIR) >> $(DIR)/debian/$(PACKAGE).install
|
||||||
echo $(DBGDIR) > $(DIR)/debian/$(DBGPKG).install
|
echo $(DBGDIR) > $(DIR)/debian/$(DBGPKG).install
|
||||||
|
# Launchpad only calls binary-arch, so just move everything up
|
||||||
binary: binary-arch
|
#binary: binary-arch
|
||||||
# Generate .desktop specifications
|
# Generate .desktop specifications
|
||||||
echo "`echo '$(MENUFILE1)\\'`" > $(DIR)/debian/menu
|
echo "`echo '$(MENUFILE1)\\'`" > $(DIR)/debian/menu
|
||||||
echo " `echo '$(MENUFILE2)'`" >> $(DIR)/debian/menu
|
echo " `echo '$(MENUFILE2)'`" >> $(DIR)/debian/menu
|
||||||
|
@ -133,6 +144,8 @@ binary: binary-arch
|
||||||
dh_md5sums
|
dh_md5sums
|
||||||
dh_builddeb
|
dh_builddeb
|
||||||
|
|
||||||
|
binary: binary-arch
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(MAKE) -C $(DIR)/src $(MAKEARGS) clean cleandep
|
$(MAKE) -C $(DIR)/src $(MAKEARGS) clean cleandep
|
||||||
$(RM) $(BINDIR)/*
|
$(RM) $(BINDIR)/*
|
||||||
|
@ -145,4 +158,4 @@ clean:
|
||||||
$(RM) $(DIR)/debian/files
|
$(RM) $(DIR)/debian/files
|
||||||
$(RM) $(DIR)/debian/source/include-binaries
|
$(RM) $(DIR)/debian/source/include-binaries
|
||||||
|
|
||||||
.PHONY: all clean binary binary-arch binary-indep build
|
.PHONY: all clean binary binary-indep build
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
tar-ignore = "assets/*.srb"
|
||||||
|
tar-ignore = "assets/*.pk3"
|
||||||
|
tar-ignore = "assets/*.dta"
|
||||||
|
tar-ignore = "assets/*.wad"
|
||||||
|
tar-ignore = "assets/debian/srb2-data/*"
|
||||||
|
tar-ignore = "assets/debian/tmp/*"
|
||||||
|
tar-ignore = "*.obj"
|
||||||
|
tar-ignore = "*.dep"
|
||||||
|
tar-ignore = ".git/*"
|
||||||
|
tar-ignore = ".git*"
|
|
@ -1,8 +1,8 @@
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Sonic Robo Blast 2
|
Name=Sonic Robo Blast 2
|
||||||
Comment=A free 3D Sonic the Hedgehog fan-game built using a modified ver. of the Doom Legacy source port
|
Comment=A free 3D Sonic the Hedgehog fangame closely inspired by the original Sonic games on the Sega Genesis.
|
||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Exec=srb2
|
Exec=/usr/games/SRB2/srb2
|
||||||
Icon=/usr/share/pixmaps/srb2.png
|
Icon=/usr/share/pixmaps/srb2.png
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
# SRB2 - Which DLLs do I need to bundle?
|
||||||
|
|
||||||
|
Updated 12/4/2018 (v2.1.21)
|
||||||
|
|
||||||
|
Here are the required DLLs, per build. For each architecture, copy all the binaries from these folders:
|
||||||
|
|
||||||
|
* libs\dll-binaries\[i686/x86_64]
|
||||||
|
* libs\SDL2\[i686/x86_64]...\bin
|
||||||
|
* libs\SDL2_mixer\[i686/x86_64]...\bin
|
||||||
|
|
||||||
|
and don't forget to build r_opengl.dll for srb2dd.
|
||||||
|
|
||||||
|
## srb2win, 32-bit
|
||||||
|
|
||||||
|
* libs\dll-binaries\i686\exchndl.dll
|
||||||
|
* libs\dll-binaries\i686\libgme.dll
|
||||||
|
* libs\dll-binaries\i686\mgwhelp.dll (depend for exchndl.dll)
|
||||||
|
* libs\SDL2\i686-w64-mingw32\bin\SDL2.dll
|
||||||
|
* libs\SDL2_mixer\i686-w64-mingw32\bin\*.dll (get everything)
|
||||||
|
|
||||||
|
## srb2win, 64-bit
|
||||||
|
|
||||||
|
* libs\dll-binaries\x86_64\exchndl.dll
|
||||||
|
* libs\dll-binaries\x86_64\libgme.dll
|
||||||
|
* libs\dll-binaries\x86_64\mgwhelp.dll (depend for exchndl.dll)
|
||||||
|
* libs\SDL2\x86_64-w64-mingw32\bin\SDL2.dll
|
||||||
|
* libs\SDL2_mixer\x86_64-w64-mingw32\bin\*.dll (get everything)
|
||||||
|
|
||||||
|
## srb2dd, 32-bit
|
||||||
|
|
||||||
|
* libs\dll-binaries\i686\exchndl.dll
|
||||||
|
* libs\dll-binaries\i686\fmodex.dll
|
||||||
|
* libs\dll-binaries\i686\libgme.dll
|
||||||
|
* libs\dll-binaries\i686\mgwhelp.dll (depend for exchndl.dll)
|
||||||
|
* r_opengl.dll (build this from make)
|
||||||
|
|
||||||
|
## srb2dd, 64-bit
|
||||||
|
|
||||||
|
* libs\dll-binaries\x86_64\exchndl.dll
|
||||||
|
* libs\dll-binaries\x86_64\fmodex.dll
|
||||||
|
* libs\dll-binaries\x86_64\libgme.dll
|
||||||
|
* libs\dll-binaries\x86_64\mgwhelp.dll (depend for exchndl.dll)
|
||||||
|
* r_opengl.dll (build this from make)
|
|
@ -1,16 +1,16 @@
|
||||||
|
|
||||||
Bugs are now managed in the SDL bug tracker, here:
|
Bugs are now managed in the SDL bug tracker, here:
|
||||||
|
|
||||||
http://bugzilla.libsdl.org/
|
https://bugzilla.libsdl.org/
|
||||||
|
|
||||||
You may report bugs there, and search to see if a given issue has already
|
You may report bugs there, and search to see if a given issue has already
|
||||||
been reported, discussed, and maybe even fixed.
|
been reported, discussed, and maybe even fixed.
|
||||||
|
|
||||||
|
|
||||||
You may also find help on the SDL mailing list. Subscription information:
|
You may also find help at the SDL forums/mailing list:
|
||||||
|
|
||||||
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
|
https://discourse.libsdl.org/
|
||||||
|
|
||||||
Bug reports are welcome here, but we really appreciate if you use Bugzilla, as
|
Bug reports are welcome here, but we really appreciate if you use Bugzilla, as
|
||||||
bugs discussed on the mailing list may be forgotten or missed.
|
bugs discussed on the mailing list may be forgotten or missed.
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
|
|
||||||
Simple DirectMedia Layer
|
Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
|
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
arising from the use of this software.
|
arising from the use of this software.
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
including commercial applications, and to alter it and redistribute it
|
including commercial applications, and to alter it and redistribute it
|
||||||
freely, subject to the following restrictions:
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
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
|
claim that you wrote the original software. If you use this software
|
||||||
in a product, an acknowledgment in the product documentation would be
|
in a product, an acknowledgment in the product documentation would be
|
||||||
appreciated but is not required.
|
appreciated but is not required.
|
||||||
2. Altered source versions must be plainly marked as such, and must not be
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
misrepresented as being the original software.
|
misrepresented as being the original software.
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
|
|
@ -1,53 +1,53 @@
|
||||||
|
|
||||||
Simple DirectMedia Layer CREDITS
|
Simple DirectMedia Layer CREDITS
|
||||||
Thanks to everyone who made this possible, including:
|
Thanks to everyone who made this possible, including:
|
||||||
|
|
||||||
* Cliff Matthews, for giving me a reason to start this project. :)
|
* Cliff Matthews, for giving me a reason to start this project. :)
|
||||||
-- Executor rocks! *grin*
|
-- Executor rocks! *grin*
|
||||||
|
|
||||||
* Ryan Gordon for helping everybody out and keeping the dream alive. :)
|
* Ryan Gordon for helping everybody out and keeping the dream alive. :)
|
||||||
|
|
||||||
* Gabriel Jacobo for his work on the Android port and generally helping out all around.
|
* Gabriel Jacobo for his work on the Android port and generally helping out all around.
|
||||||
|
|
||||||
* Philipp Wiesemann for his attention to detail reviewing the entire SDL code base and proposes patches.
|
* Philipp Wiesemann for his attention to detail reviewing the entire SDL code base and proposes patches.
|
||||||
|
|
||||||
* Andreas Schiffler for his dedication to unit tests, Visual Studio projects, and managing the Google Summer of Code.
|
* Andreas Schiffler for his dedication to unit tests, Visual Studio projects, and managing the Google Summer of Code.
|
||||||
|
|
||||||
* Mike Sartain for incorporating SDL into Team Fortress 2 and cheering me on at Valve.
|
* Mike Sartain for incorporating SDL into Team Fortress 2 and cheering me on at Valve.
|
||||||
|
|
||||||
* Alfred Reynolds for the game controller API and general (in)sanity
|
* Alfred Reynolds for the game controller API and general (in)sanity
|
||||||
|
|
||||||
* Jørgen Tjernø for numerous magical Mac OS X fixes.
|
* Jørgen Tjernø for numerous magical Mac OS X fixes.
|
||||||
|
|
||||||
* Pierre-Loup Griffais for his deep knowledge of OpenGL drivers.
|
* Pierre-Loup Griffais for his deep knowledge of OpenGL drivers.
|
||||||
|
|
||||||
* Julian Winter for the SDL 2.0 website.
|
* Julian Winter for the SDL 2.0 website.
|
||||||
|
|
||||||
* Sheena Smith for many months of great work on the SDL wiki creating the API documentation and style guides.
|
* Sheena Smith for many months of great work on the SDL wiki creating the API documentation and style guides.
|
||||||
|
|
||||||
* Paul Hunkin for his port of SDL to Android during the Google Summer of Code 2010.
|
* Paul Hunkin for his port of SDL to Android during the Google Summer of Code 2010.
|
||||||
|
|
||||||
* Eli Gottlieb for his work on shaped windows during the Google Summer of Code 2010.
|
* Eli Gottlieb for his work on shaped windows during the Google Summer of Code 2010.
|
||||||
|
|
||||||
* Jim Grandpre for his work on multi-touch and gesture recognition during
|
* Jim Grandpre for his work on multi-touch and gesture recognition during
|
||||||
the Google Summer of Code 2010.
|
the Google Summer of Code 2010.
|
||||||
|
|
||||||
* Edgar "bobbens" Simo for his force feedback API development during the
|
* Edgar "bobbens" Simo for his force feedback API development during the
|
||||||
Google Summer of Code 2008.
|
Google Summer of Code 2008.
|
||||||
|
|
||||||
* Aaron Wishnick for his work on audio resampling and pitch shifting during
|
* Aaron Wishnick for his work on audio resampling and pitch shifting during
|
||||||
the Google Summer of Code 2008.
|
the Google Summer of Code 2008.
|
||||||
|
|
||||||
* Holmes Futrell for his port of SDL to the iPhone and iPod Touch during the
|
* Holmes Futrell for his port of SDL to the iPhone and iPod Touch during the
|
||||||
Google Summer of Code 2008.
|
Google Summer of Code 2008.
|
||||||
|
|
||||||
* Jon Atkins for SDL_image, SDL_mixer and SDL_net documentation.
|
* Jon Atkins for SDL_image, SDL_mixer and SDL_net documentation.
|
||||||
|
|
||||||
* Everybody at Loki Software, Inc. for their great contributions!
|
* Everybody at Loki Software, Inc. for their great contributions!
|
||||||
|
|
||||||
And a big hand to everyone else who has contributed over the years.
|
And a big hand to everyone else who has contributed over the years.
|
||||||
|
|
||||||
THANKS! :)
|
THANKS! :)
|
||||||
|
|
||||||
-- Sam Lantinga <slouken@libsdl.org>
|
-- Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
|
|
||||||
To install SDL for native development:
|
The 32-bit files are in i686-w64-mingw32
|
||||||
make native
|
The 64-bit files are in x86_64-w64-mingw32
|
||||||
|
|
||||||
To install SDL for cross-compiling development:
|
To install SDL for native development:
|
||||||
make cross
|
make native
|
||||||
|
|
||||||
Look at the example programs in ./test, and check out online documentation:
|
To install SDL for cross-compiling development:
|
||||||
http://wiki.libsdl.org/
|
make cross
|
||||||
|
|
||||||
Join the SDL developer mailing list if you want to join the community:
|
Look at the example programs in ./test, and check out online documentation:
|
||||||
http://www.libsdl.org/mailing-list.php
|
http://wiki.libsdl.org/
|
||||||
|
|
||||||
That's it!
|
Join the SDL developer mailing list if you want to join the community:
|
||||||
Sam Lantinga <slouken@libsdl.org>
|
http://www.libsdl.org/mailing-list.php
|
||||||
|
|
||||||
|
That's it!
|
||||||
|
Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Makefile for installing the mingw32 version of the SDL library
|
# Makefile for installing the mingw32 version of the SDL library
|
||||||
|
|
||||||
CROSS_PATH := /usr/local/cross-tools
|
CROSS_PATH := /usr/local
|
||||||
ARCHITECTURES := i686-w64-mingw32 x86_64-w64-mingw32
|
ARCHITECTURES := i686-w64-mingw32 x86_64-w64-mingw32
|
||||||
|
|
||||||
all install:
|
all install:
|
||||||
|
@ -22,6 +22,7 @@ install-package:
|
||||||
sed "s|^prefix=.*|prefix=$(prefix)|" <$(arch)/bin/sdl2-config >$(prefix)/bin/sdl2-config; \
|
sed "s|^prefix=.*|prefix=$(prefix)|" <$(arch)/bin/sdl2-config >$(prefix)/bin/sdl2-config; \
|
||||||
chmod 755 $(prefix)/bin/sdl2-config; \
|
chmod 755 $(prefix)/bin/sdl2-config; \
|
||||||
sed "s|^libdir=.*|libdir=\'$(prefix)/lib\'|" <$(arch)/lib/libSDL2.la >$(prefix)/lib/libSDL2.la; \
|
sed "s|^libdir=.*|libdir=\'$(prefix)/lib\'|" <$(arch)/lib/libSDL2.la >$(prefix)/lib/libSDL2.la; \
|
||||||
|
sed "s|^libdir=.*|libdir=\'$(prefix)/lib\'|" <$(arch)/lib/libSDL2main.la >$(prefix)/lib/libSDL2main.la; \
|
||||||
sed "s|^prefix=.*|prefix=$(prefix)|" <$(arch)/lib/pkgconfig/sdl2.pc >$(prefix)/lib/pkgconfig/sdl2.pc; \
|
sed "s|^prefix=.*|prefix=$(prefix)|" <$(arch)/lib/pkgconfig/sdl2.pc >$(prefix)/lib/pkgconfig/sdl2.pc; \
|
||||||
else \
|
else \
|
||||||
echo "*** ERROR: $(arch) or $(prefix) does not exist!"; \
|
echo "*** ERROR: $(arch) or $(prefix) does not exist!"; \
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
|
|
||||||
Please distribute this file with the SDL runtime environment:
|
Please distribute this file with the SDL runtime environment:
|
||||||
|
|
||||||
The Simple DirectMedia Layer (SDL for short) is a cross-platform library
|
The Simple DirectMedia Layer (SDL for short) is a cross-platform library
|
||||||
designed to make it easy to write multi-media software, such as games and
|
designed to make it easy to write multi-media software, such as games
|
||||||
emulators.
|
and emulators.
|
||||||
|
|
||||||
The Simple DirectMedia Layer library source code is available from:
|
The Simple DirectMedia Layer library source code is available from:
|
||||||
http://www.libsdl.org/
|
https://www.libsdl.org/
|
||||||
|
|
||||||
This library is distributed under the terms of the zlib license:
|
This library is distributed under the terms of the zlib license:
|
||||||
http://www.zlib.net/zlib_license.html
|
http://www.zlib.net/zlib_license.html
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
|
|
||||||
Simple DirectMedia Layer
|
Simple DirectMedia Layer
|
||||||
|
|
||||||
(SDL)
|
(SDL)
|
||||||
|
|
||||||
Version 2.0
|
Version 2.0
|
||||||
|
|
||||||
---
|
---
|
||||||
http://www.libsdl.org/
|
https://www.libsdl.org/
|
||||||
|
|
||||||
Simple DirectMedia Layer is a cross-platform development library designed
|
Simple DirectMedia Layer is a cross-platform development library designed
|
||||||
to provide low level access to audio, keyboard, mouse, joystick, and graphics
|
to provide low level access to audio, keyboard, mouse, joystick, and graphics
|
||||||
hardware via OpenGL and Direct3D. It is used by video playback software,
|
hardware via OpenGL and Direct3D. It is used by video playback software,
|
||||||
emulators, and popular games including Valve's award winning catalog
|
emulators, and popular games including Valve's award winning catalog
|
||||||
and many Humble Bundle games.
|
and many Humble Bundle games.
|
||||||
|
|
||||||
More extensive documentation is available in the docs directory, starting
|
More extensive documentation is available in the docs directory, starting
|
||||||
with README.md
|
with README.md
|
||||||
|
|
||||||
Enjoy!
|
Enjoy!
|
||||||
Sam Lantinga (slouken@libsdl.org)
|
Sam Lantinga (slouken@libsdl.org)
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
# SDL Development Libaries
|
||||||
|
|
||||||
|
Download both the VC and MinGW packages and extract them here.
|
||||||
|
|
||||||
|
https://www.libsdl.org/download-2.0.php
|
||||||
|
|
||||||
|
## VC Package
|
||||||
|
|
||||||
|
* include
|
||||||
|
* lib
|
||||||
|
|
||||||
|
## MinGW Package
|
||||||
|
|
||||||
|
* i686-w64-mingw32
|
||||||
|
* x86_64-w64-mingw32
|
|
@ -1,199 +1,434 @@
|
||||||
|
|
||||||
This is a list of major changes in SDL's version history.
|
This is a list of major changes in SDL's version history.
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
2.0.4:
|
2.0.9:
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
General:
|
General:
|
||||||
* Added support for web applications using Emscripten, see docs/README-emscripten.md for more information
|
* Added a new sensor API, initialized by passing SDL_INIT_SENSOR to SDL_Init(), and defined in SDL_sensor.h
|
||||||
* Added support for web applications using Native Client (NaCl), see docs/README-nacl.md for more information
|
* Added an event SDL_SENSORUPDATE which is sent when a sensor is updated
|
||||||
* Added an API to queue audio instead of using the audio callback:
|
* Added SDL_GetDisplayOrientation() to return the current display orientation
|
||||||
SDL_QueueAudio(), SDL_GetQueuedAudioSize(), SDL_ClearQueuedAudio()
|
* Added an event SDL_DISPLAYEVENT which is sent when the display orientation changes
|
||||||
* Added events for audio device hot plug support:
|
* Added HIDAPI joystick drivers for more consistent support for Xbox, PS4 and Nintendo Switch Pro controller support across platforms. (Thanks to Valve for contributing the PS4 and Nintendo Switch Pro controller support)
|
||||||
SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED
|
* Added support for many other popular game controllers
|
||||||
* Added SDL_PointInRect()
|
* Added SDL_JoystickGetDevicePlayerIndex(), SDL_JoystickGetPlayerIndex(), and SDL_GameControllerGetPlayerIndex() to get the player index for a controller. For XInput controllers this returns the XInput index for the controller.
|
||||||
* Added SDL_HasAVX2() to detect CPUs with AVX2 support
|
* Added SDL_GameControllerRumble() and SDL_JoystickRumble() which allow simple rumble without using the haptics API
|
||||||
* Added SDL_SetWindowHitTest() to let apps treat parts of their SDL window like traditional window decorations (drag areas, resize areas)
|
* Added SDL_GameControllerMappingForDeviceIndex() to get the mapping for a controller before it's opened
|
||||||
* Added SDL_GetGrabbedWindow() to get the window that currently has input grab, if any
|
* Added the hint SDL_HINT_MOUSE_DOUBLE_CLICK_TIME to control the mouse double-click time
|
||||||
* Added SDL_RenderIsClipEnabled() to tell whether clipping is currently enabled in a renderer
|
* Added the hint SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS to control the mouse double-click radius, in pixels
|
||||||
* Added SDL_CaptureMouse() to capture the mouse to get events while the mouse is not in your window
|
* Added SDL_HasColorKey() to return whether a surface has a colorkey active
|
||||||
* Added SDL_WarpMouseGlobal() to warp the mouse cursor in global screen space
|
* Added SDL_HasAVX512F() to return whether the CPU has AVX-512F features
|
||||||
* Added SDL_GetGlobalMouseState() to get the current mouse state outside of an SDL window
|
* Added SDL_IsTablet() to return whether the application is running on a tablet
|
||||||
* Added a direction field to mouse wheel events to tell whether they are flipped (natural) or not
|
* Added SDL_THREAD_PRIORITY_TIME_CRITICAL for threads that must run at the highest priority
|
||||||
* Added GL_CONTEXT_RELEASE_BEHAVIOR GL attribute (maps to [WGL|GLX]_ARB_context_flush_control extension)
|
|
||||||
* Added EGL_KHR_create_context support to allow OpenGL ES version selection on some platforms
|
Mac OS X:
|
||||||
* Added NV12 and NV21 YUV texture support for OpenGL and OpenGL ES 2.0 renderers
|
* Fixed black screen at start on Mac OS X Mojave
|
||||||
* Added a Vivante video driver that is used on various SoC platforms
|
|
||||||
* Added an event SDL_RENDER_DEVICE_RESET that is sent from the D3D renderers when the D3D device is lost, and from Android's event loop when the GLES context had to be recreated
|
Linux:
|
||||||
* Added a hint SDL_HINT_NO_SIGNAL_HANDLERS to disable SDL's built in signal handling
|
* Added SDL_LinuxSetThreadPriority() to allow adjusting the thread priority of native threads using RealtimeKit if available.
|
||||||
* Added a hint SDL_HINT_THREAD_STACK_SIZE to set the stack size of SDL's threads
|
|
||||||
* Added SDL_sqrtf(), SDL_tan(), and SDL_tanf() to the stdlib routines
|
iOS:
|
||||||
* Improved support for WAV and BMP files with unusual chunks in them
|
* Fixed Asian IME input
|
||||||
* Renamed SDL_assert_data to SDL_AssertData and SDL_assert_state to SDL_AssertState
|
|
||||||
* Added a hint SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN to prevent window interaction while cursor is hidden
|
Android:
|
||||||
* Added SDL_GetDisplayDPI() to get the DPI information for a display
|
* Updated required Android SDK to API 26, to match Google's new App Store requirements
|
||||||
* Added SDL_JoystickCurrentPowerLevel() to get the battery level of a joystick
|
* Added support for wired USB Xbox, PS4, and Nintendo Switch Pro controllers
|
||||||
* Added SDL_JoystickFromInstanceID(), as a helper function, to get the SDL_Joystick* that an event is referring to.
|
* Added support for relative mouse mode on Android 7.0 and newer (except where it's broken, on Chromebooks and when in DeX mode with Samsung Experience 9.0)
|
||||||
* Added SDL_GameControllerFromInstanceID(), as a helper function, to get the SDL_GameController* that an event is referring to.
|
* Added support for custom mouse cursors on Android 7.0 and newer
|
||||||
|
* Added the hint SDL_HINT_ANDROID_TRAP_BACK_BUTTON to control whether the back button will back out of the app (the default) or be passed to the application as SDL_SCANCODE_AC_BACK
|
||||||
Windows:
|
* Added SDL_AndroidBackButton() to trigger the Android system back button behavior when handling the back button in the application
|
||||||
* Added support for Windows Phone 8.1 and Windows 10/UWP (Universal Windows Platform)
|
* Added SDL_IsChromebook() to return whether the app is running in the Chromebook Android runtime
|
||||||
* Timer resolution is now 1 ms by default, adjustable with the SDL_HINT_TIMER_RESOLUTION hint
|
* Added SDL_IsDeXMode() to return whether the app is running while docked in the Samsung DeX
|
||||||
* SDLmain no longer depends on the C runtime, so you can use the same .lib in both Debug and Release builds
|
|
||||||
* Added SDL_SetWindowsMessageHook() to set a function to be called for every windows message before TranslateMessage()
|
|
||||||
* Added a hint SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP to control whether SDL_PumpEvents() processes the Windows message loop
|
---------------------------------------------------------------------------
|
||||||
* You can distinguish between real mouse and touch events by looking for SDL_TOUCH_MOUSEID in the mouse event "which" field
|
2.0.8:
|
||||||
* SDL_SysWMinfo now contains the window HDC
|
---------------------------------------------------------------------------
|
||||||
* Added support for Unicode command line options
|
|
||||||
* Prevent beeping when Alt-key combos are pressed
|
General:
|
||||||
* SDL_SetTextInputRect() re-positions the OS-rendered IME
|
* Added SDL_fmod() and SDL_log10()
|
||||||
* Added a hint SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 to prevent generating SDL_WINDOWEVENT_CLOSE events when Alt-F4 is pressed
|
* Each of the SDL math functions now has the corresponding float version
|
||||||
* Added a hint SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING to use the old axis and button mapping for XInput devices (deprecated)
|
* Added SDL_SetYUVConversionMode() and SDL_GetYUVConversionMode() to control the formula used when converting to and from YUV colorspace. The options are JPEG, BT.601, and BT.709
|
||||||
|
|
||||||
Mac OS X:
|
Windows:
|
||||||
* Implemented drag-and-drop support
|
* Implemented WASAPI support on Windows UWP and removed the deprecated XAudio2 implementation
|
||||||
* Improved joystick hot-plug detection
|
* Added resampling support on WASAPI on Windows 7 and above
|
||||||
* The SDL_WINDOWEVENT_EXPOSED window event is triggered in the appropriate situations
|
|
||||||
* Fixed relative mouse mode when the application loses/regains focus
|
Windows UWP:
|
||||||
* Fixed bugs related to transitioning to and from Spaces-aware fullscreen-desktop mode
|
* Added SDL_WinRTGetDeviceFamily() to find out what type of device your application is running on
|
||||||
* Fixed the refresh rate of display modes
|
|
||||||
* SDL_SysWMInfo is now ARC-compatible
|
Mac OS X:
|
||||||
* Added a hint SDL_HINT_MAC_BACKGROUND_APP to prevent forcing the application to become a foreground process
|
* Added support for the Vulkan SDK for Mac:
|
||||||
|
https://www.lunarg.com/lunarg-releases-vulkan-sdk-1-0-69-0-for-mac/
|
||||||
Linux:
|
* Added support for OpenGL ES using ANGLE when it's available
|
||||||
* Enabled building with Mir and Wayland support by default.
|
|
||||||
* Added IBus IME support
|
Mac OS X / iOS / tvOS:
|
||||||
* Added a hint SDL_HINT_IME_INTERNAL_EDITING to control whether IBus should handle text editing internally instead of sending SDL_TEXTEDITING events
|
* Added a Metal 2D render implementation
|
||||||
* Added a hint SDL_HINT_VIDEO_X11_NET_WM_PING to allow disabling _NET_WM_PING protocol handling in SDL_CreateWindow()
|
* Added SDL_RenderGetMetalLayer() and SDL_RenderGetMetalCommandEncoder() to insert your own drawing into SDL rendering when using the Metal implementation
|
||||||
* Added support for multiple audio devices when using Pulseaudio
|
|
||||||
* Fixed duplicate mouse events when using relative mouse motion
|
iOS:
|
||||||
|
* Added the hint SDL_HINT_IOS_HIDE_HOME_INDICATOR to control whether the home indicator bar on iPhone X should be hidden. This defaults to dimming the indicator for fullscreen applications and showing the indicator for windowed applications.
|
||||||
iOS:
|
|
||||||
* Added support for iOS 8
|
iOS / Android:
|
||||||
* The SDL_WINDOW_ALLOW_HIGHDPI window flag now enables high-dpi support, and SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() gets the window resolution in pixels
|
* Added the hint SDL_HINT_RETURN_KEY_HIDES_IME to control whether the return key on the software keyboard should hide the keyboard or send a key event (the default)
|
||||||
* SDL_GetWindowSize() and display mode sizes are in the "DPI-independent points" / "screen coordinates" coordinate space rather than pixels (matches OS X behavior)
|
|
||||||
* Added native resolution support for the iPhone 6 Plus
|
Android:
|
||||||
* Added support for MFi game controllers
|
* SDL now supports building with Android Studio and Gradle by default, and the old Ant project is available in android-project-ant
|
||||||
* Added support for the hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK
|
* SDL now requires the API 19 SDK to build, but can still target devices down to API 14 (Android 4.0.1)
|
||||||
* Added sRGB OpenGL ES context support on iOS 7+
|
* Added SDL_IsAndroidTV() to tell whether the application is running on Android TV
|
||||||
* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER
|
|
||||||
* SDL_SysWMinfo now contains the OpenGL ES framebuffer and color renderbuffer objects used by the window's active GLES view
|
Android / tvOS:
|
||||||
* Fixed various rotation and orientation issues
|
* Added the hint SDL_HINT_TV_REMOTE_AS_JOYSTICK to control whether TV remotes should be listed as joystick devices (the default) or send keyboard events.
|
||||||
* Fixed memory leaks
|
|
||||||
|
Linux:
|
||||||
Android:
|
* Added the hint SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR to control whether the X server should skip the compositor for the SDL application. This defaults to "1"
|
||||||
* Added a hint SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH to prevent mouse events from being registered as touch events
|
* Added the hint SDL_HINT_VIDEO_DOUBLE_BUFFER to control whether the Raspberry Pi and KMSDRM video drivers should use double or triple buffering (the default)
|
||||||
* Added hints SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION and SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION
|
|
||||||
* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER
|
|
||||||
* Added support for SDL_ShowMessageBox() and SDL_ShowSimpleMessageBox()
|
---------------------------------------------------------------------------
|
||||||
|
2.0.7:
|
||||||
Raspberry Pi:
|
---------------------------------------------------------------------------
|
||||||
* Added support for the Raspberry Pi 2
|
|
||||||
|
General:
|
||||||
|
* Added audio stream conversion functions:
|
||||||
---------------------------------------------------------------------------
|
SDL_NewAudioStream
|
||||||
2.0.3:
|
SDL_AudioStreamPut
|
||||||
---------------------------------------------------------------------------
|
SDL_AudioStreamGet
|
||||||
|
SDL_AudioStreamAvailable
|
||||||
Mac OS X:
|
SDL_AudioStreamFlush
|
||||||
* Fixed creating an OpenGL context by default on Mac OS X 10.6
|
SDL_AudioStreamClear
|
||||||
|
SDL_FreeAudioStream
|
||||||
|
* Added functions to query and set the SDL memory allocation functions:
|
||||||
---------------------------------------------------------------------------
|
SDL_GetMemoryFunctions()
|
||||||
2.0.2:
|
SDL_SetMemoryFunctions()
|
||||||
---------------------------------------------------------------------------
|
SDL_GetNumAllocations()
|
||||||
General:
|
* Added locking functions for multi-threaded access to the joystick and game controller APIs:
|
||||||
* Added SDL_GL_ResetAttributes() to reset OpenGL attributes to default values
|
SDL_LockJoysticks()
|
||||||
* Added an API to load a database of game controller mappings from a file:
|
SDL_UnlockJoysticks()
|
||||||
SDL_GameControllerAddMappingsFromFile(), SDL_GameControllerAddMappingsFromRW()
|
* The following functions are now thread-safe:
|
||||||
* Added game controller mappings for the PS4 and OUYA controllers
|
SDL_SetEventFilter()
|
||||||
* Added SDL_GetDefaultAssertionHandler() and SDL_GetAssertionHandler()
|
SDL_GetEventFilter()
|
||||||
* Added SDL_DetachThread()
|
SDL_AddEventWatch()
|
||||||
* Added SDL_HasAVX() to determine if the CPU has AVX features
|
SDL_DelEventWatch()
|
||||||
* Added SDL_vsscanf(), SDL_acos(), and SDL_asin() to the stdlib routines
|
|
||||||
* EGL can now create/manage OpenGL and OpenGL ES 1.x/2.x contexts, and share
|
|
||||||
them using SDL_GL_SHARE_WITH_CURRENT_CONTEXT
|
General:
|
||||||
* Added a field "clicks" to the mouse button event which records whether the event is a single click, double click, etc.
|
---------------------------------------------------------------------------
|
||||||
* The screensaver is now disabled by default, and there is a hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER that can change that behavior.
|
2.0.6:
|
||||||
* Added a hint SDL_HINT_MOUSE_RELATIVE_MODE_WARP to specify whether mouse relative mode should be emulated using mouse warping.
|
---------------------------------------------------------------------------
|
||||||
* testgl2 does not need to link with libGL anymore
|
|
||||||
* Added testgles2 test program to demonstrate working with OpenGL ES 2.0
|
General:
|
||||||
* Added controllermap test program to visually map a game controller
|
* Added cross-platform Vulkan graphics support in SDL_vulkan.h
|
||||||
|
SDL_Vulkan_LoadLibrary()
|
||||||
Windows:
|
SDL_Vulkan_GetVkGetInstanceProcAddr()
|
||||||
* Support for OpenGL ES 2.x contexts using either WGL or EGL (natively via
|
SDL_Vulkan_GetInstanceExtensions()
|
||||||
the driver or emulated through ANGLE)
|
SDL_Vulkan_CreateSurface()
|
||||||
* Added a hint SDL_HINT_VIDEO_WIN_D3DCOMPILER to specify which D3D shader compiler to use for OpenGL ES 2 support through ANGLE
|
SDL_Vulkan_GetDrawableSize()
|
||||||
* Added a hint SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT that is useful when creating multiple windows that should share the same OpenGL context.
|
SDL_Vulkan_UnloadLibrary()
|
||||||
* Added an event SDL_RENDER_TARGETS_RESET that is sent when D3D9 render targets are reset after the device has been restored.
|
This is all the platform-specific code you need to bring up Vulkan on all SDL platforms. You can look at an example in test/testvulkan.c
|
||||||
|
* Added SDL_ComposeCustomBlendMode() to create custom blend modes for 2D rendering
|
||||||
Mac OS X:
|
* Added SDL_HasNEON() which returns whether the CPU has NEON instruction support
|
||||||
* Added a hint SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK to control whether Ctrl+click should be treated as a right click on Mac OS X. This is off by default.
|
* Added support for many game controllers, including the Nintendo Switch Pro Controller
|
||||||
|
* Added support for inverted axes and separate axis directions in game controller mappings
|
||||||
Linux:
|
* Added functions to return information about a joystick before it's opened:
|
||||||
* Fixed fullscreen and focused behavior when receiving NotifyGrab events
|
SDL_JoystickGetDeviceVendor()
|
||||||
* Added experimental Wayland and Mir support, disabled by default
|
SDL_JoystickGetDeviceProduct()
|
||||||
|
SDL_JoystickGetDeviceProductVersion()
|
||||||
Android:
|
SDL_JoystickGetDeviceType()
|
||||||
* Joystick support (minimum SDK version required to build SDL is now 12,
|
SDL_JoystickGetDeviceInstanceID()
|
||||||
the required runtime version remains at 10, but on such devices joystick
|
* Added functions to return information about an open joystick:
|
||||||
support won't be available).
|
SDL_JoystickGetVendor()
|
||||||
* Hotplugging support for joysticks
|
SDL_JoystickGetProduct()
|
||||||
* Added a hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK to control whether the accelerometer should be listed as a 3 axis joystick, which it will by default.
|
SDL_JoystickGetProductVersion()
|
||||||
|
SDL_JoystickGetType()
|
||||||
|
SDL_JoystickGetAxisInitialState()
|
||||||
---------------------------------------------------------------------------
|
* Added functions to return information about an open game controller:
|
||||||
2.0.1:
|
SDL_GameControllerGetVendor()
|
||||||
---------------------------------------------------------------------------
|
SDL_GameControllerGetProduct()
|
||||||
|
SDL_GameControllerGetProductVersion()
|
||||||
General:
|
* Added SDL_GameControllerNumMappings() and SDL_GameControllerMappingForIndex() to be able to enumerate the built-in game controller mappings
|
||||||
* Added an API to get common filesystem paths in SDL_filesystem.h:
|
* Added SDL_LoadFile() and SDL_LoadFile_RW() to load a file into memory
|
||||||
SDL_GetBasePath(), SDL_GetPrefPath()
|
* Added SDL_DuplicateSurface() to make a copy of a surface
|
||||||
* Added an API to do optimized YV12 and IYUV texture updates:
|
* Added an experimental JACK audio driver
|
||||||
SDL_UpdateYUVTexture()
|
* Implemented non-power-of-two audio resampling, optionally using libsamplerate to perform the resampling
|
||||||
* Added an API to get the amount of RAM on the system:
|
* Added the hint SDL_HINT_AUDIO_RESAMPLING_MODE to control the quality of resampling
|
||||||
SDL_GetSystemRAM()
|
* Added the hint SDL_HINT_RENDER_LOGICAL_SIZE_MODE to control the scaling policy for SDL_RenderSetLogicalSize():
|
||||||
* Added a macro to perform timestamp comparisons with SDL_GetTicks():
|
"0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen (the default)
|
||||||
SDL_TICKS_PASSED()
|
"1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen
|
||||||
* Dramatically improved OpenGL ES 2.0 rendering performance
|
* Added the hints SDL_HINT_MOUSE_NORMAL_SPEED_SCALE and SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE to scale the mouse speed when being read from raw mouse input
|
||||||
* Added OpenGL attribute SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
|
* Added the hint SDL_HINT_TOUCH_MOUSE_EVENTS to control whether SDL will synthesize mouse events from touch events
|
||||||
|
|
||||||
Windows:
|
Windows:
|
||||||
* Created a static library configuration for the Visual Studio 2010 project
|
* The new default audio driver on Windows is WASAPI and supports hot-plugging devices and changing the default audio device
|
||||||
* Added a hint to create the Direct3D device with support for multi-threading:
|
* The old XAudio2 audio driver is deprecated and will be removed in the next release
|
||||||
SDL_HINT_RENDER_DIRECT3D_THREADSAFE
|
* Added hints SDL_HINT_WINDOWS_INTRESOURCE_ICON and SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL to specify a custom icon resource ID for SDL windows
|
||||||
* Added a function to get the D3D9 adapter index for a display:
|
* The hint SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING is now on by default for compatibility with .NET languages and various Windows debuggers
|
||||||
SDL_Direct3D9GetAdapterIndex()
|
* Updated the GUID format for game controller mappings, older mappings will be automatically converted on load
|
||||||
* Added a function to get the D3D9 device for a D3D9 renderer:
|
* Implemented the SDL_WINDOW_ALWAYS_ON_TOP flag on Windows
|
||||||
SDL_RenderGetD3D9Device()
|
|
||||||
* Fixed building SDL with the mingw32 toolchain (mingw-w64 is preferred)
|
Linux:
|
||||||
* Fixed crash when using two XInput controllers at the same time
|
* Added an experimental KMS/DRM video driver for embedded development
|
||||||
* Fixed detecting a mixture of XInput and DirectInput controllers
|
|
||||||
* Fixed clearing a D3D render target larger than the window
|
iOS:
|
||||||
* Improved support for format specifiers in SDL_snprintf()
|
* Added a hint SDL_HINT_AUDIO_CATEGORY to control the audio category, determining whether the phone mute switch affects the audio
|
||||||
|
|
||||||
Mac OS X:
|
---------------------------------------------------------------------------
|
||||||
* Added support for retina displays:
|
2.0.5:
|
||||||
Create your window with the SDL_WINDOW_ALLOW_HIGHDPI flag, and then use SDL_GL_GetDrawableSize() to find the actual drawable size. You are responsible for scaling mouse and drawing coordinates appropriately.
|
---------------------------------------------------------------------------
|
||||||
* Fixed mouse warping in fullscreen mode
|
|
||||||
* Right mouse click is emulated by holding the Ctrl key while left clicking
|
General:
|
||||||
|
* Implemented audio capture support for some platforms
|
||||||
Linux:
|
* Added SDL_DequeueAudio() to retrieve audio when buffer queuing is turned on for audio capture
|
||||||
* Fixed float audio support with the PulseAudio driver
|
* Added events for dragging and dropping text
|
||||||
* Fixed missing line endpoints in the OpenGL renderer on some drivers
|
* Added events for dragging and dropping multiple items
|
||||||
* X11 symbols are no longer defined to avoid collisions when linking statically
|
* By default the click raising a window will not be delivered to the SDL application. You can set the hint SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH to "1" to allow that click through to the window.
|
||||||
|
* Saving a surface with an alpha channel as a BMP will use a newer BMP format that supports alpha information. You can set the hint SDL_HINT_BMP_SAVE_LEGACY_FORMAT to "1" to use the old format.
|
||||||
iOS:
|
* Added SDL_GetHintBoolean() to get the boolean value of a hint
|
||||||
* Fixed status bar visibility on iOS 7
|
* Added SDL_RenderSetIntegerScale() to set whether to smoothly scale or use integral multiples of the viewport size when scaling the rendering output
|
||||||
* Flipped the accelerometer Y axis to match expected values
|
* Added SDL_CreateRGBSurfaceWithFormat() and SDL_CreateRGBSurfaceWithFormatFrom() to create an SDL surface with a specific pixel format
|
||||||
|
* Added SDL_GetDisplayUsableBounds() which returns the area usable for windows. For example, on Mac OS X, this subtracts the area occupied by the menu bar and dock.
|
||||||
Android:
|
* Added SDL_GetWindowBordersSize() which returns the size of the window's borders around the client area
|
||||||
IMPORTANT: You MUST get the updated SDLActivity.java to match C code
|
* Added a window event SDL_WINDOWEVENT_HIT_TEST when a window had a hit test that wasn't SDL_HITTEST_NORMAL (e.g. in the title bar or window frame)
|
||||||
* Moved EGL initialization to native code
|
* Added SDL_SetWindowResizable() to change whether a window is resizable
|
||||||
* Fixed the accelerometer axis rotation relative to the device rotation
|
* Added SDL_SetWindowOpacity() and SDL_GetWindowOpacity() to affect the window transparency
|
||||||
* Fixed race conditions when handling the EGL context on pause/resume
|
* Added SDL_SetWindowModalFor() to set a window as modal for another window
|
||||||
* Touch devices are available for enumeration immediately after init
|
* Added support for AUDIO_U16LSB and AUDIO_U16MSB to SDL_MixAudioFormat()
|
||||||
|
* Fixed flipped images when reading back from target textures when using the OpenGL renderer
|
||||||
Raspberry Pi:
|
* Fixed texture color modulation with SDL_BLENDMODE_NONE when using the OpenGL renderer
|
||||||
* Added support for the Raspberry Pi, see README-raspberrypi.txt for details
|
* Fixed bug where the alpha value of colorkeys was ignored when blitting in some cases
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Added a hint SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING to prevent SDL from raising a debugger exception to name threads. This exception can cause problems with .NET applications when running under a debugger.
|
||||||
|
* The hint SDL_HINT_THREAD_STACK_SIZE is now supported on Windows
|
||||||
|
* Fixed XBox controller triggers automatically being pulled at startup
|
||||||
|
* The first icon from the executable is used as the default window icon at runtime
|
||||||
|
* Fixed SDL log messages being printed twice if SDL was built with C library support
|
||||||
|
* Reset dead keys when the SDL window loses focus, so dead keys pressed in SDL applications don't affect text input into other applications.
|
||||||
|
|
||||||
|
Mac OS X:
|
||||||
|
* Fixed selecting the dummy video driver
|
||||||
|
* The caps lock key now generates a pressed event when pressed and a released event when released, instead of a press/release event pair when pressed.
|
||||||
|
* Fixed mouse wheel events on Mac OS X 10.12
|
||||||
|
* The audio driver has been updated to use AVFoundation for better compatibility with newer versions of Mac OS X
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Added support for the Fcitx IME
|
||||||
|
* Added a window event SDL_WINDOWEVENT_TAKE_FOCUS when a window manager asks the SDL window whether it wants to take focus.
|
||||||
|
* Refresh rates are now rounded instead of truncated, e.g. 59.94 Hz is rounded up to 60 Hz instead of 59.
|
||||||
|
* Added initial support for touchscreens on Raspberry Pi
|
||||||
|
|
||||||
|
OpenBSD:
|
||||||
|
* SDL_GetBasePath() is now implemented on OpenBSD
|
||||||
|
|
||||||
|
iOS:
|
||||||
|
* Added support for dynamically loaded objects on iOS 8 and newer
|
||||||
|
|
||||||
|
tvOS:
|
||||||
|
* Added support for Apple TV
|
||||||
|
* Added a hint SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION to control whether he Apple TV remote's joystick axes will automatically match the rotation of the remote.
|
||||||
|
|
||||||
|
Android:
|
||||||
|
* Fixed SDL not resizing window when Android screen resolution changes
|
||||||
|
* Corrected the joystick Z axis reporting for the accelerometer
|
||||||
|
|
||||||
|
Emscripten (running in a web browser):
|
||||||
|
* Many bug fixes and improvements
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.4:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
General:
|
||||||
|
* Added support for web applications using Emscripten, see docs/README-emscripten.md for more information
|
||||||
|
* Added support for web applications using Native Client (NaCl), see docs/README-nacl.md for more information
|
||||||
|
* Added an API to queue audio instead of using the audio callback:
|
||||||
|
SDL_QueueAudio(), SDL_GetQueuedAudioSize(), SDL_ClearQueuedAudio()
|
||||||
|
* Added events for audio device hot plug support:
|
||||||
|
SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED
|
||||||
|
* Added SDL_PointInRect()
|
||||||
|
* Added SDL_HasAVX2() to detect CPUs with AVX2 support
|
||||||
|
* Added SDL_SetWindowHitTest() to let apps treat parts of their SDL window like traditional window decorations (drag areas, resize areas)
|
||||||
|
* Added SDL_GetGrabbedWindow() to get the window that currently has input grab, if any
|
||||||
|
* Added SDL_RenderIsClipEnabled() to tell whether clipping is currently enabled in a renderer
|
||||||
|
* Added SDL_CaptureMouse() to capture the mouse to get events while the mouse is not in your window
|
||||||
|
* Added SDL_WarpMouseGlobal() to warp the mouse cursor in global screen space
|
||||||
|
* Added SDL_GetGlobalMouseState() to get the current mouse state outside of an SDL window
|
||||||
|
* Added a direction field to mouse wheel events to tell whether they are flipped (natural) or not
|
||||||
|
* Added GL_CONTEXT_RELEASE_BEHAVIOR GL attribute (maps to [WGL|GLX]_ARB_context_flush_control extension)
|
||||||
|
* Added EGL_KHR_create_context support to allow OpenGL ES version selection on some platforms
|
||||||
|
* Added NV12 and NV21 YUV texture support for OpenGL and OpenGL ES 2.0 renderers
|
||||||
|
* Added a Vivante video driver that is used on various SoC platforms
|
||||||
|
* Added an event SDL_RENDER_DEVICE_RESET that is sent from the D3D renderers when the D3D device is lost, and from Android's event loop when the GLES context had to be recreated
|
||||||
|
* Added a hint SDL_HINT_NO_SIGNAL_HANDLERS to disable SDL's built in signal handling
|
||||||
|
* Added a hint SDL_HINT_THREAD_STACK_SIZE to set the stack size of SDL's threads
|
||||||
|
* Added SDL_sqrtf(), SDL_tan(), and SDL_tanf() to the stdlib routines
|
||||||
|
* Improved support for WAV and BMP files with unusual chunks in them
|
||||||
|
* Renamed SDL_assert_data to SDL_AssertData and SDL_assert_state to SDL_AssertState
|
||||||
|
* Added a hint SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN to prevent window interaction while cursor is hidden
|
||||||
|
* Added SDL_GetDisplayDPI() to get the DPI information for a display
|
||||||
|
* Added SDL_JoystickCurrentPowerLevel() to get the battery level of a joystick
|
||||||
|
* Added SDL_JoystickFromInstanceID(), as a helper function, to get the SDL_Joystick* that an event is referring to.
|
||||||
|
* Added SDL_GameControllerFromInstanceID(), as a helper function, to get the SDL_GameController* that an event is referring to.
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Added support for Windows Phone 8.1 and Windows 10/UWP (Universal Windows Platform)
|
||||||
|
* Timer resolution is now 1 ms by default, adjustable with the SDL_HINT_TIMER_RESOLUTION hint
|
||||||
|
* SDLmain no longer depends on the C runtime, so you can use the same .lib in both Debug and Release builds
|
||||||
|
* Added SDL_SetWindowsMessageHook() to set a function to be called for every windows message before TranslateMessage()
|
||||||
|
* Added a hint SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP to control whether SDL_PumpEvents() processes the Windows message loop
|
||||||
|
* You can distinguish between real mouse and touch events by looking for SDL_TOUCH_MOUSEID in the mouse event "which" field
|
||||||
|
* SDL_SysWMinfo now contains the window HDC
|
||||||
|
* Added support for Unicode command line options
|
||||||
|
* Prevent beeping when Alt-key combos are pressed
|
||||||
|
* SDL_SetTextInputRect() re-positions the OS-rendered IME
|
||||||
|
* Added a hint SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 to prevent generating SDL_WINDOWEVENT_CLOSE events when Alt-F4 is pressed
|
||||||
|
* Added a hint SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING to use the old axis and button mapping for XInput devices (deprecated)
|
||||||
|
|
||||||
|
Mac OS X:
|
||||||
|
* Implemented drag-and-drop support
|
||||||
|
* Improved joystick hot-plug detection
|
||||||
|
* The SDL_WINDOWEVENT_EXPOSED window event is triggered in the appropriate situations
|
||||||
|
* Fixed relative mouse mode when the application loses/regains focus
|
||||||
|
* Fixed bugs related to transitioning to and from Spaces-aware fullscreen-desktop mode
|
||||||
|
* Fixed the refresh rate of display modes
|
||||||
|
* SDL_SysWMInfo is now ARC-compatible
|
||||||
|
* Added a hint SDL_HINT_MAC_BACKGROUND_APP to prevent forcing the application to become a foreground process
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Enabled building with Mir and Wayland support by default.
|
||||||
|
* Added IBus IME support
|
||||||
|
* Added a hint SDL_HINT_IME_INTERNAL_EDITING to control whether IBus should handle text editing internally instead of sending SDL_TEXTEDITING events
|
||||||
|
* Added a hint SDL_HINT_VIDEO_X11_NET_WM_PING to allow disabling _NET_WM_PING protocol handling in SDL_CreateWindow()
|
||||||
|
* Added support for multiple audio devices when using Pulseaudio
|
||||||
|
* Fixed duplicate mouse events when using relative mouse motion
|
||||||
|
|
||||||
|
iOS:
|
||||||
|
* Added support for iOS 8
|
||||||
|
* The SDL_WINDOW_ALLOW_HIGHDPI window flag now enables high-dpi support, and SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() gets the window resolution in pixels
|
||||||
|
* SDL_GetWindowSize() and display mode sizes are in the "DPI-independent points" / "screen coordinates" coordinate space rather than pixels (matches OS X behavior)
|
||||||
|
* Added native resolution support for the iPhone 6 Plus
|
||||||
|
* Added support for MFi game controllers
|
||||||
|
* Added support for the hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK
|
||||||
|
* Added sRGB OpenGL ES context support on iOS 7+
|
||||||
|
* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER
|
||||||
|
* SDL_SysWMinfo now contains the OpenGL ES framebuffer and color renderbuffer objects used by the window's active GLES view
|
||||||
|
* Fixed various rotation and orientation issues
|
||||||
|
* Fixed memory leaks
|
||||||
|
|
||||||
|
Android:
|
||||||
|
* Added a hint SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH to prevent mouse events from being registered as touch events
|
||||||
|
* Added hints SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION and SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION
|
||||||
|
* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER
|
||||||
|
* Added support for SDL_ShowMessageBox() and SDL_ShowSimpleMessageBox()
|
||||||
|
|
||||||
|
Raspberry Pi:
|
||||||
|
* Added support for the Raspberry Pi 2
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.3:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Mac OS X:
|
||||||
|
* Fixed creating an OpenGL context by default on Mac OS X 10.6
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.2:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
General:
|
||||||
|
* Added SDL_GL_ResetAttributes() to reset OpenGL attributes to default values
|
||||||
|
* Added an API to load a database of game controller mappings from a file:
|
||||||
|
SDL_GameControllerAddMappingsFromFile(), SDL_GameControllerAddMappingsFromRW()
|
||||||
|
* Added game controller mappings for the PS4 and OUYA controllers
|
||||||
|
* Added SDL_GetDefaultAssertionHandler() and SDL_GetAssertionHandler()
|
||||||
|
* Added SDL_DetachThread()
|
||||||
|
* Added SDL_HasAVX() to determine if the CPU has AVX features
|
||||||
|
* Added SDL_vsscanf(), SDL_acos(), and SDL_asin() to the stdlib routines
|
||||||
|
* EGL can now create/manage OpenGL and OpenGL ES 1.x/2.x contexts, and share
|
||||||
|
them using SDL_GL_SHARE_WITH_CURRENT_CONTEXT
|
||||||
|
* Added a field "clicks" to the mouse button event which records whether the event is a single click, double click, etc.
|
||||||
|
* The screensaver is now disabled by default, and there is a hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER that can change that behavior.
|
||||||
|
* Added a hint SDL_HINT_MOUSE_RELATIVE_MODE_WARP to specify whether mouse relative mode should be emulated using mouse warping.
|
||||||
|
* testgl2 does not need to link with libGL anymore
|
||||||
|
* Added testgles2 test program to demonstrate working with OpenGL ES 2.0
|
||||||
|
* Added controllermap test program to visually map a game controller
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Support for OpenGL ES 2.x contexts using either WGL or EGL (natively via
|
||||||
|
the driver or emulated through ANGLE)
|
||||||
|
* Added a hint SDL_HINT_VIDEO_WIN_D3DCOMPILER to specify which D3D shader compiler to use for OpenGL ES 2 support through ANGLE
|
||||||
|
* Added a hint SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT that is useful when creating multiple windows that should share the same OpenGL context.
|
||||||
|
* Added an event SDL_RENDER_TARGETS_RESET that is sent when D3D9 render targets are reset after the device has been restored.
|
||||||
|
|
||||||
|
Mac OS X:
|
||||||
|
* Added a hint SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK to control whether Ctrl+click should be treated as a right click on Mac OS X. This is off by default.
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Fixed fullscreen and focused behavior when receiving NotifyGrab events
|
||||||
|
* Added experimental Wayland and Mir support, disabled by default
|
||||||
|
|
||||||
|
Android:
|
||||||
|
* Joystick support (minimum SDK version required to build SDL is now 12,
|
||||||
|
the required runtime version remains at 10, but on such devices joystick
|
||||||
|
support won't be available).
|
||||||
|
* Hotplugging support for joysticks
|
||||||
|
* Added a hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK to control whether the accelerometer should be listed as a 3 axis joystick, which it will by default.
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
2.0.1:
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
General:
|
||||||
|
* Added an API to get common filesystem paths in SDL_filesystem.h:
|
||||||
|
SDL_GetBasePath(), SDL_GetPrefPath()
|
||||||
|
* Added an API to do optimized YV12 and IYUV texture updates:
|
||||||
|
SDL_UpdateYUVTexture()
|
||||||
|
* Added an API to get the amount of RAM on the system:
|
||||||
|
SDL_GetSystemRAM()
|
||||||
|
* Added a macro to perform timestamp comparisons with SDL_GetTicks():
|
||||||
|
SDL_TICKS_PASSED()
|
||||||
|
* Dramatically improved OpenGL ES 2.0 rendering performance
|
||||||
|
* Added OpenGL attribute SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
|
||||||
|
|
||||||
|
Windows:
|
||||||
|
* Created a static library configuration for the Visual Studio 2010 project
|
||||||
|
* Added a hint to create the Direct3D device with support for multi-threading:
|
||||||
|
SDL_HINT_RENDER_DIRECT3D_THREADSAFE
|
||||||
|
* Added a function to get the D3D9 adapter index for a display:
|
||||||
|
SDL_Direct3D9GetAdapterIndex()
|
||||||
|
* Added a function to get the D3D9 device for a D3D9 renderer:
|
||||||
|
SDL_RenderGetD3D9Device()
|
||||||
|
* Fixed building SDL with the mingw32 toolchain (mingw-w64 is preferred)
|
||||||
|
* Fixed crash when using two XInput controllers at the same time
|
||||||
|
* Fixed detecting a mixture of XInput and DirectInput controllers
|
||||||
|
* Fixed clearing a D3D render target larger than the window
|
||||||
|
* Improved support for format specifiers in SDL_snprintf()
|
||||||
|
|
||||||
|
Mac OS X:
|
||||||
|
* Added support for retina displays:
|
||||||
|
Create your window with the SDL_WINDOW_ALLOW_HIGHDPI flag, and then use SDL_GL_GetDrawableSize() to find the actual drawable size. You are responsible for scaling mouse and drawing coordinates appropriately.
|
||||||
|
* Fixed mouse warping in fullscreen mode
|
||||||
|
* Right mouse click is emulated by holding the Ctrl key while left clicking
|
||||||
|
|
||||||
|
Linux:
|
||||||
|
* Fixed float audio support with the PulseAudio driver
|
||||||
|
* Fixed missing line endpoints in the OpenGL renderer on some drivers
|
||||||
|
* X11 symbols are no longer defined to avoid collisions when linking statically
|
||||||
|
|
||||||
|
iOS:
|
||||||
|
* Fixed status bar visibility on iOS 7
|
||||||
|
* Flipped the accelerometer Y axis to match expected values
|
||||||
|
|
||||||
|
Android:
|
||||||
|
IMPORTANT: You MUST get the updated SDLActivity.java to match C code
|
||||||
|
* Moved EGL initialization to native code
|
||||||
|
* Fixed the accelerometer axis rotation relative to the device rotation
|
||||||
|
* Fixed race conditions when handling the EGL context on pause/resume
|
||||||
|
* Touch devices are available for enumeration immediately after init
|
||||||
|
|
||||||
|
Raspberry Pi:
|
||||||
|
* Added support for the Raspberry Pi, see README-raspberrypi.txt for details
|
||||||
|
|
|
@ -1,464 +1,417 @@
|
||||||
Android
|
Android
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Requirements:
|
Matt Styles wrote a tutorial on building SDL for Android with Visual Studio:
|
||||||
|
http://trederia.blogspot.de/2017/03/building-sdl2-for-android-with-visual.html
|
||||||
Android SDK (version 12 or later)
|
|
||||||
http://developer.android.com/sdk/index.html
|
The rest of this README covers the Android gradle style build process.
|
||||||
|
|
||||||
Android NDK r7 or later
|
If you are using the older ant build process, it is no longer officially
|
||||||
http://developer.android.com/tools/sdk/ndk/index.html
|
supported, but you can use the "android-project-ant" directory as a template.
|
||||||
|
|
||||||
Minimum API level supported by SDL: 10 (Android 2.3.3)
|
|
||||||
Joystick support is available for API level >=12 devices.
|
================================================================================
|
||||||
|
Requirements
|
||||||
================================================================================
|
================================================================================
|
||||||
How the port works
|
|
||||||
================================================================================
|
Android SDK (version 26 or later)
|
||||||
|
https://developer.android.com/sdk/index.html
|
||||||
- Android applications are Java-based, optionally with parts written in C
|
|
||||||
- As SDL apps are C-based, we use a small Java shim that uses JNI to talk to
|
Android NDK r15c or later
|
||||||
the SDL library
|
https://developer.android.com/tools/sdk/ndk/index.html
|
||||||
- This means that your application C code must be placed inside an Android
|
|
||||||
Java project, along with some C support code that communicates with Java
|
Minimum API level supported by SDL: 14 (Android 4.0.1)
|
||||||
- This eventually produces a standard Android .apk package
|
|
||||||
|
|
||||||
The Android Java code implements an "Activity" and can be found in:
|
================================================================================
|
||||||
android-project/src/org/libsdl/app/SDLActivity.java
|
How the port works
|
||||||
|
================================================================================
|
||||||
The Java code loads your game code, the SDL shared library, and
|
|
||||||
dispatches to native functions implemented in the SDL library:
|
- Android applications are Java-based, optionally with parts written in C
|
||||||
src/core/android/SDL_android.c
|
- As SDL apps are C-based, we use a small Java shim that uses JNI to talk to
|
||||||
|
the SDL library
|
||||||
Your project must include some glue code that starts your main() routine:
|
- This means that your application C code must be placed inside an Android
|
||||||
src/main/android/SDL_android_main.c
|
Java project, along with some C support code that communicates with Java
|
||||||
|
- This eventually produces a standard Android .apk package
|
||||||
|
|
||||||
================================================================================
|
The Android Java code implements an "Activity" and can be found in:
|
||||||
Building an app
|
android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
|
||||||
================================================================================
|
|
||||||
|
The Java code loads your game code, the SDL shared library, and
|
||||||
For simple projects you can use the script located at build-scripts/androidbuild.sh
|
dispatches to native functions implemented in the SDL library:
|
||||||
|
src/core/android/SDL_android.c
|
||||||
There's two ways of using it:
|
|
||||||
|
|
||||||
androidbuild.sh com.yourcompany.yourapp < sources.list
|
================================================================================
|
||||||
androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c
|
Building an app
|
||||||
|
================================================================================
|
||||||
sources.list should be a text file with a source file name in each line
|
|
||||||
Filenames should be specified relative to the current directory, for example if
|
For simple projects you can use the script located at build-scripts/androidbuild.sh
|
||||||
you are in the build-scripts directory and want to create the testgles.c test, you'll
|
|
||||||
run:
|
There's two ways of using it:
|
||||||
|
|
||||||
./androidbuild.sh org.libsdl.testgles ../test/testgles.c
|
androidbuild.sh com.yourcompany.yourapp < sources.list
|
||||||
|
androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c
|
||||||
One limitation of this script is that all sources provided will be aggregated into
|
|
||||||
a single directory, thus all your source files should have a unique name.
|
sources.list should be a text file with a source file name in each line
|
||||||
|
Filenames should be specified relative to the current directory, for example if
|
||||||
Once the project is complete the script will tell you where the debug APK is located.
|
you are in the build-scripts directory and want to create the testgles.c test, you'll
|
||||||
If you want to create a signed release APK, you can use the project created by this
|
run:
|
||||||
utility to generate it.
|
|
||||||
|
./androidbuild.sh org.libsdl.testgles ../test/testgles.c
|
||||||
Finally, a word of caution: re running androidbuild.sh wipes any changes you may have
|
|
||||||
done in the build directory for the app!
|
One limitation of this script is that all sources provided will be aggregated into
|
||||||
|
a single directory, thus all your source files should have a unique name.
|
||||||
|
|
||||||
For more complex projects, follow these instructions:
|
Once the project is complete the script will tell you where the debug APK is located.
|
||||||
|
If you want to create a signed release APK, you can use the project created by this
|
||||||
1. Copy the android-project directory wherever you want to keep your projects
|
utility to generate it.
|
||||||
and rename it to the name of your project.
|
|
||||||
2. Move or symlink this SDL directory into the <project>/jni directory
|
Finally, a word of caution: re running androidbuild.sh wipes any changes you may have
|
||||||
3. Edit <project>/jni/src/Android.mk to include your source files
|
done in the build directory for the app!
|
||||||
4. Run 'ndk-build' (a script provided by the NDK). This compiles the C source
|
|
||||||
|
|
||||||
If you want to use the Eclipse IDE, skip to the Eclipse section below.
|
For more complex projects, follow these instructions:
|
||||||
|
|
||||||
5. Create <project>/local.properties and use that to point to the Android SDK directory, by writing a line with the following form:
|
1. Copy the android-project directory wherever you want to keep your projects
|
||||||
|
and rename it to the name of your project.
|
||||||
sdk.dir=PATH_TO_ANDROID_SDK
|
2. Move or symlink this SDL directory into the "<project>/app/jni" directory
|
||||||
|
3. Edit "<project>/app/jni/src/Android.mk" to include your source files
|
||||||
6. Run 'ant debug' in android/project. This compiles the .java and eventually
|
|
||||||
creates a .apk with the native code embedded
|
4a. If you want to use Android Studio, simply open your <project> directory and start building.
|
||||||
7. 'ant debug install' will push the apk to the device or emulator (if connected)
|
|
||||||
|
4b. If you want to build manually, run './gradlew installDebug' in the project directory. This compiles the .java, creates an .apk with the native code embedded, and installs it on any connected Android device
|
||||||
Here's an explanation of the files in the Android project, so you can customize them:
|
|
||||||
|
Here's an explanation of the files in the Android project, so you can customize them:
|
||||||
android-project/
|
|
||||||
AndroidManifest.xml - package manifest. Among others, it contains the class name
|
android-project/app
|
||||||
of the main Activity and the package name of the application.
|
build.gradle - build info including the application version and SDK
|
||||||
build.properties - empty
|
src/main/AndroidManifest.xml - package manifest. Among others, it contains the class name of the main Activity and the package name of the application.
|
||||||
build.xml - build description file, used by ant. The actual application name
|
jni/ - directory holding native code
|
||||||
is specified here.
|
jni/Application.mk - Application JNI settings, including target platform and STL library
|
||||||
default.properties - holds the target ABI for the application, android-10 and up
|
jni/Android.mk - Android makefile that can call recursively the Android.mk files in all subdirectories
|
||||||
project.properties - holds the target ABI for the application, android-10 and up
|
jni/SDL/ - (symlink to) directory holding the SDL library files
|
||||||
local.properties - holds the SDK path, you should change this to the path to your SDK
|
jni/SDL/Android.mk - Android makefile for creating the SDL shared library
|
||||||
jni/ - directory holding native code
|
jni/src/ - directory holding your C/C++ source
|
||||||
jni/Android.mk - Android makefile that can call recursively the Android.mk files
|
jni/src/Android.mk - Android makefile that you should customize to include your source code and any library references
|
||||||
in all subdirectories
|
src/main/assets/ - directory holding asset files for your application
|
||||||
jni/SDL/ - (symlink to) directory holding the SDL library files
|
src/main/res/ - directory holding resources for your application
|
||||||
jni/SDL/Android.mk - Android makefile for creating the SDL shared library
|
src/main/res/mipmap-* - directories holding icons for different phone hardware
|
||||||
jni/src/ - directory holding your C/C++ source
|
src/main/res/values/strings.xml - strings used in your application, including the application name
|
||||||
jni/src/Android.mk - Android makefile that you should customize to include your
|
src/main/java/org/libsdl/app/SDLActivity.java - the Java class handling the initialization and binding to SDL. Be very careful changing this, as the SDL library relies on this implementation. You should instead subclass this for your application.
|
||||||
source code and any library references
|
|
||||||
res/ - directory holding resources for your application
|
|
||||||
res/drawable-* - directories holding icons for different phone hardware. Could be
|
================================================================================
|
||||||
one dir called "drawable".
|
Customizing your application name
|
||||||
res/layout/main.xml - Usually contains a file main.xml, which declares the screen layout.
|
================================================================================
|
||||||
We don't need it because we use the SDL video output.
|
|
||||||
res/values/strings.xml - strings used in your application, including the application name
|
To customize your application name, edit AndroidManifest.xml and replace
|
||||||
shown on the phone.
|
"org.libsdl.app" with an identifier for your product package.
|
||||||
src/org/libsdl/app/SDLActivity.java - the Java class handling the initialization and binding
|
|
||||||
to SDL. Be very careful changing this, as the SDL library relies
|
Then create a Java class extending SDLActivity and place it in a directory
|
||||||
on this implementation.
|
under src matching your package, e.g.
|
||||||
|
|
||||||
|
src/com/gamemaker/game/MyGame.java
|
||||||
================================================================================
|
|
||||||
Build an app with static linking of libSDL
|
Here's an example of a minimal class file:
|
||||||
================================================================================
|
|
||||||
|
--- MyGame.java --------------------------
|
||||||
This build uses the Android NDK module system.
|
package com.gamemaker.game;
|
||||||
|
|
||||||
Instructions:
|
import org.libsdl.app.SDLActivity;
|
||||||
1. Copy the android-project directory wherever you want to keep your projects
|
|
||||||
and rename it to the name of your project.
|
/**
|
||||||
2. Rename <project>/jni/src/Android_static.mk to <project>/jni/src/Android.mk
|
* A sample wrapper class that just calls SDLActivity
|
||||||
(overwrite the existing one)
|
*/
|
||||||
3. Edit <project>/jni/src/Android.mk to include your source files
|
|
||||||
4. create and export an environment variable named NDK_MODULE_PATH that points
|
public class MyGame extends SDLActivity { }
|
||||||
to the parent directory of this SDL directory. e.g.:
|
|
||||||
|
------------------------------------------
|
||||||
export NDK_MODULE_PATH="$PWD"/..
|
|
||||||
|
Then replace "SDLActivity" in AndroidManifest.xml with the name of your
|
||||||
5. Edit <project>/src/org/libsdl/app/SDLActivity.java and remove the call to
|
class, .e.g. "MyGame"
|
||||||
System.loadLibrary("SDL2").
|
|
||||||
6. Run 'ndk-build' (a script provided by the NDK). This compiles the C source
|
|
||||||
|
================================================================================
|
||||||
|
Customizing your application icon
|
||||||
================================================================================
|
================================================================================
|
||||||
Customizing your application name
|
|
||||||
================================================================================
|
Conceptually changing your icon is just replacing the "ic_launcher.png" files in
|
||||||
|
the drawable directories under the res directory. There are several directories
|
||||||
To customize your application name, edit AndroidManifest.xml and replace
|
for different screen sizes.
|
||||||
"org.libsdl.app" with an identifier for your product package.
|
|
||||||
|
|
||||||
Then create a Java class extending SDLActivity and place it in a directory
|
================================================================================
|
||||||
under src matching your package, e.g.
|
Loading assets
|
||||||
|
================================================================================
|
||||||
src/com/gamemaker/game/MyGame.java
|
|
||||||
|
Any files you put in the "app/src/main/assets" directory of your project
|
||||||
Here's an example of a minimal class file:
|
directory will get bundled into the application package and you can load
|
||||||
|
them using the standard functions in SDL_rwops.h.
|
||||||
--- MyGame.java --------------------------
|
|
||||||
package com.gamemaker.game;
|
There are also a few Android specific functions that allow you to get other
|
||||||
|
useful paths for saving and loading data:
|
||||||
import org.libsdl.app.SDLActivity;
|
* SDL_AndroidGetInternalStoragePath()
|
||||||
|
* SDL_AndroidGetExternalStorageState()
|
||||||
/**
|
* SDL_AndroidGetExternalStoragePath()
|
||||||
* A sample wrapper class that just calls SDLActivity
|
|
||||||
*/
|
See SDL_system.h for more details on these functions.
|
||||||
|
|
||||||
public class MyGame extends SDLActivity { }
|
The asset packaging system will, by default, compress certain file extensions.
|
||||||
|
SDL includes two asset file access mechanisms, the preferred one is the so
|
||||||
------------------------------------------
|
called "File Descriptor" method, which is faster and doesn't involve the Dalvik
|
||||||
|
GC, but given this method does not work on compressed assets, there is also the
|
||||||
Then replace "SDLActivity" in AndroidManifest.xml with the name of your
|
"Input Stream" method, which is automatically used as a fall back by SDL. You
|
||||||
class, .e.g. "MyGame"
|
may want to keep this fact in mind when building your APK, specially when large
|
||||||
|
files are involved.
|
||||||
================================================================================
|
For more information on which extensions get compressed by default and how to
|
||||||
Customizing your application icon
|
disable this behaviour, see for example:
|
||||||
================================================================================
|
|
||||||
|
http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/
|
||||||
Conceptually changing your icon is just replacing the "ic_launcher.png" files in
|
|
||||||
the drawable directories under the res directory. There are four directories for
|
|
||||||
different screen sizes. These can be replaced with one dir called "drawable",
|
================================================================================
|
||||||
containing an icon file "ic_launcher.png" with dimensions 48x48 or 72x72.
|
Pause / Resume behaviour
|
||||||
|
================================================================================
|
||||||
You may need to change the name of your icon in AndroidManifest.xml to match
|
|
||||||
this icon filename.
|
If SDL is compiled with SDL_ANDROID_BLOCK_ON_PAUSE defined (the default),
|
||||||
|
the event loop will block itself when the app is paused (ie, when the user
|
||||||
================================================================================
|
returns to the main Android dashboard). Blocking is better in terms of battery
|
||||||
Loading assets
|
use, and it allows your app to spring back to life instantaneously after resume
|
||||||
================================================================================
|
(versus polling for a resume message).
|
||||||
|
|
||||||
Any files you put in the "assets" directory of your android-project directory
|
Upon resume, SDL will attempt to restore the GL context automatically.
|
||||||
will get bundled into the application package and you can load them using the
|
In modern devices (Android 3.0 and up) this will most likely succeed and your
|
||||||
standard functions in SDL_rwops.h.
|
app can continue to operate as it was.
|
||||||
|
|
||||||
There are also a few Android specific functions that allow you to get other
|
However, there's a chance (on older hardware, or on systems under heavy load),
|
||||||
useful paths for saving and loading data:
|
where the GL context can not be restored. In that case you have to listen for
|
||||||
* SDL_AndroidGetInternalStoragePath()
|
a specific message, (which is not yet implemented!) and restore your textures
|
||||||
* SDL_AndroidGetExternalStorageState()
|
manually or quit the app (which is actually the kind of behaviour you'll see
|
||||||
* SDL_AndroidGetExternalStoragePath()
|
under iOS, if the OS can not restore your GL context it will just kill your app)
|
||||||
|
|
||||||
See SDL_system.h for more details on these functions.
|
|
||||||
|
================================================================================
|
||||||
The asset packaging system will, by default, compress certain file extensions.
|
Threads and the Java VM
|
||||||
SDL includes two asset file access mechanisms, the preferred one is the so
|
================================================================================
|
||||||
called "File Descriptor" method, which is faster and doesn't involve the Dalvik
|
|
||||||
GC, but given this method does not work on compressed assets, there is also the
|
For a quick tour on how Linux native threads interoperate with the Java VM, take
|
||||||
"Input Stream" method, which is automatically used as a fall back by SDL. You
|
a look here: https://developer.android.com/guide/practices/jni.html
|
||||||
may want to keep this fact in mind when building your APK, specially when large
|
|
||||||
files are involved.
|
If you want to use threads in your SDL app, it's strongly recommended that you
|
||||||
For more information on which extensions get compressed by default and how to
|
do so by creating them using SDL functions. This way, the required attach/detach
|
||||||
disable this behaviour, see for example:
|
handling is managed by SDL automagically. If you have threads created by other
|
||||||
|
means and they make calls to SDL functions, make sure that you call
|
||||||
http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/
|
Android_JNI_SetupThread() before doing anything else otherwise SDL will attach
|
||||||
|
your thread automatically anyway (when you make an SDL call), but it'll never
|
||||||
================================================================================
|
detach it.
|
||||||
Pause / Resume behaviour
|
|
||||||
================================================================================
|
|
||||||
|
================================================================================
|
||||||
If SDL is compiled with SDL_ANDROID_BLOCK_ON_PAUSE defined (the default),
|
Using STL
|
||||||
the event loop will block itself when the app is paused (ie, when the user
|
================================================================================
|
||||||
returns to the main Android dashboard). Blocking is better in terms of battery
|
|
||||||
use, and it allows your app to spring back to life instantaneously after resume
|
You can use STL in your project by creating an Application.mk file in the jni
|
||||||
(versus polling for a resume message).
|
folder and adding the following line:
|
||||||
|
|
||||||
Upon resume, SDL will attempt to restore the GL context automatically.
|
APP_STL := c++_shared
|
||||||
In modern devices (Android 3.0 and up) this will most likely succeed and your
|
|
||||||
app can continue to operate as it was.
|
For more information go here:
|
||||||
|
https://developer.android.com/ndk/guides/cpp-support
|
||||||
However, there's a chance (on older hardware, or on systems under heavy load),
|
|
||||||
where the GL context can not be restored. In that case you have to listen for
|
|
||||||
a specific message, (which is not yet implemented!) and restore your textures
|
================================================================================
|
||||||
manually or quit the app (which is actually the kind of behaviour you'll see
|
Using the emulator
|
||||||
under iOS, if the OS can not restore your GL context it will just kill your app)
|
================================================================================
|
||||||
|
|
||||||
================================================================================
|
There are some good tips and tricks for getting the most out of the
|
||||||
Threads and the Java VM
|
emulator here: https://developer.android.com/tools/devices/emulator.html
|
||||||
================================================================================
|
|
||||||
|
Especially useful is the info on setting up OpenGL ES 2.0 emulation.
|
||||||
For a quick tour on how Linux native threads interoperate with the Java VM, take
|
|
||||||
a look here: http://developer.android.com/guide/practices/jni.html
|
Notice that this software emulator is incredibly slow and needs a lot of disk space.
|
||||||
|
Using a real device works better.
|
||||||
If you want to use threads in your SDL app, it's strongly recommended that you
|
|
||||||
do so by creating them using SDL functions. This way, the required attach/detach
|
|
||||||
handling is managed by SDL automagically. If you have threads created by other
|
================================================================================
|
||||||
means and they make calls to SDL functions, make sure that you call
|
Troubleshooting
|
||||||
Android_JNI_SetupThread() before doing anything else otherwise SDL will attach
|
================================================================================
|
||||||
your thread automatically anyway (when you make an SDL call), but it'll never
|
|
||||||
detach it.
|
You can see if adb can see any devices with the following command:
|
||||||
|
|
||||||
================================================================================
|
adb devices
|
||||||
Using STL
|
|
||||||
================================================================================
|
You can see the output of log messages on the default device with:
|
||||||
|
|
||||||
You can use STL in your project by creating an Application.mk file in the jni
|
adb logcat
|
||||||
folder and adding the following line:
|
|
||||||
|
You can push files to the device with:
|
||||||
APP_STL := stlport_static
|
|
||||||
|
adb push local_file remote_path_and_file
|
||||||
For more information check out CPLUSPLUS-SUPPORT.html in the NDK documentation.
|
|
||||||
|
You can push files to the SD Card at /sdcard, for example:
|
||||||
================================================================================
|
|
||||||
Additional documentation
|
adb push moose.dat /sdcard/moose.dat
|
||||||
================================================================================
|
|
||||||
|
You can see the files on the SD card with a shell command:
|
||||||
The documentation in the NDK docs directory is very helpful in understanding the
|
|
||||||
build process and how to work with native code on the Android platform.
|
adb shell ls /sdcard/
|
||||||
|
|
||||||
The best place to start is with docs/OVERVIEW.TXT
|
You can start a command shell on the default device with:
|
||||||
|
|
||||||
|
adb shell
|
||||||
================================================================================
|
|
||||||
Using Eclipse
|
You can remove the library files of your project (and not the SDL lib files) with:
|
||||||
================================================================================
|
|
||||||
|
ndk-build clean
|
||||||
First make sure that you've installed Eclipse and the Android extensions as described here:
|
|
||||||
http://developer.android.com/tools/sdk/eclipse-adt.html
|
You can do a build with the following command:
|
||||||
|
|
||||||
Once you've copied the SDL android project and customized it, you can create an Eclipse project from it:
|
ndk-build
|
||||||
* File -> New -> Other
|
|
||||||
* Select the Android -> Android Project wizard and click Next
|
You can see the complete command line that ndk-build is using by passing V=1 on the command line:
|
||||||
* Enter the name you'd like your project to have
|
|
||||||
* Select "Create project from existing source" and browse for your project directory
|
ndk-build V=1
|
||||||
* Make sure the Build Target is set to Android 3.1 (API 12)
|
|
||||||
* Click Finish
|
If your application crashes in native code, you can use ndk-stack to get a symbolic stack trace:
|
||||||
|
https://developer.android.com/ndk/guides/ndk-stack
|
||||||
|
|
||||||
================================================================================
|
If you want to go through the process manually, you can use addr2line to convert the
|
||||||
Using the emulator
|
addresses in the stack trace to lines in your code.
|
||||||
================================================================================
|
|
||||||
|
For example, if your crash looks like this:
|
||||||
There are some good tips and tricks for getting the most out of the
|
|
||||||
emulator here: http://developer.android.com/tools/devices/emulator.html
|
I/DEBUG ( 31): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 400085d0
|
||||||
|
I/DEBUG ( 31): r0 00000000 r1 00001000 r2 00000003 r3 400085d4
|
||||||
Especially useful is the info on setting up OpenGL ES 2.0 emulation.
|
I/DEBUG ( 31): r4 400085d0 r5 40008000 r6 afd41504 r7 436c6a7c
|
||||||
|
I/DEBUG ( 31): r8 436c6b30 r9 435c6fb0 10 435c6f9c fp 4168d82c
|
||||||
Notice that this software emulator is incredibly slow and needs a lot of disk space.
|
I/DEBUG ( 31): ip 8346aff0 sp 436c6a60 lr afd1c8ff pc afd1c902 cpsr 60000030
|
||||||
Using a real device works better.
|
I/DEBUG ( 31): #00 pc 0001c902 /system/lib/libc.so
|
||||||
|
I/DEBUG ( 31): #01 pc 0001ccf6 /system/lib/libc.so
|
||||||
================================================================================
|
I/DEBUG ( 31): #02 pc 000014bc /data/data/org.libsdl.app/lib/libmain.so
|
||||||
Troubleshooting
|
I/DEBUG ( 31): #03 pc 00001506 /data/data/org.libsdl.app/lib/libmain.so
|
||||||
================================================================================
|
|
||||||
|
You can see that there's a crash in the C library being called from the main code.
|
||||||
You can create and run an emulator from the Eclipse IDE:
|
I run addr2line with the debug version of my code:
|
||||||
* Window -> Android SDK and AVD Manager
|
|
||||||
|
arm-eabi-addr2line -C -f -e obj/local/armeabi/libmain.so
|
||||||
You can see if adb can see any devices with the following command:
|
|
||||||
|
and then paste in the number after "pc" in the call stack, from the line that I care about:
|
||||||
adb devices
|
000014bc
|
||||||
|
|
||||||
You can see the output of log messages on the default device with:
|
I get output from addr2line showing that it's in the quit function, in testspriteminimal.c, on line 23.
|
||||||
|
|
||||||
adb logcat
|
You can add logging to your code to help show what's happening:
|
||||||
|
|
||||||
You can push files to the device with:
|
#include <android/log.h>
|
||||||
|
|
||||||
adb push local_file remote_path_and_file
|
__android_log_print(ANDROID_LOG_INFO, "foo", "Something happened! x = %d", x);
|
||||||
|
|
||||||
You can push files to the SD Card at /sdcard, for example:
|
If you need to build without optimization turned on, you can create a file called
|
||||||
|
"Application.mk" in the jni directory, with the following line in it:
|
||||||
adb push moose.dat /sdcard/moose.dat
|
|
||||||
|
APP_OPTIM := debug
|
||||||
You can see the files on the SD card with a shell command:
|
|
||||||
|
|
||||||
adb shell ls /sdcard/
|
================================================================================
|
||||||
|
Memory debugging
|
||||||
You can start a command shell on the default device with:
|
================================================================================
|
||||||
|
|
||||||
adb shell
|
The best (and slowest) way to debug memory issues on Android is valgrind.
|
||||||
|
Valgrind has support for Android out of the box, just grab code using:
|
||||||
You can remove the library files of your project (and not the SDL lib files) with:
|
|
||||||
|
svn co svn://svn.valgrind.org/valgrind/trunk valgrind
|
||||||
ndk-build clean
|
|
||||||
|
... and follow the instructions in the file README.android to build it.
|
||||||
You can do a build with the following command:
|
|
||||||
|
One thing I needed to do on Mac OS X was change the path to the toolchain,
|
||||||
ndk-build
|
and add ranlib to the environment variables:
|
||||||
|
export RANLIB=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-ranlib
|
||||||
You can see the complete command line that ndk-build is using by passing V=1 on the command line:
|
|
||||||
|
Once valgrind is built, you can create a wrapper script to launch your
|
||||||
ndk-build V=1
|
application with it, changing org.libsdl.app to your package identifier:
|
||||||
|
|
||||||
If your application crashes in native code, you can use addr2line to convert the
|
--- start_valgrind_app -------------------
|
||||||
addresses in the stack trace to lines in your code.
|
#!/system/bin/sh
|
||||||
|
export TMPDIR=/data/data/org.libsdl.app
|
||||||
For example, if your crash looks like this:
|
exec /data/local/Inst/bin/valgrind --log-file=/sdcard/valgrind.log --error-limit=no $*
|
||||||
|
------------------------------------------
|
||||||
I/DEBUG ( 31): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 400085d0
|
|
||||||
I/DEBUG ( 31): r0 00000000 r1 00001000 r2 00000003 r3 400085d4
|
Then push it to the device:
|
||||||
I/DEBUG ( 31): r4 400085d0 r5 40008000 r6 afd41504 r7 436c6a7c
|
|
||||||
I/DEBUG ( 31): r8 436c6b30 r9 435c6fb0 10 435c6f9c fp 4168d82c
|
adb push start_valgrind_app /data/local
|
||||||
I/DEBUG ( 31): ip 8346aff0 sp 436c6a60 lr afd1c8ff pc afd1c902 cpsr 60000030
|
|
||||||
I/DEBUG ( 31): #00 pc 0001c902 /system/lib/libc.so
|
and make it executable:
|
||||||
I/DEBUG ( 31): #01 pc 0001ccf6 /system/lib/libc.so
|
|
||||||
I/DEBUG ( 31): #02 pc 000014bc /data/data/org.libsdl.app/lib/libmain.so
|
adb shell chmod 755 /data/local/start_valgrind_app
|
||||||
I/DEBUG ( 31): #03 pc 00001506 /data/data/org.libsdl.app/lib/libmain.so
|
|
||||||
|
and tell Android to use the script to launch your application:
|
||||||
You can see that there's a crash in the C library being called from the main code.
|
|
||||||
I run addr2line with the debug version of my code:
|
adb shell setprop wrap.org.libsdl.app "logwrapper /data/local/start_valgrind_app"
|
||||||
|
|
||||||
arm-eabi-addr2line -C -f -e obj/local/armeabi/libmain.so
|
If the setprop command says "could not set property", it's likely that
|
||||||
|
your package name is too long and you should make it shorter by changing
|
||||||
and then paste in the number after "pc" in the call stack, from the line that I care about:
|
AndroidManifest.xml and the path to your class file in android-project/src
|
||||||
000014bc
|
|
||||||
|
You can then launch your application normally and waaaaaaaiiittt for it.
|
||||||
I get output from addr2line showing that it's in the quit function, in testspriteminimal.c, on line 23.
|
You can monitor the startup process with the logcat command above, and
|
||||||
|
when it's done (or even while it's running) you can grab the valgrind
|
||||||
You can add logging to your code to help show what's happening:
|
output file:
|
||||||
|
|
||||||
#include <android/log.h>
|
adb pull /sdcard/valgrind.log
|
||||||
|
|
||||||
__android_log_print(ANDROID_LOG_INFO, "foo", "Something happened! x = %d", x);
|
When you're done instrumenting with valgrind, you can disable the wrapper:
|
||||||
|
|
||||||
If you need to build without optimization turned on, you can create a file called
|
adb shell setprop wrap.org.libsdl.app ""
|
||||||
"Application.mk" in the jni directory, with the following line in it:
|
|
||||||
|
|
||||||
APP_OPTIM := debug
|
================================================================================
|
||||||
|
Graphics debugging
|
||||||
|
================================================================================
|
||||||
================================================================================
|
|
||||||
Memory debugging
|
If you are developing on a compatible Tegra-based tablet, NVidia provides
|
||||||
================================================================================
|
Tegra Graphics Debugger at their website. Because SDL2 dynamically loads EGL
|
||||||
|
and GLES libraries, you must follow their instructions for installing the
|
||||||
The best (and slowest) way to debug memory issues on Android is valgrind.
|
interposer library on a rooted device. The non-rooted instructions are not
|
||||||
Valgrind has support for Android out of the box, just grab code using:
|
compatible with applications that use SDL2 for video.
|
||||||
|
|
||||||
svn co svn://svn.valgrind.org/valgrind/trunk valgrind
|
The Tegra Graphics Debugger is available from NVidia here:
|
||||||
|
https://developer.nvidia.com/tegra-graphics-debugger
|
||||||
... and follow the instructions in the file README.android to build it.
|
|
||||||
|
|
||||||
One thing I needed to do on Mac OS X was change the path to the toolchain,
|
================================================================================
|
||||||
and add ranlib to the environment variables:
|
Why is API level 14 the minimum required?
|
||||||
export RANLIB=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-ranlib
|
================================================================================
|
||||||
|
|
||||||
Once valgrind is built, you can create a wrapper script to launch your
|
The latest NDK toolchain doesn't support targeting earlier than API level 14.
|
||||||
application with it, changing org.libsdl.app to your package identifier:
|
As of this writing, according to https://developer.android.com/about/dashboards/index.html
|
||||||
|
about 99% of the Android devices accessing Google Play support API level 14 or
|
||||||
--- start_valgrind_app -------------------
|
higher (October 2017).
|
||||||
#!/system/bin/sh
|
|
||||||
export TMPDIR=/data/data/org.libsdl.app
|
|
||||||
exec /data/local/Inst/bin/valgrind --log-file=/sdcard/valgrind.log --error-limit=no $*
|
================================================================================
|
||||||
------------------------------------------
|
A note regarding the use of the "dirty rectangles" rendering technique
|
||||||
|
================================================================================
|
||||||
Then push it to the device:
|
|
||||||
|
If your app uses a variation of the "dirty rectangles" rendering technique,
|
||||||
adb push start_valgrind_app /data/local
|
where you only update a portion of the screen on each frame, you may notice a
|
||||||
|
variety of visual glitches on Android, that are not present on other platforms.
|
||||||
and make it executable:
|
This is caused by SDL's use of EGL as the support system to handle OpenGL ES/ES2
|
||||||
|
contexts, in particular the use of the eglSwapBuffers function. As stated in the
|
||||||
adb shell chmod 755 /data/local/start_valgrind_app
|
documentation for the function "The contents of ancillary buffers are always
|
||||||
|
undefined after calling eglSwapBuffers".
|
||||||
and tell Android to use the script to launch your application:
|
Setting the EGL_SWAP_BEHAVIOR attribute of the surface to EGL_BUFFER_PRESERVED
|
||||||
|
is not possible for SDL as it requires EGL 1.4, available only on the API level
|
||||||
adb shell setprop wrap.org.libsdl.app "logwrapper /data/local/start_valgrind_app"
|
17+, so the only workaround available on this platform is to redraw the entire
|
||||||
|
screen each frame.
|
||||||
If the setprop command says "could not set property", it's likely that
|
|
||||||
your package name is too long and you should make it shorter by changing
|
Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html
|
||||||
AndroidManifest.xml and the path to your class file in android-project/src
|
|
||||||
|
|
||||||
You can then launch your application normally and waaaaaaaiiittt for it.
|
================================================================================
|
||||||
You can monitor the startup process with the logcat command above, and
|
Known issues
|
||||||
when it's done (or even while it's running) you can grab the valgrind
|
================================================================================
|
||||||
output file:
|
|
||||||
|
- The number of buttons reported for each joystick is hardcoded to be 36, which
|
||||||
adb pull /sdcard/valgrind.log
|
is the current maximum number of buttons Android can report.
|
||||||
|
|
||||||
When you're done instrumenting with valgrind, you can disable the wrapper:
|
|
||||||
|
|
||||||
adb shell setprop wrap.org.libsdl.app ""
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Why is API level 10 the minimum required?
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
API level 10 is the minimum required level at runtime (that is, on the device)
|
|
||||||
because SDL requires some functionality for running not
|
|
||||||
available on older devices. Since the incorporation of joystick support into SDL,
|
|
||||||
the minimum SDK required to *build* SDL is version 12. Devices running API levels
|
|
||||||
10-11 are still supported, only with the joystick functionality disabled.
|
|
||||||
|
|
||||||
Support for native OpenGL ES and ES2 applications was introduced in the NDK for
|
|
||||||
API level 4 and 8. EGL was made a stable API in the NDK for API level 9, which
|
|
||||||
has since then been obsoleted, with the recommendation to developers to bump the
|
|
||||||
required API level to 10.
|
|
||||||
As of this writing, according to http://developer.android.com/about/dashboards/index.html
|
|
||||||
about 90% of the Android devices accessing Google Play support API level 10 or
|
|
||||||
higher (March 2013).
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
A note regarding the use of the "dirty rectangles" rendering technique
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
If your app uses a variation of the "dirty rectangles" rendering technique,
|
|
||||||
where you only update a portion of the screen on each frame, you may notice a
|
|
||||||
variety of visual glitches on Android, that are not present on other platforms.
|
|
||||||
This is caused by SDL's use of EGL as the support system to handle OpenGL ES/ES2
|
|
||||||
contexts, in particular the use of the eglSwapBuffers function. As stated in the
|
|
||||||
documentation for the function "The contents of ancillary buffers are always
|
|
||||||
undefined after calling eglSwapBuffers".
|
|
||||||
Setting the EGL_SWAP_BEHAVIOR attribute of the surface to EGL_BUFFER_PRESERVED
|
|
||||||
is not possible for SDL as it requires EGL 1.4, available only on the API level
|
|
||||||
17+, so the only workaround available on this platform is to redraw the entire
|
|
||||||
screen each frame.
|
|
||||||
|
|
||||||
Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Known issues
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
- The number of buttons reported for each joystick is hardcoded to be 36, which
|
|
||||||
is the current maximum number of buttons Android can report.
|
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
CMake
|
CMake
|
||||||
================================================================================
|
================================================================================
|
||||||
(www.cmake.org)
|
(www.cmake.org)
|
||||||
|
|
||||||
SDL's build system was traditionally based on autotools. Over time, this
|
SDL's build system was traditionally based on autotools. Over time, this
|
||||||
approach has suffered from several issues across the different supported
|
approach has suffered from several issues across the different supported
|
||||||
platforms.
|
platforms.
|
||||||
To solve these problems, a new build system based on CMake is under development.
|
To solve these problems, a new build system based on CMake is under development.
|
||||||
It works in parallel to the legacy system, so users can experiment with it
|
It works in parallel to the legacy system, so users can experiment with it
|
||||||
without complication.
|
without complication.
|
||||||
While still experimental, the build system should be usable on the following
|
While still experimental, the build system should be usable on the following
|
||||||
platforms:
|
platforms:
|
||||||
|
|
||||||
* FreeBSD
|
* FreeBSD
|
||||||
* Linux
|
* Linux
|
||||||
* VS.NET 2010
|
* VS.NET 2010
|
||||||
* MinGW and Msys
|
* MinGW and Msys
|
||||||
* OS X with support for XCode
|
* OS X with support for XCode
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
Usage
|
Usage
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Assuming the source for SDL is located at ~/sdl
|
Assuming the source for SDL is located at ~/sdl
|
||||||
|
|
||||||
cd ~
|
cd ~
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake ../sdl
|
cmake ../sdl
|
||||||
|
|
||||||
This will build the static and dynamic versions of SDL in the ~/build directory.
|
This will build the static and dynamic versions of SDL in the ~/build directory.
|
||||||
|
|
|
@ -1,107 +1,107 @@
|
||||||
DirectFB
|
DirectFB
|
||||||
========
|
========
|
||||||
|
|
||||||
Supports:
|
Supports:
|
||||||
|
|
||||||
- Hardware YUV overlays
|
- Hardware YUV overlays
|
||||||
- OpenGL - software only
|
- OpenGL - software only
|
||||||
- 2D/3D accelerations (depends on directfb driver)
|
- 2D/3D accelerations (depends on directfb driver)
|
||||||
- multiple displays
|
- multiple displays
|
||||||
- windows
|
- windows
|
||||||
|
|
||||||
What you need:
|
What you need:
|
||||||
|
|
||||||
* DirectFB 1.0.1, 1.2.x, 1.3.0
|
* DirectFB 1.0.1, 1.2.x, 1.3.0
|
||||||
* Kernel-Framebuffer support: required: vesafb, radeonfb ....
|
* Kernel-Framebuffer support: required: vesafb, radeonfb ....
|
||||||
* Mesa 7.0.x - optional for OpenGL
|
* Mesa 7.0.x - optional for OpenGL
|
||||||
|
|
||||||
/etc/directfbrc
|
/etc/directfbrc
|
||||||
|
|
||||||
This file should contain the following lines to make
|
This file should contain the following lines to make
|
||||||
your joystick work and avoid crashes:
|
your joystick work and avoid crashes:
|
||||||
------------------------
|
------------------------
|
||||||
disable-module=joystick
|
disable-module=joystick
|
||||||
disable-module=cle266
|
disable-module=cle266
|
||||||
disable-module=cyber5k
|
disable-module=cyber5k
|
||||||
no-linux-input-grab
|
no-linux-input-grab
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
To disable to use x11 backend when DISPLAY variable is found use
|
To disable to use x11 backend when DISPLAY variable is found use
|
||||||
|
|
||||||
export SDL_DIRECTFB_X11_CHECK=0
|
export SDL_DIRECTFB_X11_CHECK=0
|
||||||
|
|
||||||
To disable the use of linux input devices, i.e. multimice/multikeyboard support,
|
To disable the use of linux input devices, i.e. multimice/multikeyboard support,
|
||||||
use
|
use
|
||||||
|
|
||||||
export SDL_DIRECTFB_LINUX_INPUT=0
|
export SDL_DIRECTFB_LINUX_INPUT=0
|
||||||
|
|
||||||
To use hardware accelerated YUV-overlays for YUV-textures, use:
|
To use hardware accelerated YUV-overlays for YUV-textures, use:
|
||||||
|
|
||||||
export SDL_DIRECTFB_YUV_DIRECT=1
|
export SDL_DIRECTFB_YUV_DIRECT=1
|
||||||
|
|
||||||
This is disabled by default. It will only support one
|
This is disabled by default. It will only support one
|
||||||
YUV texture, namely the first. Every other YUV texture will be
|
YUV texture, namely the first. Every other YUV texture will be
|
||||||
rendered in software.
|
rendered in software.
|
||||||
|
|
||||||
In addition, you may use (directfb-1.2.x)
|
In addition, you may use (directfb-1.2.x)
|
||||||
|
|
||||||
export SDL_DIRECTFB_YUV_UNDERLAY=1
|
export SDL_DIRECTFB_YUV_UNDERLAY=1
|
||||||
|
|
||||||
to make the YUV texture an underlay. This will make the cursor to
|
to make the YUV texture an underlay. This will make the cursor to
|
||||||
be shown.
|
be shown.
|
||||||
|
|
||||||
Simple Window Manager
|
Simple Window Manager
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
The driver has support for a very, very basic window manager you may
|
The driver has support for a very, very basic window manager you may
|
||||||
want to use when running with "wm=default". Use
|
want to use when running with "wm=default". Use
|
||||||
|
|
||||||
export SDL_DIRECTFB_WM=1
|
export SDL_DIRECTFB_WM=1
|
||||||
|
|
||||||
to enable basic window borders. In order to have the window title rendered,
|
to enable basic window borders. In order to have the window title rendered,
|
||||||
you need to have the following font installed:
|
you need to have the following font installed:
|
||||||
|
|
||||||
/usr/share/fonts/truetype/freefont/FreeSans.ttf
|
/usr/share/fonts/truetype/freefont/FreeSans.ttf
|
||||||
|
|
||||||
OpenGL Support
|
OpenGL Support
|
||||||
==============
|
==============
|
||||||
|
|
||||||
The following instructions will give you *software* OpenGL. However this
|
The following instructions will give you *software* OpenGL. However this
|
||||||
works at least on all directfb supported platforms.
|
works at least on all directfb supported platforms.
|
||||||
|
|
||||||
As of this writing 20100802 you need to pull Mesa from git and do the following:
|
As of this writing 20100802 you need to pull Mesa from git and do the following:
|
||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
git clone git://anongit.freedesktop.org/git/mesa/mesa
|
git clone git://anongit.freedesktop.org/git/mesa/mesa
|
||||||
cd mesa
|
cd mesa
|
||||||
git checkout 2c9fdaf7292423c157fc79b5ce43f0f199dd753a
|
git checkout 2c9fdaf7292423c157fc79b5ce43f0f199dd753a
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
Edit configs/linux-directfb so that the Directories-section looks like
|
Edit configs/linux-directfb so that the Directories-section looks like
|
||||||
------------------------
|
------------------------
|
||||||
# Directories
|
# Directories
|
||||||
SRC_DIRS = mesa glu
|
SRC_DIRS = mesa glu
|
||||||
GLU_DIRS = sgi
|
GLU_DIRS = sgi
|
||||||
DRIVER_DIRS = directfb
|
DRIVER_DIRS = directfb
|
||||||
PROGRAM_DIRS =
|
PROGRAM_DIRS =
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
make linux-directfb
|
make linux-directfb
|
||||||
make
|
make
|
||||||
|
|
||||||
echo Installing - please enter sudo pw.
|
echo Installing - please enter sudo pw.
|
||||||
|
|
||||||
sudo make install INSTALL_DIR=/usr/local/dfb_GL
|
sudo make install INSTALL_DIR=/usr/local/dfb_GL
|
||||||
cd src/mesa/drivers/directfb
|
cd src/mesa/drivers/directfb
|
||||||
make
|
make
|
||||||
sudo make install INSTALL_DIR=/usr/local/dfb_GL
|
sudo make install INSTALL_DIR=/usr/local/dfb_GL
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
To run the SDL - testprograms:
|
To run the SDL - testprograms:
|
||||||
|
|
||||||
export SDL_VIDEODRIVER=directfb
|
export SDL_VIDEODRIVER=directfb
|
||||||
export LD_LIBRARY_PATH=/usr/local/dfb_GL/lib
|
export LD_LIBRARY_PATH=/usr/local/dfb_GL/lib
|
||||||
export LD_PRELOAD=/usr/local/dfb_GL/libGL.so.7
|
export LD_PRELOAD=/usr/local/dfb_GL/libGL.so.7
|
||||||
|
|
||||||
./testgl
|
./testgl
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ level of indirection, we can do things like this:
|
||||||
export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0
|
export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0
|
||||||
./MyGameThatIsStaticallyLinkedToSDL2
|
./MyGameThatIsStaticallyLinkedToSDL2
|
||||||
|
|
||||||
And now, this game that is staticallly linked to SDL, can still be overridden
|
And now, this game that is statically linked to SDL, can still be overridden
|
||||||
with a newer, or better, SDL. The statically linked one will only be used as
|
with a newer, or better, SDL. The statically linked one will only be used as
|
||||||
far as calling into the jump table in this case. But in cases where no override
|
far as calling into the jump table in this case. But in cases where no override
|
||||||
is desired, the statically linked version will provide its own jump table,
|
is desired, the statically linked version will provide its own jump table,
|
||||||
|
|
|
@ -5,7 +5,7 @@ Build:
|
||||||
|
|
||||||
$ mkdir build
|
$ mkdir build
|
||||||
$ cd build
|
$ cd build
|
||||||
$ emconfigure ../configure --host=asmjs-unknown-emscripten --disable-assembly --disable-threads --enable-cpuinfo=false CFLAGS="-O2"
|
$ emconfigure ../configure --host=asmjs-unknown-emscripten --disable-assembly --disable-threads --disable-cpuinfo CFLAGS="-O2"
|
||||||
$ emmake make
|
$ emmake make
|
||||||
|
|
||||||
Or with cmake:
|
Or with cmake:
|
||||||
|
@ -22,8 +22,6 @@ To build one of the tests:
|
||||||
|
|
||||||
Uses GLES2 renderer or software
|
Uses GLES2 renderer or software
|
||||||
|
|
||||||
tests: https://dl.dropboxusercontent.com/u/17360362/SDL2-em/index.html
|
|
||||||
|
|
||||||
Some other SDL2 libraries can be easily built (assuming SDL2 is installed somewhere):
|
Some other SDL2 libraries can be easily built (assuming SDL2 is installed somewhere):
|
||||||
|
|
||||||
SDL_mixer (http://www.libsdl.org/projects/SDL_mixer/):
|
SDL_mixer (http://www.libsdl.org/projects/SDL_mixer/):
|
||||||
|
|
|
@ -1,71 +1,71 @@
|
||||||
Dollar Gestures
|
Dollar Gestures
|
||||||
===========================================================================
|
===========================================================================
|
||||||
SDL provides an implementation of the $1 gesture recognition system. This allows for recording, saving, loading, and performing single stroke gestures.
|
SDL provides an implementation of the $1 gesture recognition system. This allows for recording, saving, loading, and performing single stroke gestures.
|
||||||
|
|
||||||
Gestures can be performed with any number of fingers (the centroid of the fingers must follow the path of the gesture), but the number of fingers must be constant (a finger cannot go down in the middle of a gesture). The path of a gesture is considered the path from the time when the final finger went down, to the first time any finger comes up.
|
Gestures can be performed with any number of fingers (the centroid of the fingers must follow the path of the gesture), but the number of fingers must be constant (a finger cannot go down in the middle of a gesture). The path of a gesture is considered the path from the time when the final finger went down, to the first time any finger comes up.
|
||||||
|
|
||||||
Dollar gestures are assigned an Id based on a hash function. This is guaranteed to remain constant for a given gesture. There is a (small) chance that two different gestures will be assigned the same ID. In this case, simply re-recording one of the gestures should result in a different ID.
|
Dollar gestures are assigned an Id based on a hash function. This is guaranteed to remain constant for a given gesture. There is a (small) chance that two different gestures will be assigned the same ID. In this case, simply re-recording one of the gestures should result in a different ID.
|
||||||
|
|
||||||
Recording:
|
Recording:
|
||||||
----------
|
----------
|
||||||
To begin recording on a touch device call:
|
To begin recording on a touch device call:
|
||||||
SDL_RecordGesture(SDL_TouchID touchId), where touchId is the id of the touch device you wish to record on, or -1 to record on all connected devices.
|
SDL_RecordGesture(SDL_TouchID touchId), where touchId is the id of the touch device you wish to record on, or -1 to record on all connected devices.
|
||||||
|
|
||||||
Recording terminates as soon as a finger comes up. Recording is acknowledged by an SDL_DOLLARRECORD event.
|
Recording terminates as soon as a finger comes up. Recording is acknowledged by an SDL_DOLLARRECORD event.
|
||||||
A SDL_DOLLARRECORD event is a dgesture with the following fields:
|
A SDL_DOLLARRECORD event is a dgesture with the following fields:
|
||||||
|
|
||||||
* event.dgesture.touchId - the Id of the touch used to record the gesture.
|
* event.dgesture.touchId - the Id of the touch used to record the gesture.
|
||||||
* event.dgesture.gestureId - the unique id of the recorded gesture.
|
* event.dgesture.gestureId - the unique id of the recorded gesture.
|
||||||
|
|
||||||
|
|
||||||
Performing:
|
Performing:
|
||||||
-----------
|
-----------
|
||||||
As long as there is a dollar gesture assigned to a touch, every finger-up event will also cause an SDL_DOLLARGESTURE event with the following fields:
|
As long as there is a dollar gesture assigned to a touch, every finger-up event will also cause an SDL_DOLLARGESTURE event with the following fields:
|
||||||
|
|
||||||
* event.dgesture.touchId - the Id of the touch which performed the gesture.
|
* event.dgesture.touchId - the Id of the touch which performed the gesture.
|
||||||
* event.dgesture.gestureId - the unique id of the closest gesture to the performed stroke.
|
* event.dgesture.gestureId - the unique id of the closest gesture to the performed stroke.
|
||||||
* event.dgesture.error - the difference between the gesture template and the actual performed gesture. Lower error is a better match.
|
* event.dgesture.error - the difference between the gesture template and the actual performed gesture. Lower error is a better match.
|
||||||
* event.dgesture.numFingers - the number of fingers used to draw the stroke.
|
* event.dgesture.numFingers - the number of fingers used to draw the stroke.
|
||||||
|
|
||||||
Most programs will want to define an appropriate error threshold and check to be sure that the error of a gesture is not abnormally high (an indicator that no gesture was performed).
|
Most programs will want to define an appropriate error threshold and check to be sure that the error of a gesture is not abnormally high (an indicator that no gesture was performed).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Saving:
|
Saving:
|
||||||
-------
|
-------
|
||||||
To save a template, call SDL_SaveDollarTemplate(gestureId, dst) where gestureId is the id of the gesture you want to save, and dst is an SDL_RWops pointer to the file where the gesture will be stored.
|
To save a template, call SDL_SaveDollarTemplate(gestureId, dst) where gestureId is the id of the gesture you want to save, and dst is an SDL_RWops pointer to the file where the gesture will be stored.
|
||||||
|
|
||||||
To save all currently loaded templates, call SDL_SaveAllDollarTemplates(dst) where dst is an SDL_RWops pointer to the file where the gesture will be stored.
|
To save all currently loaded templates, call SDL_SaveAllDollarTemplates(dst) where dst is an SDL_RWops pointer to the file where the gesture will be stored.
|
||||||
|
|
||||||
Both functions return the number of gestures successfully saved.
|
Both functions return the number of gestures successfully saved.
|
||||||
|
|
||||||
|
|
||||||
Loading:
|
Loading:
|
||||||
--------
|
--------
|
||||||
To load templates from a file, call SDL_LoadDollarTemplates(touchId,src) where touchId is the id of the touch to load to (or -1 to load to all touch devices), and src is an SDL_RWops pointer to a gesture save file.
|
To load templates from a file, call SDL_LoadDollarTemplates(touchId,src) where touchId is the id of the touch to load to (or -1 to load to all touch devices), and src is an SDL_RWops pointer to a gesture save file.
|
||||||
|
|
||||||
SDL_LoadDollarTemplates returns the number of templates successfully loaded.
|
SDL_LoadDollarTemplates returns the number of templates successfully loaded.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
===========================================================================
|
===========================================================================
|
||||||
Multi Gestures
|
Multi Gestures
|
||||||
===========================================================================
|
===========================================================================
|
||||||
SDL provides simple support for pinch/rotate/swipe gestures.
|
SDL provides simple support for pinch/rotate/swipe gestures.
|
||||||
Every time a finger is moved an SDL_MULTIGESTURE event is sent with the following fields:
|
Every time a finger is moved an SDL_MULTIGESTURE event is sent with the following fields:
|
||||||
|
|
||||||
* event.mgesture.touchId - the Id of the touch on which the gesture was performed.
|
* event.mgesture.touchId - the Id of the touch on which the gesture was performed.
|
||||||
* event.mgesture.x - the normalized x coordinate of the gesture. (0..1)
|
* event.mgesture.x - the normalized x coordinate of the gesture. (0..1)
|
||||||
* event.mgesture.y - the normalized y coordinate of the gesture. (0..1)
|
* event.mgesture.y - the normalized y coordinate of the gesture. (0..1)
|
||||||
* event.mgesture.dTheta - the amount that the fingers rotated during this motion.
|
* event.mgesture.dTheta - the amount that the fingers rotated during this motion.
|
||||||
* event.mgesture.dDist - the amount that the fingers pinched during this motion.
|
* event.mgesture.dDist - the amount that the fingers pinched during this motion.
|
||||||
* event.mgesture.numFingers - the number of fingers used in the gesture.
|
* event.mgesture.numFingers - the number of fingers used in the gesture.
|
||||||
|
|
||||||
|
|
||||||
===========================================================================
|
===========================================================================
|
||||||
Notes
|
Notes
|
||||||
===========================================================================
|
===========================================================================
|
||||||
For a complete example see test/testgesture.c
|
For a complete example see test/testgesture.c
|
||||||
|
|
||||||
Please direct questions/comments to:
|
Please direct questions/comments to:
|
||||||
jim.tla+sdl_touch@gmail.com
|
jim.tla+sdl_touch@gmail.com
|
||||||
|
|
|
@ -1,25 +1,22 @@
|
||||||
Mercurial
|
Mercurial
|
||||||
=========
|
=========
|
||||||
|
|
||||||
The latest development version of SDL is available via Mercurial.
|
The latest development version of SDL is available via Mercurial.
|
||||||
Mercurial allows you to get up-to-the-minute fixes and enhancements;
|
Mercurial allows you to get up-to-the-minute fixes and enhancements;
|
||||||
as a developer works on a source tree, you can use "hg" to mirror that
|
as a developer works on a source tree, you can use "hg" to mirror that
|
||||||
source tree instead of waiting for an official release. Please look
|
source tree instead of waiting for an official release. Please look
|
||||||
at the Mercurial website ( http://mercurial.selenic.com/ ) for more
|
at the Mercurial website ( https://www.mercurial-scm.org/ ) for more
|
||||||
information on using hg, where you can also download software for
|
information on using hg, where you can also download software for
|
||||||
Mac OS X, Windows, and Unix systems.
|
Mac OS X, Windows, and Unix systems.
|
||||||
|
|
||||||
hg clone http://hg.libsdl.org/SDL
|
hg clone http://hg.libsdl.org/SDL
|
||||||
|
|
||||||
If you are building SDL with an IDE, you will need to copy the file
|
If you are building SDL via configure, you will need to run autogen.sh
|
||||||
include/SDL_config.h.default to include/SDL_config.h before building.
|
before running configure.
|
||||||
|
|
||||||
If you are building SDL via configure, you will need to run autogen.sh
|
There is a web interface to the subversion repository at:
|
||||||
before running configure.
|
http://hg.libsdl.org/SDL/
|
||||||
|
|
||||||
There is a web interface to the subversion repository at:
|
There is an RSS feed available at that URL, for those that want to
|
||||||
http://hg.libsdl.org/SDL/
|
track commits in real time.
|
||||||
|
|
||||||
There is an RSS feed available at that URL, for those that want to
|
|
||||||
track commits in real time.
|
|
||||||
|
|
||||||
|
|
|
@ -1,266 +1,284 @@
|
||||||
iOS
|
iOS
|
||||||
======
|
======
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Building the Simple DirectMedia Layer for iOS 5.1+
|
Building the Simple DirectMedia Layer for iOS 5.1+
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
Requirements: Mac OS X 10.8 or later and the iOS 7+ SDK.
|
Requirements: Mac OS X 10.8 or later and the iOS 7+ SDK.
|
||||||
|
|
||||||
Instructions:
|
Instructions:
|
||||||
1. Open SDL.xcodeproj (located in Xcode-iOS/SDL) in Xcode.
|
|
||||||
2. Select your desired target, and hit build.
|
1. Open SDL.xcodeproj (located in Xcode-iOS/SDL) in Xcode.
|
||||||
|
2. Select your desired target, and hit build.
|
||||||
There are three build targets:
|
|
||||||
- libSDL.a:
|
There are three build targets:
|
||||||
Build SDL as a statically linked library
|
- libSDL.a:
|
||||||
- testsdl:
|
Build SDL as a statically linked library
|
||||||
Build a test program (there are known test failures which are fine)
|
- testsdl:
|
||||||
- Template:
|
Build a test program (there are known test failures which are fine)
|
||||||
Package a project template together with the SDL for iPhone static libraries and copies of the SDL headers. The template includes proper references to the SDL library and headers, skeleton code for a basic SDL program, and placeholder graphics for the application icon and startup screen.
|
- Template:
|
||||||
|
Package a project template together with the SDL for iPhone static libraries and copies of the SDL headers. The template includes proper references to the SDL library and headers, skeleton code for a basic SDL program, and placeholder graphics for the application icon and startup screen.
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Build SDL for iOS from the command line
|
==============================================================================
|
||||||
==============================================================================
|
Build SDL for iOS from the command line
|
||||||
|
==============================================================================
|
||||||
1. cd (PATH WHERE THE SDL CODE IS)/build-scripts
|
|
||||||
2. ./iosbuild.sh
|
1. cd (PATH WHERE THE SDL CODE IS)/build-scripts
|
||||||
|
2. ./iosbuild.sh
|
||||||
If everything goes fine, you should see a build/ios directory, inside there's
|
|
||||||
two directories "lib" and "include".
|
If everything goes fine, you should see a build/ios directory, inside there's
|
||||||
"include" contains a copy of the SDL headers that you'll need for your project,
|
two directories "lib" and "include".
|
||||||
make sure to configure XCode to look for headers there.
|
"include" contains a copy of the SDL headers that you'll need for your project,
|
||||||
"lib" contains find two files, libSDL2.a and libSDL2main.a, you have to add both
|
make sure to configure XCode to look for headers there.
|
||||||
to your XCode project. These libraries contain three architectures in them,
|
"lib" contains find two files, libSDL2.a and libSDL2main.a, you have to add both
|
||||||
armv6 for legacy devices, armv7, and i386 (for the simulator).
|
to your XCode project. These libraries contain three architectures in them,
|
||||||
By default, iosbuild.sh will autodetect the SDK version you have installed using
|
armv6 for legacy devices, armv7, and i386 (for the simulator).
|
||||||
xcodebuild -showsdks, and build for iOS >= 3.0, you can override this behaviour
|
By default, iosbuild.sh will autodetect the SDK version you have installed using
|
||||||
by setting the MIN_OS_VERSION variable, ie:
|
xcodebuild -showsdks, and build for iOS >= 3.0, you can override this behaviour
|
||||||
|
by setting the MIN_OS_VERSION variable, ie:
|
||||||
MIN_OS_VERSION=4.2 ./iosbuild.sh
|
|
||||||
|
MIN_OS_VERSION=4.2 ./iosbuild.sh
|
||||||
==============================================================================
|
|
||||||
Using the Simple DirectMedia Layer for iOS
|
==============================================================================
|
||||||
==============================================================================
|
Using the Simple DirectMedia Layer for iOS
|
||||||
|
==============================================================================
|
||||||
FIXME: This needs to be updated for the latest methods
|
|
||||||
|
FIXME: This needs to be updated for the latest methods
|
||||||
Here is the easiest method:
|
|
||||||
1. Build the SDL library (libSDL2.a) and the iPhone SDL Application template.
|
Here is the easiest method:
|
||||||
2. Install the iPhone SDL Application template by copying it to one of Xcode's template directories. I recommend creating a directory called "SDL" in "/Developer/Platforms/iOS.platform/Developer/Library/Xcode/Project Templates/" and placing it there.
|
1. Build the SDL library (libSDL2.a) and the iPhone SDL Application template.
|
||||||
3. Start a new project using the template. The project should be immediately ready for use with SDL.
|
2. Install the iPhone SDL Application template by copying it to one of Xcode's template directories. I recommend creating a directory called "SDL" in "/Developer/Platforms/iOS.platform/Developer/Library/Xcode/Project Templates/" and placing it there.
|
||||||
|
3. Start a new project using the template. The project should be immediately ready for use with SDL.
|
||||||
Here is a more manual method:
|
|
||||||
1. Create a new iOS view based application.
|
Here is a more manual method:
|
||||||
2. Build the SDL static library (libSDL2.a) for iOS and include them in your project. Xcode will ignore the library that is not currently of the correct architecture, hence your app will work both on iOS and in the iOS Simulator.
|
1. Create a new iOS view based application.
|
||||||
3. Include the SDL header files in your project.
|
2. Build the SDL static library (libSDL2.a) for iOS and include them in your project. Xcode will ignore the library that is not currently of the correct architecture, hence your app will work both on iOS and in the iOS Simulator.
|
||||||
4. Remove the ApplicationDelegate.h and ApplicationDelegate.m files -- SDL for iOS provides its own UIApplicationDelegate. Remove MainWindow.xib -- SDL for iOS produces its user interface programmatically.
|
3. Include the SDL header files in your project.
|
||||||
5. Delete the contents of main.m and program your app as a regular SDL program instead. You may replace main.m with your own main.c, but you must tell Xcode not to use the project prefix file, as it includes Objective-C code.
|
4. Remove the ApplicationDelegate.h and ApplicationDelegate.m files -- SDL for iOS provides its own UIApplicationDelegate. Remove MainWindow.xib -- SDL for iOS produces its user interface programmatically.
|
||||||
|
5. Delete the contents of main.m and program your app as a regular SDL program instead. You may replace main.m with your own main.c, but you must tell Xcode not to use the project prefix file, as it includes Objective-C code.
|
||||||
==============================================================================
|
|
||||||
Notes -- Retina / High-DPI and window sizes
|
==============================================================================
|
||||||
==============================================================================
|
Notes -- Retina / High-DPI and window sizes
|
||||||
|
==============================================================================
|
||||||
Window and display mode sizes in SDL are in "screen coordinates" (or "points",
|
|
||||||
in Apple's terminology) rather than in pixels. On iOS this means that a window
|
Window and display mode sizes in SDL are in "screen coordinates" (or "points",
|
||||||
created on an iPhone 6 will have a size in screen coordinates of 375 x 667,
|
in Apple's terminology) rather than in pixels. On iOS this means that a window
|
||||||
rather than a size in pixels of 750 x 1334. All iOS apps are expected to
|
created on an iPhone 6 will have a size in screen coordinates of 375 x 667,
|
||||||
size their content based on screen coordinates / points rather than pixels,
|
rather than a size in pixels of 750 x 1334. All iOS apps are expected to
|
||||||
as this allows different iOS devices to have different pixel densities
|
size their content based on screen coordinates / points rather than pixels,
|
||||||
(Retina versus non-Retina screens, etc.) without apps caring too much.
|
as this allows different iOS devices to have different pixel densities
|
||||||
|
(Retina versus non-Retina screens, etc.) without apps caring too much.
|
||||||
By default SDL will not use the full pixel density of the screen on
|
|
||||||
Retina/high-dpi capable devices. Use the SDL_WINDOW_ALLOW_HIGHDPI flag when
|
By default SDL will not use the full pixel density of the screen on
|
||||||
creating your window to enable high-dpi support.
|
Retina/high-dpi capable devices. Use the SDL_WINDOW_ALLOW_HIGHDPI flag when
|
||||||
|
creating your window to enable high-dpi support.
|
||||||
When high-dpi support is enabled, SDL_GetWindowSize and display mode sizes
|
|
||||||
will still be in "screen coordinates" rather than pixels, but the window will
|
When high-dpi support is enabled, SDL_GetWindowSize() and display mode sizes
|
||||||
have a much greater pixel density when the device supports it, and the
|
will still be in "screen coordinates" rather than pixels, but the window will
|
||||||
SDL_GL_GetDrawableSize or SDL_GetRendererOutputSize functions (depending on
|
have a much greater pixel density when the device supports it, and the
|
||||||
whether raw OpenGL or the SDL_Render API is used) can be queried to determine
|
SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() functions (depending on
|
||||||
the size in pixels of the drawable screen framebuffer.
|
whether raw OpenGL or the SDL_Render API is used) can be queried to determine
|
||||||
|
the size in pixels of the drawable screen framebuffer.
|
||||||
Some OpenGL ES functions such as glViewport expect sizes in pixels rather than
|
|
||||||
sizes in screen coordinates. When doing 2D rendering with OpenGL ES, an
|
Some OpenGL ES functions such as glViewport expect sizes in pixels rather than
|
||||||
orthographic projection matrix using the size in screen coordinates
|
sizes in screen coordinates. When doing 2D rendering with OpenGL ES, an
|
||||||
(SDL_GetWindowSize) can be used in order to display content at the same scale
|
orthographic projection matrix using the size in screen coordinates
|
||||||
no matter whether a Retina device is used or not.
|
(SDL_GetWindowSize()) can be used in order to display content at the same scale
|
||||||
|
no matter whether a Retina device is used or not.
|
||||||
==============================================================================
|
|
||||||
Notes -- Application events
|
==============================================================================
|
||||||
==============================================================================
|
Notes -- Application events
|
||||||
|
==============================================================================
|
||||||
On iOS the application goes through a fixed life cycle and you will get
|
|
||||||
notifications of state changes via application events. When these events
|
On iOS the application goes through a fixed life cycle and you will get
|
||||||
are delivered you must handle them in an event callback because the OS may
|
notifications of state changes via application events. When these events
|
||||||
not give you any processing time after the events are delivered.
|
are delivered you must handle them in an event callback because the OS may
|
||||||
|
not give you any processing time after the events are delivered.
|
||||||
e.g.
|
|
||||||
|
e.g.
|
||||||
int HandleAppEvents(void *userdata, SDL_Event *event)
|
|
||||||
{
|
int HandleAppEvents(void *userdata, SDL_Event *event)
|
||||||
switch (event->type)
|
{
|
||||||
{
|
switch (event->type)
|
||||||
case SDL_APP_TERMINATING:
|
{
|
||||||
/* Terminate the app.
|
case SDL_APP_TERMINATING:
|
||||||
Shut everything down before returning from this function.
|
/* Terminate the app.
|
||||||
*/
|
Shut everything down before returning from this function.
|
||||||
return 0;
|
*/
|
||||||
case SDL_APP_LOWMEMORY:
|
return 0;
|
||||||
/* You will get this when your app is paused and iOS wants more memory.
|
case SDL_APP_LOWMEMORY:
|
||||||
Release as much memory as possible.
|
/* You will get this when your app is paused and iOS wants more memory.
|
||||||
*/
|
Release as much memory as possible.
|
||||||
return 0;
|
*/
|
||||||
case SDL_APP_WILLENTERBACKGROUND:
|
return 0;
|
||||||
/* Prepare your app to go into the background. Stop loops, etc.
|
case SDL_APP_WILLENTERBACKGROUND:
|
||||||
This gets called when the user hits the home button, or gets a call.
|
/* Prepare your app to go into the background. Stop loops, etc.
|
||||||
*/
|
This gets called when the user hits the home button, or gets a call.
|
||||||
return 0;
|
*/
|
||||||
case SDL_APP_DIDENTERBACKGROUND:
|
return 0;
|
||||||
/* This will get called if the user accepted whatever sent your app to the background.
|
case SDL_APP_DIDENTERBACKGROUND:
|
||||||
If the user got a phone call and canceled it, you'll instead get an SDL_APP_DIDENTERFOREGROUND event and restart your loops.
|
/* This will get called if the user accepted whatever sent your app to the background.
|
||||||
When you get this, you have 5 seconds to save all your state or the app will be terminated.
|
If the user got a phone call and canceled it, you'll instead get an SDL_APP_DIDENTERFOREGROUND event and restart your loops.
|
||||||
Your app is NOT active at this point.
|
When you get this, you have 5 seconds to save all your state or the app will be terminated.
|
||||||
*/
|
Your app is NOT active at this point.
|
||||||
return 0;
|
*/
|
||||||
case SDL_APP_WILLENTERFOREGROUND:
|
return 0;
|
||||||
/* This call happens when your app is coming back to the foreground.
|
case SDL_APP_WILLENTERFOREGROUND:
|
||||||
Restore all your state here.
|
/* This call happens when your app is coming back to the foreground.
|
||||||
*/
|
Restore all your state here.
|
||||||
return 0;
|
*/
|
||||||
case SDL_APP_DIDENTERFOREGROUND:
|
return 0;
|
||||||
/* Restart your loops here.
|
case SDL_APP_DIDENTERFOREGROUND:
|
||||||
Your app is interactive and getting CPU again.
|
/* Restart your loops here.
|
||||||
*/
|
Your app is interactive and getting CPU again.
|
||||||
return 0;
|
*/
|
||||||
default:
|
return 0;
|
||||||
/* No special processing, add it to the event queue */
|
default:
|
||||||
return 1;
|
/* No special processing, add it to the event queue */
|
||||||
}
|
return 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
int main(int argc, char *argv[])
|
||||||
SDL_SetEventFilter(HandleAppEvents, NULL);
|
{
|
||||||
|
SDL_SetEventFilter(HandleAppEvents, NULL);
|
||||||
... run your main loop
|
|
||||||
|
... run your main loop
|
||||||
return 0;
|
|
||||||
}
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Notes -- Accelerometer as Joystick
|
==============================================================================
|
||||||
==============================================================================
|
Notes -- Accelerometer as Joystick
|
||||||
|
==============================================================================
|
||||||
SDL for iPhone supports polling the built in accelerometer as a joystick device. For an example on how to do this, see the accelerometer.c in the demos directory.
|
|
||||||
|
SDL for iPhone supports polling the built in accelerometer as a joystick device. For an example on how to do this, see the accelerometer.c in the demos directory.
|
||||||
The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF.
|
|
||||||
|
The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis() reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis() reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF.
|
||||||
==============================================================================
|
|
||||||
Notes -- OpenGL ES
|
==============================================================================
|
||||||
==============================================================================
|
Notes -- OpenGL ES
|
||||||
|
==============================================================================
|
||||||
Your SDL application for iOS uses OpenGL ES for video by default.
|
|
||||||
|
Your SDL application for iOS uses OpenGL ES for video by default.
|
||||||
OpenGL ES for iOS supports several display pixel formats, such as RGBA8 and RGB565, which provide a 32 bit and 16 bit color buffer respectively. By default, the implementation uses RGB565, but you may use RGBA8 by setting each color component to 8 bits in SDL_GL_SetAttribute.
|
|
||||||
|
OpenGL ES for iOS supports several display pixel formats, such as RGBA8 and RGB565, which provide a 32 bit and 16 bit color buffer respectively. By default, the implementation uses RGB565, but you may use RGBA8 by setting each color component to 8 bits in SDL_GL_SetAttribute().
|
||||||
If your application doesn't use OpenGL's depth buffer, you may find significant performance improvement by setting SDL_GL_DEPTH_SIZE to 0.
|
|
||||||
|
If your application doesn't use OpenGL's depth buffer, you may find significant performance improvement by setting SDL_GL_DEPTH_SIZE to 0.
|
||||||
Finally, if your application completely redraws the screen each frame, you may find significant performance improvement by setting the attribute SDL_GL_RETAINED_BACKING to 0.
|
|
||||||
|
Finally, if your application completely redraws the screen each frame, you may find significant performance improvement by setting the attribute SDL_GL_RETAINED_BACKING to 0.
|
||||||
OpenGL ES on iOS doesn't use the traditional system-framebuffer setup provided in other operating systems. Special care must be taken because of this:
|
|
||||||
|
OpenGL ES on iOS doesn't use the traditional system-framebuffer setup provided in other operating systems. Special care must be taken because of this:
|
||||||
- The drawable Renderbuffer must be bound to the GL_RENDERBUFFER binding point when SDL_GL_SwapWindow is called.
|
|
||||||
- The drawable Framebuffer Object must be bound while rendering to the screen and when SDL_GL_SwapWindow is called.
|
- The drawable Renderbuffer must be bound to the GL_RENDERBUFFER binding point when SDL_GL_SwapWindow() is called.
|
||||||
- If multisample antialiasing (MSAA) is used and glReadPixels is used on the screen, the drawable framebuffer must be resolved to the MSAA resolve framebuffer (via glBlitFramebuffer or glResolveMultisampleFramebufferAPPLE), and the MSAA resolve framebuffer must be bound to the GL_READ_FRAMEBUFFER binding point, before glReadPixels is called.
|
- The drawable Framebuffer Object must be bound while rendering to the screen and when SDL_GL_SwapWindow() is called.
|
||||||
|
- If multisample antialiasing (MSAA) is used and glReadPixels is used on the screen, the drawable framebuffer must be resolved to the MSAA resolve framebuffer (via glBlitFramebuffer or glResolveMultisampleFramebufferAPPLE), and the MSAA resolve framebuffer must be bound to the GL_READ_FRAMEBUFFER binding point, before glReadPixels is called.
|
||||||
The above objects can be obtained via SDL_GetWindowWMInfo (in SDL_syswm.h).
|
|
||||||
|
The above objects can be obtained via SDL_GetWindowWMInfo() (in SDL_syswm.h).
|
||||||
==============================================================================
|
|
||||||
Notes -- Keyboard
|
==============================================================================
|
||||||
==============================================================================
|
Notes -- Keyboard
|
||||||
|
==============================================================================
|
||||||
The SDL keyboard API has been extended to support on-screen keyboards:
|
|
||||||
|
The SDL keyboard API has been extended to support on-screen keyboards:
|
||||||
void SDL_StartTextInput()
|
|
||||||
-- enables text events and reveals the onscreen keyboard.
|
void SDL_StartTextInput()
|
||||||
|
-- enables text events and reveals the onscreen keyboard.
|
||||||
void SDL_StopTextInput()
|
|
||||||
-- disables text events and hides the onscreen keyboard.
|
void SDL_StopTextInput()
|
||||||
|
-- disables text events and hides the onscreen keyboard.
|
||||||
SDL_bool SDL_IsTextInputActive()
|
|
||||||
-- returns whether or not text events are enabled (and the onscreen keyboard is visible)
|
SDL_bool SDL_IsTextInputActive()
|
||||||
|
-- returns whether or not text events are enabled (and the onscreen keyboard is visible)
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Notes -- Reading and Writing files
|
==============================================================================
|
||||||
==============================================================================
|
Notes -- Reading and Writing files
|
||||||
|
==============================================================================
|
||||||
Each application installed on iPhone resides in a sandbox which includes its own Application Home directory. Your application may not access files outside this directory.
|
|
||||||
|
Each application installed on iPhone resides in a sandbox which includes its own Application Home directory. Your application may not access files outside this directory.
|
||||||
Once your application is installed its directory tree looks like:
|
|
||||||
|
Once your application is installed its directory tree looks like:
|
||||||
MySDLApp Home/
|
|
||||||
MySDLApp.app
|
MySDLApp Home/
|
||||||
Documents/
|
MySDLApp.app
|
||||||
Library/
|
Documents/
|
||||||
Preferences/
|
Library/
|
||||||
tmp/
|
Preferences/
|
||||||
|
tmp/
|
||||||
When your SDL based iPhone application starts up, it sets the working directory to the main bundle (MySDLApp Home/MySDLApp.app), where your application resources are stored. You cannot write to this directory. Instead, I advise you to write document files to "../Documents/" and preferences to "../Library/Preferences".
|
|
||||||
|
When your SDL based iPhone application starts up, it sets the working directory to the main bundle (MySDLApp Home/MySDLApp.app), where your application resources are stored. You cannot write to this directory. Instead, I advise you to write document files to "../Documents/" and preferences to "../Library/Preferences".
|
||||||
More information on this subject is available here:
|
|
||||||
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html
|
More information on this subject is available here:
|
||||||
|
http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html
|
||||||
==============================================================================
|
|
||||||
Notes -- iPhone SDL limitations
|
==============================================================================
|
||||||
==============================================================================
|
Notes -- iPhone SDL limitations
|
||||||
|
==============================================================================
|
||||||
Windows:
|
|
||||||
Full-size, single window applications only. You cannot create multi-window SDL applications for iPhone OS. The application window will fill the display, though you have the option of turning on or off the menu-bar (pass SDL_CreateWindow the flag SDL_WINDOW_BORDERLESS).
|
Windows:
|
||||||
|
Full-size, single window applications only. You cannot create multi-window SDL applications for iPhone OS. The application window will fill the display, though you have the option of turning on or off the menu-bar (pass SDL_CreateWindow() the flag SDL_WINDOW_BORDERLESS).
|
||||||
Textures:
|
|
||||||
The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, and SDL_PIXELFORMAT_RGB24 pixel formats.
|
Textures:
|
||||||
|
The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, and SDL_PIXELFORMAT_RGB24 pixel formats.
|
||||||
Loading Shared Objects:
|
|
||||||
This is disabled by default since it seems to break the terms of the iOS SDK agreement for iOS versions prior to iOS 8. It can be re-enabled in SDL_config_iphoneos.h.
|
Loading Shared Objects:
|
||||||
|
This is disabled by default since it seems to break the terms of the iOS SDK agreement for iOS versions prior to iOS 8. It can be re-enabled in SDL_config_iphoneos.h.
|
||||||
==============================================================================
|
|
||||||
Game Center
|
==============================================================================
|
||||||
==============================================================================
|
Game Center
|
||||||
|
==============================================================================
|
||||||
Game Center integration might require that you break up your main loop in order to yield control back to the system. In other words, instead of running an endless main loop, you run each frame in a callback function, using:
|
|
||||||
|
Game Center integration might require that you break up your main loop in order to yield control back to the system. In other words, instead of running an endless main loop, you run each frame in a callback function, using:
|
||||||
int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam);
|
|
||||||
|
int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam);
|
||||||
This will set up the given function to be called back on the animation callback, and then you have to return from main() to let the Cocoa event loop run.
|
|
||||||
|
This will set up the given function to be called back on the animation callback, and then you have to return from main() to let the Cocoa event loop run.
|
||||||
e.g.
|
|
||||||
|
e.g.
|
||||||
extern "C"
|
|
||||||
void ShowFrame(void*)
|
extern "C"
|
||||||
{
|
void ShowFrame(void*)
|
||||||
... do event handling, frame logic and rendering ...
|
{
|
||||||
}
|
... do event handling, frame logic and rendering ...
|
||||||
|
}
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
int main(int argc, char *argv[])
|
||||||
... initialize game ...
|
{
|
||||||
|
... initialize game ...
|
||||||
#if __IPHONEOS__
|
|
||||||
// Initialize the Game Center for scoring and matchmaking
|
#if __IPHONEOS__
|
||||||
InitGameCenter();
|
// Initialize the Game Center for scoring and matchmaking
|
||||||
|
InitGameCenter();
|
||||||
// Set up the game to run in the window animation callback on iOS
|
|
||||||
// so that Game Center and so forth works correctly.
|
// Set up the game to run in the window animation callback on iOS
|
||||||
SDL_iPhoneSetAnimationCallback(window, 1, ShowFrame, NULL);
|
// so that Game Center and so forth works correctly.
|
||||||
#else
|
SDL_iPhoneSetAnimationCallback(window, 1, ShowFrame, NULL);
|
||||||
while ( running ) {
|
#else
|
||||||
ShowFrame(0);
|
while ( running ) {
|
||||||
DelayFrame();
|
ShowFrame(0);
|
||||||
}
|
DelayFrame();
|
||||||
#endif
|
}
|
||||||
return 0;
|
#endif
|
||||||
}
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Deploying to older versions of iOS
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
SDL supports deploying to older versions of iOS than are supported by the latest version of Xcode, all the way back to iOS 6.1
|
||||||
|
|
||||||
|
In order to do that you need to download an older version of Xcode:
|
||||||
|
https://developer.apple.com/download/more/?name=Xcode
|
||||||
|
|
||||||
|
Open the package contents of the older Xcode and your newer version of Xcode and copy over the folders in Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
|
||||||
|
|
||||||
|
Then open the file Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/SDKSettings.plist and add the versions of iOS you want to deploy to the key Root/DefaultProperties/DEPLOYMENT_TARGET_SUGGESTED_VALUES
|
||||||
|
|
||||||
|
Open your project and set your deployment target to the desired version of iOS
|
||||||
|
|
||||||
|
Finally, remove GameController from the list of frameworks linked by your application and edit the build settings for "Other Linker Flags" and add -weak_framework GameController
|
||||||
|
|
|
@ -19,14 +19,22 @@ sudo apt-get install build-essential mercurial make cmake autoconf automake \
|
||||||
libtool libasound2-dev libpulse-dev libaudio-dev libx11-dev libxext-dev \
|
libtool libasound2-dev libpulse-dev libaudio-dev libx11-dev libxext-dev \
|
||||||
libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev \
|
libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev \
|
||||||
libxss-dev libgl1-mesa-dev libesd0-dev libdbus-1-dev libudev-dev \
|
libxss-dev libgl1-mesa-dev libesd0-dev libdbus-1-dev libudev-dev \
|
||||||
libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libibus-1.0-dev
|
libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libibus-1.0-dev \
|
||||||
|
fcitx-libs-dev libsamplerate0-dev libsndio-dev
|
||||||
|
|
||||||
Ubuntu 14.04 can also add "libwayland-dev libmirclient-dev libxkbcommon-dev"
|
Ubuntu 16.04+ can also add "libwayland-dev libxkbcommon-dev wayland-protocols"
|
||||||
to that command line for Wayland and Mir support.
|
to that command line for Wayland support.
|
||||||
|
|
||||||
|
Ubuntu 16.10 can also add "libmirclient-dev libxkbcommon-dev" to that command
|
||||||
|
line for Mir support.
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
- This includes all the audio targets except arts, because Ubuntu pulled the
|
- This includes all the audio targets except arts, because Ubuntu pulled the
|
||||||
artsc0-dev package, but in theory SDL still supports it.
|
artsc0-dev package, but in theory SDL still supports it.
|
||||||
|
- libsamplerate0-dev lets SDL optionally link to libresamplerate at runtime
|
||||||
|
for higher-quality audio resampling. SDL will work without it if the library
|
||||||
|
is missing, so it's safe to build in support even if the end user doesn't
|
||||||
|
have this library installed.
|
||||||
- DirectFB isn't included because the configure script (currently) fails to find
|
- DirectFB isn't included because the configure script (currently) fails to find
|
||||||
it at all. You can do "sudo apt-get install libdirectfb-dev" and fix the
|
it at all. You can do "sudo apt-get install libdirectfb-dev" and fix the
|
||||||
configure script to include DirectFB support. Send patches. :)
|
configure script to include DirectFB support. Send patches. :)
|
||||||
|
|
|
@ -1,230 +1,240 @@
|
||||||
Mac OS X
|
Mac OS X
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
These instructions are for people using Apple's Mac OS X (pronounced
|
These instructions are for people using Apple's Mac OS X (pronounced
|
||||||
"ten").
|
"ten").
|
||||||
|
|
||||||
From the developer's point of view, OS X is a sort of hybrid Mac and
|
From the developer's point of view, OS X is a sort of hybrid Mac and
|
||||||
Unix system, and you have the option of using either traditional
|
Unix system, and you have the option of using either traditional
|
||||||
command line tools or Apple's IDE Xcode.
|
command line tools or Apple's IDE Xcode.
|
||||||
|
|
||||||
To build SDL using the command line, use the standard configure and make
|
Command Line Build
|
||||||
process:
|
==================
|
||||||
|
|
||||||
./configure
|
To build SDL using the command line, use the standard configure and make
|
||||||
make
|
process:
|
||||||
sudo make install
|
|
||||||
|
./configure
|
||||||
You can also build SDL as a Universal library (a single binary for both
|
make
|
||||||
32-bit and 64-bit Intel architectures), on Mac OS X 10.7 and newer, by using
|
sudo make install
|
||||||
the gcc-fat.sh script in build-scripts:
|
|
||||||
|
You can also build SDL as a Universal library (a single binary for both
|
||||||
mkdir mybuild
|
32-bit and 64-bit Intel architectures), on Mac OS X 10.7 and newer, by using
|
||||||
cd mybuild
|
the gcc-fat.sh script in build-scripts:
|
||||||
CC=$PWD/../build-scripts/gcc-fat.sh CXX=$PWD/../build-scripts/g++fat.sh ../configure
|
|
||||||
make
|
mkdir mybuild
|
||||||
sudo make install
|
cd mybuild
|
||||||
|
CC=$PWD/../build-scripts/gcc-fat.sh CXX=$PWD/../build-scripts/g++-fat.sh ../configure
|
||||||
This script builds SDL with 10.5 ABI compatibility on i386 and 10.6
|
make
|
||||||
ABI compatibility on x86_64 architectures. For best compatibility you
|
sudo make install
|
||||||
should compile your application the same way.
|
|
||||||
|
This script builds SDL with 10.5 ABI compatibility on i386 and 10.6
|
||||||
Please note that building SDL requires at least Xcode 4.6 and the 10.7 SDK
|
ABI compatibility on x86_64 architectures. For best compatibility you
|
||||||
(even if you target back to 10.5 systems). PowerPC support for Mac OS X has
|
should compile your application the same way.
|
||||||
been officially dropped as of SDL 2.0.2.
|
|
||||||
|
Please note that building SDL requires at least Xcode 4.6 and the 10.7 SDK
|
||||||
To use the library once it's built, you essential have two possibilities:
|
(even if you target back to 10.5 systems). PowerPC support for Mac OS X has
|
||||||
use the traditional autoconf/automake/make method, or use Xcode.
|
been officially dropped as of SDL 2.0.2.
|
||||||
|
|
||||||
==============================================================================
|
To use the library once it's built, you essential have two possibilities:
|
||||||
Caveats for using SDL with Mac OS X
|
use the traditional autoconf/automake/make method, or use Xcode.
|
||||||
==============================================================================
|
|
||||||
|
==============================================================================
|
||||||
Some things you have to be aware of when using SDL on Mac OS X:
|
Caveats for using SDL with Mac OS X
|
||||||
|
==============================================================================
|
||||||
- If you register your own NSApplicationDelegate (using [NSApp setDelegate:]),
|
|
||||||
SDL will not register its own. This means that SDL will not terminate using
|
Some things you have to be aware of when using SDL on Mac OS X:
|
||||||
SDL_Quit if it receives a termination request, it will terminate like a
|
|
||||||
normal app, and it will not send a SDL_DROPFILE when you request to open a
|
- If you register your own NSApplicationDelegate (using [NSApp setDelegate:]),
|
||||||
file with the app. To solve these issues, put the following code in your
|
SDL will not register its own. This means that SDL will not terminate using
|
||||||
NSApplicationDelegate implementation:
|
SDL_Quit if it receives a termination request, it will terminate like a
|
||||||
|
normal app, and it will not send a SDL_DROPFILE when you request to open a
|
||||||
|
file with the app. To solve these issues, put the following code in your
|
||||||
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
|
NSApplicationDelegate implementation:
|
||||||
{
|
|
||||||
if (SDL_GetEventState(SDL_QUIT) == SDL_ENABLE) {
|
|
||||||
SDL_Event event;
|
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
|
||||||
event.type = SDL_QUIT;
|
{
|
||||||
SDL_PushEvent(&event);
|
if (SDL_GetEventState(SDL_QUIT) == SDL_ENABLE) {
|
||||||
}
|
SDL_Event event;
|
||||||
|
event.type = SDL_QUIT;
|
||||||
return NSTerminateCancel;
|
SDL_PushEvent(&event);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
|
return NSTerminateCancel;
|
||||||
{
|
}
|
||||||
if (SDL_GetEventState(SDL_DROPFILE) == SDL_ENABLE) {
|
|
||||||
SDL_Event event;
|
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
|
||||||
event.type = SDL_DROPFILE;
|
{
|
||||||
event.drop.file = SDL_strdup([filename UTF8String]);
|
if (SDL_GetEventState(SDL_DROPFILE) == SDL_ENABLE) {
|
||||||
return (SDL_PushEvent(&event) > 0);
|
SDL_Event event;
|
||||||
}
|
event.type = SDL_DROPFILE;
|
||||||
|
event.drop.file = SDL_strdup([filename UTF8String]);
|
||||||
return NO;
|
return (SDL_PushEvent(&event) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
==============================================================================
|
return NO;
|
||||||
Using the Simple DirectMedia Layer with a traditional Makefile
|
}
|
||||||
==============================================================================
|
|
||||||
|
==============================================================================
|
||||||
An existing autoconf/automake build system for your SDL app has good chances
|
Using the Simple DirectMedia Layer with a traditional Makefile
|
||||||
to work almost unchanged on OS X. However, to produce a "real" Mac OS X binary
|
==============================================================================
|
||||||
that you can distribute to users, you need to put the generated binary into a
|
|
||||||
so called "bundle", which basically is a fancy folder with a name like
|
An existing autoconf/automake build system for your SDL app has good chances
|
||||||
"MyCoolGame.app".
|
to work almost unchanged on OS X. However, to produce a "real" Mac OS X binary
|
||||||
|
that you can distribute to users, you need to put the generated binary into a
|
||||||
To get this build automatically, add something like the following rule to
|
so called "bundle", which basically is a fancy folder with a name like
|
||||||
your Makefile.am:
|
"MyCoolGame.app".
|
||||||
|
|
||||||
bundle_contents = APP_NAME.app/Contents
|
To get this build automatically, add something like the following rule to
|
||||||
APP_NAME_bundle: EXE_NAME
|
your Makefile.am:
|
||||||
mkdir -p $(bundle_contents)/MacOS
|
|
||||||
mkdir -p $(bundle_contents)/Resources
|
bundle_contents = APP_NAME.app/Contents
|
||||||
echo "APPL????" > $(bundle_contents)/PkgInfo
|
APP_NAME_bundle: EXE_NAME
|
||||||
$(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/
|
mkdir -p $(bundle_contents)/MacOS
|
||||||
|
mkdir -p $(bundle_contents)/Resources
|
||||||
You should replace EXE_NAME with the name of the executable. APP_NAME is what
|
echo "APPL????" > $(bundle_contents)/PkgInfo
|
||||||
will be visible to the user in the Finder. Usually it will be the same
|
$(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/
|
||||||
as EXE_NAME but capitalized. E.g. if EXE_NAME is "testgame" then APP_NAME
|
|
||||||
usually is "TestGame". You might also want to use @PACKAGE@ to use the package
|
You should replace EXE_NAME with the name of the executable. APP_NAME is what
|
||||||
name as specified in your configure.in file.
|
will be visible to the user in the Finder. Usually it will be the same
|
||||||
|
as EXE_NAME but capitalized. E.g. if EXE_NAME is "testgame" then APP_NAME
|
||||||
If your project builds more than one application, you will have to do a bit
|
usually is "TestGame". You might also want to use `@PACKAGE@` to use the package
|
||||||
more. For each of your target applications, you need a separate rule.
|
name as specified in your configure.in file.
|
||||||
|
|
||||||
If you want the created bundles to be installed, you may want to add this
|
If your project builds more than one application, you will have to do a bit
|
||||||
rule to your Makefile.am:
|
more. For each of your target applications, you need a separate rule.
|
||||||
|
|
||||||
install-exec-hook: APP_NAME_bundle
|
If you want the created bundles to be installed, you may want to add this
|
||||||
rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app
|
rule to your Makefile.am:
|
||||||
mkdir -p $(DESTDIR)$(prefix)/Applications/
|
|
||||||
cp -r $< /$(DESTDIR)$(prefix)Applications/
|
install-exec-hook: APP_NAME_bundle
|
||||||
|
rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app
|
||||||
This rule takes the Bundle created by the rule from step 3 and installs them
|
mkdir -p $(DESTDIR)$(prefix)/Applications/
|
||||||
into $(DESTDIR)$(prefix)/Applications/.
|
cp -r $< /$(DESTDIR)$(prefix)Applications/
|
||||||
|
|
||||||
Again, if you want to install multiple applications, you will have to augment
|
This rule takes the Bundle created by the rule from step 3 and installs them
|
||||||
the make rule accordingly.
|
into "$(DESTDIR)$(prefix)/Applications/".
|
||||||
|
|
||||||
|
Again, if you want to install multiple applications, you will have to augment
|
||||||
But beware! That is only part of the story! With the above, you end up with
|
the make rule accordingly.
|
||||||
a bare bone .app bundle, which is double clickable from the Finder. But
|
|
||||||
there are some more things you should do before shipping your product...
|
|
||||||
|
But beware! That is only part of the story! With the above, you end up with
|
||||||
1) The bundle right now probably is dynamically linked against SDL. That
|
a bare bone .app bundle, which is double clickable from the Finder. But
|
||||||
means that when you copy it to another computer, *it will not run*,
|
there are some more things you should do before shipping your product...
|
||||||
unless you also install SDL on that other computer. A good solution
|
|
||||||
for this dilemma is to static link against SDL. On OS X, you can
|
1) The bundle right now probably is dynamically linked against SDL. That
|
||||||
achieve that by linking against the libraries listed by
|
means that when you copy it to another computer, *it will not run*,
|
||||||
sdl-config --static-libs
|
unless you also install SDL on that other computer. A good solution
|
||||||
instead of those listed by
|
for this dilemma is to static link against SDL. On OS X, you can
|
||||||
sdl-config --libs
|
achieve that by linking against the libraries listed by
|
||||||
Depending on how exactly SDL is integrated into your build systems, the
|
|
||||||
way to achieve that varies, so I won't describe it here in detail
|
sdl-config --static-libs
|
||||||
2) Add an 'Info.plist' to your application. That is a special XML file which
|
|
||||||
contains some meta-information about your application (like some copyright
|
instead of those listed by
|
||||||
information, the version of your app, the name of an optional icon file,
|
|
||||||
and other things). Part of that information is displayed by the Finder
|
sdl-config --libs
|
||||||
when you click on the .app, or if you look at the "Get Info" window.
|
|
||||||
More information about Info.plist files can be found on Apple's homepage.
|
Depending on how exactly SDL is integrated into your build systems, the
|
||||||
|
way to achieve that varies, so I won't describe it here in detail
|
||||||
|
|
||||||
As a final remark, let me add that I use some of the techniques (and some
|
2) Add an 'Info.plist' to your application. That is a special XML file which
|
||||||
variations of them) in Exult and ScummVM; both are available in source on
|
contains some meta-information about your application (like some copyright
|
||||||
the net, so feel free to take a peek at them for inspiration!
|
information, the version of your app, the name of an optional icon file,
|
||||||
|
and other things). Part of that information is displayed by the Finder
|
||||||
|
when you click on the .app, or if you look at the "Get Info" window.
|
||||||
==============================================================================
|
More information about Info.plist files can be found on Apple's homepage.
|
||||||
Using the Simple DirectMedia Layer with Xcode
|
|
||||||
==============================================================================
|
|
||||||
|
As a final remark, let me add that I use some of the techniques (and some
|
||||||
These instructions are for using Apple's Xcode IDE to build SDL applications.
|
variations of them) in Exult and ScummVM; both are available in source on
|
||||||
|
the net, so feel free to take a peek at them for inspiration!
|
||||||
- First steps
|
|
||||||
|
|
||||||
The first thing to do is to unpack the Xcode.tar.gz archive in the
|
==============================================================================
|
||||||
top level SDL directory (where the Xcode.tar.gz archive resides).
|
Using the Simple DirectMedia Layer with Xcode
|
||||||
Because Stuffit Expander will unpack the archive into a subdirectory,
|
==============================================================================
|
||||||
you should unpack the archive manually from the command line:
|
|
||||||
cd [path_to_SDL_source]
|
These instructions are for using Apple's Xcode IDE to build SDL applications.
|
||||||
tar zxf Xcode.tar.gz
|
|
||||||
This will create a new folder called Xcode, which you can browse
|
- First steps
|
||||||
normally from the Finder.
|
|
||||||
|
The first thing to do is to unpack the Xcode.tar.gz archive in the
|
||||||
- Building the Framework
|
top level SDL directory (where the Xcode.tar.gz archive resides).
|
||||||
|
Because Stuffit Expander will unpack the archive into a subdirectory,
|
||||||
The SDL Library is packaged as a framework bundle, an organized
|
you should unpack the archive manually from the command line:
|
||||||
relocatable folder hierarchy of executable code, interface headers,
|
|
||||||
and additional resources. For practical purposes, you can think of a
|
cd [path_to_SDL_source]
|
||||||
framework as a more user and system-friendly shared library, whose library
|
tar zxf Xcode.tar.gz
|
||||||
file behaves more or less like a standard UNIX shared library.
|
|
||||||
|
This will create a new folder called Xcode, which you can browse
|
||||||
To build the framework, simply open the framework project and build it.
|
normally from the Finder.
|
||||||
By default, the framework bundle "SDL.framework" is installed in
|
|
||||||
/Library/Frameworks. Therefore, the testers and project stationary expect
|
- Building the Framework
|
||||||
it to be located there. However, it will function the same in any of the
|
|
||||||
following locations:
|
The SDL Library is packaged as a framework bundle, an organized
|
||||||
|
relocatable folder hierarchy of executable code, interface headers,
|
||||||
~/Library/Frameworks
|
and additional resources. For practical purposes, you can think of a
|
||||||
/Local/Library/Frameworks
|
framework as a more user and system-friendly shared library, whose library
|
||||||
/System/Library/Frameworks
|
file behaves more or less like a standard UNIX shared library.
|
||||||
|
|
||||||
- Build Options
|
To build the framework, simply open the framework project and build it.
|
||||||
There are two "Build Styles" (See the "Targets" tab) for SDL.
|
By default, the framework bundle "SDL.framework" is installed in
|
||||||
"Deployment" should be used if you aren't tweaking the SDL library.
|
/Library/Frameworks. Therefore, the testers and project stationary expect
|
||||||
"Development" should be used to debug SDL apps or the library itself.
|
it to be located there. However, it will function the same in any of the
|
||||||
|
following locations:
|
||||||
- Building the Testers
|
|
||||||
Open the SDLTest project and build away!
|
~/Library/Frameworks
|
||||||
|
/Local/Library/Frameworks
|
||||||
- Using the Project Stationary
|
/System/Library/Frameworks
|
||||||
Copy the stationary to the indicated folders to access it from
|
|
||||||
the "New Project" and "Add target" menus. What could be easier?
|
- Build Options
|
||||||
|
There are two "Build Styles" (See the "Targets" tab) for SDL.
|
||||||
- Setting up a new project by hand
|
"Deployment" should be used if you aren't tweaking the SDL library.
|
||||||
Some of you won't want to use the Stationary so I'll give some tips:
|
"Development" should be used to debug SDL apps or the library itself.
|
||||||
* Create a new "Cocoa Application"
|
|
||||||
* Add src/main/macosx/SDLMain.m , .h and .nib to your project
|
- Building the Testers
|
||||||
* Remove "main.c" from your project
|
Open the SDLTest project and build away!
|
||||||
* Remove "MainMenu.nib" from your project
|
|
||||||
* Add "$(HOME)/Library/Frameworks/SDL.framework/Headers" to include path
|
- Using the Project Stationary
|
||||||
* Add "$(HOME)/Library/Frameworks" to the frameworks search path
|
Copy the stationary to the indicated folders to access it from
|
||||||
* Add "-framework SDL -framework Foundation -framework AppKit" to "OTHER_LDFLAGS"
|
the "New Project" and "Add target" menus. What could be easier?
|
||||||
* Set the "Main Nib File" under "Application Settings" to "SDLMain.nib"
|
|
||||||
* Add your files
|
- Setting up a new project by hand
|
||||||
* Clean and build
|
Some of you won't want to use the Stationary so I'll give some tips:
|
||||||
|
* Create a new "Cocoa Application"
|
||||||
- Building from command line
|
* Add src/main/macosx/SDLMain.m , .h and .nib to your project
|
||||||
Use pbxbuild in the same directory as your .pbproj file
|
* Remove "main.c" from your project
|
||||||
|
* Remove "MainMenu.nib" from your project
|
||||||
- Running your app
|
* Add "$(HOME)/Library/Frameworks/SDL.framework/Headers" to include path
|
||||||
You can send command line args to your app by either invoking it from
|
* Add "$(HOME)/Library/Frameworks" to the frameworks search path
|
||||||
the command line (in *.app/Contents/MacOS) or by entering them in the
|
* Add "-framework SDL -framework Foundation -framework AppKit" to "OTHER_LDFLAGS"
|
||||||
"Executables" panel of the target settings.
|
* Set the "Main Nib File" under "Application Settings" to "SDLMain.nib"
|
||||||
|
* Add your files
|
||||||
- Implementation Notes
|
* Clean and build
|
||||||
Some things that may be of interest about how it all works...
|
|
||||||
* Working directory
|
- Building from command line
|
||||||
As defined in the SDL_main.m file, the working directory of your SDL app
|
Use pbxbuild in the same directory as your .pbproj file
|
||||||
is by default set to its parent. You may wish to change this to better
|
|
||||||
suit your needs.
|
- Running your app
|
||||||
* You have a Cocoa App!
|
You can send command line args to your app by either invoking it from
|
||||||
Your SDL app is essentially a Cocoa application. When your app
|
the command line (in *.app/Contents/MacOS) or by entering them in the
|
||||||
starts up and the libraries finish loading, a Cocoa procedure is called,
|
"Executables" panel of the target settings.
|
||||||
which sets up the working directory and calls your main() method.
|
|
||||||
You are free to modify your Cocoa app with generally no consequence
|
- Implementation Notes
|
||||||
to SDL. You cannot, however, easily change the SDL window itself.
|
Some things that may be of interest about how it all works...
|
||||||
Functionality may be added in the future to help this.
|
* Working directory
|
||||||
|
As defined in the SDL_main.m file, the working directory of your SDL app
|
||||||
|
is by default set to its parent. You may wish to change this to better
|
||||||
Known bugs are listed in the file "BUGS"
|
suit your needs.
|
||||||
|
* You have a Cocoa App!
|
||||||
|
Your SDL app is essentially a Cocoa application. When your app
|
||||||
|
starts up and the libraries finish loading, a Cocoa procedure is called,
|
||||||
|
which sets up the working directory and calls your main() method.
|
||||||
|
You are free to modify your Cocoa app with generally no consequence
|
||||||
|
to SDL. You cannot, however, easily change the SDL window itself.
|
||||||
|
Functionality may be added in the future to help this.
|
||||||
|
|
||||||
|
|
||||||
|
Known bugs are listed in the file "BUGS.txt".
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
Pandora
|
Pandora
|
||||||
=====================================================================
|
=====================================================================
|
||||||
|
|
||||||
( http://openpandora.org/ )
|
( http://openpandora.org/ )
|
||||||
- A pandora specific video driver was written to allow SDL 2.0 with OpenGL ES
|
- A pandora specific video driver was written to allow SDL 2.0 with OpenGL ES
|
||||||
support to work on the pandora under the framebuffer. This driver do not have
|
support to work on the pandora under the framebuffer. This driver do not have
|
||||||
input support for now, so if you use it you will have to add your own control code.
|
input support for now, so if you use it you will have to add your own control code.
|
||||||
The video driver name is "pandora" so if you have problem running it from
|
The video driver name is "pandora" so if you have problem running it from
|
||||||
the framebuffer, try to set the following variable before starting your application :
|
the framebuffer, try to set the following variable before starting your application :
|
||||||
"export SDL_VIDEODRIVER=pandora"
|
"export SDL_VIDEODRIVER=pandora"
|
||||||
|
|
||||||
- OpenGL ES support was added to the x11 driver, so it's working like the normal
|
- OpenGL ES support was added to the x11 driver, so it's working like the normal
|
||||||
x11 driver one with OpenGLX support, with SDL input event's etc..
|
x11 driver one with OpenGLX support, with SDL input event's etc..
|
||||||
|
|
||||||
|
|
||||||
David Carré (Cpasjuste)
|
David Carré (Cpasjuste)
|
||||||
cpasjuste@gmail.com
|
cpasjuste@gmail.com
|
||||||
|
|
|
@ -1,64 +1,68 @@
|
||||||
Porting
|
Porting
|
||||||
=======
|
=======
|
||||||
|
|
||||||
* Porting To A New Platform
|
* Porting To A New Platform
|
||||||
|
|
||||||
The first thing you have to do when porting to a new platform, is look at
|
The first thing you have to do when porting to a new platform, is look at
|
||||||
include/SDL_platform.h and create an entry there for your operating system.
|
include/SDL_platform.h and create an entry there for your operating system.
|
||||||
The standard format is __PLATFORM__, where PLATFORM is the name of the OS.
|
The standard format is "__PLATFORM__", where PLATFORM is the name of the OS.
|
||||||
Ideally SDL_platform.h will be able to auto-detect the system it's building
|
Ideally SDL_platform.h will be able to auto-detect the system it's building
|
||||||
on based on C preprocessor symbols.
|
on based on C preprocessor symbols.
|
||||||
|
|
||||||
There are two basic ways of building SDL at the moment:
|
There are two basic ways of building SDL at the moment:
|
||||||
|
|
||||||
1. The "UNIX" way: ./configure; make; make install
|
1. The "UNIX" way: ./configure; make; make install
|
||||||
|
|
||||||
If you have a GNUish system, then you might try this. Edit configure.in,
|
If you have a GNUish system, then you might try this. Edit configure.in,
|
||||||
take a look at the large section labelled:
|
take a look at the large section labelled:
|
||||||
"Set up the configuration based on the host platform!"
|
|
||||||
Add a section for your platform, and then re-run autogen.sh and build!
|
"Set up the configuration based on the host platform!"
|
||||||
|
|
||||||
2. Using an IDE:
|
Add a section for your platform, and then re-run autogen.sh and build!
|
||||||
|
|
||||||
If you're using an IDE or other non-configure build system, you'll probably
|
2. Using an IDE:
|
||||||
want to create a custom SDL_config.h for your platform. Edit SDL_config.h,
|
|
||||||
add a section for your platform, and create a custom SDL_config_{platform}.h,
|
If you're using an IDE or other non-configure build system, you'll probably
|
||||||
based on SDL_config.h.minimal and SDL_config.h.in
|
want to create a custom SDL_config.h for your platform. Edit SDL_config.h,
|
||||||
|
add a section for your platform, and create a custom SDL_config_{platform}.h,
|
||||||
Add the top level include directory to the header search path, and then add
|
based on SDL_config_minimal.h and SDL_config.h.in
|
||||||
the following sources to the project:
|
|
||||||
src/*.c
|
Add the top level include directory to the header search path, and then add
|
||||||
src/atomic/*.c
|
the following sources to the project:
|
||||||
src/audio/*.c
|
|
||||||
src/cpuinfo/*.c
|
src/*.c
|
||||||
src/events/*.c
|
src/atomic/*.c
|
||||||
src/file/*.c
|
src/audio/*.c
|
||||||
src/haptic/*.c
|
src/cpuinfo/*.c
|
||||||
src/joystick/*.c
|
src/events/*.c
|
||||||
src/power/*.c
|
src/file/*.c
|
||||||
src/render/*.c
|
src/haptic/*.c
|
||||||
src/stdlib/*.c
|
src/joystick/*.c
|
||||||
src/thread/*.c
|
src/power/*.c
|
||||||
src/timer/*.c
|
src/render/*.c
|
||||||
src/video/*.c
|
src/render/software/*.c
|
||||||
src/audio/disk/*.c
|
src/stdlib/*.c
|
||||||
src/audio/dummy/*.c
|
src/thread/*.c
|
||||||
src/filesystem/dummy/*.c
|
src/timer/*.c
|
||||||
src/video/dummy/*.c
|
src/video/*.c
|
||||||
src/haptic/dummy/*.c
|
src/audio/disk/*.c
|
||||||
src/joystick/dummy/*.c
|
src/audio/dummy/*.c
|
||||||
src/main/dummy/*.c
|
src/filesystem/dummy/*.c
|
||||||
src/thread/generic/*.c
|
src/video/dummy/*.c
|
||||||
src/timer/dummy/*.c
|
src/haptic/dummy/*.c
|
||||||
src/loadso/dummy/*.c
|
src/joystick/dummy/*.c
|
||||||
|
src/main/dummy/*.c
|
||||||
|
src/thread/generic/*.c
|
||||||
Once you have a working library without any drivers, you can go back to each
|
src/timer/dummy/*.c
|
||||||
of the major subsystems and start implementing drivers for your platform.
|
src/loadso/dummy/*.c
|
||||||
|
|
||||||
If you have any questions, don't hesitate to ask on the SDL mailing list:
|
|
||||||
http://www.libsdl.org/mailing-list.php
|
Once you have a working library without any drivers, you can go back to each
|
||||||
|
of the major subsystems and start implementing drivers for your platform.
|
||||||
Enjoy!
|
|
||||||
Sam Lantinga (slouken@libsdl.org)
|
If you have any questions, don't hesitate to ask on the SDL mailing list:
|
||||||
|
http://www.libsdl.org/mailing-list.php
|
||||||
|
|
||||||
|
Enjoy!
|
||||||
|
Sam Lantinga (slouken@libsdl.org)
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
PSP
|
PSP
|
||||||
======
|
======
|
||||||
SDL port for the Sony PSP contributed by
|
SDL port for the Sony PSP contributed by
|
||||||
Captian Lex
|
Captian Lex
|
||||||
|
|
||||||
Credit to
|
Credit to
|
||||||
Marcus R.Brown,Jim Paris,Matthew H for the original SDL 1.2 for PSP
|
Marcus R.Brown,Jim Paris,Matthew H for the original SDL 1.2 for PSP
|
||||||
Geecko for his PSP GU lib "Glib2d"
|
Geecko for his PSP GU lib "Glib2d"
|
||||||
|
|
||||||
Building
|
Building
|
||||||
--------
|
--------
|
||||||
To build for the PSP, make sure psp-config is in the path and run:
|
To build for the PSP, make sure psp-config is in the path and run:
|
||||||
make -f Makefile.psp
|
make -f Makefile.psp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
To Do
|
To Do
|
||||||
------
|
------
|
||||||
PSP Screen Keyboard
|
PSP Screen Keyboard
|
||||||
|
|
|
@ -1,178 +1,188 @@
|
||||||
Raspberry Pi
|
Raspberry Pi
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Requirements:
|
Requirements:
|
||||||
|
|
||||||
Raspbian (other Linux distros may work as well).
|
Raspbian (other Linux distros may work as well).
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
Features
|
Features
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
* Works without X11
|
* Works without X11
|
||||||
* Hardware accelerated OpenGL ES 2.x
|
* Hardware accelerated OpenGL ES 2.x
|
||||||
* Sound via ALSA
|
* Sound via ALSA
|
||||||
* Input (mouse/keyboard/joystick) via EVDEV
|
* Input (mouse/keyboard/joystick) via EVDEV
|
||||||
* Hotplugging of input devices via UDEV
|
* Hotplugging of input devices via UDEV
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
Raspbian Build Dependencies
|
Raspbian Build Dependencies
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
|
sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
|
||||||
|
|
||||||
You also need the VideoCore binary stuff that ships in /opt/vc for EGL and
|
You also need the VideoCore binary stuff that ships in /opt/vc for EGL and
|
||||||
OpenGL ES 2.x, it usually comes pre installed, but in any case:
|
OpenGL ES 2.x, it usually comes pre-installed, but in any case:
|
||||||
|
|
||||||
sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
|
sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Cross compiling from x86 Linux
|
================================================================================
|
||||||
================================================================================
|
NEON
|
||||||
|
================================================================================
|
||||||
To cross compile SDL for Raspbian from your desktop machine, you'll need a
|
|
||||||
Raspbian system root and the cross compilation tools. We'll assume these tools
|
If your Pi has NEON support, make sure you add -mfpu=neon to your CFLAGS so
|
||||||
will be placed in /opt/rpi-tools
|
that SDL will select some otherwise-disabled highly-optimized code. The
|
||||||
|
original Pi units don't have NEON, the Pi2 probably does, and the Pi3
|
||||||
sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools
|
definitely does.
|
||||||
|
|
||||||
You'll also need a Rasbian binary image.
|
================================================================================
|
||||||
Get it from: http://downloads.raspberrypi.org/raspbian_latest
|
Cross compiling from x86 Linux
|
||||||
After unzipping, you'll get file with a name like: <date>-wheezy-raspbian.img
|
================================================================================
|
||||||
Let's assume the sysroot will be built in /opt/rpi-sysroot.
|
|
||||||
|
To cross compile SDL for Raspbian from your desktop machine, you'll need a
|
||||||
export SYSROOT=/opt/rpi-sysroot
|
Raspbian system root and the cross compilation tools. We'll assume these tools
|
||||||
sudo kpartx -a -v <path_to_raspbian_image>.img
|
will be placed in /opt/rpi-tools
|
||||||
sudo mount -o loop /dev/mapper/loop0p2 /mnt
|
|
||||||
sudo cp -r /mnt $SYSROOT
|
sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools
|
||||||
sudo apt-get install qemu binfmt-support qemu-user-static
|
|
||||||
sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin
|
You'll also need a Raspbian binary image.
|
||||||
sudo mount --bind /dev $SYSROOT/dev
|
Get it from: http://downloads.raspberrypi.org/raspbian_latest
|
||||||
sudo mount --bind /proc $SYSROOT/proc
|
After unzipping, you'll get file with a name like: "<date>-wheezy-raspbian.img"
|
||||||
sudo mount --bind /sys $SYSROOT/sys
|
Let's assume the sysroot will be built in /opt/rpi-sysroot.
|
||||||
|
|
||||||
Now, before chrooting into the ARM sysroot, you'll need to apply a workaround,
|
export SYSROOT=/opt/rpi-sysroot
|
||||||
edit $SYSROOT/etc/ld.so.preload and comment out all lines in it.
|
sudo kpartx -a -v <path_to_raspbian_image>.img
|
||||||
|
sudo mount -o loop /dev/mapper/loop0p2 /mnt
|
||||||
sudo chroot $SYSROOT
|
sudo cp -r /mnt $SYSROOT
|
||||||
apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev
|
sudo apt-get install qemu binfmt-support qemu-user-static
|
||||||
exit
|
sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin
|
||||||
sudo umount $SYSROOT/dev
|
sudo mount --bind /dev $SYSROOT/dev
|
||||||
sudo umount $SYSROOT/proc
|
sudo mount --bind /proc $SYSROOT/proc
|
||||||
sudo umount $SYSROOT/sys
|
sudo mount --bind /sys $SYSROOT/sys
|
||||||
sudo umount /mnt
|
|
||||||
|
Now, before chrooting into the ARM sysroot, you'll need to apply a workaround,
|
||||||
There's one more fix required, as the libdl.so symlink uses an absolute path
|
edit $SYSROOT/etc/ld.so.preload and comment out all lines in it.
|
||||||
which doesn't quite work in our setup.
|
|
||||||
|
sudo chroot $SYSROOT
|
||||||
sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
|
apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev
|
||||||
sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
|
exit
|
||||||
|
sudo umount $SYSROOT/dev
|
||||||
The final step is compiling SDL itself.
|
sudo umount $SYSROOT/proc
|
||||||
|
sudo umount $SYSROOT/sys
|
||||||
export CC="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux"
|
sudo umount /mnt
|
||||||
cd <SDL SOURCE>
|
|
||||||
mkdir -p build;cd build
|
There's one more fix required, as the libdl.so symlink uses an absolute path
|
||||||
LDFLAGS="-L$SYSROOT/opt/vc/lib" ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd
|
which doesn't quite work in our setup.
|
||||||
make
|
|
||||||
make install
|
sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
|
||||||
|
sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
|
||||||
To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths:
|
|
||||||
|
The final step is compiling SDL itself.
|
||||||
perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config
|
|
||||||
|
export CC="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux"
|
||||||
================================================================================
|
cd <SDL SOURCE>
|
||||||
Apps don't work or poor video/audio performance
|
mkdir -p build;cd build
|
||||||
================================================================================
|
LDFLAGS="-L$SYSROOT/opt/vc/lib" ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd
|
||||||
|
make
|
||||||
If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to
|
make install
|
||||||
update the RPi's firmware. Note that doing so will fix these problems, but it
|
|
||||||
will also render the CMA - Dynamic Memory Split functionality useless.
|
To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths:
|
||||||
|
|
||||||
Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too
|
perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config
|
||||||
low in general, specially if a 1080p TV is hooked up.
|
|
||||||
|
================================================================================
|
||||||
See here how to configure this setting: http://elinux.org/RPiconfig
|
Apps don't work or poor video/audio performance
|
||||||
|
================================================================================
|
||||||
Using a fixed gpu_mem=128 is the best option (specially if you updated the
|
|
||||||
firmware, using CMA probably won't work, at least it's the current case).
|
If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to
|
||||||
|
update the RPi's firmware. Note that doing so will fix these problems, but it
|
||||||
================================================================================
|
will also render the CMA - Dynamic Memory Split functionality useless.
|
||||||
No input
|
|
||||||
================================================================================
|
Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too
|
||||||
|
low in general, specially if a 1080p TV is hooked up.
|
||||||
Make sure you belong to the "input" group.
|
|
||||||
|
See here how to configure this setting: http://elinux.org/RPiconfig
|
||||||
sudo usermod -aG input `whoami`
|
|
||||||
|
Using a fixed gpu_mem=128 is the best option (specially if you updated the
|
||||||
================================================================================
|
firmware, using CMA probably won't work, at least it's the current case).
|
||||||
No HDMI Audio
|
|
||||||
================================================================================
|
================================================================================
|
||||||
|
No input
|
||||||
If you notice that ALSA works but there's no audio over HDMI, try adding:
|
================================================================================
|
||||||
|
|
||||||
hdmi_drive=2
|
Make sure you belong to the "input" group.
|
||||||
|
|
||||||
to your config.txt file and reboot.
|
sudo usermod -aG input `whoami`
|
||||||
|
|
||||||
Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
|
================================================================================
|
||||||
|
No HDMI Audio
|
||||||
================================================================================
|
================================================================================
|
||||||
Text Input API support
|
|
||||||
================================================================================
|
If you notice that ALSA works but there's no audio over HDMI, try adding:
|
||||||
|
|
||||||
The Text Input API is supported, with translation of scan codes done via the
|
hdmi_drive=2
|
||||||
kernel symbol tables. For this to work, SDL needs access to a valid console.
|
|
||||||
If you notice there's no SDL_TEXTINPUT message being emitted, double check that
|
to your config.txt file and reboot.
|
||||||
your app has read access to one of the following:
|
|
||||||
|
Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
|
||||||
* /proc/self/fd/0
|
|
||||||
* /dev/tty
|
================================================================================
|
||||||
* /dev/tty[0...6]
|
Text Input API support
|
||||||
* /dev/vc/0
|
================================================================================
|
||||||
* /dev/console
|
|
||||||
|
The Text Input API is supported, with translation of scan codes done via the
|
||||||
This is usually not a problem if you run from the physical terminal (as opposed
|
kernel symbol tables. For this to work, SDL needs access to a valid console.
|
||||||
to running from a pseudo terminal, such as via SSH). If running from a PTS, a
|
If you notice there's no SDL_TEXTINPUT message being emitted, double check that
|
||||||
quick workaround is to run your app as root or add yourself to the tty group,
|
your app has read access to one of the following:
|
||||||
then re login to the system.
|
|
||||||
|
* /proc/self/fd/0
|
||||||
sudo usermod -aG tty `whoami`
|
* /dev/tty
|
||||||
|
* /dev/tty[0...6]
|
||||||
The keyboard layout used by SDL is the same as the one the kernel uses.
|
* /dev/vc/0
|
||||||
To configure the layout on Raspbian:
|
* /dev/console
|
||||||
|
|
||||||
sudo dpkg-reconfigure keyboard-configuration
|
This is usually not a problem if you run from the physical terminal (as opposed
|
||||||
|
to running from a pseudo terminal, such as via SSH). If running from a PTS, a
|
||||||
To configure the locale, which controls which keys are interpreted as letters,
|
quick workaround is to run your app as root or add yourself to the tty group,
|
||||||
this determining the CAPS LOCK behavior:
|
then re-login to the system.
|
||||||
|
|
||||||
sudo dpkg-reconfigure locales
|
sudo usermod -aG tty `whoami`
|
||||||
|
|
||||||
================================================================================
|
The keyboard layout used by SDL is the same as the one the kernel uses.
|
||||||
OpenGL problems
|
To configure the layout on Raspbian:
|
||||||
================================================================================
|
|
||||||
|
sudo dpkg-reconfigure keyboard-configuration
|
||||||
If you have desktop OpenGL headers installed at build time in your RPi or cross
|
|
||||||
compilation environment, support for it will be built in. However, the chipset
|
To configure the locale, which controls which keys are interpreted as letters,
|
||||||
does not actually have support for it, which causes issues in certain SDL apps
|
this determining the CAPS LOCK behavior:
|
||||||
since the presence of OpenGL support supersedes the ES/ES2 variants.
|
|
||||||
The workaround is to disable OpenGL at configuration time:
|
sudo dpkg-reconfigure locales
|
||||||
|
|
||||||
./configure --disable-video-opengl
|
================================================================================
|
||||||
|
OpenGL problems
|
||||||
Or if the application uses the Render functions, you can use the SDL_RENDER_DRIVER
|
================================================================================
|
||||||
environment variable:
|
|
||||||
|
If you have desktop OpenGL headers installed at build time in your RPi or cross
|
||||||
export SDL_RENDER_DRIVER=opengles2
|
compilation environment, support for it will be built in. However, the chipset
|
||||||
|
does not actually have support for it, which causes issues in certain SDL apps
|
||||||
================================================================================
|
since the presence of OpenGL support supersedes the ES/ES2 variants.
|
||||||
Notes
|
The workaround is to disable OpenGL at configuration time:
|
||||||
================================================================================
|
|
||||||
|
./configure --disable-video-opengl
|
||||||
* When launching apps remotely (via SSH), SDL can prevent local keystrokes from
|
|
||||||
leaking into the console only if it has root privileges. Launching apps locally
|
Or if the application uses the Render functions, you can use the SDL_RENDER_DRIVER
|
||||||
does not suffer from this issue.
|
environment variable:
|
||||||
|
|
||||||
|
export SDL_RENDER_DRIVER=opengles2
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Notes
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
* When launching apps remotely (via SSH), SDL can prevent local keystrokes from
|
||||||
|
leaking into the console only if it has root privileges. Launching apps locally
|
||||||
|
does not suffer from this issue.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,86 +1,86 @@
|
||||||
Touch
|
Touch
|
||||||
===========================================================================
|
===========================================================================
|
||||||
System Specific Notes
|
System Specific Notes
|
||||||
===========================================================================
|
===========================================================================
|
||||||
Linux:
|
Linux:
|
||||||
The linux touch system is currently based off event streams, and proc/bus/devices. The active user must be given permissions to read /dev/input/TOUCHDEVICE, where TOUCHDEVICE is the event stream for your device. Currently only Wacom tablets are supported. If you have an unsupported tablet contact me at jim.tla+sdl_touch@gmail.com and I will help you get support for it.
|
The linux touch system is currently based off event streams, and proc/bus/devices. The active user must be given permissions to read /dev/input/TOUCHDEVICE, where TOUCHDEVICE is the event stream for your device. Currently only Wacom tablets are supported. If you have an unsupported tablet contact me at jim.tla+sdl_touch@gmail.com and I will help you get support for it.
|
||||||
|
|
||||||
Mac:
|
Mac:
|
||||||
The Mac and iPhone APIs are pretty. If your touch device supports them then you'll be fine. If it doesn't, then there isn't much we can do.
|
The Mac and iPhone APIs are pretty. If your touch device supports them then you'll be fine. If it doesn't, then there isn't much we can do.
|
||||||
|
|
||||||
iPhone:
|
iPhone:
|
||||||
Works out of box.
|
Works out of box.
|
||||||
|
|
||||||
Windows:
|
Windows:
|
||||||
Unfortunately there is no windows support as of yet. Support for Windows 7 is planned, but we currently have no way to test. If you have a Windows 7 WM_TOUCH supported device, and are willing to help test please contact me at jim.tla+sdl_touch@gmail.com
|
Unfortunately there is no windows support as of yet. Support for Windows 7 is planned, but we currently have no way to test. If you have a Windows 7 WM_TOUCH supported device, and are willing to help test please contact me at jim.tla+sdl_touch@gmail.com
|
||||||
|
|
||||||
===========================================================================
|
===========================================================================
|
||||||
Events
|
Events
|
||||||
===========================================================================
|
===========================================================================
|
||||||
SDL_FINGERDOWN:
|
SDL_FINGERDOWN:
|
||||||
Sent when a finger (or stylus) is placed on a touch device.
|
Sent when a finger (or stylus) is placed on a touch device.
|
||||||
Fields:
|
Fields:
|
||||||
* event.tfinger.touchId - the Id of the touch device.
|
* event.tfinger.touchId - the Id of the touch device.
|
||||||
* event.tfinger.fingerId - the Id of the finger which just went down.
|
* event.tfinger.fingerId - the Id of the finger which just went down.
|
||||||
* event.tfinger.x - the x coordinate of the touch (0..1)
|
* event.tfinger.x - the x coordinate of the touch (0..1)
|
||||||
* event.tfinger.y - the y coordinate of the touch (0..1)
|
* event.tfinger.y - the y coordinate of the touch (0..1)
|
||||||
* event.tfinger.pressure - the pressure of the touch (0..1)
|
* event.tfinger.pressure - the pressure of the touch (0..1)
|
||||||
|
|
||||||
SDL_FINGERMOTION:
|
SDL_FINGERMOTION:
|
||||||
Sent when a finger (or stylus) is moved on the touch device.
|
Sent when a finger (or stylus) is moved on the touch device.
|
||||||
Fields:
|
Fields:
|
||||||
Same as SDL_FINGERDOWN but with additional:
|
Same as SDL_FINGERDOWN but with additional:
|
||||||
* event.tfinger.dx - change in x coordinate during this motion event.
|
* event.tfinger.dx - change in x coordinate during this motion event.
|
||||||
* event.tfinger.dy - change in y coordinate during this motion event.
|
* event.tfinger.dy - change in y coordinate during this motion event.
|
||||||
|
|
||||||
SDL_FINGERUP:
|
SDL_FINGERUP:
|
||||||
Sent when a finger (or stylus) is lifted from the touch device.
|
Sent when a finger (or stylus) is lifted from the touch device.
|
||||||
Fields:
|
Fields:
|
||||||
Same as SDL_FINGERDOWN.
|
Same as SDL_FINGERDOWN.
|
||||||
|
|
||||||
|
|
||||||
===========================================================================
|
===========================================================================
|
||||||
Functions
|
Functions
|
||||||
===========================================================================
|
===========================================================================
|
||||||
SDL provides the ability to access the underlying Finger structures.
|
SDL provides the ability to access the underlying SDL_Finger structures.
|
||||||
These structures should _never_ be modified.
|
These structures should _never_ be modified.
|
||||||
|
|
||||||
The following functions are included from SDL_touch.h
|
The following functions are included from SDL_touch.h
|
||||||
|
|
||||||
To get a SDL_TouchID call SDL_GetTouchDevice(index).
|
To get a SDL_TouchID call SDL_GetTouchDevice(int index).
|
||||||
This returns a SDL_TouchID.
|
This returns a SDL_TouchID.
|
||||||
IMPORTANT: If the touch has been removed, or there is no touch with the given ID, SDL_GetTouchID will return 0. Be sure to check for this!
|
IMPORTANT: If the touch has been removed, or there is no touch with the given index, SDL_GetTouchDevice() will return 0. Be sure to check for this!
|
||||||
|
|
||||||
The number of touch devices can be queried with SDL_GetNumTouchDevices().
|
The number of touch devices can be queried with SDL_GetNumTouchDevices().
|
||||||
|
|
||||||
A SDL_TouchID may be used to get pointers to SDL_Finger.
|
A SDL_TouchID may be used to get pointers to SDL_Finger.
|
||||||
|
|
||||||
SDL_GetNumTouchFingers(touchID) may be used to get the number of fingers currently down on the device.
|
SDL_GetNumTouchFingers(touchID) may be used to get the number of fingers currently down on the device.
|
||||||
|
|
||||||
The most common reason to access SDL_Finger is to query the fingers outside the event. In most cases accessing the fingers is using the event. This would be accomplished by code like the following:
|
The most common reason to access SDL_Finger is to query the fingers outside the event. In most cases accessing the fingers is using the event. This would be accomplished by code like the following:
|
||||||
|
|
||||||
float x = event.tfinger.x;
|
float x = event.tfinger.x;
|
||||||
float y = event.tfinger.y;
|
float y = event.tfinger.y;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
To get a SDL_Finger, call SDL_GetTouchFinger(touchID,index), where touchID is a SDL_TouchID, and index is the requested finger.
|
To get a SDL_Finger, call SDL_GetTouchFinger(SDL_TouchID touchID, int index), where touchID is a SDL_TouchID, and index is the requested finger.
|
||||||
This returns a SDL_Finger*, or NULL if the finger does not exist, or has been removed.
|
This returns a SDL_Finger *, or NULL if the finger does not exist, or has been removed.
|
||||||
A SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the SDL_FINGERUP event is polled.
|
A SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the SDL_FINGERUP event is polled.
|
||||||
As a result, be very careful to check for NULL return values.
|
As a result, be very careful to check for NULL return values.
|
||||||
|
|
||||||
A SDL_Finger has the following fields:
|
A SDL_Finger has the following fields:
|
||||||
* x,y,pressure:
|
* x, y:
|
||||||
The current coordinates of the touch.
|
The current coordinates of the touch.
|
||||||
* pressure:
|
* pressure:
|
||||||
The pressure of the touch.
|
The pressure of the touch.
|
||||||
|
|
||||||
|
|
||||||
===========================================================================
|
===========================================================================
|
||||||
Notes
|
Notes
|
||||||
===========================================================================
|
===========================================================================
|
||||||
For a complete example see test/testgesture.c
|
For a complete example see test/testgesture.c
|
||||||
|
|
||||||
Please direct questions/comments to:
|
Please direct questions/comments to:
|
||||||
jim.tla+sdl_touch@gmail.com
|
jim.tla+sdl_touch@gmail.com
|
||||||
(original author, API was changed since)
|
(original author, API was changed since)
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
WinCE
|
WinCE
|
||||||
=====
|
=====
|
||||||
|
|
||||||
Windows CE is no longer supported by SDL.
|
Windows CE is no longer supported by SDL.
|
||||||
|
|
||||||
We have left the CE support in SDL 1.2 for those that must have it, and we
|
We have left the CE support in SDL 1.2 for those that must have it, and we
|
||||||
have support for Windows Phone 8 and WinRT in SDL2, as of SDL 2.0.3.
|
have support for Windows Phone 8 and WinRT in SDL2, as of SDL 2.0.3.
|
||||||
|
|
||||||
--ryan.
|
--ryan.
|
||||||
|
|
||||||
|
|
|
@ -38,4 +38,8 @@ Known Bugs:
|
||||||
* SDL_GL_SetSwapInterval is currently a no op when using ANGLE. It appears
|
* SDL_GL_SetSwapInterval is currently a no op when using ANGLE. It appears
|
||||||
that there's a bug in the library which prevents the window contents from
|
that there's a bug in the library which prevents the window contents from
|
||||||
refreshing if this is set to anything other than the default value.
|
refreshing if this is set to anything other than the default value.
|
||||||
|
|
||||||
|
Vulkan Surface Support
|
||||||
|
==============
|
||||||
|
|
||||||
|
Support for creating Vulkan surfaces is configured on by default. To disable it change the value of `SDL_VIDEO_VULKAN` to 0 in `SDL_config_windows.h`. You must install the [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/) in order to use Vulkan graphics in your application.
|
||||||
|
|
|
@ -2,11 +2,8 @@ WinRT
|
||||||
=====
|
=====
|
||||||
|
|
||||||
This port allows SDL applications to run on Microsoft's platforms that require
|
This port allows SDL applications to run on Microsoft's platforms that require
|
||||||
use of "Windows Runtime", aka. "WinRT", APIs. WinRT apps are currently
|
use of "Windows Runtime", aka. "WinRT", APIs. Microsoft may, in some cases,
|
||||||
full-screen only, and run in what Microsoft sometimes refers to as their
|
refer to them as either "Windows Store", or for Windows 10, "UWP" apps.
|
||||||
"Modern" (formerly, "Metro"), environment. For Windows 8.x, Microsoft may also
|
|
||||||
refer to them as "Windows Store" apps, due to them being distributed,
|
|
||||||
primarily, via a Microsoft-run online store (of the same name).
|
|
||||||
|
|
||||||
Some of the operating systems that include WinRT, are:
|
Some of the operating systems that include WinRT, are:
|
||||||
|
|
||||||
|
@ -19,15 +16,24 @@ Some of the operating systems that include WinRT, are:
|
||||||
Requirements
|
Requirements
|
||||||
------------
|
------------
|
||||||
|
|
||||||
* Microsoft Visual C++ (aka Visual Studio), either 2015, 2013, or 2012
|
* Microsoft Visual C++ (aka Visual Studio), either 2017, 2015, 2013, or 2012
|
||||||
- Free, "Community" or "Express" editions may be used, so long as they
|
- Free, "Community" or "Express" editions may be used, so long as they
|
||||||
include support for either "Windows Store" or "Windows Phone" apps.
|
include support for either "Windows Store" or "Windows Phone" apps.
|
||||||
"Express" versions marked as supporting "Windows Desktop" development
|
"Express" versions marked as supporting "Windows Desktop" development
|
||||||
typically do not include support for creating WinRT apps, to note.
|
typically do not include support for creating WinRT apps, to note.
|
||||||
(The "Community" editions of Visual C++ do, however, support both
|
(The "Community" editions of Visual C++ do, however, support both
|
||||||
desktop/Win32 and WinRT development).
|
desktop/Win32 and WinRT development).
|
||||||
|
- Visual Studio 2017 can be used, however it is recommended that you install
|
||||||
|
the Visual C++ 2015 build tools. These build tools can be installed
|
||||||
|
using VS 2017's installer. Be sure to also install the workload for
|
||||||
|
"Universal Windows Platform development", its optional component, the
|
||||||
|
"C++ Universal Windows Platform tools", and for UWP / Windows 10
|
||||||
|
development, the "Windows 10 SDK (10.0.10240.0)". Please note that
|
||||||
|
targeting UWP / Windows 10 apps from development machine(s) running
|
||||||
|
earlier versions of Windows, such as Windows 7, is not always supported
|
||||||
|
by Visual Studio, and you may get error(s) when attempting to do so.
|
||||||
- Visual C++ 2012 can only build apps that target versions 8.0 of Windows,
|
- Visual C++ 2012 can only build apps that target versions 8.0 of Windows,
|
||||||
or Windows Phone. 8.0-targetted apps will run on devices running 8.1
|
or Windows Phone. 8.0-targeted apps will run on devices running 8.1
|
||||||
editions of Windows, however they will not be able to take advantage of
|
editions of Windows, however they will not be able to take advantage of
|
||||||
8.1-specific features.
|
8.1-specific features.
|
||||||
- Visual C++ 2013 cannot create app projects that target Windows 8.0.
|
- Visual C++ 2013 cannot create app projects that target Windows 8.0.
|
||||||
|
@ -48,7 +54,7 @@ Requirements
|
||||||
Status
|
Status
|
||||||
------
|
------
|
||||||
|
|
||||||
Here is a rough list of what works, and what doens't:
|
Here is a rough list of what works, and what doesn't:
|
||||||
|
|
||||||
* What works:
|
* What works:
|
||||||
* compilation via Visual C++ 2012 through 2015
|
* compilation via Visual C++ 2012 through 2015
|
||||||
|
@ -64,12 +70,18 @@ Here is a rough list of what works, and what doens't:
|
||||||
SDL_GetPerformanceFrequency(), etc.)
|
SDL_GetPerformanceFrequency(), etc.)
|
||||||
* file I/O via SDL_RWops
|
* file I/O via SDL_RWops
|
||||||
* mouse input (unsupported on Windows Phone)
|
* mouse input (unsupported on Windows Phone)
|
||||||
* audio, via a modified version of SDL's XAudio2 backend
|
* audio, via SDL's WASAPI backend (if you want to record, your app must
|
||||||
|
have "Microphone" capabilities enabled in its manifest, and the user must
|
||||||
|
not have blocked access. Otherwise, capture devices will fail to work,
|
||||||
|
presenting as a device disconnect shortly after opening it.)
|
||||||
* .DLL file loading. Libraries *MUST* be packaged inside applications. Loading
|
* .DLL file loading. Libraries *MUST* be packaged inside applications. Loading
|
||||||
anything outside of the app is not supported.
|
anything outside of the app is not supported.
|
||||||
* system path retrieval via SDL's filesystem APIs
|
* system path retrieval via SDL's filesystem APIs
|
||||||
* game controllers. Support is provided via the SDL_Joystick and
|
* game controllers. Support is provided via the SDL_Joystick and
|
||||||
SDL_GameController APIs, and is backed by Microsoft's XInput API.
|
SDL_GameController APIs, and is backed by Microsoft's XInput API. Please
|
||||||
|
note, however, that Windows limits game-controller support in UWP apps to,
|
||||||
|
"Xbox compatible controllers" (many controllers that work in Win32 apps,
|
||||||
|
do not work in UWP, due to restrictions in UWP itself.)
|
||||||
* multi-touch input
|
* multi-touch input
|
||||||
* app events. SDL_APP_WILLENTER* and SDL_APP_DIDENTER* events get sent out as
|
* app events. SDL_APP_WILLENTER* and SDL_APP_DIDENTER* events get sent out as
|
||||||
appropriate.
|
appropriate.
|
||||||
|
@ -82,7 +94,9 @@ Here is a rough list of what works, and what doens't:
|
||||||
|
|
||||||
* What partially works:
|
* What partially works:
|
||||||
* keyboard input. Most of WinRT's documented virtual keys are supported, as
|
* keyboard input. Most of WinRT's documented virtual keys are supported, as
|
||||||
well as many keys with documented hardware scancodes.
|
well as many keys with documented hardware scancodes. Converting
|
||||||
|
SDL_Scancodes to or from SDL_Keycodes may not work, due to missing APIs
|
||||||
|
(MapVirtualKey()) in Microsoft's Windows Store / UWP APIs.
|
||||||
* SDLmain. WinRT uses a different signature for each app's main() function.
|
* SDLmain. WinRT uses a different signature for each app's main() function.
|
||||||
SDL-based apps that use this port must compile in SDL_winrt_main_NonXAML.cpp
|
SDL-based apps that use this port must compile in SDL_winrt_main_NonXAML.cpp
|
||||||
(in `SDL\src\main\winrt\`) directly in order for their C-style main()
|
(in `SDL\src\main\winrt\`) directly in order for their C-style main()
|
||||||
|
@ -95,8 +109,10 @@ Here is a rough list of what works, and what doens't:
|
||||||
SDL_CreateSystemCursor() (unsupported on Windows Phone)
|
SDL_CreateSystemCursor() (unsupported on Windows Phone)
|
||||||
* SDL_WarpMouseInWindow() or SDL_WarpMouseGlobal(). This are not currently
|
* SDL_WarpMouseInWindow() or SDL_WarpMouseGlobal(). This are not currently
|
||||||
supported by WinRT itself.
|
supported by WinRT itself.
|
||||||
* joysticks and game controllers that aren't supported by Microsoft's XInput
|
* joysticks and game controllers that either are not supported by
|
||||||
API.
|
Microsoft's XInput API, or are not supported within UWP apps (many
|
||||||
|
controllers that work in Win32, do not work in UWP, due to restrictions in
|
||||||
|
UWP itself).
|
||||||
* turning off VSync when rendering on Windows Phone. Attempts to turn VSync
|
* turning off VSync when rendering on Windows Phone. Attempts to turn VSync
|
||||||
off on Windows Phone result either in Direct3D not drawing anything, or it
|
off on Windows Phone result either in Direct3D not drawing anything, or it
|
||||||
forcing VSync back on. As such, SDL_RENDERER_PRESENTVSYNC will always get
|
forcing VSync back on. As such, SDL_RENDERER_PRESENTVSYNC will always get
|
||||||
|
@ -160,7 +176,9 @@ following, at a high-level:
|
||||||
the linker, and will copy SDL's .dll files to your app's final output.
|
the linker, and will copy SDL's .dll files to your app's final output.
|
||||||
4. adjust your app's build settings, at minimum, telling it where to find SDL's
|
4. adjust your app's build settings, at minimum, telling it where to find SDL's
|
||||||
header files.
|
header files.
|
||||||
5. add a file that contains a WinRT-appropriate main function.
|
5. add files that contains a WinRT-appropriate main function, along with some
|
||||||
|
data to make sure mouse-cursor-hiding (via SDL_ShowCursor(SDL_DISABLE) calls)
|
||||||
|
work properly.
|
||||||
6. add SDL-specific app code.
|
6. add SDL-specific app code.
|
||||||
7. build and run your app.
|
7. build and run your app.
|
||||||
|
|
||||||
|
@ -268,33 +286,27 @@ To change these settings:
|
||||||
10. close the dialog, saving settings, by clicking the "OK" button
|
10. close the dialog, saving settings, by clicking the "OK" button
|
||||||
|
|
||||||
|
|
||||||
### 5. Add a WinRT-appropriate main function to the app. ###
|
### 5. Add a WinRT-appropriate main function, and a blank-cursor image, to the app. ###
|
||||||
|
|
||||||
C/C++-based WinRT apps do contain a `main` function that the OS will invoke when
|
A few files should be included directly in your app's MSVC project, specifically:
|
||||||
the app starts launching. The parameters of WinRT main functions are different
|
1. a WinRT-appropriate main function (which is different than main() functions on
|
||||||
than those found on other platforms, Win32 included. SDL/WinRT provides a
|
other platforms)
|
||||||
platform-appropriate main function that will perform these actions, setup key
|
2. a Win32-style cursor resource, used by SDL_ShowCursor() to hide the mouse cursor
|
||||||
portions of the app, then invoke a classic, C/C++-style main function (that take
|
(if and when the app needs to do so). *If this cursor resource is not
|
||||||
in "argc" and "argv" parameters). The code for this file is contained inside
|
included, mouse-position reporting may fail if and when the cursor is
|
||||||
SDL's source distribution, under `src/main/winrt/SDL_winrt_main_NonXAML.cpp`.
|
hidden, due to possible bugs/design-oddities in Windows itself.*
|
||||||
You'll need to add this file, or a copy of it, to your app's project, and make
|
|
||||||
sure it gets compiled using a Microsoft-specific set of C++ extensions called
|
|
||||||
C++/CX.
|
|
||||||
|
|
||||||
**NOTE: C++/CX compilation is currently required in at least one file of your
|
To include these files:
|
||||||
app's project. This is to make sure that Visual C++'s linker builds a 'Windows
|
|
||||||
Metadata' file (.winmd) for your app. Not doing so can lead to build errors.**
|
|
||||||
|
|
||||||
To include `SDL_winrt_main_NonXAML.cpp`:
|
|
||||||
|
|
||||||
1. right-click on your project (again, in Visual C++'s Solution Explorer),
|
1. right-click on your project (again, in Visual C++'s Solution Explorer),
|
||||||
navigate to "Add", then choose "Existing Item...".
|
navigate to "Add", then choose "Existing Item...".
|
||||||
2. open `SDL_winrt_main_NonXAML.cpp`, which is found inside SDL's source
|
2. navigate to the directory containing SDL's source code, then into its
|
||||||
distribution, under `src/main/winrt/`. Make sure that the open-file dialog
|
subdirectory, 'src/main/winrt/'. Select, then add, the following files:
|
||||||
closes, either by double-clicking on the file, or single-clicking on it and
|
- `SDL_winrt_main_NonXAML.cpp`
|
||||||
then clicking Add.
|
- `SDL2-WinRTResources.rc`
|
||||||
3. right-click on the file (as listed in your project), then click on
|
- `SDL2-WinRTResource_BlankCursor.cur`
|
||||||
"Properties...".
|
3. right-click on the file `SDL_winrt_main_NonXAML.cpp` (as listed in your
|
||||||
|
project), then click on "Properties...".
|
||||||
4. in the drop-down box next to "Configuration", choose, "All Configurations"
|
4. in the drop-down box next to "Configuration", choose, "All Configurations"
|
||||||
5. in the drop-down box next to "Platform", choose, "All Platforms"
|
5. in the drop-down box next to "Platform", choose, "All Platforms"
|
||||||
6. in the left-hand list, click on "C/C++"
|
6. in the left-hand list, click on "C/C++"
|
||||||
|
@ -302,6 +314,11 @@ To include `SDL_winrt_main_NonXAML.cpp`:
|
||||||
8. click the OK button. This will close the dialog.
|
8. click the OK button. This will close the dialog.
|
||||||
|
|
||||||
|
|
||||||
|
**NOTE: C++/CX compilation is currently required in at least one file of your
|
||||||
|
app's project. This is to make sure that Visual C++'s linker builds a 'Windows
|
||||||
|
Metadata' file (.winmd) for your app. Not doing so can lead to build errors.**
|
||||||
|
|
||||||
|
|
||||||
### 6. Add app code and assets ###
|
### 6. Add app code and assets ###
|
||||||
|
|
||||||
At this point, you can add in SDL-specific source code. Be sure to include a
|
At this point, you can add in SDL-specific source code. Be sure to include a
|
||||||
|
@ -466,3 +483,62 @@ section.
|
||||||
|
|
||||||
/nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib
|
/nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib
|
||||||
|
|
||||||
|
|
||||||
|
#### Mouse-motion events fail to get sent, or SDL_GetMouseState() fails to return updated values
|
||||||
|
|
||||||
|
This may be caused by a bug in Windows itself, whereby hiding the mouse
|
||||||
|
cursor can cause mouse-position reporting to fail.
|
||||||
|
|
||||||
|
SDL provides a workaround for this, but it requires that an app links to a
|
||||||
|
set of Win32-style cursor image-resource files. A copy of suitable resource
|
||||||
|
files can be found in `src/main/winrt/`. Adding them to an app's Visual C++
|
||||||
|
project file should be sufficient to get the app to use them.
|
||||||
|
|
||||||
|
|
||||||
|
#### SDL's Visual Studio project file fails to open, with message, "The system can't find the file specified."
|
||||||
|
|
||||||
|
This can be caused for any one of a few reasons, which Visual Studio can
|
||||||
|
report, but won't always do so in an up-front manner.
|
||||||
|
|
||||||
|
To help determine why this error comes up:
|
||||||
|
|
||||||
|
1. open a copy of Visual Studio without opening a project file. This can be
|
||||||
|
accomplished via Windows' Start Menu, among other means.
|
||||||
|
2. show Visual Studio's Output window. This can be done by going to VS'
|
||||||
|
menu bar, then to View, and then to Output.
|
||||||
|
3. try opening the SDL project file directly by going to VS' menu bar, then
|
||||||
|
to File, then to Open, then to Project/Solution. When a File-Open dialog
|
||||||
|
appears, open the SDL project (such as the one in SDL's source code, in its
|
||||||
|
directory, VisualC-WinRT/UWP_VS2015/).
|
||||||
|
4. after attempting to open SDL's Visual Studio project file, additional error
|
||||||
|
information will be output to the Output window.
|
||||||
|
|
||||||
|
If Visual Studio reports (via its Output window) that the project:
|
||||||
|
|
||||||
|
"could not be loaded because it's missing install components. To fix this launch Visual Studio setup with the following selections:
|
||||||
|
Microsoft.VisualStudio.ComponentGroup.UWP.VC"
|
||||||
|
|
||||||
|
... then you will need to re-launch Visual Studio's installer, and make sure that
|
||||||
|
the workflow for "Universal Windows Platform development" is checked, and that its
|
||||||
|
optional component, "C++ Universal Windows Platform tools" is also checked. While
|
||||||
|
you are there, if you are planning on targeting UWP / Windows 10, also make sure
|
||||||
|
that you check the optional component, "Windows 10 SDK (10.0.10240.0)". After
|
||||||
|
making sure these items are checked as-appropriate, install them.
|
||||||
|
|
||||||
|
Once you install these components, try re-launching Visual Studio, and re-opening
|
||||||
|
the SDL project file. If you still get the error dialog, try using the Output
|
||||||
|
window, again, seeing what Visual Studio says about it.
|
||||||
|
|
||||||
|
|
||||||
|
#### Game controllers / joysticks aren't working!
|
||||||
|
|
||||||
|
Windows only permits certain game controllers and joysticks to work within
|
||||||
|
WinRT / UWP apps. Even if a game controller or joystick works in a Win32
|
||||||
|
app, that device is not guaranteed to work inside a WinRT / UWP app.
|
||||||
|
|
||||||
|
According to Microsoft, "Xbox compatible controllers" should work inside
|
||||||
|
UWP apps, potentially with more working in the future. This includes, but
|
||||||
|
may not be limited to, Microsoft-made Xbox controllers and USB adapters.
|
||||||
|
(Source: https://social.msdn.microsoft.com/Forums/en-US/9064838b-e8c3-4c18-8a83-19bf0dfe150d/xinput-fails-to-detect-game-controllers?forum=wpdevelop)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ If you need help with the library, or just want to discuss SDL related
|
||||||
issues, you can join the [developers mailing list](http://www.libsdl.org/mailing-list.php)
|
issues, you can join the [developers mailing list](http://www.libsdl.org/mailing-list.php)
|
||||||
|
|
||||||
If you want to report bugs or contribute patches, please submit them to
|
If you want to report bugs or contribute patches, please submit them to
|
||||||
[bugzilla](http://bugzilla.libsdl.org/)
|
[bugzilla](https://bugzilla.libsdl.org/)
|
||||||
|
|
||||||
Enjoy!
|
Enjoy!
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
prefix=/usr/local/cross-tools/i686-w64-mingw32
|
prefix=/opt/local/i686-w64-mingw32
|
||||||
exec_prefix=${prefix}
|
exec_prefix=${prefix}
|
||||||
exec_prefix_set=no
|
exec_prefix_set=no
|
||||||
libdir=${exec_prefix}/lib
|
libdir=${exec_prefix}/lib
|
||||||
|
@ -39,17 +39,17 @@ while test $# -gt 0; do
|
||||||
echo $exec_prefix
|
echo $exec_prefix
|
||||||
;;
|
;;
|
||||||
--version)
|
--version)
|
||||||
echo 2.0.4
|
echo 2.0.9
|
||||||
;;
|
;;
|
||||||
--cflags)
|
--cflags)
|
||||||
echo -I${prefix}/include/SDL2 -Dmain=SDL_main
|
echo -I${prefix}/include/SDL2 -Dmain=SDL_main
|
||||||
;;
|
;;
|
||||||
--libs)
|
--libs)
|
||||||
echo -L${exec_prefix}/lib -lmingw32 -lSDL2main -lSDL2 -mwindows
|
echo -L${exec_prefix}/lib -lmingw32 -lSDL2main -lSDL2 -mwindows
|
||||||
;;
|
;;
|
||||||
--static-libs)
|
--static-libs)
|
||||||
# --libs|--static-libs)
|
# --libs|--static-libs)
|
||||||
echo -L${exec_prefix}/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--no-undefined -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -static-libgcc
|
echo -L${exec_prefix}/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--no-undefined -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid -static-libgcc
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "${usage}" 1>&2
|
echo "${usage}" 1>&2
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
|
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -26,8 +26,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef _SDL_H
|
#ifndef SDL_h_
|
||||||
#define _SDL_H
|
#define SDL_h_
|
||||||
|
|
||||||
#include "SDL_main.h"
|
#include "SDL_main.h"
|
||||||
#include "SDL_stdinc.h"
|
#include "SDL_stdinc.h"
|
||||||
|
@ -40,10 +40,10 @@
|
||||||
#include "SDL_error.h"
|
#include "SDL_error.h"
|
||||||
#include "SDL_events.h"
|
#include "SDL_events.h"
|
||||||
#include "SDL_filesystem.h"
|
#include "SDL_filesystem.h"
|
||||||
#include "SDL_joystick.h"
|
|
||||||
#include "SDL_gamecontroller.h"
|
#include "SDL_gamecontroller.h"
|
||||||
#include "SDL_haptic.h"
|
#include "SDL_haptic.h"
|
||||||
#include "SDL_hints.h"
|
#include "SDL_hints.h"
|
||||||
|
#include "SDL_joystick.h"
|
||||||
#include "SDL_loadso.h"
|
#include "SDL_loadso.h"
|
||||||
#include "SDL_log.h"
|
#include "SDL_log.h"
|
||||||
#include "SDL_messagebox.h"
|
#include "SDL_messagebox.h"
|
||||||
|
@ -51,6 +51,8 @@
|
||||||
#include "SDL_power.h"
|
#include "SDL_power.h"
|
||||||
#include "SDL_render.h"
|
#include "SDL_render.h"
|
||||||
#include "SDL_rwops.h"
|
#include "SDL_rwops.h"
|
||||||
|
#include "SDL_sensor.h"
|
||||||
|
#include "SDL_shape.h"
|
||||||
#include "SDL_system.h"
|
#include "SDL_system.h"
|
||||||
#include "SDL_thread.h"
|
#include "SDL_thread.h"
|
||||||
#include "SDL_timer.h"
|
#include "SDL_timer.h"
|
||||||
|
@ -72,17 +74,18 @@ extern "C" {
|
||||||
* specify the subsystems which you will be using in your application.
|
* specify the subsystems which you will be using in your application.
|
||||||
*/
|
*/
|
||||||
/* @{ */
|
/* @{ */
|
||||||
#define SDL_INIT_TIMER 0x00000001
|
#define SDL_INIT_TIMER 0x00000001u
|
||||||
#define SDL_INIT_AUDIO 0x00000010
|
#define SDL_INIT_AUDIO 0x00000010u
|
||||||
#define SDL_INIT_VIDEO 0x00000020 /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */
|
#define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */
|
||||||
#define SDL_INIT_JOYSTICK 0x00000200 /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */
|
#define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */
|
||||||
#define SDL_INIT_HAPTIC 0x00001000
|
#define SDL_INIT_HAPTIC 0x00001000u
|
||||||
#define SDL_INIT_GAMECONTROLLER 0x00002000 /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */
|
#define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */
|
||||||
#define SDL_INIT_EVENTS 0x00004000
|
#define SDL_INIT_EVENTS 0x00004000u
|
||||||
#define SDL_INIT_NOPARACHUTE 0x00100000 /**< compatibility; this flag is ignored. */
|
#define SDL_INIT_SENSOR 0x00008000u
|
||||||
|
#define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */
|
||||||
#define SDL_INIT_EVERYTHING ( \
|
#define SDL_INIT_EVERYTHING ( \
|
||||||
SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \
|
SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \
|
||||||
SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \
|
SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \
|
||||||
)
|
)
|
||||||
/* @} */
|
/* @} */
|
||||||
|
|
||||||
|
@ -95,8 +98,8 @@ extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags);
|
||||||
* This function initializes specific SDL subsystems
|
* This function initializes specific SDL subsystems
|
||||||
*
|
*
|
||||||
* Subsystem initialization is ref-counted, you must call
|
* Subsystem initialization is ref-counted, you must call
|
||||||
* SDL_QuitSubSystem for each SDL_InitSubSystem to correctly
|
* SDL_QuitSubSystem() for each SDL_InitSubSystem() to correctly
|
||||||
* shutdown a subsystem manually (or call SDL_Quit to force shutdown).
|
* shutdown a subsystem manually (or call SDL_Quit() to force shutdown).
|
||||||
* If a subsystem is already loaded then this call will
|
* If a subsystem is already loaded then this call will
|
||||||
* increase the ref-count and return.
|
* increase the ref-count and return.
|
||||||
*/
|
*/
|
||||||
|
@ -127,6 +130,6 @@ extern DECLSPEC void SDLCALL SDL_Quit(void);
|
||||||
#endif
|
#endif
|
||||||
#include "close_code.h"
|
#include "close_code.h"
|
||||||
|
|
||||||
#endif /* _SDL_H */
|
#endif /* SDL_h_ */
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
|
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -19,8 +19,8 @@
|
||||||
3. This notice may not be removed or altered from any source distribution.
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SDL_assert_h
|
#ifndef SDL_assert_h_
|
||||||
#define _SDL_assert_h
|
#define SDL_assert_h_
|
||||||
|
|
||||||
#include "SDL_config.h"
|
#include "SDL_config.h"
|
||||||
|
|
||||||
|
@ -51,9 +51,11 @@ assert can have unique static variables associated with it.
|
||||||
/* Don't include intrin.h here because it contains C++ code */
|
/* Don't include intrin.h here because it contains C++ code */
|
||||||
extern void __cdecl __debugbreak(void);
|
extern void __cdecl __debugbreak(void);
|
||||||
#define SDL_TriggerBreakpoint() __debugbreak()
|
#define SDL_TriggerBreakpoint() __debugbreak()
|
||||||
#elif (!defined(__NACL__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
|
#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) )
|
||||||
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
|
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
|
||||||
#elif defined(HAVE_SIGNAL_H)
|
#elif defined(__386__) && defined(__WATCOMC__)
|
||||||
|
#define SDL_TriggerBreakpoint() { _asm { int 0x03 } }
|
||||||
|
#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__)
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#define SDL_TriggerBreakpoint() raise(SIGTRAP)
|
#define SDL_TriggerBreakpoint() raise(SIGTRAP)
|
||||||
#else
|
#else
|
||||||
|
@ -63,7 +65,7 @@ assert can have unique static variables associated with it.
|
||||||
|
|
||||||
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */
|
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */
|
||||||
# define SDL_FUNCTION __func__
|
# define SDL_FUNCTION __func__
|
||||||
#elif ((__GNUC__ >= 2) || defined(_MSC_VER))
|
#elif ((__GNUC__ >= 2) || defined(_MSC_VER) || defined (__WATCOMC__))
|
||||||
# define SDL_FUNCTION __FUNCTION__
|
# define SDL_FUNCTION __FUNCTION__
|
||||||
#else
|
#else
|
||||||
# define SDL_FUNCTION "???"
|
# define SDL_FUNCTION "???"
|
||||||
|
@ -201,7 +203,7 @@ typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)(
|
||||||
*
|
*
|
||||||
* This callback is NOT reset to SDL's internal handler upon SDL_Quit()!
|
* This callback is NOT reset to SDL's internal handler upon SDL_Quit()!
|
||||||
*
|
*
|
||||||
* \return SDL_AssertState value of how to handle the assertion failure.
|
* Return SDL_AssertState value of how to handle the assertion failure.
|
||||||
*
|
*
|
||||||
* \param handler Callback function, called when an assertion fails.
|
* \param handler Callback function, called when an assertion fails.
|
||||||
* \param userdata A pointer passed to the callback as-is.
|
* \param userdata A pointer passed to the callback as-is.
|
||||||
|
@ -250,7 +252,7 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puse
|
||||||
* <code>
|
* <code>
|
||||||
* const SDL_AssertData *item = SDL_GetAssertionReport();
|
* const SDL_AssertData *item = SDL_GetAssertionReport();
|
||||||
* while (item) {
|
* while (item) {
|
||||||
* printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n",
|
* printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n",
|
||||||
* item->condition, item->function, item->filename,
|
* item->condition, item->function, item->filename,
|
||||||
* item->linenum, item->trigger_count,
|
* item->linenum, item->trigger_count,
|
||||||
* item->always_ignore ? "yes" : "no");
|
* item->always_ignore ? "yes" : "no");
|
||||||
|
@ -284,6 +286,6 @@ extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void);
|
||||||
#endif
|
#endif
|
||||||
#include "close_code.h"
|
#include "close_code.h"
|
||||||
|
|
||||||
#endif /* _SDL_assert_h */
|
#endif /* SDL_assert_h_ */
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
|
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -56,8 +56,8 @@
|
||||||
* All of the atomic operations that modify memory are full memory barriers.
|
* All of the atomic operations that modify memory are full memory barriers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SDL_atomic_h_
|
#ifndef SDL_atomic_h_
|
||||||
#define _SDL_atomic_h_
|
#define SDL_atomic_h_
|
||||||
|
|
||||||
#include "SDL_stdinc.h"
|
#include "SDL_stdinc.h"
|
||||||
#include "SDL_platform.h"
|
#include "SDL_platform.h"
|
||||||
|
@ -118,13 +118,16 @@ extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock);
|
||||||
* The compiler barrier prevents the compiler from reordering
|
* The compiler barrier prevents the compiler from reordering
|
||||||
* reads and writes to globally visible variables across the call.
|
* reads and writes to globally visible variables across the call.
|
||||||
*/
|
*/
|
||||||
#if defined(_MSC_VER) && (_MSC_VER > 1200)
|
#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__)
|
||||||
void _ReadWriteBarrier(void);
|
void _ReadWriteBarrier(void);
|
||||||
#pragma intrinsic(_ReadWriteBarrier)
|
#pragma intrinsic(_ReadWriteBarrier)
|
||||||
#define SDL_CompilerBarrier() _ReadWriteBarrier()
|
#define SDL_CompilerBarrier() _ReadWriteBarrier()
|
||||||
#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
|
#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+. */
|
/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */
|
||||||
#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory")
|
#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory")
|
||||||
|
#elif defined(__WATCOMC__)
|
||||||
|
extern _inline void SDL_CompilerBarrier (void);
|
||||||
|
#pragma aux SDL_CompilerBarrier = "" parm [] modify exact [];
|
||||||
#else
|
#else
|
||||||
#define SDL_CompilerBarrier() \
|
#define SDL_CompilerBarrier() \
|
||||||
{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); }
|
{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); }
|
||||||
|
@ -149,18 +152,24 @@ void _ReadWriteBarrier(void);
|
||||||
* For more information on these semantics, take a look at the blog post:
|
* For more information on these semantics, take a look at the blog post:
|
||||||
* http://preshing.com/20120913/acquire-and-release-semantics
|
* http://preshing.com/20120913/acquire-and-release-semantics
|
||||||
*/
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void);
|
||||||
|
extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void);
|
||||||
|
|
||||||
#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
|
#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
|
||||||
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory")
|
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory")
|
||||||
#define SDL_MemoryBarrierAcquire() __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__)
|
#elif defined(__GNUC__) && defined(__arm__)
|
||||||
#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__)
|
#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__)
|
||||||
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
|
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
|
||||||
#define SDL_MemoryBarrierAcquire() __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__)
|
#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__) || defined(__ARM_ARCH_5TE__)
|
||||||
#ifdef __thumb__
|
#ifdef __thumb__
|
||||||
/* The mcr instruction isn't available in thumb mode, use real functions */
|
/* The mcr instruction isn't available in thumb mode, use real functions */
|
||||||
extern DECLSPEC void SDLCALL SDL_MemoryBarrierRelease();
|
#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction()
|
||||||
extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquire();
|
#define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction()
|
||||||
#else
|
#else
|
||||||
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
|
#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")
|
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
|
||||||
|
@ -263,6 +272,6 @@ extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a);
|
||||||
|
|
||||||
#include "close_code.h"
|
#include "close_code.h"
|
||||||
|
|
||||||
#endif /* _SDL_atomic_h_ */
|
#endif /* SDL_atomic_h_ */
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Simple DirectMedia Layer
|
Simple DirectMedia Layer
|
||||||
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
|
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -25,8 +25,8 @@
|
||||||
* Access to the raw audio mixing buffer for the SDL library.
|
* Access to the raw audio mixing buffer for the SDL library.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SDL_audio_h
|
#ifndef SDL_audio_h_
|
||||||
#define _SDL_audio_h
|
#define SDL_audio_h_
|
||||||
|
|
||||||
#include "SDL_stdinc.h"
|
#include "SDL_stdinc.h"
|
||||||
#include "SDL_error.h"
|
#include "SDL_error.h"
|
||||||
|
@ -140,7 +140,8 @@ typedef Uint16 SDL_AudioFormat;
|
||||||
#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001
|
#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001
|
||||||
#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002
|
#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002
|
||||||
#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004
|
#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004
|
||||||
#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE)
|
#define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0x00000008
|
||||||
|
#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE|SDL_AUDIO_ALLOW_SAMPLES_CHANGE)
|
||||||
/* @} */
|
/* @} */
|
||||||
|
|
||||||
/* @} *//* Audio flags */
|
/* @} *//* Audio flags */
|
||||||
|
@ -164,6 +165,15 @@ typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The calculated values in this structure are calculated by SDL_OpenAudio().
|
* The calculated values in this structure are calculated by SDL_OpenAudio().
|
||||||
|
*
|
||||||
|
* For multi-channel audio, the default SDL channel mapping is:
|
||||||
|
* 2: FL FR (stereo)
|
||||||
|
* 3: FL FR LFE (2.1 surround)
|
||||||
|
* 4: FL FR BL BR (quad)
|
||||||
|
* 5: FL FR FC BL BR (quad + center)
|
||||||
|
* 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR)
|
||||||
|
* 7: FL FR FC LFE BC SL SR (6.1 surround)
|
||||||
|
* 8: FL FR FC LFE BL BR SL SR (7.1 surround)
|
||||||
*/
|
*/
|
||||||
typedef struct SDL_AudioSpec
|
typedef struct SDL_AudioSpec
|
||||||
{
|
{
|
||||||
|
@ -171,7 +181,7 @@ typedef struct SDL_AudioSpec
|
||||||
SDL_AudioFormat format; /**< Audio data format */
|
SDL_AudioFormat format; /**< Audio data format */
|
||||||
Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */
|
Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */
|
||||||
Uint8 silence; /**< Audio buffer silence value (calculated) */
|
Uint8 silence; /**< Audio buffer silence value (calculated) */
|
||||||
Uint16 samples; /**< Audio buffer size in samples (power of 2) */
|
Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */
|
||||||
Uint16 padding; /**< Necessary for some compile environments */
|
Uint16 padding; /**< Necessary for some compile environments */
|
||||||
Uint32 size; /**< Audio buffer size in bytes (calculated) */
|
Uint32 size; /**< Audio buffer size in bytes (calculated) */
|
||||||
SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */
|
SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */
|
||||||
|
@ -184,7 +194,23 @@ typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt,
|
||||||
SDL_AudioFormat format);
|
SDL_AudioFormat format);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A structure to hold a set of audio conversion filters and buffers.
|
* \brief Upper limit of filters in SDL_AudioCVT
|
||||||
|
*
|
||||||
|
* The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is
|
||||||
|
* currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers,
|
||||||
|
* one of which is the terminating NULL pointer.
|
||||||
|
*/
|
||||||
|
#define SDL_AUDIOCVT_MAX_FILTERS 9
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \struct SDL_AudioCVT
|
||||||
|
* \brief A structure to hold a set of audio conversion filters and buffers.
|
||||||
|
*
|
||||||
|
* Note that various parts of the conversion pipeline can take advantage
|
||||||
|
* of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require
|
||||||
|
* you to pass it aligned data, but can possibly run much faster if you
|
||||||
|
* set both its (buf) field to a pointer that is aligned to 16 bytes, and its
|
||||||
|
* (len) field to something that's a multiple of 16, if possible.
|
||||||
*/
|
*/
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't
|
/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't
|
||||||
|
@ -208,7 +234,7 @@ typedef struct SDL_AudioCVT
|
||||||
int len_cvt; /**< Length of converted audio buffer */
|
int len_cvt; /**< Length of converted audio buffer */
|
||||||
int len_mult; /**< buffer must be len*len_mult big */
|
int len_mult; /**< buffer must be len*len_mult big */
|
||||||
double len_ratio; /**< Given len, final size is len*len_ratio */
|
double len_ratio; /**< Given len, final size is len*len_ratio */
|
||||||
SDL_AudioFilter filters[10]; /**< Filter list */
|
SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */
|
||||||
int filter_index; /**< Current audio conversion function */
|
int filter_index; /**< Current audio conversion function */
|
||||||
} SDL_AUDIOCVT_PACKED SDL_AudioCVT;
|
} SDL_AUDIOCVT_PACKED SDL_AudioCVT;
|
||||||
|
|
||||||
|
@ -278,7 +304,8 @@ extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void);
|
||||||
* protect data structures that it accesses by calling SDL_LockAudio()
|
* protect data structures that it accesses by calling SDL_LockAudio()
|
||||||
* and SDL_UnlockAudio() in your code. Alternately, you may pass a NULL
|
* and SDL_UnlockAudio() in your code. Alternately, you may pass a NULL
|
||||||
* pointer here, and call SDL_QueueAudio() with some frequency, to queue
|
* pointer here, and call SDL_QueueAudio() with some frequency, to queue
|
||||||
* more audio samples to be played.
|
* more audio samples to be played (or for capture devices, call
|
||||||
|
* SDL_DequeueAudio() with some frequency, to obtain audio samples).
|
||||||
* - \c desired->userdata is passed as the first parameter to your callback
|
* - \c desired->userdata is passed as the first parameter to your callback
|
||||||
* function. If you passed a NULL callback, this value is ignored.
|
* function. If you passed a NULL callback, this value is ignored.
|
||||||
*
|
*
|
||||||
|
@ -433,10 +460,10 @@ extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf);
|
||||||
* This function takes a source format and rate and a destination format
|
* This function takes a source format and rate and a destination format
|
||||||
* and rate, and initializes the \c cvt structure with information needed
|
* and rate, and initializes the \c cvt structure with information needed
|
||||||
* by SDL_ConvertAudio() to convert a buffer of audio data from one format
|
* by SDL_ConvertAudio() to convert a buffer of audio data from one format
|
||||||
* to the other.
|
* to the other. An unsupported format causes an error and -1 will be returned.
|
||||||
*
|
*
|
||||||
* \return -1 if the format conversion is not supported, 0 if there's
|
* \return 0 if no conversion is needed, 1 if the audio filter is set up,
|
||||||
* no conversion needed, or 1 if the audio filter is set up.
|
* or -1 on error.
|
||||||
*/
|
*/
|
||||||
extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
|
extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
|
||||||
SDL_AudioFormat src_format,
|
SDL_AudioFormat src_format,
|
||||||
|
@ -455,9 +482,137 @@ extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
|
||||||
* The data conversion may expand the size of the audio data, so the buffer
|
* The data conversion may expand the size of the audio data, so the buffer
|
||||||
* \c cvt->buf should be allocated after the \c cvt structure is initialized by
|
* \c cvt->buf should be allocated after the \c cvt structure is initialized by
|
||||||
* SDL_BuildAudioCVT(), and should be \c cvt->len*cvt->len_mult bytes long.
|
* SDL_BuildAudioCVT(), and should be \c cvt->len*cvt->len_mult bytes long.
|
||||||
|
*
|
||||||
|
* \return 0 on success or -1 if \c cvt->buf is NULL.
|
||||||
*/
|
*/
|
||||||
extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt);
|
extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt);
|
||||||
|
|
||||||
|
/* SDL_AudioStream is a new audio conversion interface.
|
||||||
|
The benefits vs SDL_AudioCVT:
|
||||||
|
- it can handle resampling data in chunks without generating
|
||||||
|
artifacts, when it doesn't have the complete buffer available.
|
||||||
|
- it can handle incoming data in any variable size.
|
||||||
|
- You push data as you have it, and pull it when you need it
|
||||||
|
*/
|
||||||
|
/* this is opaque to the outside world. */
|
||||||
|
struct _SDL_AudioStream;
|
||||||
|
typedef struct _SDL_AudioStream SDL_AudioStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new audio stream
|
||||||
|
*
|
||||||
|
* \param src_format The format of the source audio
|
||||||
|
* \param src_channels The number of channels of the source audio
|
||||||
|
* \param src_rate The sampling rate of the source audio
|
||||||
|
* \param dst_format The format of the desired audio output
|
||||||
|
* \param dst_channels The number of channels of the desired audio output
|
||||||
|
* \param dst_rate The sampling rate of the desired audio output
|
||||||
|
* \return 0 on success, or -1 on error.
|
||||||
|
*
|
||||||
|
* \sa SDL_AudioStreamPut
|
||||||
|
* \sa SDL_AudioStreamGet
|
||||||
|
* \sa SDL_AudioStreamAvailable
|
||||||
|
* \sa SDL_AudioStreamFlush
|
||||||
|
* \sa SDL_AudioStreamClear
|
||||||
|
* \sa SDL_FreeAudioStream
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioFormat src_format,
|
||||||
|
const Uint8 src_channels,
|
||||||
|
const int src_rate,
|
||||||
|
const SDL_AudioFormat dst_format,
|
||||||
|
const Uint8 dst_channels,
|
||||||
|
const int dst_rate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add data to be converted/resampled to the stream
|
||||||
|
*
|
||||||
|
* \param stream The stream the audio data is being added to
|
||||||
|
* \param buf A pointer to the audio data to add
|
||||||
|
* \param len The number of bytes to write to the stream
|
||||||
|
* \return 0 on success, or -1 on error.
|
||||||
|
*
|
||||||
|
* \sa SDL_NewAudioStream
|
||||||
|
* \sa SDL_AudioStreamGet
|
||||||
|
* \sa SDL_AudioStreamAvailable
|
||||||
|
* \sa SDL_AudioStreamFlush
|
||||||
|
* \sa SDL_AudioStreamClear
|
||||||
|
* \sa SDL_FreeAudioStream
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get converted/resampled data from the stream
|
||||||
|
*
|
||||||
|
* \param stream The stream the audio is being requested from
|
||||||
|
* \param buf A buffer to fill with audio data
|
||||||
|
* \param len The maximum number of bytes to fill
|
||||||
|
* \return The number of bytes read from the stream, or -1 on error
|
||||||
|
*
|
||||||
|
* \sa SDL_NewAudioStream
|
||||||
|
* \sa SDL_AudioStreamPut
|
||||||
|
* \sa SDL_AudioStreamAvailable
|
||||||
|
* \sa SDL_AudioStreamFlush
|
||||||
|
* \sa SDL_AudioStreamClear
|
||||||
|
* \sa SDL_FreeAudioStream
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of converted/resampled bytes available. The stream may be
|
||||||
|
* buffering data behind the scenes until it has enough to resample
|
||||||
|
* correctly, so this number might be lower than what you expect, or even
|
||||||
|
* be zero. Add more data or flush the stream if you need the data now.
|
||||||
|
*
|
||||||
|
* \sa SDL_NewAudioStream
|
||||||
|
* \sa SDL_AudioStreamPut
|
||||||
|
* \sa SDL_AudioStreamGet
|
||||||
|
* \sa SDL_AudioStreamFlush
|
||||||
|
* \sa SDL_AudioStreamClear
|
||||||
|
* \sa SDL_FreeAudioStream
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_AudioStreamAvailable(SDL_AudioStream *stream);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell the stream that you're done sending data, and anything being buffered
|
||||||
|
* should be converted/resampled and made available immediately.
|
||||||
|
*
|
||||||
|
* It is legal to add more data to a stream after flushing, but there will
|
||||||
|
* be audio gaps in the output. Generally this is intended to signal the
|
||||||
|
* end of input, so the complete output becomes available.
|
||||||
|
*
|
||||||
|
* \sa SDL_NewAudioStream
|
||||||
|
* \sa SDL_AudioStreamPut
|
||||||
|
* \sa SDL_AudioStreamGet
|
||||||
|
* \sa SDL_AudioStreamAvailable
|
||||||
|
* \sa SDL_AudioStreamClear
|
||||||
|
* \sa SDL_FreeAudioStream
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL SDL_AudioStreamFlush(SDL_AudioStream *stream);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear any pending data in the stream without converting it
|
||||||
|
*
|
||||||
|
* \sa SDL_NewAudioStream
|
||||||
|
* \sa SDL_AudioStreamPut
|
||||||
|
* \sa SDL_AudioStreamGet
|
||||||
|
* \sa SDL_AudioStreamAvailable
|
||||||
|
* \sa SDL_AudioStreamFlush
|
||||||
|
* \sa SDL_FreeAudioStream
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free an audio stream
|
||||||
|
*
|
||||||
|
* \sa SDL_NewAudioStream
|
||||||
|
* \sa SDL_AudioStreamPut
|
||||||
|
* \sa SDL_AudioStreamGet
|
||||||
|
* \sa SDL_AudioStreamAvailable
|
||||||
|
* \sa SDL_AudioStreamFlush
|
||||||
|
* \sa SDL_AudioStreamClear
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream);
|
||||||
|
|
||||||
#define SDL_MIX_MAXVOLUME 128
|
#define SDL_MIX_MAXVOLUME 128
|
||||||
/**
|
/**
|
||||||
* This takes two audio buffers of the playing audio format and mixes
|
* This takes two audio buffers of the playing audio format and mixes
|
||||||
|
@ -482,6 +637,10 @@ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst,
|
||||||
/**
|
/**
|
||||||
* Queue more audio on non-callback devices.
|
* Queue more audio on non-callback devices.
|
||||||
*
|
*
|
||||||
|
* (If you are looking to retrieve queued audio from a non-callback capture
|
||||||
|
* device, you want SDL_DequeueAudio() instead. This will return -1 to
|
||||||
|
* signify an error if you use it with capture devices.)
|
||||||
|
*
|
||||||
* SDL offers two ways to feed audio to the device: you can either supply a
|
* SDL offers two ways to feed audio to the device: you can either supply a
|
||||||
* callback that SDL triggers with some frequency to obtain more audio
|
* callback that SDL triggers with some frequency to obtain more audio
|
||||||
* (pull method), or you can supply no callback, and then SDL will expect
|
* (pull method), or you can supply no callback, and then SDL will expect
|
||||||
|
@ -509,28 +668,83 @@ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst,
|
||||||
* \param dev The device ID to which we will queue audio.
|
* \param dev The device ID to which we will queue audio.
|
||||||
* \param data The data to queue to the device for later playback.
|
* \param data The data to queue to the device for later playback.
|
||||||
* \param len The number of bytes (not samples!) to which (data) points.
|
* \param len The number of bytes (not samples!) to which (data) points.
|
||||||
* \return zero on success, -1 on error.
|
* \return 0 on success, or -1 on error.
|
||||||
*
|
*
|
||||||
* \sa SDL_GetQueuedAudioSize
|
* \sa SDL_GetQueuedAudioSize
|
||||||
* \sa SDL_ClearQueuedAudio
|
* \sa SDL_ClearQueuedAudio
|
||||||
*/
|
*/
|
||||||
extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len);
|
extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dequeue more audio on non-callback devices.
|
||||||
|
*
|
||||||
|
* (If you are looking to queue audio for output on a non-callback playback
|
||||||
|
* device, you want SDL_QueueAudio() instead. This will always return 0
|
||||||
|
* if you use it with playback devices.)
|
||||||
|
*
|
||||||
|
* SDL offers two ways to retrieve audio from a capture device: you can
|
||||||
|
* either supply a callback that SDL triggers with some frequency as the
|
||||||
|
* device records more audio data, (push method), or you can supply no
|
||||||
|
* callback, and then SDL will expect you to retrieve data at regular
|
||||||
|
* intervals (pull method) with this function.
|
||||||
|
*
|
||||||
|
* There are no limits on the amount of data you can queue, short of
|
||||||
|
* exhaustion of address space. Data from the device will keep queuing as
|
||||||
|
* necessary without further intervention from you. This means you will
|
||||||
|
* eventually run out of memory if you aren't routinely dequeueing data.
|
||||||
|
*
|
||||||
|
* Capture devices will not queue data when paused; if you are expecting
|
||||||
|
* to not need captured audio for some length of time, use
|
||||||
|
* SDL_PauseAudioDevice() to stop the capture device from queueing more
|
||||||
|
* data. This can be useful during, say, level loading times. When
|
||||||
|
* unpaused, capture devices will start queueing data from that point,
|
||||||
|
* having flushed any capturable data available while paused.
|
||||||
|
*
|
||||||
|
* This function is thread-safe, but dequeueing from the same device from
|
||||||
|
* two threads at once does not promise which thread will dequeued data
|
||||||
|
* first.
|
||||||
|
*
|
||||||
|
* You may not dequeue audio from a device that is using an
|
||||||
|
* application-supplied callback; doing so returns an error. You have to use
|
||||||
|
* the audio callback, or dequeue audio with this function, but not both.
|
||||||
|
*
|
||||||
|
* You should not call SDL_LockAudio() on the device before queueing; SDL
|
||||||
|
* handles locking internally for this function.
|
||||||
|
*
|
||||||
|
* \param dev The device ID from which we will dequeue audio.
|
||||||
|
* \param data A pointer into where audio data should be copied.
|
||||||
|
* \param len The number of bytes (not samples!) to which (data) points.
|
||||||
|
* \return number of bytes dequeued, which could be less than requested.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetQueuedAudioSize
|
||||||
|
* \sa SDL_ClearQueuedAudio
|
||||||
|
*/
|
||||||
|
extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the number of bytes of still-queued audio.
|
* Get the number of bytes of still-queued audio.
|
||||||
*
|
*
|
||||||
* This is the number of bytes that have been queued for playback with
|
* For playback device:
|
||||||
* SDL_QueueAudio(), but have not yet been sent to the hardware.
|
|
||||||
*
|
*
|
||||||
* Once we've sent it to the hardware, this function can not decide the exact
|
* This is the number of bytes that have been queued for playback with
|
||||||
* byte boundary of what has been played. It's possible that we just gave the
|
* SDL_QueueAudio(), but have not yet been sent to the hardware. This
|
||||||
* hardware several kilobytes right before you called this function, but it
|
* number may shrink at any time, so this only informs of pending data.
|
||||||
* hasn't played any of it yet, or maybe half of it, etc.
|
*
|
||||||
|
* Once we've sent it to the hardware, this function can not decide the
|
||||||
|
* exact byte boundary of what has been played. It's possible that we just
|
||||||
|
* gave the hardware several kilobytes right before you called this
|
||||||
|
* function, but it hasn't played any of it yet, or maybe half of it, etc.
|
||||||
|
*
|
||||||
|
* For capture devices:
|
||||||
|
*
|
||||||
|
* This is the number of bytes that have been captured by the device and
|
||||||
|
* are waiting for you to dequeue. This number may grow at any time, so
|
||||||
|
* this only informs of the lower-bound of available data.
|
||||||
*
|
*
|
||||||
* You may not queue audio on a device that is using an application-supplied
|
* You may not queue audio on a device that is using an application-supplied
|
||||||
* callback; calling this function on such a device always returns 0.
|
* callback; calling this function on such a device always returns 0.
|
||||||
* You have to use the audio callback or queue audio with SDL_QueueAudio(),
|
* You have to queue audio with SDL_QueueAudio()/SDL_DequeueAudio(), or use
|
||||||
* but not both.
|
* the audio callback, but not both.
|
||||||
*
|
*
|
||||||
* You should not call SDL_LockAudio() on the device before querying; SDL
|
* You should not call SDL_LockAudio() on the device before querying; SDL
|
||||||
* handles locking internally for this function.
|
* handles locking internally for this function.
|
||||||
|
@ -544,10 +758,17 @@ extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *da
|
||||||
extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev);
|
extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Drop any queued audio data waiting to be sent to the hardware.
|
* Drop any queued audio data. For playback devices, this is any queued data
|
||||||
|
* still waiting to be submitted to the hardware. For capture devices, this
|
||||||
|
* is any data that was queued by the device that hasn't yet been dequeued by
|
||||||
|
* the application.
|
||||||
*
|
*
|
||||||
* Immediately after this call, SDL_GetQueuedAudioSize() will return 0 and
|
* Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For
|
||||||
* the hardware will start playing silence if more audio isn't queued.
|
* playback devices, the hardware will start playing silence if more audio
|
||||||
|
* isn't queued. Unpaused capture devices will start filling the queue again
|
||||||
|
* as soon as they have more data available (which, depending on the state
|
||||||
|
* of the hardware and the thread, could be before this function call
|
||||||
|
* returns!).
|
||||||
*
|
*
|
||||||
* This will not prevent playback of queued audio that's already been sent
|
* This will not prevent playback of queued audio that's already been sent
|
||||||
* to the hardware, as we can not undo that, so expect there to be some
|
* to the hardware, as we can not undo that, so expect there to be some
|
||||||
|
@ -557,8 +778,8 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev);
|
||||||
*
|
*
|
||||||
* You may not queue audio on a device that is using an application-supplied
|
* You may not queue audio on a device that is using an application-supplied
|
||||||
* callback; calling this function on such a device is always a no-op.
|
* callback; calling this function on such a device is always a no-op.
|
||||||
* You have to use the audio callback or queue audio with SDL_QueueAudio(),
|
* You have to queue audio with SDL_QueueAudio()/SDL_DequeueAudio(), or use
|
||||||
* but not both.
|
* the audio callback, but not both.
|
||||||
*
|
*
|
||||||
* You should not call SDL_LockAudio() on the device before clearing the
|
* You should not call SDL_LockAudio() on the device before clearing the
|
||||||
* queue; SDL handles locking internally for this function.
|
* queue; SDL handles locking internally for this function.
|
||||||
|
@ -600,6 +821,6 @@ extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev);
|
||||||
#endif
|
#endif
|
||||||
#include "close_code.h"
|
#include "close_code.h"
|
||||||
|
|
||||||
#endif /* _SDL_audio_h */
|
#endif /* SDL_audio_h_ */
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue