Merge branch 'nyov/wikiexporter' into 'master'
authorMario <mario.mario@y7mail.com>
Mon, 30 Sep 2019 04:41:33 +0000 (04:41 +0000)
committerMario <mario.mario@y7mail.com>
Mon, 30 Sep 2019 04:41:33 +0000 (04:41 +0000)
redmine wiki crawler

See merge request xonotic/xonotic!3

302 files changed:
.gitignore
.vscode/settings.json [new file with mode: 0644]
CMakeLists.txt [new file with mode: 0644]
COPYING
Docs/compile-settings.txt [deleted file]
Docs/eventlog.txt
Docs/faq.html [deleted file]
Docs/faq.md [new file with mode: 0644]
Docs/guide.md [new file with mode: 0644]
Docs/htmlfiles/basics.aft
Docs/htmlfiles/faq.aft [deleted file]
Docs/mapdownload.txt
Docs/mapping.txt
Docs/scorelog.txt
Makefile
README.md [new file with mode: 0644]
all
data/font-dejavu.pk3dir/font-dejavu.cfg
data/font-nimbussansl.pk3dir/font-nimbussansl.cfg
data/font-nimbussansl.pk3dir/fonts/unifont-5.1.20080907.ttf [deleted file]
data/font-unifont.pk3dir/fonts/README [new file with mode: 0644]
data/font-unifont.pk3dir/fonts/unifont.ttf [new file with mode: 0644]
data/font-xolonium.pk3dir/font-xolonium.cfg
data/font-xolonium.pk3dir/fonts/README [changed mode: 0644->0755]
data/font-xolonium.pk3dir/fonts/unifont-5.1.20080907.ttf [deleted file]
data/font-xolonium.pk3dir/fonts/xolonium-bold.otf
data/font-xolonium.pk3dir/fonts/xolonium-regular.otf
default.nix [new file with mode: 0644]
derivation.nix [new file with mode: 0644]
misc/builddeps/win32/sdl/bin/sdl2-config
misc/builddeps/win32/sdl/include/SDL2/SDL.h
misc/builddeps/win32/sdl/include/SDL2/SDL_assert.h
misc/builddeps/win32/sdl/include/SDL2/SDL_atomic.h
misc/builddeps/win32/sdl/include/SDL2/SDL_audio.h
misc/builddeps/win32/sdl/include/SDL2/SDL_bits.h
misc/builddeps/win32/sdl/include/SDL2/SDL_blendmode.h
misc/builddeps/win32/sdl/include/SDL2/SDL_clipboard.h
misc/builddeps/win32/sdl/include/SDL2/SDL_config.h
misc/builddeps/win32/sdl/include/SDL2/SDL_cpuinfo.h
misc/builddeps/win32/sdl/include/SDL2/SDL_egl.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/SDL_endian.h
misc/builddeps/win32/sdl/include/SDL2/SDL_error.h
misc/builddeps/win32/sdl/include/SDL2/SDL_events.h
misc/builddeps/win32/sdl/include/SDL2/SDL_filesystem.h
misc/builddeps/win32/sdl/include/SDL2/SDL_gamecontroller.h
misc/builddeps/win32/sdl/include/SDL2/SDL_gesture.h
misc/builddeps/win32/sdl/include/SDL2/SDL_haptic.h
misc/builddeps/win32/sdl/include/SDL2/SDL_hints.h
misc/builddeps/win32/sdl/include/SDL2/SDL_joystick.h
misc/builddeps/win32/sdl/include/SDL2/SDL_keyboard.h
misc/builddeps/win32/sdl/include/SDL2/SDL_keycode.h
misc/builddeps/win32/sdl/include/SDL2/SDL_loadso.h
misc/builddeps/win32/sdl/include/SDL2/SDL_log.h
misc/builddeps/win32/sdl/include/SDL2/SDL_main.h
misc/builddeps/win32/sdl/include/SDL2/SDL_messagebox.h
misc/builddeps/win32/sdl/include/SDL2/SDL_mouse.h
misc/builddeps/win32/sdl/include/SDL2/SDL_mutex.h
misc/builddeps/win32/sdl/include/SDL2/SDL_name.h
misc/builddeps/win32/sdl/include/SDL2/SDL_opengl.h
misc/builddeps/win32/sdl/include/SDL2/SDL_opengl_glext.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/SDL_opengles.h
misc/builddeps/win32/sdl/include/SDL2/SDL_opengles2.h
misc/builddeps/win32/sdl/include/SDL2/SDL_opengles2_gl2.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/SDL_opengles2_gl2ext.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/SDL_opengles2_gl2platform.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/SDL_opengles2_khrplatform.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/SDL_pixels.h
misc/builddeps/win32/sdl/include/SDL2/SDL_platform.h
misc/builddeps/win32/sdl/include/SDL2/SDL_power.h
misc/builddeps/win32/sdl/include/SDL2/SDL_quit.h
misc/builddeps/win32/sdl/include/SDL2/SDL_rect.h
misc/builddeps/win32/sdl/include/SDL2/SDL_render.h
misc/builddeps/win32/sdl/include/SDL2/SDL_revision.h
misc/builddeps/win32/sdl/include/SDL2/SDL_rwops.h
misc/builddeps/win32/sdl/include/SDL2/SDL_scancode.h
misc/builddeps/win32/sdl/include/SDL2/SDL_sensor.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/SDL_shape.h
misc/builddeps/win32/sdl/include/SDL2/SDL_stdinc.h
misc/builddeps/win32/sdl/include/SDL2/SDL_surface.h
misc/builddeps/win32/sdl/include/SDL2/SDL_system.h
misc/builddeps/win32/sdl/include/SDL2/SDL_syswm.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_assert.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_common.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_compare.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_crc32.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_font.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_fuzzer.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_harness.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_images.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_log.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_md5.h
misc/builddeps/win32/sdl/include/SDL2/SDL_test_memory.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/SDL_test_random.h
misc/builddeps/win32/sdl/include/SDL2/SDL_thread.h
misc/builddeps/win32/sdl/include/SDL2/SDL_timer.h
misc/builddeps/win32/sdl/include/SDL2/SDL_touch.h
misc/builddeps/win32/sdl/include/SDL2/SDL_types.h
misc/builddeps/win32/sdl/include/SDL2/SDL_version.h
misc/builddeps/win32/sdl/include/SDL2/SDL_video.h
misc/builddeps/win32/sdl/include/SDL2/SDL_vulkan.h [new file with mode: 0644]
misc/builddeps/win32/sdl/include/SDL2/begin_code.h
misc/builddeps/win32/sdl/include/SDL2/close_code.h
misc/builddeps/win32/sdl/lib/cmake/SDL2/sdl2-config.cmake [new file with mode: 0644]
misc/builddeps/win32/sdl/lib/libSDL2.a
misc/builddeps/win32/sdl/lib/libSDL2.la
misc/builddeps/win32/sdl/lib/libSDL2_test.a
misc/builddeps/win32/sdl/lib/libSDL2main.a
misc/builddeps/win32/sdl/lib/pkgconfig/sdl2.pc
misc/builddeps/win32/sdl/share/aclocal/sdl2.m4
misc/builddeps/win64/sdl/bin/sdl2-config
misc/builddeps/win64/sdl/include/SDL2/SDL.h
misc/builddeps/win64/sdl/include/SDL2/SDL_assert.h
misc/builddeps/win64/sdl/include/SDL2/SDL_atomic.h
misc/builddeps/win64/sdl/include/SDL2/SDL_audio.h
misc/builddeps/win64/sdl/include/SDL2/SDL_bits.h
misc/builddeps/win64/sdl/include/SDL2/SDL_blendmode.h
misc/builddeps/win64/sdl/include/SDL2/SDL_clipboard.h
misc/builddeps/win64/sdl/include/SDL2/SDL_config.h
misc/builddeps/win64/sdl/include/SDL2/SDL_cpuinfo.h
misc/builddeps/win64/sdl/include/SDL2/SDL_egl.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/SDL_endian.h
misc/builddeps/win64/sdl/include/SDL2/SDL_error.h
misc/builddeps/win64/sdl/include/SDL2/SDL_events.h
misc/builddeps/win64/sdl/include/SDL2/SDL_filesystem.h
misc/builddeps/win64/sdl/include/SDL2/SDL_gamecontroller.h
misc/builddeps/win64/sdl/include/SDL2/SDL_gesture.h
misc/builddeps/win64/sdl/include/SDL2/SDL_haptic.h
misc/builddeps/win64/sdl/include/SDL2/SDL_hints.h
misc/builddeps/win64/sdl/include/SDL2/SDL_joystick.h
misc/builddeps/win64/sdl/include/SDL2/SDL_keyboard.h
misc/builddeps/win64/sdl/include/SDL2/SDL_keycode.h
misc/builddeps/win64/sdl/include/SDL2/SDL_loadso.h
misc/builddeps/win64/sdl/include/SDL2/SDL_log.h
misc/builddeps/win64/sdl/include/SDL2/SDL_main.h
misc/builddeps/win64/sdl/include/SDL2/SDL_messagebox.h
misc/builddeps/win64/sdl/include/SDL2/SDL_mouse.h
misc/builddeps/win64/sdl/include/SDL2/SDL_mutex.h
misc/builddeps/win64/sdl/include/SDL2/SDL_name.h
misc/builddeps/win64/sdl/include/SDL2/SDL_opengl.h
misc/builddeps/win64/sdl/include/SDL2/SDL_opengl_glext.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/SDL_opengles.h
misc/builddeps/win64/sdl/include/SDL2/SDL_opengles2.h
misc/builddeps/win64/sdl/include/SDL2/SDL_opengles2_gl2.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/SDL_opengles2_gl2ext.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/SDL_opengles2_gl2platform.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/SDL_opengles2_khrplatform.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/SDL_pixels.h
misc/builddeps/win64/sdl/include/SDL2/SDL_platform.h
misc/builddeps/win64/sdl/include/SDL2/SDL_power.h
misc/builddeps/win64/sdl/include/SDL2/SDL_quit.h
misc/builddeps/win64/sdl/include/SDL2/SDL_rect.h
misc/builddeps/win64/sdl/include/SDL2/SDL_render.h
misc/builddeps/win64/sdl/include/SDL2/SDL_revision.h
misc/builddeps/win64/sdl/include/SDL2/SDL_rwops.h
misc/builddeps/win64/sdl/include/SDL2/SDL_scancode.h
misc/builddeps/win64/sdl/include/SDL2/SDL_sensor.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/SDL_shape.h
misc/builddeps/win64/sdl/include/SDL2/SDL_stdinc.h
misc/builddeps/win64/sdl/include/SDL2/SDL_surface.h
misc/builddeps/win64/sdl/include/SDL2/SDL_system.h
misc/builddeps/win64/sdl/include/SDL2/SDL_syswm.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_assert.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_common.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_compare.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_crc32.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_font.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_fuzzer.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_harness.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_images.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_log.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_md5.h
misc/builddeps/win64/sdl/include/SDL2/SDL_test_memory.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/SDL_test_random.h
misc/builddeps/win64/sdl/include/SDL2/SDL_thread.h
misc/builddeps/win64/sdl/include/SDL2/SDL_timer.h
misc/builddeps/win64/sdl/include/SDL2/SDL_touch.h
misc/builddeps/win64/sdl/include/SDL2/SDL_types.h
misc/builddeps/win64/sdl/include/SDL2/SDL_version.h
misc/builddeps/win64/sdl/include/SDL2/SDL_video.h
misc/builddeps/win64/sdl/include/SDL2/SDL_vulkan.h [new file with mode: 0644]
misc/builddeps/win64/sdl/include/SDL2/begin_code.h
misc/builddeps/win64/sdl/include/SDL2/close_code.h
misc/builddeps/win64/sdl/lib/cmake/SDL2/sdl2-config.cmake [new file with mode: 0644]
misc/builddeps/win64/sdl/lib/libSDL2.a
misc/builddeps/win64/sdl/lib/libSDL2.la
misc/builddeps/win64/sdl/lib/libSDL2_test.a
misc/builddeps/win64/sdl/lib/libSDL2main.a
misc/builddeps/win64/sdl/lib/pkgconfig/sdl2.pc
misc/builddeps/win64/sdl/share/aclocal/sdl2.m4
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_assert.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_atomic.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_audio.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_bits.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_blendmode.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_clipboard.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_config.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_config_macosx.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_copying.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_endian.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_error.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_events.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_filesystem.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_gesture.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_haptic.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_hints.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_joystick.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keyboard.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_keycode.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_loadso.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_log.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_main.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_messagebox.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mouse.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_mutex.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_name.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengl.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengl_glext.h [new file with mode: 0644]
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2.h [new file with mode: 0644]
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2ext.h [new file with mode: 0644]
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2platform.h [new file with mode: 0644]
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_opengles2_khrplatform.h [new file with mode: 0644]
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_pixels.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_platform.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_power.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_quit.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rect.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_render.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_revision.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_rwops.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_scancode.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_sensor.h [new file with mode: 0644]
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_shape.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_stdinc.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_surface.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_system.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_syswm.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_thread.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_timer.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_touch.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_types.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_version.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_video.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/SDL_vulkan.h [new file with mode: 0644]
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/begin_code.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Headers/close_code.h
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/Resources/Info.plist
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/SDL2
misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL2.framework/Versions/A/_CodeSignature/CodeResources [deleted file]
misc/buildsrc/sdl.sh [new file with mode: 0755]
misc/infrastructure/checkupdate.txt
misc/infrastructure/transifex.cron [new file with mode: 0755]
misc/infrastructure/xonotic-map-screenshot.cron
misc/logos/xonotic-glx.desktop
misc/logos/xonotic-sdl.desktop [deleted file]
misc/logos/xonotic.appdata.xml [new file with mode: 0644]
misc/logos/xonotic.desktop [new file with mode: 0644]
misc/tools/NexuizDemoRecorder/main/pom.xml
misc/tools/NexuizDemoRecorder/main/src/main/java/com/nexuiz/demorecorder/application/democutter/DemoCutter.java
misc/tools/NexuizDemoRecorder/main/src/main/java/com/nexuiz/demorecorder/ui/swinggui/SwingGUI.java
misc/tools/all/config.subr
misc/tools/all/git.subr
misc/tools/all/release.subr
misc/tools/all/xonotic.subr
misc/tools/all/zsh_autocompletion/all/_all [new file with mode: 0644]
misc/tools/cached-converter.sh
misc/tools/change-icon-of-exe.sh [deleted file]
misc/tools/demopacker.sh
misc/tools/demotc-race-record-extractor.sh
misc/tools/encode-demos.sh [new file with mode: 0755]
misc/tools/midi2cfg/tuba-play.cfg
misc/tools/midi2cfg/tuba-record.cfg
misc/tools/midichannels.pl
misc/tools/progs-analyzer.pl
misc/tools/rebrand-darkplaces-engine.sh
misc/tools/rsync-updater/update-to-autobuild.bat
misc/tools/rsync-updater/update-to-autobuild.sh
misc/tools/rsync-updater/update-to-release.bat
misc/tools/rsync-updater/update-to-release.sh
misc/tools/testbuild.sh [deleted file]
misc/tools/the-big-benchmark/the-big-benchmark.bat
misc/tools/the-big-benchmark/the-big-benchmark.sh
misc/tools/xonotic-map-compiler
misc/tools/xonotic-map-compiler-autobuild
misc/tools/xonotic-map-screenshot
misc/tools/xzipdiff
nix-build.sh [new file with mode: 0755]
release.cmake [new file with mode: 0644]
release.nix [new file with mode: 0644]
server/help.cfg [deleted file]
server/readme.txt
server/server.cfg
server/server_linux.sh
xonotic-linux-dedicated.sh
xonotic-linux-glx.sh [changed from file to symlink]
xonotic-linux-sdl.sh [changed from symlink to file mode: 0755]

index 71bda24bc4b04a5a959a31125ec532f4330bd234..ab43afbbdc6d7046ab40283c8bf70dd584cfea1e 100644 (file)
@@ -1,5 +1,6 @@
+/build/
+/daemon
 /darkplaces
-/fteqcc
 /gmqcc
 /div0-gittools
 /netradiant
@@ -11,3 +12,7 @@
 /data.old/
 /xonstat/
 /xonstatdb/
+/wiki
+
+.idea/
+/result*
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644 (file)
index 0000000..31499bf
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "files.associations": {
+        "*.subr": "shellscript"
+    }
+}
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..2308059
--- /dev/null
@@ -0,0 +1,32 @@
+cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
+project(xonotic)
+
+option(DOWNLOAD_MAPS "Download new maps from the build server" ON)
+option(BUILD_RELEASE "Package a release" OFF)
+
+function(subproject id name)
+    if ($ENV{XON_NO_${id}})
+        return()
+    endif ()
+    if (EXISTS "${PROJECT_SOURCE_DIR}/${name}/CMakeLists.txt")
+        add_subdirectory(${name} ${ARGN})
+    endif ()
+endfunction()
+
+subproject(PKI d0_blind_id)
+subproject(DAEMON daemon)
+subproject(DP darkplaces)
+subproject(QCC gmqcc)
+subproject(RADIANT netradiant)
+subproject(DATA data/xonotic-data.pk3dir)
+
+if (DOWNLOAD_MAPS)
+    add_custom_target(update-maps ALL
+            COMMAND ${PROJECT_SOURCE_DIR}/misc/tools/xonotic-map-compiler-autobuild download
+            WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+            )
+endif ()
+
+if (BUILD_RELEASE)
+    include(release.cmake)
+endif ()
diff --git a/COPYING b/COPYING
index d4b8d0dc81b2b5152393bb15fc44c807b7081b76..9e734d94517370a6168147c8b4226629776f3aa1 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -30,11 +30,12 @@ Licensing Grant
 ---------------
 
 All source files (as defined by the respective license) in scope of this
-document are under the GPL version 2 or any later version, at your choice.
+document are under the GPL version 3 or any later version, at your choice.
 
-Linux and Windows binaries however link to a library that is under the LGPL
-version 3 with the "or any later version" clause. Thus, they can only be
-distributed under the GPL version 3 or any later version, at your choice.
+The source code of the game engine, DarkPlaces, is licensed under the GPL
+version 2 or any later version, at your choice. Furthermore, some source code
+inside the qcsrc/ directory may also be usable under other licenses as
+indicated by COPYING files therein.
 
 The two relevant licenses are provided in the files GPL-2 and GPL-3 in this
 package.
@@ -52,12 +53,11 @@ Contributions
 -------------
 
 By committing data/files, you agree to license all the changes/additions
-contained in your commits to Team Xonotic under the terms of the General Public
-License version 2, with the "any later version" clause active. In particular,
-you guarantee that you have acquired all the necessary rights from possible
-other copyright holders to be able to license your work under this license. Any
-submission which does not fulfill this condition may lead to legal action
-against the submitter.
+contained in your commits to Team Xonotic under the terms of the applicable
+license as described above. In particular, you guarantee that you have
+acquired all the necessary rights from possible other copyright holders to be
+able to license your work under this license. Any submission which does not
+fulfill this condition may lead to legal action against the submitter.
 
 Exceptions however may be made on request, but in any case, Team Xonotic must
 be allowed to distribute the changes as part of the git repository, and others
diff --git a/Docs/compile-settings.txt b/Docs/compile-settings.txt
deleted file mode 100644 (file)
index b7fe456..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-This file contains the q3map2 compile settings used to compile the maps that are part of Xonotic.\r
-There are also compile-scripts for some maps (mapname.sh). \r
-They can be found in your Xonotic/data/maps folder\r
-\r
-------------\r
-Standard\r
-------------\r
-\r
-"...q3map2.exe" -meta "...xonoticmap.map"\r
-"...q3map2.exe" -vis "...xonoticmap.bsp"\r
-"...q3map2.exe" -light -bounce 3 -deluxe -fast -filter -patchshadows -samples 2 "...xonoticmap.bsp"\r
-\r
-------------\r
-Only update the entities.\r
-------------\r
-\r
-"...q3map2.exe" -onlyents "...xonoticmap.map"\r
-\r
-------------\r
-bloodprison.map\r
-------------\r
-\r
-"...q3map2.exe" -meta -samplesize 8 -mv 1000000 -mi 6000000 "...bloodprisonctf.map"\r
-"...q3map2.exe" -scale 1.2 "...bloodprisonctf.bsp"\r
-"...q3map2.exe" -vis "...bloodprisonctf.bsp"\r
-"...q3map2.exe" -light -deluxe -fast -filter -deluxe -patchshadows -samples 3 "...bloodprisonctf.bsp"\r
-\r
-------------\r
-final_rage.map\r
-------------\r
-\r
-"...q3map2.exe" -meta -v -samplesize 8 -skyfix -np 50 "...final_rage.map"\r
-"...q3map2.exe" -vis -v "...final_rage.map"\r
-"...q3map2.exe" -light -deluxe -compensate 1.4 -fast -gamma 1.5 -patchshadows -areascale 1.5 -pointscale 2 -v -bounce 3 -bouncegrid "...final_rage.map"\r
-\r
-------------\r
-reslimed.map\r
-------------\r
-\r
-"...q3map2.exe" -meta -patchmeta -v "...reslimed.map"\r
-"...q3map2.exe" -vis "...reslimed.bsp"\r
-"...q3map2.exe" -light -bounce 3 -deluxe -fast -filter -patchshadows -samples 2 "...reslimed.bsp"\r
-\r
-------------\r
-strength.map\r
-------------\r
-\r
-"...q3map2.exe" -meta "...strength.map"\r
-"...q3map2.exe" -vis "...strength.bsp"\r
-"...q3map2.exe" -light -bounce 3 -deluxe -fast -filter -patchshadows -samples 2 "...strength.bsp"\r
index 57a2cdd2ccce564ac1404fc6634f3057b8dc8784..6a9ca84fe7d12fc7d2f5f269dde152b5185474dc 100644 (file)
@@ -1,15 +1,15 @@
-cvars:\r
+cvars (see xonotic.org/tools/cacs for more up-to-date information):\r
 ______________\r
 \r
-   sv_eventlog                    master switch (default: 0)\r
-   sv_eventlog_files              print frags, scores and captures for separate files each match (default: 0)\r
-   sv_eventlog_console            print frags, scores and captures to serverconsole during the match (default: 1)\r
-   sv_logscores_bots              choose whether bot are included in stats or not (default: 0)\r
+   sv_eventlog                    master switch\r
+   sv_eventlog_files              print frags, scores and captures for separate files each match\r
+   sv_eventlog_console            print frags, scores and captures to serverconsole during the match\r
+   sv_logscores_bots              choose whether bot are included in stats or not\r
                                 \r
    sv_eventlog_files_counter      number of matches logged until now\r
-   sv_eventlog_files_nameprefix   file name prefix to be used (default: xonotic)\r
-   sv_eventlog_files_namesuffix   file name extension to be used (default: .log)\r
-   sv_eventlog_files_timestamps   prefix log lines in the files with :time events (default: 1)\r
+   sv_eventlog_files_nameprefix   file name prefix to be used \r
+   sv_eventlog_files_namesuffix   file name extension to be used\r
+   sv_eventlog_files_timestamps   prefix log lines in the files with :time events\r
 \r
 log format:\r
 ______________\r
@@ -111,15 +111,15 @@ itemstring:
    and weapon IDs are:\r
          1 = Laser\r
                 2 = Shotgun\r
-                3 = Uzi\r
+                3 = Machine Gun\r
          4 = Mortar\r
          5 = Electro\r
          6 = Crylink\r
-         7 = Nex\r
+         7 = Vortex\r
          8 = Hagar\r
          9 = Rocket Launcher\r
         10 = Port-O-Launch\r
-        11 = MinstaNex\r
+        11 = Vaporizer\r
         12 = Grappling Hook\r
         13 = Heavy Laser Assault Cannon\r
         14 = T.A.G. Seeker\r
diff --git a/Docs/faq.html b/Docs/faq.html
deleted file mode 100644 (file)
index 555b137..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="content-type" content="text/html; charset=utf-8" />
-<title>Xonotic</title>
-<link rel="stylesheet" href="htmlfiles/style.css" type="text/css"></link>
-</head>
-<body>
-<div id="container">
-       <div id="left">
-               <!-- Sidebar -->
-         <div id="sidebar">
-                 </div>
-               <!-- end sidebar -->    </div><!-- end left -->
-       <div id="right">
-               <div id="header">
-               </div>
-               <div id="menu">
-                       <ul>
-
-                       <!--    <li class="first"><a href="../readme.html" title="Xonotic - Latest News">About </a></li>
-                               <li><a href="basics.html" title="Xonotic - Media (Screenshots, videos and graphics)">Xonotic Basics</a></li>
-                               <li><a href="say-esc.html" title="Xonotic Information  (General, System Requirements)">Say Escapes</a></li>
-                               <li><a href="irc.html" title="Xonotic - Downloads (Game, Maps)">IRC</a></li>
-                               <li><a href="faq.html" title="Official Xonotic FAQ">FAQ</a></li>
-                       -->
-                               <li class="first"></li>
-                               <li class="first"></li>
-                 </ul>         </div>
-               <p id="tagline">Xonotic is a <b>free</b> open-source first person shooter that runs on <b>Windows</b>, <b>Linux</b> and <b>OSX</b>.</p>
-         <div id="content">
-<div class="body">
-
-<br><center><h1><a name="AFT-top">Xonotic 0.7 FAQ</a></h1></center>
-<center><a class="link" href="http://xonotic.com">http://xonotic.com</a></center>
-<hr>
-<!--  AFT Table of Contents (auto generated) -->
-<ul>
-<li> <a class="link" href="#Troubleshooting">Troubleshooting</a></li>
-<ul>
-<li> <a class="link" href="#How do I install Xonotic?">How do I install Xonotic?</a></li>
-<li> <a class="link" href="#When I start Xonotic all I see is a black screen or a black screen with some checkered squares">When I start Xonotic all I see is a black screen or a black screen with some checkered squares</a></li>
-<li> <a class="link" href="#Using Linux I only see the map but no players and items">Using Linux I only see the map but no players and items</a></li>
-<li> <a class="link" href="#When I start Xonotic my screen is flickering">When I start Xonotic my screen is flickering</a></li>
-<li> <a class="link" href="#How can I speed up my frame rate?">How can I speed up my frame rate?</a></li>
-<li> <a class="link" href="#The sound is broken, it crackles and stutters">The sound is broken, it crackles and stutters</a></li>
-<li> <a class="link" href="#Mouse is too slow and sensitivity is at top (on Mac / Linux)">Mouse is too slow and sensitivity is at top (on Mac / Linux)</a></li>
-<li> <a class="link" href="#I can't switch to 32 bit color depth (on Windows)">I can't switch to 32 bit color depth (on Windows)</a></li>
-<li> <a class="link" href="#When I join a server or after a map change I see nothing but a black screen, but I can still move and shoot">When I join a server or after a map change I see nothing but a black screen, but I can still move and shoot</a></li>
-<li> <a class="link" href="#How to report crashes">How to report crashes</a></li>
-<li> <a class="link" href="#Where can I get more help?">Where can I get more help?</a></li>
-</ul>
-<li> <a class="link" href="#General questions">General questions</a></li>
-<ul>
-<li> <a class="link" href="#How do I install new maps?">How do I install new maps?</a></li>
-<li> <a class="link" href="#How can I place a shortcut to Xonotic on my Linux desktop?">How can I place a shortcut to Xonotic on my Linux desktop?</a></li>
-<li> <a class="link" href="#How do I open the console?">How do I open the console?</a></li>
-<li> <a class="link" href="#What console commands/variables are there?">What console commands/variables are there?</a></li>
-<li> <a class="link" href="#How can I use colors in my nickname and messages?">How can I use colors in my nickname and messages?</a></li>
-<li> <a class="link" href="#How do I watch/record demos?">How do I watch/record demos?</a></li>
-</ul>
-<li> <a class="link" href="#Server setup">Server setup</a></li>
-<ul>
-<li> <a class="link" href="#How do I start a server?">How do I start a server?</a></li>
-<li> <a class="link" href="#Which ports do I have to open in firewall/forward from my router to run a server?">Which ports do I have to open in firewall/forward from my router to run a server?</a></li>
-<li> <a class="link" href="#Is there some kind of rcon?">Is there some kind of rcon?</a></li>
-<li> <a class="link" href="#How can I kick people who are using special characters in their names?">How can I kick people who are using special characters in their names?</a></li>
-</ul>
-<li> <a class="link" href="#Development">Development</a></li>
-<ul>
-<li> <a class="link" href="#How can I create or edit Xonotic maps?">How can I create or edit Xonotic maps?</a></li>
-<li> <a class="link" href="#Where can I get latest development versions of the source code?">Where can I get latest development versions of the source code?</a>
-
-</li>
-</ul>
-</ul>
-<hr>
-<!-- Start SectLevel1 -->
-<h2><a name="Troubleshooting">Troubleshooting</a></h2>
-<!-- Start SectLevel2 -->
-<h3><a name="How do I install Xonotic?">How do I install Xonotic?</a></h3>
-<p class="Body">
-Just unzip the <tt>xonotic-&lt;version&gt;.zip</tt> file.  You can do this with any archive program (like <a class="link" href="http://7zip.org">7zip</a>).  It's very important to keep the directory structure while unpacking (in WinZip this option is called &quot;Use folder names&quot;).  The directory structure should look like this afterwards:
-<div class="block"><pre>
-Xonotic/
-|-- Docs/
-|-- data/
-|   |-- common-spog.pk3
-|   `-- data*.pk3
-|-- Xonotic.app/
-|-- Xonotic-SDL.app/
-|-- server/
-|   `-- *
-|-- sources/
-|-- *.exe
-|-- *.dll
-`-- xonotic-linux-*
-</pre></div>
-</p>
-<!--End Section 2-->
-<h3><a name="When I start Xonotic all I see is a black screen or a black screen with some checkered squares">When I start Xonotic all I see is a black screen or a black screen with some checkered squares</a></h3>
-<p class="Body">
-This happens when the engine can't load the data*.pk3 file or has trouble to initialize OpenGL.  The reasons could be:
-<ol>
-<li> you unpacked the zip file without folder names (see <a class="link" href="#How do I install Xonotic?">How do I install Xonotic?</a>)</li>
-<li> on Linux: the current directory is not your Xonotic/ folder.  See <a class="link" href="#How can I place a shortcut to Xonotic on my Linux desktop?">How can I place a shortcut to Xonotic on my Linux desktop?</a> on how to fix this</li>
-<li> on Mac: you tried to extract and move the files from a Xonotic update and it deleted the old files.  When using the mac GUI please be sure to move only the files not the folders as that will delete the old files or use the mv console command which will not delete the old files</li>
-<li> the engine could not initialize OpenGL.  Please install the latest drivers for your graphic card.  You will probably find one for your card there: <a class="link" href="http://intel.com">intel</a> <a class="link" href="http://ati.com">ati</a> <a class="link" href="http://nvidia.com">nvidia</a></li>
-<li> your download might be corrupted, please download Xonotic again</li>
-</ol>
-</p>
-<!--End Section 2-->
-<h3><a name="Using Linux I only see the map but no players and items">Using Linux I only see the map but no players and items</a></h3>
-<p class="Body">
-This happens when the engine has trouble to initialize OpenGL.  The reasons could be:
-<ol>
-<li> the engine could not initialize OpenGL.  Please install the latest drivers for your graphic card.  You will probably find one for your card there: <a class="link" href="http://intel.com">intel</a> <a class="link" href="http://ati.com">ati</a> <a class="link" href="http://nvidia.com">nvidia</a></li>
-<li> You do not have permissions needed for 3d acceleration.  Usually you need to add yourself to the group <tt>video</tt>, you can do that via console as root like this: <tt>usermod -a -G video YOURUSERNAME</tt>.  You need to logoff/in afterwards.</li>
-</ol>
-</p>
-<!--End Section 2-->
-<h3><a name="When I start Xonotic my screen is flickering">When I start Xonotic my screen is flickering</a></h3>
-<p class="Body">
-This is known to happen on Windows with Intel graphic chips and is a bug in the graphics drivers.  A workaround is to set <tt>Flip-Policiy</tt> to <tt>blit</tt>.  Open the control panel, there should be an icon called <tt>Intel(R) GMA driver</tt> (or something like that), double click it. Click on <tt>3D Settings</tt> to find the screen with those settings.
-</p>
-<!--End Section 2-->
-<h3><a name="How can I speed up my frame rate?">How can I speed up my frame rate?</a></h3>
-<p class="Body">
-You can choose predefined performance settings in the <tt>Settings / Video</tt> menu.  <tt>Normal</tt> is the default, <tt>Medium</tt> and <tt>Low</tt> run faster while <tt>High</tt>, <tt>Ultra</tt> and <tt>Ultimate</tt> enable more features you might want to test if you have a high end graphic card.  Or you can enable/disable single features.  The greatest performance boost can be achieved by turning off dynamic lights and shadows in the <tt>Settings / Effects</tt> menu.  Bloom is also quite resource intensive.  Other fps boots include disabling <tt>Deluxemapping</tt> and <tt>Coronas</tt>.  On older graphics cards or on-board/notebook chips with little video ram you can try to lower the texture quality in the <tt>Settings / Video</tt> menu.
-Some graphic cards (mostly ATI or quite old cards) run A LOT faster if you disable the <tt>Vertex Buffer Objects</tt> in the <tt>Settings / Video</tt> menu.  An other thing that can greatly help on such cards is to disable the <tt>OpenGL 2.0 Shaders</tt>.  Having that option enabled is faster on most cards however that is why both are active by default.
-</p>
-<!--End Section 2-->
-<h3><a name="The sound is broken, it crackles and stutters">The sound is broken, it crackles and stutters</a></h3>
-<p class="Body">
-Try run <tt>xonotic-sdl.exe</tt> instead of <tt>xonotic.exe</tt> (on Windows).  Adding the command line options <tt>-sndspeed 48000</tt> and/or <tt>-sndstereo</tt> can also help on some systems (on Linux, Mac, Windows).
-</p>
-<!--End Section 2-->
-<h3><a name="Mouse is too slow and sensitivity is at top (on Mac / Linux)">Mouse is too slow and sensitivity is at top (on Mac / Linux)</a></h3>
-<p class="Body">
-Mac: The default mouse acceleration on Mac is very high and strange.  The Xonotic defaults work fine with it but some mouse drivers seem to 'correct' the mouse acceleration and conflict with the Xonotic defaults.  Try to disable the option <tt>Turn off OS mouse acceleration</tt> in the <tt>Settings / Input</tt> menu.  Or the same via console: <tt>apple_mouse_noaccel 0; vid_restart</tt> (<a class="link" href="#How do I open the console?">How do I open the console?</a>)
-Linux: A similar problem can arise on Linux.  Its also <tt>Turn off OS mouse acceleration</tt> in the <tt>Settings / Input</tt> menu but the console command is different: <tt>vid_dga 0; vid_restart</tt> (<a class="link" href="#How do I open the console?">How do I open the console?</a>)
-</p>
-<!--End Section 2-->
-<h3><a name="I can't switch to 32 bit color depth (on Windows)">I can't switch to 32 bit color depth (on Windows)</a></h3>
-<p class="Body">
-Check if your desktop color depth is set to 32 bits per pixel.  If it's just set to 16, Xonotic can't switch to 32 bit mode.
-</p>
-<!--End Section 2-->
-<h3><a name="When I join a server or after a map change I see nothing but a black screen, but I can still move and shoot">When I join a server or after a map change I see nothing but a black screen, but I can still move and shoot</a></h3>
-<p class="Body">
-This is probably because you don't have the map that's running on the server.  As Xonotic supports map/content download the server might not be be setup (correctly) to support this and you will have to get the map the old fashioned way.  Those servers should have a download URL in their name or welcome message.  There is also a <a class="link" href="http://dev.xonotic.org/projects/xonotic/wiki/Maps">wiki page</a> dedicated to new maps.
-For Linux users: you need to have libcurl installed, otherwise you won't be able to download any maps.  libcurl should be available in any Linux distribution, just search for &quot;libcurl&quot; and install it in your distribution's package manager.
-</p>
-<!--End Section 2-->
-<h3><a name="How to report crashes">How to report crashes</a></h3>
-<p class="Body">
-Register at <a class="link" href="http://dev.xonotic.org">http://dev.xonotic.org</a> and submit a bug report.
-</p>
-<p class="Body">
-On Mac: IS THERE AN EASY WAY?
-</p>
-<p class="Body">
-On Linux: In a xterm, <tt>cd</tt> into your Xonotic installation directory, start <tt>catchsegv ./xonotic-linux-686-sdl -condebug -developer &gt; crash.txt 2&gt;&amp;1</tt> and give the file crash.txt to the developers.  Note that you can also use <tt>./xonotic-linux-686-glx</tt> or if you have a 64bit system <tt>./xonotic-linux-x86_64-sdl</tt> and <tt>./xonotic-linux-x86_64-glx</tt>
-</p>
-<p class="Body">
-On Windows: Click Start-&gt;Run, and enter drwtsn32, click Ok in the next window, run Xonotic and wait for the crash.  Then go to <tt>C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson</tt> there should be a file called &quot;drwtsn32.log&quot;, give that file along with the engine's build date to the developers.  You'll see that date when you open the ingame console (<a class="link" href="#How do I open the console?">How do I open the console?</a>).  Note that some folders of that path may be hidden or have a translated name if you're using a non-english windows.
-</p>
-<!--End Section 2-->
-<h3><a name="Where can I get more help?">Where can I get more help?</a></h3>
-<p class="Body">
-Visit <a class="link" href="http://xonotic.org/forum">the official Xonotic forum</a> there is a <a class="link" href="http://dev.xonotic.org">support and bug report area</a>.  Or get on <a class="link" href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> to chat with other or ask for help.  There is the normal users channel (irc://irc.quakenet.org/xonotic) and the developers channel (irc://irc.freenode.net/xonotic)
-</p>
-<!--End Section 2-->
-<!-- End SectLevel2 -->
-<!--End Section 1-->
-<h2><a name="General questions">General questions</a></h2>
-<!-- Start SectLevel2 -->
-<h3><a name="How do I install new maps?">How do I install new maps?</a></h3>
-<p class="Body">
-Maps usually ship as *.pk3 file.  All you have to do is to copy this file to the <tt>Xonotic/data/</tt> (on Linux, Mac, Windows) OR <tt>~/.xonotic/data/</tt> (on Linux, Mac) directory.
-Map packages that were downloaded from a server during playing end up in <tt>Xonotic/data/dlcache/</tt> or <tt>~/.xonotic/data/dlcache/</tt> and are only used till you exit Xonotic. If you want to play them locally or use them to setup a server of your own you can &quot;accept&quot; the packages by moving it one level up - right next to your config.cfg.
-</p>
-<!--End Section 2-->
-<h3><a name="How can I place a shortcut to Xonotic on my Linux desktop?">How can I place a shortcut to Xonotic on my Linux desktop?</a></h3>
-<p class="Body">
-Use the script <tt>xonotic-linux-sdl.sh</tt> or <tt>xonotic-linux-glx.sh</tt> instead of the binaries.  The scripts will use the correct <tt>working directory</tt>,choose the right version (32 or 64 bit) and also allow you to start a extra X server.
-</p>
-<!--End Section 2-->
-<h3><a name="How do I open the console?">How do I open the console?</a></h3>
-<p class="Body">
-Press <tt>[shift]+[escape]</tt>.  To close it press <tt>[escape]</tt>.  While playing ` or ^ will also open the console.
-</p>
-<!--End Section 2-->
-<h3><a name="What console commands/variables are there?">What console commands/variables are there?</a></h3>
-<p class="Body">
-You can get a list of variables by entering <tt>cvarlist</tt> on the console (<a class="link" href="#How do I open the console?">How do I open the console?</a>).  <tt>cmdlist</tt> will give you a list of available commands.  
-</p>
-<p class="Body">
-#An annotated version of that output can be found at the <a class="link" href="http://xx.org/wiki/pmwiki.php?n=Main.ConsoleCommands">Xonotic wiki</a>.
-</p>
-<!--End Section 2-->
-<h3><a name="How can I use colors in my nickname and messages?">How can I use colors in my nickname and messages?</a></h3>
-<p class="Body">
-Colors can be used in nicknames and chat messages via two ways: Either the simple way by typing ^ followed by a number between 0 and 9 or by typing ^x followed by three hexadecimal numbers (0-F) representing red, green and blue components of the color before the text. The second way allows for much more colors. For example if you type ^xF00message the text &quot;message&quot; will be displayed in red color. Simple examples:
-</p>
-<!-- 3 columns --><center><table cellspacing="0">
-<caption>&nbsp;&nbsp;</caption>
-<tr><th> code   </th><th> rgb code   </th><th> color&nbsp;&nbsp;&nbsp;&nbsp;  </th></tr>
-<tr><td> ^0     </td><td> ^x000      </td><td> black&nbsp;&nbsp;&nbsp;&nbsp;  </td></tr>
-<tr><td> ^1     </td><td> ^xF00      </td><td> red&nbsp;&nbsp;&nbsp;&nbsp;    </td></tr>
-<tr><td> ^2     </td><td> ^x0F0      </td><td> green&nbsp;&nbsp;&nbsp;&nbsp;  </td></tr>
-<tr><td> ^3     </td><td> ^xFF0      </td><td> yellow&nbsp;&nbsp;&nbsp;&nbsp; </td></tr>
-<tr><td> ^4     </td><td> ^x00F      </td><td> blue&nbsp;&nbsp;&nbsp;&nbsp;   </td></tr>
-<tr><td> ^5     </td><td> ^x0FF      </td><td> cyan&nbsp;&nbsp;&nbsp;&nbsp;   </td></tr>
-<tr><td> ^6     </td><td> ^xF0F      </td><td> magenta&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>
-<tr><td> ^7     </td><td> ^xFFF      </td><td> white&nbsp;&nbsp;&nbsp;&nbsp;  </td></tr>
-<tr><td> ^8     </td><td>&nbsp;&nbsp;    </td><td> half-transparent black </td></tr>
-<tr><td> ^9     </td><td> ^x888      </td><td> grey&nbsp;&nbsp;&nbsp;&nbsp;   </td></tr>
-<tr><td>&nbsp;&nbsp;</td><td> ^x800      </td><td> dark red&nbsp;&nbsp;</td></tr>
-<tr><td>&nbsp;&nbsp;</td><td> ^x080      </td><td> dark green&nbsp;&nbsp;     </td></tr>
-<tr><td>&nbsp;&nbsp;</td><td> ^x880      </td><td> dark yellow&nbsp;&nbsp;    </td></tr>
-<tr><td>&nbsp;&nbsp;</td><td> ^x008      </td><td> dark blue&nbsp;&nbsp;      </td></tr>
-<tr><td>&nbsp;&nbsp;</td><td> ^x088      </td><td> dark cyan&nbsp;&nbsp;      </td></tr>
-<tr><td>&nbsp;&nbsp;</td><td> ^x808      </td><td> dark magenta&nbsp;&nbsp;   </td></tr>
-</table></center>
-<!--End Section 2-->
-<h3><a name="How do I watch/record demos?">How do I watch/record demos?</a></h3>
-<p class="Body">
-Demos are recordings of matches that you have played. To automatically record a demo each time you play enable the option <tt>Record demos while playing</tt> in the <tt>Multiplayer / Demos</tt> menu. Or if you just want to record some matches open the console and type <tt>rec &lt;demos/name&gt;</tt> before playing. That is before starting a game or connecting to a server. The demo file will then be stored in <tt>Xonotic/data/demos/&lt;name&gt;.dem</tt> (on Windows) or <tt>~/.xonotic/data/demos/&lt;name&gt;.dem</tt> (on Linux, Mac).
-If you downloaded a demo, copy it to <tt>Xonotic/data/demos/&lt;name&gt;.dem</tt> (on Linux, Mac, Windows) or <tt>~/.xonotic/data/demos/&lt;name&gt;.dem</tt> (on Linux, Mac).  You might have to create this directory if you have never recorded a demo before.
-To watch demos you can choose a demo file in the <tt>Multiplayer / Demos</tt> and click the play button. Also you can watch demos typing <tt>ply &lt;demos/name&gt;</tt> in the console (<a class="link" href="#How do I open the console?">How do I open the console?</a>). You can list all your demo files by typing <tt>dem</tt> on the console.  
-</p>
-<!--End Section 2-->
-<!-- End SectLevel2 -->
-<!--End Section 1-->
-<h2><a name="Server setup">Server setup</a></h2>
-<!-- Start SectLevel2 -->
-<h3><a name="How do I start a server?">How do I start a server?</a></h3>
-<p class="Body">
-Use the <tt>Multiplayer / Create</tt> menu to start a <tt>listen server</tt>.  You will always have to play yourself in a <tt>listen server</tt>.
-If you want to create a server without being forced to play yourself please take a look at the file <tt>readme.txt</tt> in the <tt>Xonotic/server/</tt> directory where the <tt>dedicated server</tt> is explained.
-</p>
-<!--End Section 2-->
-<h3><a name="Which ports do I have to open in firewall/forward from my router to run a server?">Which ports do I have to open in firewall/forward from my router to run a server?</a></h3>
-<p class="Body">
-The default port is 26000 UDP.  You can change that in the <tt>Multiplayer / Create</tt> menu or by starting Xonotic with the parameter <tt>-port &lt;port&gt;</tt> or having a line <tt>port &lt;port&gt;</tt> in the server config file.
-If you follow the tutorial mentioned above you do not need this command line argument as it will be done in the config file created for the server.  To add the command line argument on Windows, create a new shortcut to <tt>xonotic.exe</tt> or <tt>xonotic-dedicated.exe</tt> and right click on it.  Select properties and <tt>-port &lt;port&gt;</tt> in the &quot;Target:&quot; line.  Be sure that the &quot;Start in:&quot; line contains the full path to your Xonotic folder and click &quot;OK&quot;.  The parameter will be used if you start Xonotic via that new shortcut.
-</p>
-<!--End Section 2-->
-<h3><a name="Is there some kind of rcon?">Is there some kind of rcon?</a></h3>
-<p class="Body">
-Yes there is a QuakeWorld compatible rcon.  To use it you must enter <tt>rcon_password &lt;password&gt;</tt> in the server console or server config file.  The Xonotic client has to set the same password in the same fashion.  You can then issue commands with <tt>rcon &lt;command&gt;</tt> if you are connected to the server or will have to set <tt>rcon_address &lt;ip/hostname&gt;</tt> or <tt>rcon_address &lt;ip/hostname&gt;:&lt;port&gt;</tt> to point to the server.  There are also external rcon tools but make sure you use a QW compatible rcon tool.
-</p>
-<!--End Section 2-->
-<h3><a name="How can I kick people who are using special characters in their names?">How can I kick people who are using special characters in their names?</a></h3>
-<p class="Body">
-Enter <tt>status</tt> at the server console.  You will see a list of all players.  In front of their names you will see a number (the player id).  You can kick the player you don't like with <tt>kick # &lt;player id&gt; &lt;reason&gt;</tt> (notice the space after #).
-</p>
-<!--End Section 2-->
-<!-- End SectLevel2 -->
-<!--End Section 1-->
-<h2><a name="Development">Development</a></h2>
-<!-- Start SectLevel2 -->
-<h3><a name="How can I create or edit Xonotic maps?">How can I create or edit Xonotic maps?</a></h3>
-<p class="Body">
-You need <a class="link" href="http://icculus.org/netradiant/">NetRadiant</a>, a stabilized Q3 map editor. For convenience, a snapshot configured for Xonotic is included in <tt>extra/</tt> for Windows and MAC-Intel, but the program is not officially supported by Xonotic.
-</p>
-<!--End Section 2-->
-<h3><a name="Where can I get latest development versions of the source code?">Where can I get latest development versions of the source code?</a></h3>
-<p class="Body">
-Please refer to <a class="link" href="http://dev.xonotic.org/projects/xonotic/wiki/Repository_Access">http://dev.xonotic.org/projects/xonotic/wiki/Repository_Access</a>
-</p>
-<p class="Body">
-<strong>Game data:</strong> to check out Xonotic git, you'll need a <a class="link" href="http://git-scm.com/">git client</a>.  
-</p>
-<p class="Body">
-For more information on how to compile the game please see <a class="link" href="http://dev.xonotic.org/projects/xonotic/wiki/Repository">http://dev.xonotic.org/projects/xonotic/wiki/Repository</a><strong>Access#Cloning-the-repository-and-compiling and <a class="link" href="http://dev.xonotic.org/projects/xonotic/wiki/Compiling">http://dev.xonotic.org/projects/xonotic/wiki/Compiling</a></strong>In_Windows
-</p>
-<!--End Section 2-->
-<!-- End SectLevel2 -->
-<!--End Section 1-->
-<!-- End SectLevel1 -->
-<hr>
-<br>
-<p align="right"> <small>This document was generated using <a class="link" href="http://www.maplefish.com/todd/aft.html">AFT v5.097</a></small> </p>
-                 <p><br style="clear:left" />
-        </p>
-         </div>
-         <!-- end content -->
-               <div id="footer">
-               </div>
-               <!-- end footer -->
-               <p class="subFooter">Come to the Xonotic IRC channel: <a href="irc://irc.quakenet.org/xonotic" title="#xonotic on irc.quakenet.org">#xonotic on irc.quakenet.org</a> or the team channel: <a href="irc://irc.freenode.net/xonotic" title="#xonotic on irc.freenode.net">#xonotic on irc.freenode.net</a></p>
-
-               <div id="valid">
-                       <p>&copy; 2009-2011 Xonotic.org</p>
-         </div>
-       </div><!-- end right -->
-</div>
-</body>
-</html>
diff --git a/Docs/faq.md b/Docs/faq.md
new file mode 100644 (file)
index 0000000..567f3c5
--- /dev/null
@@ -0,0 +1,196 @@
+# Xonotic FAQs
+## How do I install Xonotic?
+
+**There is no need to install Xonotic!** The zip file you downloaded from the homepage has everything. All binaries to run the game on Linux, Windows and macOS are inside of it. Just unzip the archive and run the appropriate executable for your OS.
+
+For example, on Windows or macOS you can start the game by double-clicking the Xonotic logo. On Linux you can run xonotic-linux-glx.sh or xonotic-linux-sdl.sh - whichever one works better on your hardware.
+
+## Is there a Debian package available?
+
+There is an unofficial package available on [playdeb.net](http://www.playdeb.net/updates/ubuntu/17.04/?q=xonotic). Unfortunately, Xonotic is not in the Debian repositories yet. You can check the status of the bug report [here](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646377). If you can help us expedite this process, please contact us!
+
+## How do you pronounce the name Xonotic?
+
+There are two pronunciations, depending on where you live.
+
+US people are more likely to pronounce it : _zone + otic_  
+European people are more likely to pronounce it : _kso + notic_
+
+
+## How and why did you choose the logo?
+
+The logo design process took about a week, with a handful of people  contributing designs, and constantly adjusting those designs based on  feedback.
+
+The phoenix image of the logo obviously refers to the concept of  "rising from the ashes".
+
+Another aspect of the logo is the center ring, which has some  similarities to the Quake logo; it has a fatter bottom edge and thinner  top edge, though quake didn't use a complete ring shape. This is intended as a pay of respect to the Quake origins of the game, as the Darkplaces engine was originally based on the Quake 1 engine.
+
+# Troubleshooting
+
+## When I join a server or after a map change I see nothing but a black screen, but I can still move and shoot
+
+This is probably because you don't have the map that's running on the server or it didn't download correctly. Try clearing your _dlcache_ in your config folder and restarting Xonotic.
+
+For Linux users: you need to have libcurl installed, otherwise you won't be able to download any maps. libcurl should be available in any Linux distribution, just search for "libcurl" and install it in your distribution's package manager.
+
+## Can't launch Xonotic on macOS Sierra or later
+
+(Full error message: "You have reached this menu due to missing or unlocatable content/data. You may consider adding -basedir /path/to/game to your launch commandline.")
+
+In the Finder, control-click the app icon, then choose Open from the shortcut menu. Click Open on the dialog.
+
+This happens because Xonotic is not signed using an Apple developer key.
+
+## When I start Xonotic all I see is a black screen or a black screen with some checkered squares
+
+This happens when the engine can't load the data*.pk3 file or has trouble to initialize OpenGL. The reasons could be:
+  * On Linux: the current directory is not your Xonotic/ folder.
+  * On Mac: you tried to extract and move the files from a Xonotic update and it deleted the old files. When using the mac GUI please be sure to move only the files not the folders as that will delete the old files or use the mv console command which will not delete the old files.
+  * The engine could not initialize OpenGL. Please install the latest drivers for your graphic card. You will probably find one for your card there: [intel](http://intel.com), [AMD](http://amd.com), [nvidia](http://nvidia.com).
+  * Your download might be corrupted, please download Xonotic again.
+
+## Using Linux I only see the map but no players and items
+
+This happens when the engine has trouble initializing OpenGL. The reasons could be:
+
+  * The engine could not initialize OpenGL. Please install the latest drivers for your graphic card. You will probably find one for your card there: [intel](http://intel.com), [AMD](http://amd.com), [nvidia](http://nvidia.com).
+  * You do not have permissions needed for 3d acceleration. Usually you need to add yourself to the group video, you can do that via console as root like this: _usermod -a -G video YOURUSERNAME_. You need to logoff/in afterwards.
+
+## When I start Xonotic my screen is flickering
+
+This is known to happen on Windows with Intel graphic chips and is a bug in the graphics drivers. A workaround is to set Flip-Policiy to blit. Open the control panel, there should be an icon called Intel(R) GMA driver (or something like that), double click it. Click on 3D Settings to find the screen with those settings.
+
+## How can I speed up my frame rate?
+
+You can choose predefined performance settings in the Settings / Video menu or you can enable/disable single features. The greatest performance boost can be achieved by turning off dynamic lights and shadows in the Settings / Effects menu. Bloom is also quite resource intensive. Other fps boots include disabling Deluxemapping and Coronas. On older graphics cards or on-board/notebook chips with little video ram you can try to lower the texture quality in the Settings / Video menu. Some graphic cards (mostly ATI or quite old cards) run A LOT faster if you disable the Vertex Buffer Objects in the Settings / Video menu. An other thing that can greatly help on such cards is to disable the OpenGL 2.0 Shaders. Having that option enabled is faster on most cards however, that is why both are active by default.
+
+If none of that helps, you can try compiling Xonotic from [source](http://gitlab.com/xonotic/xonotic/wikis/Repository_Access).
+
+## The sound is broken, it crackles and stutters
+
+Try run xonotic-sdl.exe instead of xonotic.exe (on Windows). Adding the command line options -sndspeed 48000 and/or -sndstereo can also help on some systems (on Linux, Mac, Windows).
+
+## Mouse is too slow and sensitivity is at top (on Mac / Linux)
+
+Mac: The default mouse acceleration on Mac is very high and strange. The Xonotic defaults work fine with it but some mouse drivers seem to 'correct' the mouse acceleration and conflict with the Xonotic defaults. Try to **disable the option Turn off OS mouse acceleration** in the Settings / Input menu. Or the same via console: _apple_mouse_noaccel 0; vid_restart_
+Linux: A similar problem can arise on Linux. It's also Turn off OS mouse acceleration in the Settings / Input menu but the console command is different: _vid_dga 0; vid_restart;
+
+## I can't switch to 32 bit color depth (on Windows)
+
+Check if your desktop color depth is set to 32 bits per pixel. If it's just set to 16, Xonotic can't switch to 32 bit mode.
+
+## How to report crashes and bugs
+
+Use our [issue tracker](http://gitlab.com/xonotic/xonotic-data.pk3dir/issues) on Gitlab.
+
+If you want to investigate further:
+
+On Linux: In a xterm, cd into your Xonotic installation directory, start catchsegv ./xonotic-linux64-sdl -condebug -developer > crash.txt 2>&1 and give the file crash.txt to the developers. On a 32bit system you should instead use ./xonotic-linux32-sdl. Note that you can also use ./xonotic-linux64-glx or if you have a 32bit system ./xonotic-linux32-glx
+
+On Windows: Click Start->Run, and enter drwtsn32, click Ok in the next window, run Xonotic and wait for the crash. Then go to C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson there should be a file called "drwtsn32.log", give that file along with the engine's build date to the developers. You'll see that date when you open the ingame console (How do I open the console?). Note that some folders of that path may be hidden or have a translated name if you're using a non-english windows.
+
+## Where can I get more help?
+
+Visit the official Xonotic [forum](http://forums.xonotic.org/), there is a support and bug report area. Or get on [IRC](/chat) to chat with others or ask for help. There is the normal users channel (irc://irc.quakenet.org/xonotic) and the developers channel (irc://irc.freenode.net/xonotic)
+
+# General questions
+
+## Where are the configuration files located?
+
+  * Linux: ~/.xonotic
+  * Windows: C:\\Users\\\<your_user_name\>\\Saved Games\\xonotic
+  * Mac: ~/Library/Application Support/xonotic
+      * Library might be hidden on Mac so Finder won't display it
+
+## What is the difference between the config and install directories?
+
+The install directory is what you get when you unzip the downloaded file. We usually call it Xonotic. Since Xonotic (the game) doesn't need installation, Xonotic (the folder) can be anywhere you put it.
+
+The config directory (sometimes called user directory) has a specific [location](#config) depending on your OS but we usually call it ~/.xonotic since most players and devs are on linux. ~/.xonotic contains all your settings and it's where you can put additional maps or assets when experimenting with the game or running your own server.
+
+## How do I install new maps?
+
+Maps usually ship as .pk3 file. All you have to do is to copy this file to the config folder <your config folder>/data/ directory. Map packages that were downloaded from a server during playing end up in <your config folder>/data/dlcache and are only used till you exit Xonotic. If you want to play them locally or use them to setup a server of your own you can "accept" the packages by moving it one level up - right next to your config.cfg.
+
+An extensive list of maps is at [xonotic.co](http://xonotic.co)
+
+## How can I place a shortcut to Xonotic on my Linux desktop?
+
+Use the script xonotic-linux-sdl.sh or xonotic-linux-glx.sh instead of the binaries. The scripts will use the correct working directory, choose the right version (32 or 64 bit) and also allow you to start a extra X server.
+
+## How do I open the console?
+
+Press [shift]+[escape]. To close it press [escape]. While playing \` or ^ will also open the console.
+
+## What console commands/variables are there?
+
+An searchable list is available [here](http://www.xonotic.org/tools/cacs/), or you can search in-game using _apropos_ in console.
+
+## How can I use colors in my nickname and messages?
+
+Colors can be used in nicknames and chat messages via two ways: Either the simple way by typing ^ followed by a number between 0 and 9 or by typing ^x followed by three hexadecimal numbers (0-F) representing red, green and blue components of the color before the text. The second way allows for much more colors. For example if you type ^xF00message the text "message" will be displayed in red color. Simple examples:
+
+code   | rgb code  | color
+-------|-----------|--------
+^0     | ^x000     | black
+^1     | ^xF00     | red
+^2     | ^x0F0     | green
+^3     | ^xFF0     | yellow
+^4     | ^x00F     | blue
+^5     | ^x0FF     | cyan
+^6     | ^xF0F     | magenta
+^7     | ^xFFF     | white
+^8     |           | half-transparent black
+^9     | ^x888     | grey
+       | ^x800     | dark red
+       | ^x080     | dark green
+       | ^x880     | dark yellow
+       | ^x008     | dark blue
+       | ^x088     | dark cyan
+       | ^x808     | dark magenta
+
+## How do I watch/record demos?
+
+Demos are recordings of matches that you have played. To automatically record a demo each time you play enable the option Record demos while playing in the Multiplayer / Demos menu. Or if you just want to record some matches open the console and type rec <demos/name> before playing. That is before starting a game or connecting to a server. The demo file will then be stored in [your config folder](#config)/data/demos/<name>.dem. If you downloaded a demo, copy it to [\<your config folder\>](#config)/data/demos/<name>.dem. You might have to create this directory if you have never recorded a demo before. To watch demos you can choose a demo file in the Multiplayer / Demos and click the play button. Also you can watch demos typing _ply <demos/name>_ in the console ([How do I open the console?]({{< relref "#how-do-i-open-the-console" >}})). You can list all your demo files by typing _dem_ on the console.
+
+# Server setup
+
+## How do I start a server?
+
+Use the Multiplayer / Create menu to start a listen server. You will always have to play yourself in a listen server. If you want to create a server without being forced to play yourself please take a look at the file readme.txt in the Xonotic/server/ directory where the dedicated server is explained.
+
+## Which ports do I have to open in firewall/forward from my router to run a server?
+
+The default port is 26000 UDP. You can change that in the Multiplayer / Create menu or by starting Xonotic with the parameter -port <port> or having a line port <port> in the server config file. If you follow the tutorial mentioned above you do not need this command line argument as it will be done in the config file created for the server. To add the command line argument on Windows, create a new shortcut to xonotic.exe or xonotic-dedicated.exe and right click on it. Select properties and -port <port> in the "Target:" line. Be sure that the "Start in:" line contains the full path to your Xonotic folder and click "OK". The parameter will be used if you start Xonotic via that new shortcut.
+
+## Is there some kind of rcon?
+
+Yes there is a QuakeWorld compatible rcon. To use it you must enter rcon_password <password> in the server console or server config file. The Xonotic client has to set the same password in the same fashion. You can then issue commands with rcon <command> if you are connected to the server or will have to set rcon_address <ip/hostname> or rcon_address <ip/hostname>:<port> to point to the server. There are also external rcon tools but make sure you use a QW compatible rcon tool.
+
+## How can I kick people who are using special characters in their names?
+
+Enter status at the server console. You will see a list of all players. In front of their names you will see a number (the player id). You can kick the player you don't like with kick # <player id> <reason> (notice the space after #).
+
+# Nexuiz Related FAQs
+
+## What prompted the split from Nexuiz?
+
+**Lee Vermeulen**, the [Nexuiz project](http://alientrap.org/nexuiz) founder, decided to license the Nexuiz code (with **LordHavoc** licensing the [Darkplaces  engine](http://icculus.org/twilight/darkplaces/)) to a new game development company named [Illfonic](http://illfonic.com) so that they could develop a closed-source  version for the PS3. As part of this deal, IllFonic acquired the rights  to use the name Nexuiz along with the domain nexuiz.com, and are under  no obligation to contribute code back to the open-source Nexuiz project  (and have stated that they have no intention of doing so).
+
+When this was announced, the response from the Nexuiz community was  overwhelming negative, even among the development team and main  contributors. Vermeulen had not actively participated in the project for  several years and all development had been done by the community. Most  members have expressed a sense of betrayal and cited the project as an  example of [mushroom management](http://en.wikipedia.org/wiki/Mushroom_management). Vermeulen essentially cashed in  on the hard work of others and sold the code, name and reputation that  they had built up over years without him.
+
+Despite attempts to [reason with IllFonic](https://web.archive.org/web/20101212165111/http://alientrap.org/forum/viewtopic.php?f=4&t=6079), they have refused to change  the name of their project to a derivative name even though they have  directly stated that their "version" of Nexuiz is a completely different  game. The hijacking of the Nexuiz project by its absentee founder and  IllFonic made it clear that it had no future as it stood and thus the  community left to found **Xonotic**.
+
+It should also be noted that IllFonic's code may be in violation of  the GPL as most contributors to the Nexuiz codebase have not relicensed  their work for inclusion in a closed-source project. This has been  another source of outrage for many.
+
+**Update:** The GPL concerns have been cleared up by a recent [interview with LordHavoc](http://games.slashdot.org/story/10/03/24/070234/DarkPlaces-Dev-Forest-Hale-Corrects-Nexuiz-GPL-Stance).
+
+## Was a compromise attempted?
+
+Yes, many in the Nexuiz community tried to [reach a compromise](http://alientrap.org/forum/viewtopic.php?f=4&t=6079), such as having Illfonic  contribute some artwork and/or gamecode back to Nexuiz GPL and for them  to use a derivative name for their project, e.g. "Nexuiz Reloaded". ~~ IllFonic flatly refused such suggestions. ~~ This, along  with the clear stance that Alientrap has taken on this issue, made it  clear that no compromise could be reached.
+
+**Update!** It has been clarified that, despite some of misleading wording in previous communication, Illfonic will be contributing _some_ of the game code back to Nexuiz GPL, mainly having to do with bandwidth improvements and animation blending.
+
+## Do you despise Vermeulen, LordHavoc or Illfonic?
+
+**No!** Without the past work of Vermeulen and LordHavoc, we  would not have the game that we enjoy today. We wish them the best of  luck in their endeavors. We hope Illfonic's Nexuiz on PS3 is successful.  We simply have a difference of opinion on project management and the  result is going to be very positive; We're forming a game project that  matches what we wanted out of Nexuiz all along.
diff --git a/Docs/guide.md b/Docs/guide.md
new file mode 100644 (file)
index 0000000..c41f0ce
--- /dev/null
@@ -0,0 +1,334 @@
+---
+author: halogene
+comments: false
+type: tutorials
+title: Halogene's Newbie Corner
+---
+Preface
+=======
+
+This tutorial aims at showing all fundamental aspects of vanilla gameplay to enable new players to pick up the ropes quickly. It includes the information of all six blog posts of the [Newbie Corner](http://xonotic.org/posts/2014/halogenes-newbie-corner-comprehensive-tutorial/) as well as some new things that have changed or that I didn’t think about back then.
+
+Note that all this applies to vanilla Xonotic. Whereas movement aspects should usually apply more or less unchanged to modified servers offering minstagib, vehicle ctf or [Overkill](/okguide) gameplay, I will not explain the specifics of these game modifications/mutators - I simply lack the expertise in non-vanilla game modes. So if you want to fully apply the knowledge gained from this tutorial, search for vanilla servers (Xonotic icon next to it in server browser) or use the official [HUB] ones.
+
+Remember that the Xonotic player community is generally considered a very friendly and helpful one and for many people (including me) this is the key aspect that gets one hooked to this game. If you meet very strong players online and wonder how they do certain things, it usually pays off to simply ask them. Most of the experienced players will take their time to shortly explain gameplay techniques to newbies if asked nicely. Some of them might even offer to show you around by giving you a short live tutorial. That’s how I myself learned about blaster jumping and strafe turning for example.
+
+Even if the skill gap between you and another player is immense, it is highly improbable that the other player is cheating. There are a couple of mechanisms implemented in the game that effectively prevent cheating, and from my personal experience I am confident to say that cheating is not really an issue in Xonotic. The skill gap between newbies and experienced players mostly results from newbies not knowing gameplay mechanics and therefore lacking the ability to acquire skill in the first place. The purpose of this Newbie Corner is to allow any new player to develop the same skills that experienced players have already gained, simply by showing how it works.
+
+Movement
+========
+
+Even though people tend to be more interested in what the weapons do when they first try out a new first person shooter, I prefer to follow the structure that I established for my live newbie tutorials and to start off with the movement. Understanding and mastering Xonotic’s movement is a key success factor in this game, apart from making it incredibly fun to play once you get the hang of it. So let’s get started!
+
+Bunny Hopping
+-------------
+
+You may have noticed that players race around the maps at insane speeds, making them hard to hit and also hard to tell from which direction they’ll come next, should you survive an attack. You can do that too, and here’s how.
+
+In Xonotic you have a lot of movement control while you are in the air (“air control”), and to a great extent you’ll accelerate when pressing the forward button while flying. When you just walk around though, your feet are in constant contact with the ground, so the friction is slowing you down a lot. One of the keys to gain high speeds in Xonotic is therefore to touch the ground as little as possible. By constantly jumping (“bunny hopping”) you can keep ground contact to a minimum. The good thing is that you only need to keep the jump button pressed and you will jump again once you hit the ground (unless of course you disabled that in Settings → Input). If you press the forward button while holding the jump button, you’ll continuously get faster until you hit the acceleration limit.
+
+This is quite easy and there’s nothing really to master about plain forward bunny hopping. However, you’ll face complications if you now try to turn once you gained some speed. If you continue to press the forward key and simply turn the mouse, you’ll hardly manage to make a sharp turn (unless you stop jumping, which slows you down a lot). In order to perform sharper turns without loosing speed, thus making you more agile, do the following:
+
+Before the turn, while still bunny hopping, release the forward key. Once you’ve released the forward key (while still keeping the jump key pressed), hold down the strafe key in the direction you want to turn (for sharp right turn: strafe right). Keep holding the jump key and the strafe key and smoothly and steadily turn your mouse into the strafe direction (in my example, right). It’s vital to move the mouse smoothly, because any abrupt sudden movements will slow you down. I can’t stress this aspect enough – a lot of newcomers that I told this technique basically got all the key pressing part right but fail at moving the mouse smoothly. Softly accelerate and decelerate the mouse turn and maintain a steady turn speed in between. The movement needs to be fluent and soft to get the full benefit. Also note that releasing the forward key while you’ve already pressed the strafe key will slow you down too, so be sure to use the right order. You’ll notice that if you do it right, you actually don’t lose speed in turns, but rather start to accelerate! This technique is called “strafe turning”.
+
+Once you’re done turning, you can release the strafe key and press forward key again or even directly switch to the other direction. A good way to practice this is to use forward only for inital acceleration, and then to do turns left and right running in an number eight-shaped figure (I recommend the main room in the map “afterslime” for that).
+
+It takes a while to get used to, but if you practice it, this goes into your cerebellum sooner or later (depending on your age, mostly) and then you’ll never think about it again! At that point you’ll be bunny hopping all over the place at high speed. Mastering this technique is very rewarding, since running around a map at high speed is a bunch of fun.
+
+Beyond this, advanced techniques known from other games as “strafe jumping” and “circle jumping” can also be used, however their impact is limited in vanilla gameplay.
+
+***
+
+> *Strafe jumping* is about gaining additional speed when bunny hopping forward. Essentially you hold forward + strafe and point a bit into the strafe direction while bunny hopping and you constantly increase the angle slowly. When strafe jumping for distances longer than 4 or 5 of hops , you will have to switch the strafe (and turn) direction as you gradually bend your path into the strafe direction so you don't hop in a straight line, and also the effect comes from bending your direction and at some point you reach an angle that does not grant any additional acceleration any more, so you have to start over with a fresh angle.
+
+> *Circle jumping* on the other hand is a technique used to gain extra speed out of the stand. It works only when you walk on the floor, so it's mainly used to gain a little extra speed before your first jump. That way of course you can reach farther distances with your first jump, as seen in Smilecythe's video about the [Mega Armor jumps on HUB](https://youtu.be/-SMJx1OIDgk "Youtube: Mega Armor Jumps on Hub"). For circle jumping, you utilize a mechanic that increases your walking speed beyond the maximum speed you can gain by pressing plain forward. If you have the speedometer enabled, you will see that you can gain more than 500qu/s if you press forward, strafe and turn in the strafe direction rather fast and steadily. So what people do is that they make a quick 90 degree or even 180 degree with only forward + strafe key pressed (no jumping), and then they start to bunny hop (and strafe jump). This way they can start off with a bit more speed than by just starting a bunny hop. This is why many experienced players start a bunny hop with that awkward swipe that looks like they try to swing their weapon at someone.
+
+***
+
+These are techniques which are essential for Xonotic race mode / CTS where servers use cpma-like physics. In vanilla mode, the effect is limited but some times it may tip the scales or allow for certain jumps. If you would like to obtain a better understanding of how strafe jumping works, check out [Hero's strafe jumping lesson](http://www.xonotic.org/2013/02/a-strafe-jumping-lesson-from-hero "Youtube: Strafe Jumping Lesson from Hero"). These techniques can be practiced best on the Xonotic CTS/Defrag servers, but I recommend to approach these servers as a platform for learning and training movement. Some maps are designed for people that have perfectionized the above mentioned movement techniques, so don't let the maps discourage you. On half of the maps offered there I for example have a hard time even reaching the first waypoint, let alone finishing it - but it's excellent training as it provides direct feedback (=fail) if you use the technique right.
+
+
+
+Blaster Jumping
+-------------
+
+Let’s now have a look at two important aspects of a very useful movement tool in Xonotic, the blaster! While dealing somewhat low damage, the blaster is one of the most important weapons in Xonotic. It’s projectile creates a blast upon impact on any surface or object that deals little damage to players being nearby, but pushes such players away from the impact spot. That way, the push force of the blaster projectile impact can be used to move both other players and yourself around. You can test this easily by standing and shooting at the ground below you with the blaster. You’ll notice that you get pushed up into the air by the blast. Now if you jump at the same time, you can get pushed even higher. If you get the timing right, you can get very high, like from the upper platform to the roof or from the fan to crylink on the map Xoylent.
+
+But you’ll not always want to do very high jumps, for example if you’re on the run and need to hit a passageway without bumping your head on an arch above it (like the mega armor on Stormkeep coming from Hagar). In such cases, it can be useful to fire downwards while you are already (or still) in the air during bunny hopping, allowing the blaster projectile to travel a short distance before impact and having more space between impact and yourself, so the push is not that strong.
+
+You’ll have to experiment a bit with the timing of shooting and jumping to reliably achieve the desired jump heighth, but this will become muscle memory rather quickly since you’ll be using blaster jumps a lot in Xonotic gameplay.
+
+Wall Blastering
+-------------
+
+Now, when accelerating fast, you won’t always want to do that vertically. Some times the first few bunny hops are not fast enough to reach a place (or to get out of a place) in time. With the technique of wall blastering you can easily reach rather high horizontal speeds instantly, out of the stand.
+
+To master wall blastering, you’ll obviously need a wall. While it would seem logic to use a wall that you can blaster off in a 90 degree angle with a blaster shot backwards, it is at least equally effective and easier to use a wall that is parallel to your desired movement direction. For practicing this, you start off standing next to that wall and are facing into the desired movement direction. Then you start a bunny hop by pressing foward and then the jump key. While in the air from your first jump, you flick around (to approximately 8 o’clock if the wall is left from you, 4 o’clock if the wall is right to you), shoot the blaster at the wall, aiming slightly above your head. If you shoot parallel or even down a bit, you’ll get a high upwards boost, wasting energy into vertical acceleration, so be sure to aim a little bit upwards! After the flick shot turn back to your desired movement direction and contine to bunny hop. Do not release the jump key during the entire process.
+
+Now let’s tweak this a little more. You wouldn’t want to accelerate into your viewing direction when looking backwards during the flick shot, would you. That is why you should switch for the time you are not looking in your desired movement direction from the forward key to the respective strafe key (strafe right if you turn to a wall on your left, strafe left if you turn to a wall on your right). When turning back into movement direction, keep the strafe key pressed until you can switch to forward key again. You can use a smoother mouse movement for turning back at least for the last couple of degrees in order to gain extra acceleration as explained in the Bunny Hopping section. Also remember to release the forward key before pressing the strafe key, and vice versa!
+
+Once you’ve learned how to reliably accelerate out of the stand with this technique, you can also use it while already bunny hopping in order to gain extra horizontal speed. Just flick around when passing a wall to gain an extra boost. Note that the blaster projectile always needs to travel a bit until it hits the wall. The faster you get, the less you need to turn backwards, since you’ll travel forwards while the blaster is on its way to the wall. At very high speeds you will even be able to shoot at 10 o’clock or 2 o’clock respectively, so you’re not even facing backwards any more! But most maps don’t allow for such fast movement. Experiment and learn at which speed to use what angle, and you’ll be a fast flag runner very soon!
+
+Ramp Jumping
+------------
+
+Ramps are sloped surfaces that can be used for extra upwards boost when doing a jump. If done properly, you can get to places you would not be able to reach without using a jump pad or the blaster (see the section about blaster jumps), while not making any suspicious noises nor loosing any health. This makes ramp jumps especially useful in duels or 2v2 tdm matches and generally extends your movement options in all game modes. Ramp jumps are also very much fun to do!
+
+In my “live” newbie tutorials, I always demonstrate the ramp jump on this spot on the map Xoylent, as it’s rather easy to master and you get the idea how it actually works:
+
+To do a ramp jump, you simply jump onto the sloped surface and jump again. Of course you can keep the jump button pressed for convenience, as with bunny hopping you will automatically jump again when hitting the sloped surface. Now this sounds awfully easy to do, and it wouldn’t be a proper challenge to master if that was all you got to do, would it. So let’s have a close look at the technical aspects behind it.
+
+The easiest way to make a ramp jump boost you up high is to approach the ramp frontally, not sideways or parallelly (unless of course you’re doing a strafe turn jump upwards the ramp, but hey this is a newbie guide!).
+
+Make sure that you hit the ramp at a flat angle. If possible, try to hit it when still going upwards from your previous jump. If you’re already on your way down from the previous jump when you hit the ramp, the angle at which you hit it will be steeper - if the angle is too steep or even 90 degree you’ll get slowed down and the ramp won’t give you the desired upwards boost.
+
+The faster you are, the higher you will get. Ramp jumps that require a higher than walking speed to do are especially tricky, since you will need to bunny hop onto them and time your jumps so you hit the ramp at a good angle. In some cases, you’ll be able to ramp jump onto another ramp, which will result in a double ramp jump.
+
+You will find ramps on a lot of maps, if you look for them. Now that I’ve shown you the mechanics behind ramp jumping, I’ll include some examples of ramp jumps in some of the stock maps for you to try out.
+
+You will find ramps on a lot of maps, if you look for them. Keep your eyes open for ramps and interesting jumps to do with them, as most mappers put some ramps at strategic places. Ramp jumping is a lot of fun and mastering this technique can give you a real advantage over other players!
+
+Of course you can combine ramp jumping with blaster jumping to gain an [extra strong upwards boost](https://www.youtube.com/watch?v=TETTtt5r86s).
+
+Weapons
+-------
+Since we’ve now learned how to master Xonotic movement, it’s time to have a look at the weapons. I’ll go through Xonotic’s core weapons one by one.
+
+### Blaster
+
+I already explained the blaster as versatile movement tool in the Blaster Jumping Section. Apart from moving yourself around, you can also use it for juggling around *other* players, irritating annyoing campers or generally messing with other people’s movement. Pushing people around or forcing a prolonged bunny hop can be especially effective on space maps. Unless shooting at sitting ducks (such as campers), you might want to aim at your target’s feet to make use of its splash damage, as the blaster projectile needs some time to travel even though it is rather fast, thus aiming directly at moving targets can be rather tricky.
+
+The blaster does not eat any ammo. Secondary fire will switch to the previously used weapon.
+
+### Shotgun
+
+The shotgun is your second spawn weapon. Primary fire is very powerful in close combat and, due to the bullets’ spread and being insta hit, a useful finishing weapon at medium range. Note that the push force of primary fire will slow down targets moving towards you, which can be very effective on space maps at spots where players are supposed to touch down from distant jump pads. If you shoot them with shotgun while they are still flying, they probably won’t make it to their usual landing spot.
+
+The secondary fire mode allows you to swing the shotgun like a big trout and to slap other players, which is, apart from dealing rather lots of damage, very much fun to do.
+
+### Machinegun
+
+The machine gun’s (or “uzi’s”) primary fire has a high spread, so it’s useful mostly in close to medium range. Secondary fire has lower spread and shoots small bursts, which is more useful at medium to longer ranges. As the machine gun projectiles have a little push force and are fired rapidly, it can be quite useful for slowing down players that come at you at high speeds. In fact, it’s hard to get into slapping range of someone that has a steady aim as long as such player is firing the machine gun.
+
+You’ll notice a ring around your crosshair that shows the depleting ammo. Once it is empty, the machine gun automatically reloads. To avoid running around with a couple of bullets only and having to reload in the middle of a battle (which takes far too much time), you can reload the machine gun manually at a convenient time by using the “reload” bind that you can set up or by re-pressing the machine gun bind while already wielding the machine gun.
+
+### Mortar
+
+The mortar fires ballistic grenades which deal a lot of direct and splash damage in addition to pushing the player away from the impact. Whereas primary fire detonates upon impact, secondary fire detonates exactly 0.5 seconds after the first bounce of the grenade. With this knowledge you can time the detonation of secondary mortar. Mortar is a very effective weapon against any non-flying targets and to spam around corners.
+
+### Electro
+
+The electro primary behaves like an ordinary rocket launcher as you might know it from other games. However, it’s not really useful for doing high jumps. The secondary fire mode looks like some ordinary sluggish grenade like balls, but has a not so obvious special function: if you detonate the up to three blobs the secondary fire mode can release with primary fire, they will explode with a big WOOOSH that deals a lot of direct and splash damage (around 130 dmg!). This makes the electro especially useful for blocking entries, releasing upon several opponents that are busy fighting each other or spamming where you predict someone to come. Note that you only have to directly hit the balls when trying to set it off mid-air. Otherwise the splash of the primary's impact on a surface nearby is sufficient to set off the combo-explosion. This means that you can even set it off through walls (shooting blobs around a corner and hitting wall with primary) or even mid-air (just shoot through where your blobs fall).
+
+### Crylink
+
+The crylink has a couple of very non-obvious features, which makes this weapon rather interesting and unique. First of all, due to negative (!) push force, getting hit by crylink particles will effectively slow you down very much, no matter of the direction you’re moving in in relation to the firing player. Even if you move at insane speeds, getting hit by several crylink particles at once will make you perform a full stop. This makes the crylink very popular amongst defending CTF players, as you can really annoy fast flag runners with it provided you manage to hit them.
+
+The latter can, however, be quite tricky, given the high spread crylink primary has. Fortunately, crylink has another feature that is very unlikely to be discovered unless someone tells you about it: when you release primary fire, the spread of crylink primary will inverse. Let that sink in for a moment.
+
+    "When you release primary fire, the spread of crylink primary will inverse"
+
+Got it? This means that if you press the primary fire button, the particles will get fired with a certain spread. As long as you keep the primary fire button pressed, the spread will stay constant. Once you release it, the spread inverses, which means **all particles traverse a single spot**. Now the trick is to time the release so that as many as possible particles hit the opponent. The more particles you manage to land on the target, the more drastical the negative push effect will obviously be.
+
+Crylink secondary does not have the spread inversion feature, the particles leave the gun at a very low and constant spread. The particles of secondary fire are faster than primary fire, and they don’t bounce. Their negative push force can be used on other players to break their movement (especially trick jumps) and even to pull them drastically if you manage to hit them in mid-air.
+
+It wouldn't be Xonotic if you couldn't use the unique negative push force for movement as well. If you start a bunny hop and, just when you started to go up from your first hop, hit the floor with crylink secondary at about an angle of 45 degrees in front of you. The negative push of the implosion in front of you will catapult you forward (“crylink running”). This is probably the most efficient way to gain speed from stand. You can also use it to climb walls if you face a wall, jump and shoot the wall above your head with crylink secondary. Crylink climbing is also the most effective way to save you from falling off maps, provided there's a wall close by.
+
+### Vortex
+
+In the hands of a player with a good aim the vortex is probably the most powerful weapon in the entire game. It fires a single beam with zero spread that will instantly hit anything in its way and will even shoot through other players. You’ll notice a small ring around the crosshair when holding the vortex in your hands. If the ring is full, the vortex is charged (and also starts to glow red). Charging happens automatically once you hold the weapon, and it does not cost any ammo. Upon firing, the vortex obviously discharges and starts to recharge unless you switch to another weapon (what you should do, but more about weapon combos later). If charged, the vortex deals 80 dmg, if you shoot with it immediately again, it deals 64 dmg, minimum damage you can deal with vortex is 59 (if you switch to another weapon immediately after shooting and then shoot vortex immediately after reswitching to vortex, so it doesn’t have the refire time for recharging).
+
+Secondary fire only zooms in, as the weapon is strong enough as it is even without a secondary fire mode.
+
+### Hagar
+
+The hagar rapidly fires small rockets, since 0.8.2 without spread. By holding secondary you can load up to 4 rockets that you can fire simultaneously in a three-tip-star formation by releasing secondary fire. If you hold secondary fire too long, hagar will make a little beep and automatically release the loaded rockets so you can’t run around the map and just keeping hagar loaded all the time until you find someone. Unloading hagar secondary can deal a lot of damage at close range, however you’ll need to watch out not to get killed yourself by the splash damage it does. The high splash makes this weapon quite useful against opponents standing next to a wall so the rockets that miss will at least do splash damage. Due to the removed spread compared to 0.8.1, hagar can now also be used on long distances effectively, with the travel time of the projectiles opening yet another bit of gameplay depth. On most competitive servers you’ll be able to discharge the hagar secondary without firing the rockets by pressing primary again while still holding secondary.
+
+### Devastator
+
+The devastator also has some very interesting features that are not very typical for this kind of weapon. First of all you can use the secondary fire to immediately detonate remotely any rocket you fired (provided of course it is still flying). No need to hit a flying target directly, just get the rocket near and, BAM, there you go. Apart from the high splash damage, the explosion also deals quite a lot of push force, so if you want to push some flying player off the map, devastator is your weapon of choice as you can not only push players away from you (push direction obviously depends on the explosion’s position in relation to the player).
+
+But not enough, you can of course also use the devastator to push **yourself** around. If you happen to be flying and need some extra acceleration but there is no wall near to blaster yourself off, just shoot a rocket downwards and immediately detonate it. Yes, it hurts. A lot. But it might be worth it, be it to push you back onto the map if you are falling into the void or to prolong a blaster jump so you manage to reach a distant location. This technique is called “rocket flying”.
+
+You think I’m already done with the devastator? Not yet! In addition to this already very useful feature to remotely detonate your rockets you can also **guide** the rockets. Just keeping the primary fire button pressed and moving the mouse enables you to do some [interesting stuff](http://www.youtube.com/watch?v=UqfqWtXwjic) which can come in very handy in all sorts of situations.
+
+Of course you can combine rocket guiding and remote detonation.
+
+Gameplay Tricks
+===============
+
+Now that we’ve been examining movement and weapons, the air for new newbie stuff is starting to get thinner and thinner. In this section I’ll be providing some general gameplay hints that hopefully will make your life as a newbie out there on the servers easier – and longer :)
+
+Weapon Comboing
+---------------
+
+First of all, Xonotic encourages the usage of weapon combos. How so? Well, if you shoot, you will have to wait a short while (the refire time) until that weapon is able to shoot again, unless you’re holding a constant or rapid fire weapon (currently only hagar and mg). The refire time is rather short so it doesn’t feel like limiting you much if you’re not aware of the concept of weapon combos. But if you switch your weapon immediately after you shoot, you can land a second shot with the second weapon faster than you would be able to with a second shot of the first weapon, as the refire time is longer than the weapon switch delay. This way you are able to deal more damage per second by combining different weapons. Additionally, combining weapons also enables you to combine the specific benefits of two weapons, like slowing down a fast target with crylink in order to be able to easier finish it off with an instahit gun such as vortex.
+
+Keyboard Setup
+--------------
+
+This leads to the problem that it’s terrible difficult for any orthopedic healthy and sane person to do weapon combos efficiently and reliably with the default keyboard layout or (omg!) the mouse wheel. Fortunately, Xonotic allows you to re-configure the entire keyboard bindings very easily (settings window → input tab). I consider direct weapon binds per weapon the easiest way to access any weapon immediately, and would strongly recommend to place the relevant binds around your movement keys or on extra mouse buttons your desktop rodent may have. You will have to find a solution that feels comfortable for you, which might require some experimenting. I for example moved my movement keys from wasd to esdf in order to have more keys available around my movement keys for weapon binds. But that’s just an example, you’ll have to find out what works best for you.
+
+Don’t worry, impacts on your playing skills that result from redesigning your keyboard layout will, once you found a comfortable setup, be temporary only and the change WILL pay off in the longrun. Being able to pick the right weapon for the job instantly by means of a finger reflex is a great advantage in a FPS that is as fast paced as Xonotic.
+
+Splash Damage Travels Through Walls
+-----------------------------------
+
+Another thing you should be aware of is that splash damage travels through walls. Knowledge of this fact can come in very handy at various situations. Especially if you know or suspect someone to be on a higher level above you and the ceiling is thin, you can just try a lucky mortar or devastator shot at the ceiling. The hit indicator sound (that little beep) will tell you if your guess was right. If you’re very confident about the location of your opponent, you can even unleash an electro combo (see the weapons part above, electro) at the ceiling, which works surprisingly well and does a great amount of splash damage, but takes a bit more time to do.
+
+Using splash damage that travels through walls is a very useful and secure technique, as the opponent will obviously not be able to fire back at the same time.
+
+Stay Healthy
+------------
+
+This is something which is almost too obvious to be included here, but I’ve seen so many new players running right past health and armor pickups without taking them. In Xonotic, your starting health of 100 can be brought below zero very quickly. It takes any experienced player two shots to accomplish this, which typically are a two weapon combo so this goes **really** fast. If **one** player can finish you off that fast, imagine how long your life lasts in a typical **eight** player deathmatch. This is why it is absolutely crucial to pick up any health and armor you might find on your way, unless of course this puts you in a dangerous position that outweighs the advantages of a health/armor boost. A mega armor or mega health gives you additional 100 health or armor points respectively, which obviously equals the amount of damage you can take with your starting health – you could consider a mega armor or mega health an extra life. Megas respawn within 30 seconds of being taken.
+
+However, note that if you are above 100 health/armor, both health and armor will start to rot down to 100 a short while after you picked up your last health or armor respectively. The higher above 100 you are, the faster the rot goes. On the other hand if you are below 100 health, your health will start to regenerate a short while after you took damage for the last time. Again, the lower your health is, the faster it regenerates. This means if you get out of a battle with really low health and there is no health pickup anywhere near, it can be a good idea to retreat to a place out of action until you managed to regenerate a bit. Armor obviously does not regenerate.
+
+Listen
+------
+
+The fewer players you have in a match, the more important it gets to listen to the sounds they make. Each armor or health pickup size has its own distinctive pickup sound. Pickup sounds are louder and therefore easier to notice even at some distance than footsteps. If you know where which pickups are on the map you’re playing, you’ll be very often able to know where other players are before seeing them just by listening to the pickup sounds they make.
+
+Also note that the sound a player makes when getting hit varies depending on how low that player’s health is. When you hit a player and you hear the characteristic “very low health groan” (most newbies know that sound primarily from their own player model… :D), you’ll know that you’ll only need to deal a few damage points to finish that player off, so you can go for fast high spread (machinegun, shotgun) or fast splash damage weapons (crylink). Listening is an essential part of duel gameplay.
+
+Console ABC
+-----------
+
+Though the Xonotic menu is very powerful and offers almost every option you could wish for, some times it is faster and simpler to change settings via the built-in console. You can open the console by pressing `<Shift> <ESC>`. Now you have a command prompt where you can query and change settings or execute commands. If you already know how a command you are going to type is called, you can just type the first few letters and hit `<TAB>`. This will automatically complete the command. If the letters match several possible commands, it will auto-complete to the extent all potential completions match and show you all potential completions. For example, typing `cross` in console and hitting `<TAB>` will auto-complete to `crosshair` and show the commands like `crosshair`, `crosshair_alpha`, .... If you try this you will notice the console will show you not only the possible command completions, but also more info to each possible completion: what is its current (local!) setting, what is its default setting (in square brackets) and a short description what the command does.
+
+In most cases you won’t know the exact command to type, and this is where a special command will help you: `apropos`. If you, for example, want to know how to do change screen resolution, you can just type `apropos resolution` into console, and the console will spit out all commands with description that have the string “resolution” in their name or in their description.
+
+A very important and widely used console command is the command to call a vote. If you want to see what votes are allowed on a server, type `vhelp`. To call a vote (for example, to end the match), type `vcall <vote>` (in my example `vcall endmatch`).
+
+If you’d like to know more about the Xonotic console, check out [BlaXpirit’s forum thread about console tips and tricks](http://forums.xonotic.org/showthread.php?tid=2987). In case you find consoles a little too nerdy, you can change game settings in a similar detailedness also via the “Advanced Settings” dialog located in the Settings Window → Misc Tab. The search function there works just like the apropos command in the console.
+
+Optimizing Perception
+=====================
+
+Xonotic aims to be pretty and to offer an immersive gameplay experience by using realistic lighting, complex particle effects and a harmonious sound environment. Whereas all these elements may help you to dive deeper into the game atmosphere, they also provide an overhead of information for you to process that sometimes has no other use than creating such atmosphere. In some cases this can even lead to gameplay relevant information getting lost under such overhead. This section deals with configuring Xonotic so you can see and hear well at the cost of atmosphere (a lot of which will get lost in the process).
+
+To apply the tweaks I’ll resort to showing console commands mostly, simply because it is much shorter to just show the command here than to describe the menu path where to set the relevant configuration option. So be sure to have read the Console ABC section if you’re not already familiar with the Xonotic console.
+
+Visuals
+-------
+
+First of all let me state that I myself usually play with more or less regular settings because I like to experience the great work developers, modelers and mappers have done to create decent graphics. But if you intend to play competitively, it can be to your advantage to lower the complexity of what is displayed in order to be able to fully focus on the information that is relevant for your gameplay. In this section I will try to point out a couple of settings that can help reduce complexity while maintaining all relevant information. Be warned though, if you follow all suggestions contained in this section your game will look pug-ugly to say the best.
+
+### Damage Blur
+
+The first thing to do is to disable the damage blur. Getting hit is already bad enough, you won’t want to punish yourself with temporary blindness additionally. This is so crucial that I even disabled this “feature” in the left screenshot above in the “Visuals” caption, otherwise you wouldn’t have been able to see a thing there. If you haven’t done so already, disable this by doing
+
+    hud_damage_blur 0
+
+While we’re at it, we can also reduce the damage flash when getting hit:
+
+    hud_damage 0.4
+
+### Field of View
+
+It obviously is crucial to see what is happening around you. To increase the area that you can see, adjust the field of view to your liking. While the default value is at 90, I personally play with a field of view of 120, and find this a quite usable setting. Remember though, that changing the field of view has an impact on your ability to aim, very similar to changing settings of your mouse sensitivity. The higher the field of view, the harder it can be to aim. I have a lousy aim anyway, so I can play with fov 120 alright. You can change the field of view in the menu or via console by:
+
+    fov 120 (adjust to your liking)
+
+### Visible Players
+
+Most player models are really hard to spot, as they are optimized to look good and, to some extent, realistic. This means their textures are subject to the usual rendering procedures which calculate how much light from the surroundings will be reflected by the player models. Consequently, most models are hard to see in dark corners, and don’t have a strong contrast to the background in general. There is one model though that uses “fullbright” textures, which are always displayed at full brightness, and this is the "Mega Erebus”. With 0.8.2, first steps were taken to add fullbright skins for each and every model, in the course of which the "Mega Erebus" got removed (a bit too early) from the model selection menu. As a consequence, you cannot select it via menu for the time being, so you'll have to use the console for that, as it's still available.
+
+    playermodel "models/player/megaerebus.iqm"
+
+Now there is a way to make every other player be displayed to you as “Mega Erebus” even if they selected a different model, and you can do that by selecting it for your own player and forcing your own model on everyone. This can be done via menu, but here’s the console command:
+
+    cl_forceplayermodels 1
+
+Be warned though that the sounds other players make still remain the same, so don’t be shocked if a Mega Erebus is commenting to you in a Pinky Pie voice on servers that have ponies enabled. If you dislike other people using colors that may blend too well into the map, you can also select a particularly bright color for yourself and force it onto everyone as well:
+
+    cl_forceplayercolors 1
+
+These settings obviously have the disadvantage that you become extremely visible to everyone else, too - but it would be rather unfair if you could make everyone extremely visible while staying a grey mouse, wouldn’t it?
+
+### Reducing Effects
+
+I personally strongly dislike blood splatter and gibs flying around as a matter of taste, but disabling all the gory mess also has visual advantages beyond personal preference. The more unnecessary detail gets rendered, the harder it is to filter out the information that is actually relevant. Therefore, turning off gibs is a good way to get rid of a whole bunch of effects that only get in your way if you want to keep an overview in the heat of a fight:
+
+    cl_gentle_gibs 1 (note that you may need to restart Xonotic or reconnect for this change to take effect)
+
+But not only gibs can obscure things, also particle effects of explosions, coronas and bloom can impact on visibility:
+
+    cl_particles_alpha 0.2 (feel free to experiment with values between 0 and 1)
+    cl_particles_sparks 0
+    cl_particles_blood 0
+    r_coronas 0
+    r_bloom 0
+
+### Picmip and Simple Items
+
+Now the game still looks somewhat ok-ish. Time to change this! Let’s get rid of all those details in textures that generate contrasts where it isn’t needed:
+
+    gl_picmip_world 10
+    gl_texturecompression 1 (if you like, or need faster loading)
+
+What, still looks the same? Well, then do
+
+    vid_restart
+
+and enjoy :D
+
+Some people even like to replace the beautiful pickup models by twodimensional, bright sprites. I personally don’t see a visibility benefit, but the bright symbols could be considered as easier to spot. To enable “simple items”, do:
+
+    cl_simple_items 1
+
+You will have to reconnect to the server (or, if you test it in a local game, type `restart` in console). Note that this change only works on servers that allow this setting to be used.
+
+### Crosshair
+
+The next thing is to set an always visible crosshair. Though I personally like the per-weapon crosshairs, they unfortunately are not very bright. With them, I often had the problem of identifying where that crosshair actually is in the middle of a battle. Even though I probably ended up landing quite some hits this way due to my particularly fuzzy aim which seldomly places the crosshair on the target, I decided to make the crosshair really visible, now that I deliberately chose to use the darn thing. You can very comfortably configure the crosshair via the menu or just copy my settings:
+
+    crosshair 27 (this is really all about personal preference)
+    crosshair_alpha 1
+    crosshair_effect_scalefade 0
+    crosshair_effect_time 0
+    crosshair_enabled 2
+    crosshair_dot 1
+    crosshair_dot_color 0.24 1 0.13 (this too is all about personal preference)
+    crosshair_per_weapon 0
+    crosshair_color_per_weapon 1 (if you like to know the weapon per crosshair color)
+    crosshair_ring 0 (this removes the vortex ring, keep it if you like to see it)
+    crosshair_ring_reload 1 (mg reload ring might be useful)
+    crosshair_ring_reload_size 1 (adjust to your liking, default is too big imho)
+    crosshair_size 0.28 (adjust to your liking)
+
+### Fine Tuning
+
+If you have already set up weapon binds following the instructions above and are really confident about them, you might even choose to remove the rendered first person weapon model so it doesn’t block your view:
+
+    r_drawviewmodel 0
+
+Now you’ll only know what weapon you hold by remembering the bind you pressed last and by the color of the crosshair. But if you managed to get the weapon binds into your cerebellum, this is manageable - decide for yourself if you’re ready for this. I started using this setting when publishing the [Newbie Corner \#6](http://www.xonotic.org/2013/09/halogenes-newbie-corner-part-6-optimizing-perception), and feel very comfortable with it for already quite a while.
+
+When using the zoom to improve sight in a fast paced game like Xonotic, you won’t want the view to be impaired by some mask around the crosshair that generates the impression you look through some binoculars or something:
+
+    cl_reticle 0
+
+Also, who wants to waste time for the transition between zoom and non-zoom?
+
+    cl_zoomspeed -1
+
+Ever since I configured a dedicated zoom key that I can use on all weapons (you can do so via the Menu, Settings window, Input tab), I got annoyed by the zoom getting lost upon switching the weapon, which results in loosing your aim just when it is crucial to hit. You can disable this by doing:
+
+    cl_unpress_zoom_on_weapon_switch 0
+
+Bobbing effects are generally only for conveying a “realistic feel” but don’t serve a purpose that’s important for the gameplay. Quite to the contrary, they make your view less steady. So you might want to switch off all sorts of bobbings:
+
+    cl_bobfall 0
+    cl_bobmodel 0
+    cl_bobup 0
+
+If you like to keep an eye on the action (and on who takes which items) when you get fragged, you can disable automatically showing the scoreboard when dead with:
+
+    cl_deathscoreboard 0
+
+Audio
+-----
+
+Apart from all the visual stuff, you can of course also improve perception by adjusting the audio settings. While there is quite some remarkably good music in Xonotic, in-game music can distract you and predominate pickup or movement sounds that you might want to hear. The same goes for ambient sounds. Whereas these greatly add to the atmosphere of the game, they can prevent you from predicting where an opponent will come from, what the player’s approximate health status is and what is being picked up. So if you can do without the atmosphere, you might want to turn those off via the menu.
\ No newline at end of file
index 2323054b22bcb5a55ee32dfceedd1a1e77850437..2c6d1f58fb5d2f8f4f5a4599dfe952961a2dca6c 100644 (file)
@@ -147,7 +147,7 @@ Xonotic supports several different game modes and some smaller changes called mu
 
        *Capture The Flag (CTF) is a team match in which you have two teams, two bases, and two flags.  You have to get into the enemy base, grab their flag, and bring it back to your own flag to score.  Scoring gives the most points, normal fragging and returning the flag gives some points.  The team with the most points wins. 
 
-       *Minstagib is an improved instagib.  You can pick up lives, so you can survive two shots, and you can pick up an item to become almost invisible.  This is were the minstanex got its name from.
+       *In Instagib you can pick up lives, so you can survive two shots, and you can pick up an item to become almost invisible.
 
        *Runematch places five runes into the map in addition to the normal items.  A rune gives you a bonus but also a curse - but you only get points for fragging if you carry a rune, so make sure you have one.  You also get points for fragging a rune carrier, and for just holding a rune (but fragging is the quicker way to gain points).  The player with the most points wins.
 
diff --git a/Docs/htmlfiles/faq.aft b/Docs/htmlfiles/faq.aft
deleted file mode 100644 (file)
index c40f794..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-#--- AFT (Almost Free Text) source file for Xonotic FAQ
-#--- WARNING: ALWAYS RUN AFT TWICE! (otherwise the toc is missing/not up to date)
-#--- use AFT v5.096 or later (http://www.maplefish.com/todd/aft.html)
-
-#---SET xversion=0.7
-#---SET zipname=xonotic-<version>.zip
-
-*Title: Xonotic %xversion% FAQ
-                       http://xonotic.com
-
-------
-
-*TOC
-
-------
-
-* Troubleshooting
-
-** How do I install Xonotic?
-Just unzip the |%zipname%| file.  You can do this with any archive program (like [7zip (http://7zip.org)]).  It's very important to keep the directory structure while unpacking (in WinZip this option is called "Use folder names").  The directory structure should look like this afterwards:
-^<<
-Xonotic/
-|-- Docs/
-|-- data/
-|   |-- common-spog.pk3
-|   `-- data*.pk3
-|-- Xonotic.app/
-|-- Xonotic-SDL.app/
-|-- server/
-|   `-- *
-|-- sources/
-|-- *.exe
-|-- *.dll
-`-- xonotic-linux-*
-^>>
-
-** When I start Xonotic all I see is a black screen or a black screen with some checkered squares
-This happens when the engine can't load the data*.pk3 file or has trouble to initialize OpenGL.  The reasons could be:
-       1. you unpacked the zip file without folder names (see [How do I install Xonotic?])
-       2. on Linux: the current directory is not your Xonotic/ folder.  See [How can I place a shortcut to Xonotic on my Linux desktop?] on how to fix this
-       3. on Mac: you tried to extract and move the files from a Xonotic update and it deleted the old files.  When using the mac GUI please be sure to move only the files not the folders as that will delete the old files or use the mv console command which will not delete the old files
-       4. the engine could not initialize OpenGL.  Please install the latest drivers for your graphic card.  You will probably find one for your card there: [intel (http://intel.com)] [ati (http://ati.com)] [nvidia (http://nvidia.com)]
-       5. your download might be corrupted, please download Xonotic again
-
-** Using Linux I only see the map but no players and items
-This happens when the engine has trouble to initialize OpenGL.  The reasons could be:
-       1. the engine could not initialize OpenGL.  Please install the latest drivers for your graphic card.  You will probably find one for your card there: [intel (http://intel.com)] [ati (http://ati.com)] [nvidia (http://nvidia.com)]
-       2. You do not have permissions needed for 3d acceleration.  Usually you need to add yourself to the group |video|, you can do that via console as root like this: |usermod -a -G video YOURUSERNAME|.  You need to logoff/in afterwards.
-
-** When I start Xonotic my screen is flickering
-This is known to happen on Windows with Intel graphic chips and is a bug in the graphics drivers.  A workaround is to set |Flip-Policiy| to |blit|.  Open the control panel, there should be an icon called |Intel(R) GMA driver| (or something like that), double click it. Click on |3D Settings| to find the screen with those settings.
-
-** How can I speed up my frame rate?
-You can choose predefined performance settings in the |Settings / Video| menu.  |Normal| is the default, |Medium| and |Low| run faster while |High|, |Ultra| and |Ultimate| enable more features you might want to test if you have a high end graphic card.  Or you can enable/disable single features.  The greatest performance boost can be achieved by turning off dynamic lights and shadows in the |Settings / Effects| menu.  Bloom is also quite resource intensive.  Other fps boots include disabling |Deluxemapping| and |Coronas|.  On older graphics cards or on-board/notebook chips with little video ram you can try to lower the texture quality in the |Settings / Video| menu.
-Some graphic cards (mostly ATI or quite old cards) run A LOT faster if you disable the |Vertex Buffer Objects| in the |Settings / Video| menu.  An other thing that can greatly help on such cards is to disable the |OpenGL 2.0 Shaders|.  Having that option enabled is faster on most cards however that is why both are active by default.
-
-** The sound is broken, it crackles and stutters
-Try run |xonotic-sdl.exe| instead of |xonotic.exe| (on Windows).  Adding the command line options |-sndspeed 48000| and/or |-sndstereo| can also help on some systems (on Linux, Mac, Windows).
-
-** Mouse is too slow and sensitivity is at top (on Mac / Linux)
-Mac: The default mouse acceleration on Mac is very high and strange.  The Xonotic defaults work fine with it but some mouse drivers seem to 'correct' the mouse acceleration and conflict with the Xonotic defaults.  Try to disable the option |Turn off OS mouse acceleration| in the |Settings / Input| menu.  Or the same via console: |apple__mouse__noaccel 0; vid__restart| ([How do I open the console?])
-Linux: A similar problem can arise on Linux.  Its also |Turn off OS mouse acceleration| in the |Settings / Input| menu but the console command is different: |vid__dga 0; vid__restart| ([How do I open the console?])
-
-** I can't switch to 32 bit color depth (on Windows)
-Check if your desktop color depth is set to 32 bits per pixel.  If it's just set to 16, Xonotic can't switch to 32 bit mode.
-
-** When I join a server or after a map change I see nothing but a black screen, but I can still move and shoot
-This is probably because you don't have the map that's running on the server.  As Xonotic supports map/content download the server might not be be setup (correctly) to support this and you will have to get the map the old fashioned way.  Those servers should have a download URL in their name or welcome message.  There is also a [wiki page (http://dev.xonotic.org/projects/xonotic/wiki/Maps)] dedicated to new maps.
-For Linux users: you need to have libcurl installed, otherwise you won't be able to download any maps.  libcurl should be available in any Linux distribution, just search for "libcurl" and install it in your distribution's package manager.
-
-** How to report crashes
-Register at http://dev.xonotic.org and submit a bug report.
-
-On Mac: IS THERE AN EASY WAY?
-
-On Linux: In a xterm, |cd| into your Xonotic installation directory, start |catchsegv ./xonotic-linux-686-sdl -condebug -developer > crash.txt 2>&1| and give the file crash.txt to the developers.  Note that you can also use |./xonotic-linux-686-glx| or if you have a 64bit system |./xonotic-linux-x86__64-sdl| and |./xonotic-linux-x86__64-glx|
-
-On Windows: Click Start->Run, and enter drwtsn32, click Ok in the next window, run Xonotic and wait for the crash.  Then go to |C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson| there should be a file called "drwtsn32.log", give that file along with the engine's build date to the developers.  You'll see that date when you open the ingame console ([How do I open the console?]).  Note that some folders of that path may be hidden or have a translated name if you're using a non-english windows.
-
-** Where can I get more help?
-Visit [the official Xonotic forum (http://xonotic.org/forum)] there is a [support and bug report area (http://dev.xonotic.org)].  Or get on [IRC (http://en.wikipedia.org/wiki/Internet__Relay__Chat)] to chat with other or ask for help.  There is the normal users channel (irc://irc.quakenet.org/xonotic) and the developers channel (irc://irc.freenode.net/xonotic)
-
-* General questions
-
-** How do I install new maps?
-Maps usually ship as *.pk3 file.  All you have to do is to copy this file to the |Xonotic/data/| (on Linux, Mac, Windows) OR |~/.xonotic/data/| (on Linux, Mac) directory.
-Map packages that were downloaded from a server during playing end up in |Xonotic/data/dlcache/| or |~/.xonotic/data/dlcache/| and are only used till you exit Xonotic. If you want to play them locally or use them to setup a server of your own you can "accept" the packages by moving it one level up - right next to your config.cfg.
-
-** How can I place a shortcut to Xonotic on my Linux desktop?
-Use the script |xonotic-linux-sdl.sh| or |xonotic-linux-glx.sh| instead of the binaries.  The scripts will use the correct |working directory|,choose the right version (32 or 64 bit) and also allow you to start a extra X server.
-
-** How do I open the console?
-Press |\[shift]+\[escape]|.  To close it press |\[escape]|.  While playing ` or ^ will also open the console.
-
-** What console commands/variables are there?
-You can get a list of variables by entering |cvarlist| on the console ([How do I open the console?]).  |cmdlist| will give you a list of available commands.  
-
-#An annotated version of that output can be found at the [Xonotic wiki (http://xx.org/wiki/pmwiki.php?n=Main.ConsoleCommands)].
-
-** How can I use colors in my nickname and messages?
-Colors can be used in nicknames and chat messages via two ways: Either the simple way by typing ^ followed by a number between 0 and 9 or by typing ^x followed by three hexadecimal numbers (0-F) representing red, green and blue components of the color before the text. The second way allows for much more colors. For example if you type ^xF00message the text "message" will be displayed in red color. Simple examples:
-
-       !        !            !                        !
-       ! code   ! rgb code   ! color                  !
-       !--------!-------------------------------------!
-       ! ^0     ! ^x000      ! black                  !
-       !--------!-------------------------------------!
-       ! ^1     ! ^xF00      ! red                    !
-       !--------!-------------------------------------!
-       ! ^2     ! ^x0F0      ! green                  !
-       !--------!-------------------------------------!
-       ! ^3     ! ^xFF0      ! yellow                 !
-       !--------!-------------------------------------!
-       ! ^4     ! ^x00F      ! blue                   !
-       !--------!-------------------------------------!
-       ! ^5     ! ^x0FF      ! cyan                   !
-       !--------!-------------------------------------!
-       ! ^6     ! ^xF0F      ! magenta                !
-       !--------!-------------------------------------!
-       ! ^7     ! ^xFFF      ! white                  !
-       !--------!-------------------------------------!
-       ! ^8     !            ! half-transparent black !
-       !--------!-------------------------------------!
-       ! ^9     ! ^x888      ! grey                   !
-       !--------!-------------------------------------!
-       !        ! ^x800      ! dark red               !
-       !--------!-------------------------------------!
-       !        ! ^x080      ! dark green             !
-       !--------!-------------------------------------!
-       !        ! ^x880      ! dark yellow            !
-       !--------!-------------------------------------!
-       !        ! ^x008      ! dark blue              !
-       !--------!-------------------------------------!
-       !        ! ^x088      ! dark cyan              !
-       !--------!-------------------------------------!
-       !        ! ^x808      ! dark magenta           !
-       !--------!-------------------------------------!
-
-** How do I watch/record demos?
-Demos are recordings of matches that you have played. To automatically record a demo each time you play enable the option |Record demos while playing| in the |Multiplayer / Demos| menu. Or if you just want to record some matches open the console and type |rec <demos/name>| before playing. That is before starting a game or connecting to a server. The demo file will then be stored in |Xonotic/data/demos/<name>.dem| (on Windows) or |~/.xonotic/data/demos/<name>.dem| (on Linux, Mac).
-If you downloaded a demo, copy it to |Xonotic/data/demos/<name>.dem| (on Linux, Mac, Windows) or |~/.xonotic/data/demos/<name>.dem| (on Linux, Mac).  You might have to create this directory if you have never recorded a demo before.
-To watch demos you can choose a demo file in the |Multiplayer / Demos| and click the play button. Also you can watch demos typing |ply <demos/name>| in the console ([How do I open the console?]). You can list all your demo files by typing |dem| on the console.  
-
-* Server setup
-
-** How do I start a server?
-Use the |Multiplayer / Create| menu to start a |listen server|.  You will always have to play yourself in a |listen server|.
-If you want to create a server without being forced to play yourself please take a look at the file |readme.txt| in the |Xonotic/server/| directory where the |dedicated server| is explained.
-
-** Which ports do I have to open in firewall/forward from my router to run a server?
-The default port is 26000 UDP.  You can change that in the |Multiplayer / Create| menu or by starting Xonotic with the parameter |-port <port>| or having a line |port <port>| in the server config file.
-If you follow the tutorial mentioned above you do not need this command line argument as it will be done in the config file created for the server.  To add the command line argument on Windows, create a new shortcut to |xonotic.exe| or |xonotic-dedicated.exe| and right click on it.  Select properties and |-port <port>| in the "Target:" line.  Be sure that the "Start in:" line contains the full path to your Xonotic folder and click "OK".  The parameter will be used if you start Xonotic via that new shortcut.
-
-** Is there some kind of rcon?
-Yes there is a QuakeWorld compatible rcon.  To use it you must enter |rcon__password <password>| in the server console or server config file.  The Xonotic client has to set the same password in the same fashion.  You can then issue commands with |rcon <command>| if you are connected to the server or will have to set |rcon__address <ip/hostname>| or |rcon__address <ip/hostname>:<port>| to point to the server.  There are also external rcon tools but make sure you use a QW compatible rcon tool.
-
-** How can I kick people who are using special characters in their names?
-Enter |status| at the server console.  You will see a list of all players.  In front of their names you will see a number (the player id).  You can kick the player you don't like with |kick # <player id> <reason>| (notice the space after #).
-
-* Development
-
-** How can I create or edit Xonotic maps?
-You need [NetRadiant (http://icculus.org/netradiant/)], a stabilized Q3 map editor. For convenience, a snapshot configured for Xonotic is included in |extra/| for Windows and MAC-Intel, but the program is not officially supported by Xonotic.
-
-** Where can I get latest development versions of the source code?
-Please refer to http://dev.xonotic.org/projects/xonotic/wiki/Repository_Access
-
-_Game data:_ to check out Xonotic git, you'll need a [git client (http://git-scm.com/)].  
-
-For more information on how to compile the game please see http://dev.xonotic.org/projects/xonotic/wiki/Repository_Access#Cloning-the-repository-and-compiling and http://dev.xonotic.org/projects/xonotic/wiki/Compiling_In_Windows
index 7ea9db6429f7c72341c5f54c6559686b9d2491a7..13376aa6d50c51af3b84c9cc3fde7b9635e0186e 100644 (file)
@@ -5,11 +5,11 @@ ______________
 CLIENT SIDE:\r
 \r
 Should already work without configuration. You can however use the following\r
-cvars for further tuning:\r
+cvars for further tuning (see xonotic.org/tools/cacs for more up-to-date information):\r
 \r
-   cl_curl_enabled              download support enabled (master switch, default: 1)\r
-   cl_curl_maxdownloads         maximum number of downloads at once (default: 1)\r
-   cl_curl_maxspeed             maximum total speed in KiB/s (default: 100)\r
+   cl_curl_enabled              download support enabled (master switch)\r
+   cl_curl_maxdownloads         maximum number of downloads at once\r
+   cl_curl_maxspeed             maximum total speed in KiB/s\r
 \r
 Downloaded packages end up in |Xonotic/data/dlcache/| or\r
 |~/.xonotic/data/dlcache/| and are only used till you exit Xonotic.\r
index edfb0ef81c6213702a9f5b52ffed10a2bf7a5366..5ab3e356c2a97148bf875803a0aba3c7bb16772a 100644 (file)
@@ -57,14 +57,13 @@ data/data/wazat1.mapinfo for me. The file may look like:
     _diameter 1966.839355\r
     _spawnpoints 5\r
     has weapons\r
-       cdtrack 5\r
+    cdtrack 5\r
     gametype dm // defaults: timelimit=20 pointlimit=30 leadlimit=0\r
     gametype dom // defaults: timelimit=20 pointlimit=200 teams=2 leadlimit=0\r
     gametype lms // defaults: timelimit=20 lives=9 leadlimit=0\r
-    gametype arena // defaults: timelimit=20 pointlimit=10 leadlimit=0\r
 \r
 As I see, the menu autodetected that my map may be suitable for deathmatch,\r
-domination, last man standing and arena. But I want the map to be played in\r
+domination, last man standing and keepaway. But I want the map to be played in\r
 domination, deathmatch, team deathmatch only, and I also want different\r
 timelimits/fraglimits, so I will change the "gametype" lines to:\r
 \r
@@ -85,7 +84,7 @@ the right game modes and with the right description in the menu.
 \r
 Also, note the "has weapons" line. If this line is not there (which happens if\r
 the map contains no weapon entities other than the Nex), the map will run in\r
-MinstaGib only and not be shown in the menu normally. So if you look for your\r
+InstaGib only and not be shown in the menu normally. So if you look for your\r
 map and don't find it, add "has weapons" to the mapinfo file, and make sure you\r
 have weapon entities placed.\r
 \r
@@ -98,7 +97,6 @@ Team Deathmatch | gametype tdm [timelimit=...] [pointlimit=...] [teams=...] [lea
 Domination      | gametype dom [timelimit=...] [pointlimit=...] [teams=...] [leadlimit=...]                                | 2, 3, or 4 teams, only if map has no dom_team ents\r
 CTF             | gametype ctf [timelimit=...] [caplimit=...] [leadlimit=...]                                              |\r
 LMS             | gametype lms [timelimit=...] [lives=...] [leadlimit=...]                                                 |\r
-Arena           | gametype arena [timelimit=...] [pointlinit=...] [leadlimit=...]                                          |\r
 Key Hunt        | gametype kh [timelimit=...] [pointlimit=...] [teams=...] [leadlimit=...]                                 | 2, 3, or 4 teams\r
 Assault         | gametype as [timelimit=...]                                                                              | never uses points\r
 Onslaught       | gametype ons [timelimit=...]                                                                             | never uses points\r
@@ -380,9 +378,9 @@ mapinfo file.
 \r
 To do this, I can add the following lines to my mapinfo file:\r
 \r
-    settemp_for_type ctf g_balance_laser_primary_force 200\r
-    settemp_for_type all g_start_weapon_shotgun 0\r
-    settemp_for_type all g_start_weapon_uzi 1\r
+    settemp_for_type ctf g_balance_blaster_primary_force 200\r
+    settemp_for_type all g_balance_shotgun_weaponstart 0\r
+    settemp_for_type all g_balance_machinegun_weaponstart 1\r
     settemp_for_type all sv_cullentities_trace 0\r
 \r
 These "settemp" settings are automatically removed when the map is left and\r
index 528e40a8e8f165d4436b7e5f78a3653bfcd2472e..b1e6b851b8ef2a34cc3b98b914dd00d8946e45ba 100644 (file)
@@ -1,11 +1,10 @@
-cvars:\r
+cvars (see xonotic.org/tools/cacs for more up-to-date information):\r
 ______________\r
 \r
-   sv_logscores_console                print scores to serverconsole after each match (default: 0, set to 1 to enable)\r
-   sv_logscores_file           print scores to a file after each match (default: 0)\r
-   sv_logscores_filename       filename of the output file if sv_logscores_file is enabled (default: "scores.log",\r
-                                 the file will be stored in Xonotic/data/data or ~/.xonotic/data/data)\r
-   sv_logscores_bots           choose whether bot are included in stats or not (default: 0)\r
+   sv_logscores_console                print scores to serverconsole after each match (set to 1 to enable)\r
+   sv_logscores_file           print scores to a file after each match \r
+   sv_logscores_filename       filename of the output file if sv_logscores_file is enabled (the file will be stored in Xonotic/data/data or ~/.xonotic/data/data)\r
+   sv_logscores_bots           choose whether bot are included in stats or not\r
 \r
 \r
 commands:\r
index 72c166777556653686b746b591b880a2ef59d047..85fbe91883680894b6d8c2e0e81e51d2287a92e1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-DESTDIR ?= 
+DESTDIR ?=
 PREFIX ?= /usr/local
 BINDIR ?= $(PREFIX)/bin
 LIBDIR ?= $(PREFIX)/lib/xonotic
@@ -19,7 +19,7 @@ all: all-$(SUFFIX)
 
 .PHONY: all-git
 all-git:
-       ./all compile -r
+       ./all compile
 
 .PHONY: all-zip-binary
 all-zip-binary:
@@ -30,7 +30,7 @@ all-zip-source:
        ( cd source/d0_blind_id && ./configure --enable-static --disable-shared $(RIJNDAELDETECT_CONFIGURE) )
        $(MAKE) -C source/d0_blind_id
        $(MAKE) -C source/gmqcc
-       $(MAKE) -C source/qcsrc FTEQCC=$(CURDIR)/source/gmqcc/gmqcc
+       $(MAKE) -C source/qcsrc QCC=$(CURDIR)/source/gmqcc/gmqcc
        $(MAKE) -C source/darkplaces sv-release DP_CRYPTO_STATIC_LIBDIR=$(CURDIR)/source/d0_blind_id/.libs
        $(MAKE) -C source/darkplaces cl-release DP_CRYPTO_STATIC_LIBDIR=$(CURDIR)/source/d0_blind_id/.libs
        $(MAKE) -C source/darkplaces sdl-release DP_CRYPTO_STATIC_LIBDIR=$(CURDIR)/source/d0_blind_id/.libs
@@ -49,7 +49,7 @@ clean-zip-binary:
 
 .PHONY: clean-zip
 clean-zip-source:
-       -$(MAKE) -C source/d0_blind_id distclean
+       $(MAKE) -C source/d0_blind_id distclean
        $(MAKE) -C source/gmqcc clean
        $(MAKE) -C source/qcsrc clean
        $(MAKE) -C source/darkplaces clean
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..c3fbbba
--- /dev/null
+++ b/README.md
@@ -0,0 +1,54 @@
+# Xonotic
+
+![Xonotic Logo](http://xonotic.org/static/img/xonotic-logo.png)
+
+Xonotic is an addictive, arena-style first person shooter with crisp movement and a wide array of weapons. It combines intuitive mechanics with in-your-face action to elevate your heart rate. Xonotic is and will always be free-to-play. It is available under the [copyleft](https://www.gnu.org/copyleft/)-style [GPLv2](http://www.gnu.org/licenses/gpl-2.0.html) license.
+
+*Please note, [Gitlab](http://gitlab.com/xonotic/) is our home for repositories, issue tracking, wikis, etc. The repositories on GitHub are mirrors of GitLab's unless specified otherwise.*
+
+## Download
+
+### LATEST RELEASE: Xonotic 0.8.2 for Linux, Windows, and macOS
+
+If you're just here to play, you can download Xonotic as a zip package, torrent, or by using one of [these alternative methods](http://xonotic.org/download/).
+
+- [Download as torrent](http://dl.xonotic.org/xonotic-0.8.2.zip.torrent)
+- [Download as zip](http://dl.xonotic.org/xonotic-0.8.2.zip)
+
+No installation required, just unpack and run. Got questions? See the [FAQ](http://xonotic.org/faq) or [live chat](http://xonotic.org/chat/) with us.
+
+**sha256sum**: a22f7230f486c5825b55cfdadd73399c9b0fae98c9e081dd8ac76eca08359ad5  
+**Package size**: 946M  
+
+## Contributing
+
+We're mainly looking for help in the following areas:
+
+- [Translations](https://www.transifex.com/team-xonotic/xonotic/)
+- [Modeling and texturing](https://gitlab.com/xonotic/xonotic-data.pk3dir/issues?label_name=Area%3A+Assets)
+- Documentation
+  - Some of it is still scattered in [Docs](https://gitlab.com/xonotic/xonotic/tree/master/Docs) instead of being on our [wiki](https://gitlab.com/xonotic/xonotic/wikis/home)
+  - Some [wiki](https://gitlab.com/xonotic/xonotic/wikis/home) pages are slightly out of date or contain links to empty pages
+  - Fixing typos everywhere and anywhere - attention to detail is important to make a good impression on potential players
+  - Even if you're new, just letting us know what you're struggling with helps so we can focus on improving those areas first
+- Testing
+  - If you're running a server or play off-line often, please consider using the [autobuild](https://gitlab.com/xonotic/xonotic/wikis/Autobuilds) or [git](https://gitlab.com/xonotic/xonotic/wikis/Repository_Access) versions to help us find bugs (when playing online, the server's version of the gamecode is downloaded and used by all clients so you have to play offline or run your own server for testing)
+- PR
+  - Please don't create anything that looks official (social media accounts, entries on pages like steam, etc.) without contacting us, we like to manage things ourselves to keep the information up to date
+  - All other kinds of PR are very welcome - make videos or articles, share links, spread the word
+
+## Developing
+
+To compile the latest revision from git, [follow this guide](https://gitlab.com/xonotic/xonotic/wikis/Repository_Access). Learn more about the [directory structure here](https://gitlab.com/xonotic/xonotic/wikis/Git), or check out [our project page on GitLab](https://gitlab.com/groups/xonotic) to see development activity and code ([xonotic-data](https://gitlab.com/xonotic/xonotic-data.pk3dir) is where most development takes place).
+
+## Community
+
+The community is primarily active in the [forums](http://forums.xonotic.org/) and IRC, `#xonotic` on either `irc.freenode.net` (developer chat) or `irc.quakenet.org` (player chat).
+
+## Wiki
+
+[Our Gitlab wiki](https://gitlab.com/xonotic/xonotic/wikis/home) has a lot of information related to developing, playing or otherwise contributing to the game.
+
+## License
+
+Distributed under the GPLv2 license. See the [COPYING](COPYING) file for more details.
diff --git a/all b/all
index 7d54d00cae2823eda957da69789660020f2d8dd8..ca2a093cc9706400f1baf6a10bd3da1467116ed7 100755 (executable)
--- a/all
+++ b/all
@@ -19,15 +19,22 @@ LF="
 ESC="\e"
 
 d00=`pwd`
-while ! [ -f ./all ]; do
-       if [ x"`pwd`" = x"/" ]; then
+case "$0" in
+       /*/all)
+               export d0="${0%/all}"
+               ;;
+       */all)
+               export d0="$d00/${0%/all}"
+               ;;
+       */all.xonotic.sh)
+               ;;
+       *)
                $ECHO "Cannot find myself."
                $ECHO "Please run this script with the working directory inside a Xonotic checkout."
-               exit 1
-       fi
-       cd ..
-done
-export d0=`pwd`
+               ;;
+esac
+cd "$d0"
+d0=`pwd`
 SELF="$d0/all"
 
 # If we are on WINDOWS:
index 052ccab141794dde8da03f11f6a66b69bc65d248..a53420f781c5930187d09a01098da632e76a8329 100644 (file)
@@ -6,7 +6,7 @@ loadfont chat fonts/DejaVuSans-Bold,gfx/vera-sans $con_chatsize
 loadfont centerprint fonts/DejaVuSansMono,gfx/conchars 9
 loadfont infobar fonts/DejaVuSansMono,gfx/conchars 8 12 $scr_loadingscreen_barheight $scr_infobar_height
 loadfont user0 fonts/DejaVuSans-Bold,gfx/vera-sans 12
-loadfont user1 fonts/DejaVuSans-Bold,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize $scr_centersize // csqc font
-loadfont user2 fonts/DejaVuSans-Bold,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize $scr_centersize // csqc boldfont
-loadfont user3 fonts/DejaVuSans-Bold,gfx/vera-sans 16
+loadfont user1 fonts/DejaVuSans-Bold,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize // csqc font
+loadfont user2 fonts/DejaVuSans-Bold,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize // csqc boldfont
+loadfont user3 fonts/DejaVuSans-Bold,gfx/vera-sans 12 16
 scoreboard_columns_set
index 0e23ff5c916e3d13c4dc4a9d1d35808fce462b7d..8922ca0905494aca142a6873077bd1b3f25c6b8c 100644 (file)
@@ -1,12 +1,12 @@
 // must be loaded AFTER config.cfg
 set menu_font_cfg font-nimbussansl.cfg
-loadfont console fonts/unifont-5.1.20080907,gfx/vera-sans $con_textsize
-loadfont notify fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans $con_notifysize
-loadfont chat fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans $con_chatsize
-loadfont centerprint fonts/unifont-5.1.20080907,gfx/vera-sans 9
-loadfont infobar fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 8 12 $scr_loadingscreen_barheight $scr_infobar_height
-loadfont user0 fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 12 // menu font
-loadfont user1 fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize $scr_centersize // csqc font
-loadfont user2 fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize $scr_centersize // csqc boldfont
-loadfont user3 fonts/n019004l.pfb,fonts/unifont-5.1.20080907,gfx/vera-sans 16 // menu boldfont
+loadfont console fonts/unifont,gfx/vera-sans $con_textsize
+loadfont notify fonts/n019004l.pfb,fonts/unifont,gfx/vera-sans $con_notifysize
+loadfont chat fonts/n019004l.pfb,fonts/unifont,gfx/vera-sans $con_chatsize
+loadfont centerprint fonts/unifont,gfx/vera-sans 9
+loadfont infobar fonts/n019004l.pfb,fonts/unifont,gfx/vera-sans 8 12 $scr_loadingscreen_barheight $scr_infobar_height
+loadfont user0 fonts/n019004l.pfb,fonts/unifont,gfx/vera-sans 12 // menu font
+loadfont user1 fonts/n019004l.pfb,fonts/unifont,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize // csqc font
+loadfont user2 fonts/n019004l.pfb,fonts/unifont,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize // csqc boldfont
+loadfont user3 fonts/n019004l.pfb,fonts/unifont,gfx/vera-sans 12 16 // menu boldfont
 scoreboard_columns_set
diff --git a/data/font-nimbussansl.pk3dir/fonts/unifont-5.1.20080907.ttf b/data/font-nimbussansl.pk3dir/fonts/unifont-5.1.20080907.ttf
deleted file mode 100644 (file)
index ecc911d..0000000
Binary files a/data/font-nimbussansl.pk3dir/fonts/unifont-5.1.20080907.ttf and /dev/null differ
diff --git a/data/font-unifont.pk3dir/fonts/README b/data/font-unifont.pk3dir/fonts/README
new file mode 100644 (file)
index 0000000..c0867d6
--- /dev/null
@@ -0,0 +1,2 @@
+GNU Unifont 7.0.06
+http://unifoundry.com/unifont.html
diff --git a/data/font-unifont.pk3dir/fonts/unifont.ttf b/data/font-unifont.pk3dir/fonts/unifont.ttf
new file mode 100644 (file)
index 0000000..cefc731
Binary files /dev/null and b/data/font-unifont.pk3dir/fonts/unifont.ttf differ
index 023b64ea0078b34d5c5ddb7c6f646fe38c322a7a..2f98e326f4515dd706b7d9d1bd48d4a2fd053b06 100644 (file)
@@ -1,12 +1,12 @@
 // must be loaded AFTER config.cfg
 set menu_font_cfg font-xolonium.cfg
-loadfont console fonts/unifont-5.1.20080907,gfx/vera-sans $con_textsize
-loadfont notify fonts/xolonium-regular.otf,fonts/unifont-5.1.20080907,gfx/vera-sans $con_notifysize
-loadfont chat fonts/xolonium-regular.otf,fonts/unifont-5.1.20080907,gfx/vera-sans $con_chatsize
-loadfont centerprint fonts/xolonium-regular.otf,fonts/unifont-5.1.20080907,gfx/vera-sans 9
-loadfont infobar fonts/xolonium-regular.otf,fonts/unifont-5.1.20080907,gfx/vera-sans 8 12 $scr_loadingscreen_barheight $scr_infobar_height
-loadfont user0 fonts/xolonium-regular.otf,fonts/unifont-5.1.20080907,gfx/vera-sans 12 // menu font
-loadfont user1 fonts/xolonium-regular.otf,fonts/unifont-5.1.20080907,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize $scr_centersize // csqc font
-loadfont user2 fonts/xolonium-bold.otf,fonts/unifont-5.1.20080907,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize $scr_centersize // csqc bold font
-loadfont user3 fonts/xolonium-bold.otf,fonts/unifont-5.1.20080907,gfx/vera-sans 16 // menu boldfont
+loadfont console fonts/unifont,fonts/xolonium-regular.otf,gfx/vera-sans $con_textsize
+loadfont notify fonts/xolonium-regular.otf,fonts/unifont,gfx/vera-sans $con_notifysize
+loadfont chat fonts/xolonium-regular.otf,fonts/unifont,gfx/vera-sans $con_chatsize
+loadfont centerprint fonts/xolonium-regular.otf,fonts/unifont,gfx/vera-sans 9
+loadfont infobar fonts/xolonium-regular.otf,fonts/unifont,gfx/vera-sans 8 12 $scr_loadingscreen_barheight $scr_infobar_height
+loadfont user0 fonts/xolonium-regular.otf,fonts/unifont,gfx/vera-sans 12 // menu font
+loadfont user1 fonts/xolonium-regular.otf,fonts/unifont,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize // csqc font
+loadfont user2 fonts/xolonium-bold.otf,fonts/unifont,gfx/vera-sans 4 6 8 10 12 14 16 20 24 28 32 $hud_fontsize // csqc bold font
+loadfont user3 fonts/xolonium-bold.otf,fonts/unifont,gfx/vera-sans 12 16 // menu boldfont
 scoreboard_columns_set
old mode 100644 (file)
new mode 100755 (executable)
index 49f9141..2fff41d
@@ -1,25 +1,32 @@
-Xolonium Font
-Copyright (C) 2011-2012 Severin Meyer <sev.ch@web.de>
-
-This font 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.
-
-As a special exception, if you create a document which uses this font,
-and embed this font or unaltered portions of this font into the
-document, this font does not by itself cause the resulting document
-to be covered by the GNU General Public License. This exception
-does not however invalidate any other reasons why the document might
-be covered by the GNU General Public License. If you modify this font,
-you may extend this exception to your version of the font, but you are
-not obligated to do so. If you do not wish to do so, delete this
-exception statement from your version.
+Copyright 2011-2016 Severin Meyer <sev.ch@web.de>
+
+
+This is a special GPL version of the Xolonium font,
+intended for Xonotic. Find the public release at
+<http://fontlibrary.org/font/xolonium>
+
+
+This font is free software. You can redistribute 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 any later version.
 
 This font 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.
+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 font. If not, see <http://www.gnu.org/licenses/>.
+
+
+As a special exception, if you create a document which uses this
+font, and embed this font or unaltered portions of this font into
+the document, this font does not by itself cause the resulting
+document to be covered by the GNU General Public License.
+
+This exception does not however invalidate any other reasons why
+the document might be covered by the GNU General Public License.
+If you modify this font, you may extend this exception to your
+version of the font, but you are not obligated to do so. If you do
+not wish to do so, delete this exception statement from your version.
diff --git a/data/font-xolonium.pk3dir/fonts/unifont-5.1.20080907.ttf b/data/font-xolonium.pk3dir/fonts/unifont-5.1.20080907.ttf
deleted file mode 100644 (file)
index ecc911d..0000000
Binary files a/data/font-xolonium.pk3dir/fonts/unifont-5.1.20080907.ttf and /dev/null differ
index 6363dbd01cb8e03c55d6340645cbd64ef2a0fa96..cdcbb2870a1860999553482ef5b7e871fc419f8e 100644 (file)
Binary files a/data/font-xolonium.pk3dir/fonts/xolonium-bold.otf and b/data/font-xolonium.pk3dir/fonts/xolonium-bold.otf differ
index 11241c2d89c14906584bff10dc6cd0e7517a0846..0d22516e19fd2f6d1106636e6505f8e68befe03e 100644 (file)
Binary files a/data/font-xolonium.pk3dir/fonts/xolonium-regular.otf and b/data/font-xolonium.pk3dir/fonts/xolonium-regular.otf differ
diff --git a/default.nix b/default.nix
new file mode 100644 (file)
index 0000000..c523b56
--- /dev/null
@@ -0,0 +1,2 @@
+{ pkgs ? import <nixpkgs> {}, cc ? null }@args:
+pkgs.callPackage ./derivation.nix args
diff --git a/derivation.nix b/derivation.nix
new file mode 100644 (file)
index 0000000..d036571
--- /dev/null
@@ -0,0 +1,587 @@
+# nix-shell -A shell
+# ./nix-build.sh -A xonotic
+# --argstr cc clang
+# for it in $(./nix-build.sh -A dockerImage --no-out-link); do docker load -i $it; done
+{
+    pkgs, lib,
+    cc ? null,
+    cmake ? pkgs.cmake_2_8,
+}:
+let
+    VERSION = "0.8.2";
+
+    x = {
+        # https://gitlab.com/xonotic/xonotic
+        srcs."xonotic" = localFilesMain ./.;
+        vers."xonotic" = "${VERSION}";
+
+        srcs."data/font-dejavu" = localFiles ./data/font-dejavu.pk3dir;
+        vers."data/font-dejavu" = "xonotic-${VERSION}";
+
+        srcs."data/font-nimbussansl" = localFiles ./data/font-nimbussansl.pk3dir;
+        vers."data/font-nimbussansl" = "xonotic-${VERSION}";
+
+        srcs."data/font-unifont" = localFiles ./data/font-unifont.pk3dir;
+        vers."data/font-unifont" = "xonotic-${VERSION}";
+
+        srcs."data/font-xolonium" = localFiles ./data/font-xolonium.pk3dir;
+        vers."data/font-xolonium" = "xonotic-${VERSION}";
+
+
+        # https://gitlab.com/xonotic/d0_blind_id
+        srcs."d0_blind_id" = localFiles ./d0_blind_id;
+        vers."d0_blind_id" = "xonotic-${VERSION}";
+
+
+        # https://gitlab.com/xonotic/darkplaces
+        srcs."darkplaces" = localFiles ./darkplaces;
+        vers."darkplaces" = "xonotic-${VERSION}";
+
+
+        # https://gitlab.com/xonotic/gmqcc
+        srcs."gmqcc" = localFiles ./gmqcc;
+        vers."gmqcc" = "xonotic-${VERSION}";
+
+
+        # https://gitlab.com/xonotic/netradiant
+        srcs."netradiant" = localFiles ./netradiant;
+        vers."netradiant" = "xonotic-${VERSION}";
+
+
+        # https://gitlab.com/xonotic/xonotic-data.pk3dir
+        srcs."data/xonotic-data" = localFilesCustom ./data/xonotic-data.pk3dir (name: type: type == "directory" || !(isCode name));
+        vers."data/xonotic-data" = builtins.getEnv "VERSION_data_xonotic_data_pk3dir";
+
+        srcs."data/xonotic-data/qcsrc" = localFilesCustom ./data/xonotic-data.pk3dir (name: type: type == "directory" || (isCode name));
+        vers."data/xonotic-data/qcsrc" = vers."data/xonotic-data";
+
+
+        # https://gitlab.com/xonotic/xonotic-maps.pk3dir
+        srcs."data/xonotic-maps" = localFiles ./data/xonotic-maps.pk3dir;
+        vers."data/xonotic-maps" = "${VERSION}";
+
+        # https://gitlab.com/xonotic/xonotic-music.pk3dir
+        srcs."data/xonotic-music" = localFiles ./data/xonotic-music.pk3dir;
+        vers."data/xonotic-music" = "${VERSION}";
+
+        # https://gitlab.com/xonotic/xonotic-nexcompat.pk3dir
+        srcs."data/xonotic-nexcompat" = localFiles ./data/xonotic-nexcompat.pk3dir;
+        vers."data/xonotic-nexcompat" = "${VERSION}";
+    };
+    inherit (x) srcs vers;
+
+    localFilesMain = src: let
+        project = toString ./.;
+        cleanSourceFilterMain = name: type: let
+            baseName = baseNameOf (toString name);
+            result = (cleanSourceFilter name type)
+                && !(name == "${project}/release")
+                && !(name == "${project}/d0_blind_id")
+                && !(name == "${project}/daemon")
+                && !(name == "${project}/darkplaces")
+                && !(name == "${project}/data")
+                && !(name == "${project}/gmqcc")
+                && !(name == "${project}/netradiant")
+                && !(name == "${project}/wiki" || name == "${project}/wiki.yes")
+                && !(name == "${project}/xonstat" || name == "${project}/xonstat.yes")
+            ;
+        in result;
+    in builtins.filterSource cleanSourceFilterMain src;
+
+    isCode = name: let
+        baseName = baseNameOf (toString name);
+        result = !(false
+            || (lib.hasSuffix ".ase" baseName)
+            || (lib.hasSuffix ".dem" baseName)
+            || (lib.hasSuffix ".dpm" baseName)
+            || (lib.hasSuffix ".framegroups" baseName)
+            || (lib.hasSuffix ".iqm" baseName)
+            || (lib.hasSuffix ".jpg" baseName)
+            || (lib.hasSuffix ".lmp" baseName)
+            || (lib.hasSuffix ".md3" baseName)
+            || (lib.hasSuffix ".mdl" baseName)
+            || (lib.hasSuffix ".obj" baseName)
+            || (lib.hasSuffix ".ogg" baseName)
+            || (lib.hasSuffix ".png" baseName)
+            || (lib.hasSuffix ".shader" baseName)
+            || (lib.hasSuffix ".skin" baseName)
+            || (lib.hasSuffix ".sounds" baseName)
+            || (lib.hasSuffix ".sp2" baseName)
+            || (lib.hasSuffix ".spr" baseName)
+            || (lib.hasSuffix ".spr32" baseName)
+            || (lib.hasSuffix ".svg" baseName)
+            || (lib.hasSuffix ".tga" baseName)
+            || (lib.hasSuffix ".wav" baseName)
+            || (lib.hasSuffix ".width" baseName)
+            || (lib.hasSuffix ".zym" baseName)
+        );
+    in result;
+
+    pk3 = drv: mkDerivation {
+        name = "${drv.name}.pk3";
+        version = drv.version;
+
+        nativeBuildInputs = with pkgs; [
+            zip
+        ];
+
+        phases = [ "installPhase" ];
+        installPhase = ''
+            (cd ${drv} && zip -r ${drv.pk3args or ""} $out .)
+        '';
+    };
+
+    targets = rec {
+        font-dejavu = mkDerivation rec {
+            name = "font-dejavu-${version}";
+            version = vers."data/font-dejavu";
+
+            src = srcs."data/font-dejavu";
+
+            phases = [ "installPhase" ];
+            installPhase = ''
+                cp -r $src $out
+            '';
+        };
+
+        font-nimbussansl = mkDerivation rec {
+            name = "font-nimbussansl-${version}";
+            version = vers."data/font-nimbussansl";
+
+            src = srcs."data/font-nimbussansl";
+
+            phases = [ "installPhase" ];
+            installPhase = ''
+                cp -r $src $out
+            '';
+        };
+
+        font-unifont = mkDerivation rec {
+            name = "font-unifont-${version}";
+            version = vers."data/font-unifont";
+
+            src = srcs."data/font-unifont";
+
+            phases = [ "installPhase" ];
+            installPhase = ''
+                cp -r $src $out
+            '';
+        };
+
+        font-xolonium = mkDerivation rec {
+            name = "font-xolonium-${version}";
+            version = vers."data/font-xolonium";
+
+            src = srcs."data/font-xolonium";
+
+            phases = [ "installPhase" ];
+            installPhase = ''
+                cp -r $src $out
+            '';
+        };
+
+        d0_blind_id = mkDerivation rec {
+            name = "d0_blind_id-${version}";
+            version = vers."d0_blind_id";
+
+            src = srcs."d0_blind_id";
+
+            nativeBuildInputs = [
+                cmake
+            ];
+
+            buildInputs = with pkgs; [
+                openssl
+            ];
+
+            installPhase = ''
+                mkdir -p $out/lib
+                mkdir -p $out/include/d0_blind_id
+
+                cp libd0_blind_id.so $out/lib
+                (cd $src; cp d0.h d0_blind_id.h $out/include/d0_blind_id)
+
+                cp libd0_rijndael.so $out/lib
+                (cd $src; cp d0_rijndael.h $out/include/d0_blind_id)
+            '';
+        };
+
+        darkplaces = let
+            unwrapped = mkDerivation rec {
+                name = "darkplaces-unwrapped-${version}";
+                version = vers."darkplaces";
+
+                src = srcs."darkplaces";
+
+                nativeBuildInputs = [
+                    cmake
+                ];
+
+                buildInputs = with pkgs; [
+                    SDL2
+
+                    zlib
+                    libjpeg
+                ];
+
+                installPhase = ''
+                    mkdir -p $out/bin
+                    cp darkplaces-{dedicated,sdl} $out/bin
+                '';
+            };
+            result = mkDerivation rec {
+                name = "darkplaces-${version}";
+                version = vers."darkplaces";
+
+                buildInputs = unwrapped.buildInputs ++ runtimeInputs;
+                runtimeInputs = with pkgs; [
+                    d0_blind_id
+
+                    freetype
+
+                    curl
+                    zlib
+
+                    libjpeg
+                    libpng
+
+                    libogg
+                    libtheora
+                    libvorbis
+                ];
+
+                phases = [ "installPhase" ];
+                installPhase = ''
+                    mkdir -p $out/bin
+
+                    cp -r ${unwrapped}/bin .
+                    chmod +w bin/*
+                    cd bin
+
+                    for exe in dedicated sdl; do
+                        f=darkplaces-$exe
+                        rpath=$(patchelf --print-rpath $f)
+                        rpath=''${rpath:+$rpath:}${lib.makeLibraryPath runtimeInputs}
+                        patchelf --set-rpath $rpath $f
+                        cp $f $out/bin/xonotic-linux64-$exe
+                    done
+                '';
+            };
+        in result;
+
+        gmqcc = mkDerivation rec {
+            name = "gmqcc-${version}";
+            version = vers."gmqcc";
+
+            src = srcs."gmqcc";
+
+            nativeBuildInputs = [
+                cmake
+            ];
+
+            installPhase = ''
+                mkdir -p $out/bin
+                cp gmqcc $out/bin
+            '';
+        };
+
+        netradiant = mkDerivation rec {
+            name = "netradiant-${version}";
+            version = vers."netradiant";
+
+            src = srcs."netradiant";
+
+            nativeBuildInputs = with pkgs; [
+                cmake
+                git
+            ];
+
+            buildInputs = with pkgs; [
+                pkgconfig
+                glib
+                pcre
+                libxml2
+                ncurses
+                libjpeg
+                libpng
+                minizip
+
+                mesa
+
+                xorg.libXt
+                xorg.libXmu
+                xorg.libSM
+                xorg.libICE
+                xorg.libpthreadstubs
+                xorg.libXdmcp
+
+                gnome2.gtk
+                gnome2.gtkglext
+                gnome3.gtk
+            ];
+        };
+
+        xonotic-data = mkDerivation rec {
+            name = "xonotic-data-${version}";
+            version = vers."data/xonotic-data";
+
+            src = srcs."data/xonotic-data";
+
+            phases = [ "installPhase" ];
+            installPhase = ''
+                mkdir $out
+                cp -r $src/. $out
+                chmod -R +w $out
+                find $out -depth -type d -empty -exec rmdir {} \;
+            '';
+        };
+
+        xonotic-data-code = mkDerivation rec {
+            name = "xonotic-data-code-${version}";
+            version = vers."data/xonotic-data/qcsrc";
+
+            src = srcs."data/xonotic-data/qcsrc";
+
+            env = {
+                QCC = "${gmqcc}/bin/gmqcc";
+                VERSION = version;
+            };
+
+            nativeBuildInputs = with pkgs; [
+                cmake
+                git
+            ];
+
+            installPhase = ''
+                mkdir $out
+                cp -r $src/. $out
+                chmod -R +w $out
+                cp {menu,progs,csprogs}.{dat,lno} $out
+                cp csprogs-${version}.{dat,lno,txt} $out/.tmp
+                find $out -depth -type d -empty -exec rmdir {} \;
+            '';
+
+            passthru.csprogs = pkgs.runCommand "xonotic-data-csprogs-${version}" { inherit version; pk3name = "csprogs-${version}"; } ''
+                mkdir $out
+                cp ${xonotic-data-code}/.tmp/csprogs-${version}.{dat,lno,txt} $out
+            '';
+        };
+
+        # todo: build
+        xonotic-maps = mkDerivation rec {
+            name = "xonotic-maps-${version}";
+            version = vers."data/xonotic-maps";
+
+            src = srcs."data/xonotic-maps";
+
+            phases = [ "installPhase" ];
+            installPhase = ''
+                mkdir $out
+                cp -r $src/. $out
+            '';
+
+            passthru.dance = mkDerivation rec {
+                name = "dance";
+                version = vers."data/xonotic-maps";
+
+                src = pkgs.fetchurl {
+                    url = http://beta.xonotic.org/autobuild-bsp/dance-full-88c416b8c11bdcecfdb889af2a2b97b4c0e2b8de-319ee7234504199da56f07ce25185f6d6cb889cd.pk3;
+                    sha256 = "1jgdg4mz56kbxcy3mwn4h5qlf3ahm1cmarp9l70fz9nfn6cnaknq";
+                };
+
+                phases = [ "installPhase" ];
+
+                installPhase = ''
+                    mkdir -p $out
+                    cd $out
+                    ${pkgs.unzip}/bin/unzip $src
+                '';
+            };
+        };
+
+        xonotic-music = mkDerivation rec {
+            name = "xonotic-music-${version}";
+            version = vers."data/xonotic-music";
+
+            src = srcs."data/xonotic-music";
+
+            phases = [ "installPhase" ];
+            installPhase = ''
+                mkdir $out
+                cp -r $src/. $out
+            '';
+
+            passthru.pk3args = "-0";
+        };
+
+        xonotic-nexcompat = mkDerivation rec {
+            name = "xonotic-nexcompat-${version}";
+            version = vers."data/xonotic-nexcompat";
+
+            src = srcs."data/xonotic-nexcompat";
+
+            phases = [ "installPhase" ];
+            installPhase = ''
+                mkdir $out
+                cp -r $src/. $out
+            '';
+        };
+
+        xonotic-keys = mkDerivation rec {
+            name = "xonotic-keys-${version}";
+            version = vers."xonotic";
+
+            src = srcs."xonotic";
+
+            phases = [ "installPhase" ];
+
+            installPhase = ''
+                mkdir $out
+                cp $src/*.d0pk $out
+            '';
+        };
+
+        xonotic = mkDerivation rec {
+            name = "xonotic-${version}";
+            version = vers."xonotic";
+
+            src = srcs."xonotic";
+
+            env = {
+                XON_NO_DAEMON = "1";
+            };
+
+            passthru.paks = {
+                inherit
+                    font-dejavu
+                    font-nimbussansl
+                    font-unifont
+                    font-xolonium
+                    xonotic-data
+                    xonotic-data-code
+                    xonotic-maps
+                    xonotic-music
+                    xonotic-nexcompat
+                ;
+                xonotic-data-csprogs = xonotic-data-code.passthru.csprogs;
+                inherit (xonotic-maps)
+                    dance
+                ;
+            };
+
+            phases = [ "installPhase" ];
+
+            installPhase = ''
+                mkdir $out
+                cp -r $src/. $out
+                cp ${darkplaces}/bin/* $out
+
+                mkdir -p $out/data
+                ${lib.concatStringsSep "\n" (lib.mapAttrsToList (k: v:
+                    # "cp ${pk3 v} $out/data/${k}.pk3"
+                    "ln -s ${v} $out/data/${k}.pk3dir"
+                ) passthru.paks)}
+
+                mkdir -p $out/mapping
+                ln -s ${netradiant} $out/mapping/${netradiant.name}
+            '';
+        };
+
+        dockerImage = let
+            main = pkgs.dockerTools.buildImage {
+                name = "xonotic";
+                tag = VERSION;
+                contents = mkDerivation {
+                    name = "xonotic-init";
+                    phases = [ "installPhase" ];
+                    installPhase = ''
+                        mkdir -p $out
+                        cat > $out/init <<EOF
+                        #!${stdenv.shell}
+                        ${pkgs.coreutils}/bin/ln -s ${xonotic-keys}/* /
+
+                        ${pkgs.coreutils}/bin/ls -l /
+                        ${pkgs.coreutils}/bin/ls -l /data
+
+                        exec ${darkplaces}/bin/xonotic-linux64-dedicated "\''${@}"
+                        EOF
+                        chmod +x $out/init
+                    '';
+                };
+                config.Entrypoint = "/init";
+            };
+            unpackImage = { name, from, to }: pkgs.dockerTools.buildImage {
+                name = "xonotic_${name}";
+                tag = VERSION;
+                contents = mkDerivation {
+                    name = "xonotic-${name}-init";
+                    phases = [ "installPhase" ];
+                    installPhase = ''
+                        mkdir -p $out
+                        cat > $out/init <<EOF
+                        #!${stdenv.shell}
+                        ${pkgs.coreutils}/bin/cp -r ${from} /data/${to}
+                        EOF
+                        chmod +x $out/init
+                    '';
+                };
+                config.Entrypoint = "/init";
+                fromImage = pkgs.dockerTools.buildImage {
+                    name = "xonotic_deps";
+                    contents = mkDerivation {
+                        name = "xonotic_deps";
+                        phases = [ "installPhase" ];
+                        installPhase = ''
+                            mkdir -p $out
+                            cat > $out/init <<EOF
+                            ${stdenv.shell}
+                            ${pkgs.coreutils}
+                            EOF
+                        '';
+                    };
+                };
+            };
+        in { main = main; }
+            // (lib.mapAttrs (k: v: unpackImage { name = k; from = pk3 v; to = "${v.pk3name or k}.pk3"; }) xonotic.paks)
+        ;
+    };
+
+    cleanSourceFilter = name: type: let
+        baseName = baseNameOf (toString name);
+        result = (lib.cleanSourceFilter name type)
+            && !(lib.hasSuffix ".nix" baseName)
+            && !(type == "directory" && baseName == ".git")
+            && !(type == "directory" && baseName == ".idea")
+            && !(type == "directory" && (lib.hasPrefix "cmake-build-" baseName))
+        ;
+    in result;
+
+    localFilesCustom = src: filter:
+        builtins.filterSource (name: type: (cleanSourceFilter name type) && (filter name type)) src
+    ;
+
+    localFiles = src: localFilesCustom src (name: type: true);
+
+    stdenv = if (cc == null) then pkgs.stdenv
+            else pkgs.overrideCC pkgs.stdenv pkgs."${cc}";
+
+    mkDerivation = {env ? {}, shellHook ? "", runtimeInputs ? [], ...}@args: stdenv.mkDerivation ({}
+        // { enableParallelBuilding = true; }
+        // (removeAttrs args ["env" "shellHook" "runtimeInputs"])
+        // env
+        // {
+            shellHook = ''
+                ${shellHook}
+                ${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "export ${n}=${v}") env)}
+                export LD_LIBRARY_PATH=''${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${lib.makeLibraryPath runtimeInputs}
+            '';
+        }
+    );
+
+    shell = let inputs = (lib.mapAttrsToList (k: v: v) targets); in stdenv.mkDerivation (rec {
+        name = "xonotic-shell";
+        nativeBuildInputs = builtins.map (it: it.nativeBuildInputs) (builtins.filter (it: it?nativeBuildInputs) inputs);
+        buildInputs = builtins.map (it: it.buildInputs) (builtins.filter (it: it?buildInputs) inputs);
+        shellHook = builtins.map (it: it.shellHook) (builtins.filter (it: it?shellHook) inputs);
+    });
+in { inherit shell; } // targets
index 5ff5636d035e309674884b06f816a5dc51c8978f..24d5792f35ffb60ec5bbeab46bfac6a8368fcb01 100755 (executable)
@@ -39,17 +39,17 @@ while test $# -gt 0; do
       echo $exec_prefix
       ;;
     --version)
-      echo 2.0.3
+      echo 2.0.10
       ;;
     --cflags)
       echo -I${prefix}/include/SDL2  -Dmain=SDL_main
       ;;
-#   --libs)
-#     echo -L${exec_prefix}/lib  -lmingw32 -lSDL2main -lSDL2  -mwindows
-#     ;;
-#   --static-libs)
+#    --libs)
+#      echo -L${exec_prefix}/lib  -lmingw32 -lSDL2main -lSDL2 -mwindows
+#      ;;
+#    --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 -Wl,--dynamicbase -Wl,--nxcompat -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid -static-libgcc
       ;;
     *)
       echo "${usage}" 1>&2
index a9077095fea10bc9da822fa90e46fc7bd43f004b..88dce0c03e263ffa83292a20bb9bc462c05f5222 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
  *  Main include header for the SDL library
  */
 
-/**
- *  \mainpage Simple DirectMedia Layer (SDL)
- *
- *  http://www.libsdl.org/
- *
- *  \section intro_sec Introduction
- *
- *  Simple DirectMedia Layer is a cross-platform development library designed
- *  to provide low level access to audio, keyboard, mouse, joystick, and
- *  graphics hardware via OpenGL and Direct3D. It is used by video playback
- *  software, emulators, and popular games including Valve's award winning
- *  catalog and many Humble Bundle games.
- *
- *  SDL officially supports Windows, Mac OS X, Linux, iOS, and Android.
- *  Support for other platforms may be found in the source code.
- *
- *  SDL is written in C, works natively with C++, and there are bindings 
- *  available for several other languages, including C# and Python.
- *
- *  This library is distributed under the zlib license, which can be found
- *  in the file "COPYING.txt".
- *
- *  The best way to learn how to use SDL is to check out the header files in
- *  the "include" subdirectory and the programs in the "test" subdirectory.
- *  The header files and test programs are well commented and always up to date.
- *  More documentation and FAQs are available online at:
- *      http://wiki.libsdl.org/
- *
- *  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
- *
- *  Enjoy!
- *      Sam Lantinga                (slouken@libsdl.org)
- */
 
-#ifndef _SDL_H
-#define _SDL_H
+#ifndef SDL_h_
+#define SDL_h_
 
 #include "SDL_main.h"
 #include "SDL_stdinc.h"
 #include "SDL_error.h"
 #include "SDL_events.h"
 #include "SDL_filesystem.h"
-#include "SDL_joystick.h"
 #include "SDL_gamecontroller.h"
 #include "SDL_haptic.h"
 #include "SDL_hints.h"
+#include "SDL_joystick.h"
 #include "SDL_loadso.h"
 #include "SDL_log.h"
 #include "SDL_messagebox.h"
@@ -86,6 +51,8 @@
 #include "SDL_power.h"
 #include "SDL_render.h"
 #include "SDL_rwops.h"
+#include "SDL_sensor.h"
+#include "SDL_shape.h"
 #include "SDL_system.h"
 #include "SDL_thread.h"
 #include "SDL_timer.h"
@@ -107,29 +74,34 @@ extern "C" {
  *  specify the subsystems which you will be using in your application.
  */
 /* @{ */
-#define SDL_INIT_TIMER          0x00000001
-#define SDL_INIT_AUDIO          0x00000010
-#define SDL_INIT_VIDEO          0x00000020  /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */
-#define SDL_INIT_JOYSTICK       0x00000200  /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */
-#define SDL_INIT_HAPTIC         0x00001000
-#define SDL_INIT_GAMECONTROLLER 0x00002000  /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */
-#define SDL_INIT_EVENTS         0x00004000
-#define SDL_INIT_NOPARACHUTE    0x00100000  /**< Don't catch fatal signals */
+#define SDL_INIT_TIMER          0x00000001u
+#define SDL_INIT_AUDIO          0x00000010u
+#define SDL_INIT_VIDEO          0x00000020u  /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */
+#define SDL_INIT_JOYSTICK       0x00000200u  /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */
+#define SDL_INIT_HAPTIC         0x00001000u
+#define SDL_INIT_GAMECONTROLLER 0x00002000u  /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */
+#define SDL_INIT_EVENTS         0x00004000u
+#define SDL_INIT_SENSOR         0x00008000u
+#define SDL_INIT_NOPARACHUTE    0x00100000u  /**< compatibility; this flag is ignored. */
 #define SDL_INIT_EVERYTHING ( \
                 SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \
-                SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \
+                SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \
             )
 /* @} */
 
 /**
  *  This function initializes  the subsystems specified by \c flags
- *  Unless the ::SDL_INIT_NOPARACHUTE flag is set, it will install cleanup
- *  signal handlers for some commonly ignored fatal signals (like SIGSEGV).
  */
 extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags);
 
 /**
  *  This function initializes specific SDL subsystems
+ *
+ *  Subsystem initialization is ref-counted, you must call
+ *  SDL_QuitSubSystem() for each SDL_InitSubSystem() to correctly
+ *  shutdown a subsystem manually (or call SDL_Quit() to force shutdown).
+ *  If a subsystem is already loaded then this call will
+ *  increase the ref-count and return.
  */
 extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags);
 
@@ -158,6 +130,6 @@ extern DECLSPEC void SDLCALL SDL_Quit(void);
 #endif
 #include "close_code.h"
 
-#endif /* _SDL_H */
+#endif /* SDL_h_ */
 
 /* vi: set ts=4 sw=4 expandtab: */
index 42348f7d13578865ee2b541a020e75cd24a8f1e7..8baecb63e1c9e18a9087b0b5d0a4b8f1fce8c88a 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -19,8 +19,8 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-#ifndef _SDL_assert_h
-#define _SDL_assert_h
+#ifndef SDL_assert_h_
+#define SDL_assert_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 */
     extern void __cdecl __debugbreak(void);
     #define SDL_TriggerBreakpoint() __debugbreak()
-#elif (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" )
-#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>
     #define SDL_TriggerBreakpoint() raise(SIGTRAP)
 #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. */
 #   define SDL_FUNCTION __func__
-#elif ((__GNUC__ >= 2) || defined(_MSC_VER))
+#elif ((__GNUC__ >= 2) || defined(_MSC_VER) || defined (__WATCOMC__))
 #   define SDL_FUNCTION __FUNCTION__
 #else
 #   define SDL_FUNCTION "???"
@@ -86,8 +88,10 @@ This also solves the problem of...
 disable assertions.
 */
 
+/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking
+    this condition isn't constant. And looks like an owl's face! */
 #ifdef _MSC_VER  /* stupid /W4 warnings. */
-#define SDL_NULL_WHILE_LOOP_CONDITION (-1 == __LINE__)
+#define SDL_NULL_WHILE_LOOP_CONDITION (0,0)
 #else
 #define SDL_NULL_WHILE_LOOP_CONDITION (0)
 #endif
@@ -102,9 +106,9 @@ typedef enum
     SDL_ASSERTION_ABORT,  /**< Terminate the program. */
     SDL_ASSERTION_IGNORE,  /**< Ignore the assert. */
     SDL_ASSERTION_ALWAYS_IGNORE  /**< Ignore the assert from now on. */
-} SDL_assert_state;
+} SDL_AssertState;
 
-typedef struct SDL_assert_data
+typedef struct SDL_AssertData
 {
     int always_ignore;
     unsigned int trigger_count;
@@ -112,13 +116,13 @@ typedef struct SDL_assert_data
     const char *filename;
     int linenum;
     const char *function;
-    const struct SDL_assert_data *next;
-} SDL_assert_data;
+    const struct SDL_AssertData *next;
+} SDL_AssertData;
 
 #if (SDL_ASSERT_LEVEL > 0)
 
 /* Never call this directly. Use the SDL_assert* macros. */
-extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *,
+extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *,
                                                              const char *,
                                                              const char *, int)
 #if defined(__clang__)
@@ -141,16 +145,13 @@ extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *,
 #define SDL_enabled_assert(condition) \
     do { \
         while ( !(condition) ) { \
-            static struct SDL_assert_data assert_data = { \
+            static struct SDL_AssertData sdl_assert_data = { \
                 0, 0, #condition, 0, 0, 0, 0 \
             }; \
-            const SDL_assert_state state = SDL_ReportAssertion(&assert_data, \
-                                                               SDL_FUNCTION, \
-                                                               SDL_FILE, \
-                                                               SDL_LINE); \
-            if (state == SDL_ASSERTION_RETRY) { \
+            const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \
+            if (sdl_assert_state == SDL_ASSERTION_RETRY) { \
                 continue; /* go again. */ \
-            } else if (state == SDL_ASSERTION_BREAK) { \
+            } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \
                 SDL_TriggerBreakpoint(); \
             } \
             break; /* not retrying. */ \
@@ -184,8 +185,8 @@ extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *,
 #define SDL_assert_always(condition) SDL_enabled_assert(condition)
 
 
-typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)(
-                                 const SDL_assert_data* data, void* userdata);
+typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)(
+                                 const SDL_AssertData* data, void* userdata);
 
 /**
  *  \brief Set an application-defined assertion handler.
@@ -202,7 +203,7 @@ typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)(
  *
  *  This callback is NOT reset to SDL's internal handler upon SDL_Quit()!
  *
- *  \return SDL_assert_state 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 userdata A pointer passed to the callback as-is.
@@ -249,9 +250,9 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puse
  *  The proper way to examine this data looks something like this:
  *
  *  <code>
- *  const SDL_assert_data *item = SDL_GetAssertionReport();
+ *  const SDL_AssertData *item = SDL_GetAssertionReport();
  *  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->linenum, item->trigger_count,
  *             item->always_ignore ? "yes" : "no");
@@ -262,7 +263,7 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puse
  *  \return List of all assertions.
  *  \sa SDL_ResetAssertionReport
  */
-extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void);
+extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void);
 
 /**
  *  \brief Reset the list of all assertion failures.
@@ -273,12 +274,18 @@ extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void);
  */
 extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void);
 
+
+/* these had wrong naming conventions until 2.0.4. Please update your app! */
+#define SDL_assert_state SDL_AssertState
+#define SDL_assert_data SDL_AssertData
+
+
 /* Ends C function definitions when using C++ */
 #ifdef __cplusplus
 }
 #endif
 #include "close_code.h"
 
-#endif /* _SDL_assert_h */
+#endif /* SDL_assert_h_ */
 
 /* vi: set ts=4 sw=4 expandtab: */
index bb3a9b657dd83d639f3b14afbdb4483cca4dbedd..deee35f916cba69edc6539ee1479948608277ed4 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -56,8 +56,8 @@
  * All of the atomic operations that modify memory are full memory barriers.
  */
 
-#ifndef _SDL_atomic_h_
-#define _SDL_atomic_h_
+#ifndef SDL_atomic_h_
+#define SDL_atomic_h_
 
 #include "SDL_stdinc.h"
 #include "SDL_platform.h"
@@ -118,12 +118,16 @@ extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock);
  * The compiler barrier prevents the compiler from reordering
  * reads and writes to globally visible variables across the call.
  */
-#if defined(_MSC_VER) && (_MSC_VER > 1200)
+#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__)
 void _ReadWriteBarrier(void);
 #pragma intrinsic(_ReadWriteBarrier)
 #define SDL_CompilerBarrier()   _ReadWriteBarrier()
-#elif defined(__GNUC__)
+#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
+/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */
 #define SDL_CompilerBarrier()   __asm__ __volatile__ ("" : : : "memory")
+#elif defined(__WATCOMC__)
+extern _inline void SDL_CompilerBarrier (void);
+#pragma aux SDL_CompilerBarrier = "" parm [] modify exact [];
 #else
 #define SDL_CompilerBarrier()   \
 { SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); }
@@ -148,18 +152,41 @@ void _ReadWriteBarrier(void);
  * For more information on these semantics, take a look at the blog post:
  * 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__))
 #define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("lwsync" : : : "memory")
 #define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("lwsync" : : : "memory")
+#elif defined(__GNUC__) && defined(__aarch64__)
+#define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("dmb ish" : : : "memory")
+#define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("dmb ish" : : : "memory")
 #elif defined(__GNUC__) && defined(__arm__)
-#if 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 0 /* defined(__LINUX__) || defined(__ANDROID__) */
+/* Information from:
+   https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19
+
+   The Linux kernel provides a helper function which provides the right code for a memory barrier,
+   hard-coded at address 0xffff0fa0
+*/
+typedef void (*SDL_KernelMemoryBarrierFunc)();
+#define SDL_MemoryBarrierRelease()     ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)()
+#define SDL_MemoryBarrierAcquire()     ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)()
+#elif 0 /* defined(__QNXNTO__) */
+#include <sys/cpuinline.h>
+
+#define SDL_MemoryBarrierRelease()   __cpu_membarrier()
+#define SDL_MemoryBarrierAcquire()   __cpu_membarrier()
+#else
+#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__)
 #define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("dmb ish" : : : "memory")
 #define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("dmb ish" : : : "memory")
-#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
+#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__
 /* The mcr instruction isn't available in thumb mode, use real functions */
-extern DECLSPEC void SDLCALL SDL_MemoryBarrierRelease();
-extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquire();
+#define SDL_MEMORY_BARRIER_USES_FUNCTION
+#define SDL_MemoryBarrierRelease()   SDL_MemoryBarrierReleaseFunction()
+#define SDL_MemoryBarrierAcquire()   SDL_MemoryBarrierAcquireFunction()
 #else
 #define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
 #define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
@@ -167,12 +194,20 @@ extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquire();
 #else
 #define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("" : : : "memory")
 #define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("" : : : "memory")
+#endif /* __LINUX__ || __ANDROID__ */
 #endif /* __GNUC__ && __arm__ */
 #else
+#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
+/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */
+#include <mbarrier.h>
+#define SDL_MemoryBarrierRelease()  __machine_rel_barrier()
+#define SDL_MemoryBarrierAcquire()  __machine_acq_barrier()
+#else
 /* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */
 #define SDL_MemoryBarrierRelease()  SDL_CompilerBarrier()
 #define SDL_MemoryBarrierAcquire()  SDL_CompilerBarrier()
 #endif
+#endif
 
 /**
  * \brief A type representing an atomic integer value.  It is a struct
@@ -255,6 +290,6 @@ extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a);
 
 #include "close_code.h"
 
-#endif /* _SDL_atomic_h_ */
+#endif /* SDL_atomic_h_ */
 
 /* vi: set ts=4 sw=4 expandtab: */
index 4c987d5110435893f216280503306d4288af2c8f..305c01a9d943a5b8c3b2141013051bb2afb8922d 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -25,8 +25,8 @@
  *  Access to the raw audio mixing buffer for the SDL library.
  */
 
-#ifndef _SDL_audio_h
-#define _SDL_audio_h
+#ifndef SDL_audio_h_
+#define SDL_audio_h_
 
 #include "SDL_stdinc.h"
 #include "SDL_error.h"
@@ -140,7 +140,8 @@ typedef Uint16 SDL_AudioFormat;
 #define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE    0x00000001
 #define SDL_AUDIO_ALLOW_FORMAT_CHANGE       0x00000002
 #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 */
@@ -155,12 +156,24 @@ typedef Uint16 SDL_AudioFormat;
  *
  *  Once the callback returns, the buffer will no longer be valid.
  *  Stereo samples are stored in a LRLRLR ordering.
+ *
+ *  You can choose to avoid callbacks and use SDL_QueueAudio() instead, if
+ *  you like. Just open your audio device with a NULL callback.
  */
 typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream,
                                             int len);
 
 /**
  *  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
 {
@@ -168,11 +181,11 @@ typedef struct SDL_AudioSpec
     SDL_AudioFormat format;     /**< Audio data format */
     Uint8 channels;             /**< Number of channels: 1 mono, 2 stereo */
     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 */
     Uint32 size;                /**< Audio buffer size in bytes (calculated) */
-    SDL_AudioCallback callback;
-    void *userdata;
+    SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */
+    void *userdata;             /**< Userdata passed to callback (ignored for NULL callbacks). */
 } SDL_AudioSpec;
 
 
@@ -181,7 +194,23 @@ typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt,
                                           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__
 /* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't
@@ -205,7 +234,7 @@ typedef struct SDL_AudioCVT
     int len_cvt;                /**< Length of converted audio buffer */
     int len_mult;               /**< buffer must be len*len_mult big */
     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 */
 } SDL_AUDIOCVT_PACKED SDL_AudioCVT;
 
@@ -273,9 +302,12 @@ extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void);
  *      to the audio buffer, and the length in bytes of the audio buffer.
  *      This function usually runs in a separate thread, and so you should
  *      protect data structures that it accesses by calling SDL_LockAudio()
- *      and SDL_UnlockAudio() in your code.
+ *      and SDL_UnlockAudio() in your code. Alternately, you may pass a NULL
+ *      pointer here, and call SDL_QueueAudio() with some frequency, to queue
+ *      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
- *      function.
+ *      function. If you passed a NULL callback, this value is ignored.
  *
  *  The audio device starts out playing silence when it's opened, and should
  *  be enabled for playing by calling \c SDL_PauseAudio(0) when you are ready
@@ -388,23 +420,56 @@ extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev,
 /* @} *//* Pause audio functions */
 
 /**
- *  This function loads a WAVE from the data source, automatically freeing
- *  that source if \c freesrc is non-zero.  For example, to load a WAVE file,
- *  you could do:
+ *  \brief Load the audio data of a WAVE file into memory
+ *
+ *  Loading a WAVE file requires \c src, \c spec, \c audio_buf and \c audio_len
+ *  to be valid pointers. The entire data portion of the file is then loaded
+ *  into memory and decoded if necessary.
+ *
+ *  If \c freesrc is non-zero, the data source gets automatically closed and
+ *  freed before the function returns.
+ *
+ *  Supported are RIFF WAVE files with the formats PCM (8, 16, 24, and 32 bits),
+ *  IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and A-law and
+ *  µ-law (8 bits). Other formats are currently unsupported and cause an error.
+ *
+ *  If this function succeeds, the pointer returned by it is equal to \c spec
+ *  and the pointer to the audio data allocated by the function is written to
+ *  \c audio_buf and its length in bytes to \c audio_len. The \ref SDL_AudioSpec
+ *  members \c freq, \c channels, and \c format are set to the values of the
+ *  audio data in the buffer. The \c samples member is set to a sane default and
+ *  all others are set to zero.
+ *
+ *  It's necessary to use SDL_FreeWAV() to free the audio data returned in
+ *  \c audio_buf when it is no longer used.
+ *
+ *  Because of the underspecification of the Waveform format, there are many
+ *  problematic files in the wild that cause issues with strict decoders. To
+ *  provide compatibility with these files, this decoder is lenient in regards
+ *  to the truncation of the file, the fact chunk, and the size of the RIFF
+ *  chunk. The hints SDL_HINT_WAVE_RIFF_CHUNK_SIZE, SDL_HINT_WAVE_TRUNCATION,
+ *  and SDL_HINT_WAVE_FACT_CHUNK can be used to tune the behavior of the
+ *  loading process.
+ *
+ *  Any file that is invalid (due to truncation, corruption, or wrong values in
+ *  the headers), too big, or unsupported causes an error. Additionally, any
+ *  critical I/O error from the data source will terminate the loading process
+ *  with an error. The function returns NULL on error and in all cases (with the
+ *  exception of \c src being NULL), an appropriate error message will be set.
+ *
+ *  It is required that the data source supports seeking.
+ *
+ *  Example:
  *  \code
  *      SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...);
  *  \endcode
  *
- *  If this function succeeds, it returns the given SDL_AudioSpec,
- *  filled with the audio data format of the wave data, and sets
- *  \c *audio_buf to a malloc()'d buffer containing the audio data,
- *  and sets \c *audio_len to the length of that audio buffer, in bytes.
- *  You need to free the audio buffer with SDL_FreeWAV() when you are
- *  done with it.
- *
- *  This function returns NULL and sets the SDL error message if the
- *  wave file cannot be opened, uses an unknown data format, or is
- *  corrupt.  Currently raw and MS-ADPCM WAVE files are supported.
+ *  \param src The data source with the WAVE data
+ *  \param freesrc A integer value that makes the function close the data source if non-zero
+ *  \param spec A pointer filled with the audio format of the audio data
+ *  \param audio_buf A pointer filled with the audio data allocated by the function
+ *  \param audio_len A pointer filled with the length of the audio data buffer in bytes
+ *  \return NULL on error, or non-NULL on success.
  */
 extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src,
                                                       int freesrc,
@@ -428,10 +493,10 @@ extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf);
  *  This function takes a source format and rate and a destination format
  *  and rate, and initializes the \c cvt structure with information needed
  *  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
- *  no conversion needed, or 1 if the audio filter is set up.
+ *  \return 0 if no conversion is needed, 1 if the audio filter is set up,
+ *  or -1 on error.
  */
 extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
                                               SDL_AudioFormat src_format,
@@ -450,9 +515,137 @@ extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
  *  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
  *  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);
 
+/* 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
 /**
  *  This takes two audio buffers of the playing audio format and mixes
@@ -474,6 +667,166 @@ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst,
                                                 SDL_AudioFormat format,
                                                 Uint32 len, int volume);
 
+/**
+ *  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
+ *  callback that SDL triggers with some frequency to obtain more audio
+ *  (pull method), or you can supply no callback, and then SDL will expect
+ *  you to supply data at regular intervals (push method) with this function.
+ *
+ *  There are no limits on the amount of data you can queue, short of
+ *  exhaustion of address space. Queued data will drain to the device as
+ *  necessary without further intervention from you. If the device needs
+ *  audio but there is not enough queued, it will play silence to make up
+ *  the difference. This means you will have skips in your audio playback
+ *  if you aren't routinely queueing sufficient data.
+ *
+ *  This function copies the supplied data, so you are safe to free it when
+ *  the function returns. This function is thread-safe, but queueing to the
+ *  same device from two threads at once does not promise which buffer will
+ *  be queued first.
+ *
+ *  You may not queue audio on a device that is using an application-supplied
+ *  callback; doing so returns an error. You have to use the audio callback
+ *  or queue 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 to which we will queue audio.
+ *  \param data The data to queue to the device for later playback.
+ *  \param len The number of bytes (not samples!) to which (data) points.
+ *  \return 0 on success, or -1 on error.
+ *
+ *  \sa SDL_GetQueuedAudioSize
+ *  \sa SDL_ClearQueuedAudio
+ */
+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.
+ *
+ *  For playback device:
+ *
+ *    This is the number of bytes that have been queued for playback with
+ *    SDL_QueueAudio(), but have not yet been sent to the hardware. This
+ *    number may shrink at any time, so this only informs of pending data.
+ *
+ *    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
+ *  callback; calling this function on such a device always returns 0.
+ *  You have to queue audio with SDL_QueueAudio()/SDL_DequeueAudio(), or use
+ *  the audio callback, but not both.
+ *
+ *  You should not call SDL_LockAudio() on the device before querying; SDL
+ *  handles locking internally for this function.
+ *
+ *  \param dev The device ID of which we will query queued audio size.
+ *  \return Number of bytes (not samples!) of queued audio.
+ *
+ *  \sa SDL_QueueAudio
+ *  \sa SDL_ClearQueuedAudio
+ */
+extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev);
+
+/**
+ *  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. For
+ *  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
+ *  to the hardware, as we can not undo that, so expect there to be some
+ *  fraction of a second of audio that might still be heard. This can be
+ *  useful if you want to, say, drop any pending music during a level change
+ *  in your game.
+ *
+ *  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.
+ *  You have to queue audio with SDL_QueueAudio()/SDL_DequeueAudio(), or use
+ *  the audio callback, but not both.
+ *
+ *  You should not call SDL_LockAudio() on the device before clearing the
+ *  queue; SDL handles locking internally for this function.
+ *
+ *  This function always succeeds and thus returns void.
+ *
+ *  \param dev The device ID of which to clear the audio queue.
+ *
+ *  \sa SDL_QueueAudio
+ *  \sa SDL_GetQueuedAudioSize
+ */
+extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev);
+
+
 /**
  *  \name Audio lock functions
  *
@@ -501,6 +854,6 @@ extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev);
 #endif
 #include "close_code.h"
 
-#endif /* _SDL_audio_h */
+#endif /* SDL_audio_h_ */
 
 /* vi: set ts=4 sw=4 expandtab: */
index 341524fd9f88c5e658afa21e1e4f26564118f9de..b116cc8d01e99ee3bfbd6446896531b6d17239e8 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -25,8 +25,8 @@
  *  Functions for fiddling with bits and bitmasks.
  */
 
-#ifndef _SDL_bits_h
-#define _SDL_bits_h
+#ifndef SDL_bits_h_
+#define SDL_bits_h_
 
 #include "SDL_stdinc.h"
 
@@ -47,10 +47,20 @@ extern "C" {
  *
  *  \return Index of the most significant bit, or -1 if the value is 0.
  */
+#if defined(__WATCOMC__) && defined(__386__)
+extern _inline int _SDL_clz_watcom (Uint32);
+#pragma aux _SDL_clz_watcom = \
+    "bsr eax, eax" \
+    "xor eax, 31" \
+    parm [eax] nomemory \
+    value [eax] \
+    modify exact [eax] nomemory;
+#endif
+
 SDL_FORCE_INLINE int
 SDL_MostSignificantBitIndex32(Uint32 x)
 {
-#if defined(__GNUC__) && __GNUC__ >= 4
+#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
     /* Count Leading Zeroes builtin in GCC.
      * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html
      */
@@ -58,6 +68,11 @@ SDL_MostSignificantBitIndex32(Uint32 x)
         return -1;
     }
     return 31 - __builtin_clz(x);
+#elif defined(__WATCOMC__) && defined(__386__)
+    if (x == 0) {
+        return -1;
+    }
+    return 31 - _SDL_clz_watcom(x);
 #else
     /* Based off of Bit Twiddling Hacks by Sean Eron Anderson
      * <seander@cs.stanford.edu>, released in the public domain.
@@ -86,12 +101,21 @@ SDL_MostSignificantBitIndex32(Uint32 x)
 #endif
 }
 
+SDL_FORCE_INLINE SDL_bool
+SDL_HasExactlyOneBitSet32(Uint32 x)
+{
+    if (x && !(x & (x - 1))) {
+        return SDL_TRUE;
+    }
+    return SDL_FALSE;
+}
+
 /* Ends C function definitions when using C++ */
 #ifdef __cplusplus
 }
 #endif
 #include "close_code.h"
 
-#endif /* _SDL_bits_h */
+#endif /* SDL_bits_h_ */
 
 /* vi: set ts=4 sw=4 expandtab: */
index 8c257be9c0d2123de9e476cbc16a97d67edbc76f..6f0a22b99f5c0aecef608454070dac09adba0be1 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -25,8 +25,8 @@
  *  Header file declaring the SDL_BlendMode enumeration
  */
 
-#ifndef _SDL_blendmode_h
-#define _SDL_blendmode_h
+#ifndef SDL_blendmode_h_
+#define SDL_blendmode_h_
 
 #include "begin_code.h"
 /* Set up for C function definitions, even when using C++ */
@@ -47,17 +47,74 @@ typedef enum
     SDL_BLENDMODE_ADD = 0x00000002,      /**< additive blending
                                               dstRGB = (srcRGB * srcA) + dstRGB
                                               dstA = dstA */
-    SDL_BLENDMODE_MOD = 0x00000004       /**< color modulate
+    SDL_BLENDMODE_MOD = 0x00000004,      /**< color modulate
                                               dstRGB = srcRGB * dstRGB
                                               dstA = dstA */
+    SDL_BLENDMODE_INVALID = 0x7FFFFFFF
+
+    /* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */
+
 } SDL_BlendMode;
 
+/**
+ *  \brief The blend operation used when combining source and destination pixel components
+ */
+typedef enum
+{
+    SDL_BLENDOPERATION_ADD              = 0x1,  /**< dst + src: supported by all renderers */
+    SDL_BLENDOPERATION_SUBTRACT         = 0x2,  /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */
+    SDL_BLENDOPERATION_REV_SUBTRACT     = 0x3,  /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */
+    SDL_BLENDOPERATION_MINIMUM          = 0x4,  /**< min(dst, src) : supported by D3D11 */
+    SDL_BLENDOPERATION_MAXIMUM          = 0x5   /**< max(dst, src) : supported by D3D11 */
+
+} SDL_BlendOperation;
+
+/**
+ *  \brief The normalized factor used to multiply pixel components
+ */
+typedef enum
+{
+    SDL_BLENDFACTOR_ZERO                = 0x1,  /**< 0, 0, 0, 0 */
+    SDL_BLENDFACTOR_ONE                 = 0x2,  /**< 1, 1, 1, 1 */
+    SDL_BLENDFACTOR_SRC_COLOR           = 0x3,  /**< srcR, srcG, srcB, srcA */
+    SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4,  /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */
+    SDL_BLENDFACTOR_SRC_ALPHA           = 0x5,  /**< srcA, srcA, srcA, srcA */
+    SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6,  /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */
+    SDL_BLENDFACTOR_DST_COLOR           = 0x7,  /**< dstR, dstG, dstB, dstA */
+    SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8,  /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */
+    SDL_BLENDFACTOR_DST_ALPHA           = 0x9,  /**< dstA, dstA, dstA, dstA */
+    SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA   /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */
+
+} SDL_BlendFactor;
+
+/**
+ *  \brief Create a custom blend mode, which may or may not be supported by a given renderer
+ *
+ *  \param srcColorFactor source color factor
+ *  \param dstColorFactor destination color factor
+ *  \param colorOperation color operation
+ *  \param srcAlphaFactor source alpha factor
+ *  \param dstAlphaFactor destination alpha factor
+ *  \param alphaOperation alpha operation
+ *
+ *  The result of the blend mode operation will be:
+ *      dstRGB = dstRGB * dstColorFactor colorOperation srcRGB * srcColorFactor
+ *  and
+ *      dstA = dstA * dstAlphaFactor alphaOperation srcA * srcAlphaFactor
+ */
+extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor,
+                                                                 SDL_BlendFactor dstColorFactor,
+                                                                 SDL_BlendOperation colorOperation,
+                                                                 SDL_BlendFactor srcAlphaFactor,
+                                                                 SDL_BlendFactor dstAlphaFactor,
+                                                                 SDL_BlendOperation alphaOperation);
+
 /* Ends C function definitions when using C++ */
 #ifdef __cplusplus
 }
 #endif
 #include "close_code.h"
 
-#endif /* _SDL_video_h */
+#endif /* SDL_blendmode_h_ */
 
 /* vi: set ts=4 sw=4 expandtab: */
index 74e2b32fe785d8076085ea17a225c069c8f622c3..c4f8766ce7e88b94a54c1f62c3e83d0e76d2acaa 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -25,8 +25,8 @@
  * Include file for SDL clipboard handling
  */
 
-#ifndef _SDL_clipboard_h
-#define _SDL_clipboard_h
+#ifndef SDL_clipboard_h_
+#define SDL_clipboard_h_
 
 #include "SDL_stdinc.h"
 
@@ -66,6 +66,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void);
 #endif
 #include "close_code.h"
 
-#endif /* _SDL_clipboard_h */
+#endif /* SDL_clipboard_h_ */
 
 /* vi: set ts=4 sw=4 expandtab: */
index 35eda4653e6630a942133d97edb1fcd033c7ac90..395ad7c266cc2f5901fcda4fc4071707e28de2d4 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -19,8 +19,9 @@
   3. This notice may not be removed or altered from any source distribution.
 */
 
-#ifndef _SDL_config_windows_h
-#define _SDL_config_windows_h
+#ifndef SDL_config_windows_h_
+#define SDL_config_windows_h_
+#define SDL_config_h_
 
 #include "SDL_platform.h"
 
@@ -76,15 +77,26 @@ typedef unsigned int uintptr_t;
 # define SIZEOF_VOIDP 4
 #endif
 
+#define HAVE_DDRAW_H 1
+#define HAVE_DINPUT_H 1
+#define HAVE_DSOUND_H 1
+#define HAVE_DXGI_H 1
+#define HAVE_XINPUT_H 1
+#define HAVE_MMDEVICEAPI_H 1
+#define HAVE_AUDIOCLIENT_H 1
+#define HAVE_ENDPOINTVOLUME_H 1
+
 /* This is disabled by default to avoid C runtime dependencies and manifest requirements */
 #ifdef HAVE_LIBC
 /* Useful headers */
-#define HAVE_STDIO_H 1
 #define STDC_HEADERS 1
-#define HAVE_STRING_H 1
 #define HAVE_CTYPE_H 1
+#define HAVE_FLOAT_H 1
+#define HAVE_LIMITS_H 1
 #define HAVE_MATH_H 1
 #define HAVE_SIGNAL_H 1
+#define HAVE_STDIO_H 1
+#define HAVE_STRING_H 1
 
 /* C library functions */
 #define HAVE_MALLOC 1
@@ -100,13 +112,15 @@ typedef unsigned int uintptr_t;
 #define HAVE_MEMCMP 1
 #define HAVE_STRLEN 1
 #define HAVE__STRREV 1
-#define HAVE__STRUPR 1
-#define HAVE__STRLWR 1
+/* These functions have security warnings, so we won't use them */
+/* #undef HAVE__STRUPR */
+/* #undef HAVE__STRLWR */
 #define HAVE_STRCHR 1
 #define HAVE_STRRCHR 1
 #define HAVE_STRSTR 1
-#define HAVE__LTOA 1
-#define HAVE__ULTOA 1
+/* These functions have security warnings, so we won't use them */
+/* #undef HAVE__LTOA */
+/* #undef HAVE__ULTOA */
 #define HAVE_STRTOL 1
 #define HAVE_STRTOUL 1
 #define HAVE_STRTOD 1
@@ -116,25 +130,50 @@ typedef unsigned int uintptr_t;
 #define HAVE_STRNCMP 1
 #define HAVE__STRICMP 1
 #define HAVE__STRNICMP 1
-#define HAVE_ATAN 1
-#define HAVE_ATAN2 1
-#define HAVE_ACOS  1
-#define HAVE_ASIN  1
-#define HAVE_CEIL 1
-#define HAVE_COS 1
-#define HAVE_COSF 1
-#define HAVE_FABS 1
-#define HAVE_FLOOR 1
-#define HAVE_LOG 1
-#define HAVE_POW 1
-#define HAVE_SIN 1
-#define HAVE_SINF 1
-#define HAVE_SQRT 1
+#define HAVE_ACOS   1
+#define HAVE_ACOSF  1
+#define HAVE_ASIN   1
+#define HAVE_ASINF  1
+#define HAVE_ATAN   1
+#define HAVE_ATANF  1
+#define HAVE_ATAN2  1
+#define HAVE_ATAN2F 1
+#define HAVE_CEILF  1
+#define HAVE__COPYSIGN  1
+#define HAVE_COS    1
+#define HAVE_COSF   1
+#define HAVE_EXP    1
+#define HAVE_EXPF   1
+#define HAVE_FABS   1
+#define HAVE_FABSF  1
+#define HAVE_FLOOR  1
+#define HAVE_FLOORF 1
+#define HAVE_FMOD   1
+#define HAVE_FMODF  1
+#define HAVE_LOG    1
+#define HAVE_LOGF   1
+#define HAVE_LOG10  1
+#define HAVE_LOG10F 1
+#define HAVE_POW    1
+#define HAVE_POWF   1
+#define HAVE_SIN    1
+#define HAVE_SINF   1
+#define HAVE_SQRT   1
+#define HAVE_SQRTF  1
+#define HAVE_TAN    1
+#define HAVE_TANF   1
+#if defined(_MSC_VER)
+/* These functions were added with the VC++ 2013 C runtime library */
 #if _MSC_VER >= 1800
 #define HAVE_STRTOLL 1
 #define HAVE_VSSCANF 1
-#define HAVE_COPYSIGN 1
 #define HAVE_SCALBN 1
+#define HAVE_SCALBNF    1
+#endif
+/* This function is available with at least the VC++ 2008 C runtime library */
+#if _MSC_VER >= 1400
+#define HAVE__FSEEKI64 1
+#endif
 #endif
 #if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES)
 #define HAVE_M_PI 1
@@ -145,15 +184,21 @@ typedef unsigned int uintptr_t;
 #endif
 
 /* Enable various audio drivers */
+#define SDL_AUDIO_DRIVER_WASAPI 1
 #define SDL_AUDIO_DRIVER_DSOUND 1
-#define SDL_AUDIO_DRIVER_XAUDIO2    1
 #define SDL_AUDIO_DRIVER_WINMM  1
 #define SDL_AUDIO_DRIVER_DISK   1
 #define SDL_AUDIO_DRIVER_DUMMY  1
 
 /* Enable various input drivers */
 #define SDL_JOYSTICK_DINPUT 1
+#define SDL_JOYSTICK_XINPUT 1
+#define SDL_JOYSTICK_HIDAPI 1
 #define SDL_HAPTIC_DINPUT   1
+#define SDL_HAPTIC_XINPUT   1
+
+/* Enable the dummy sensor driver */
+#define SDL_SENSOR_DUMMY  1
 
 /* Enable various shared object loading systems */
 #define SDL_LOADSO_WINDOWS  1
@@ -172,7 +217,7 @@ typedef unsigned int uintptr_t;
 #define SDL_VIDEO_RENDER_D3D    1
 #endif
 #ifndef SDL_VIDEO_RENDER_D3D11
-#define SDL_VIDEO_RENDER_D3D11 0
+#define SDL_VIDEO_RENDER_D3D11  0
 #endif
 
 /* Enable OpenGL support */
@@ -195,6 +240,8 @@ typedef unsigned int uintptr_t;
 #define SDL_VIDEO_OPENGL_EGL    1
 #endif
 
+/* Enable Vulkan support */
+#define SDL_VIDEO_VULKAN 1
 
 /* Enable system power support */
 #define SDL_POWER_WINDOWS 1
@@ -207,4 +254,4 @@ typedef unsigned int uintptr_t;
 #define SDL_ASSEMBLY_ROUTINES   1
 #endif
 
-#endif /* _SDL_config_windows_h */
+#endif /* SDL_config_windows_h_ */
index 1f6efd384a2db230c9a2b0973551ded1c5d78a71..296df01aacd67b937224746b91ae59601d03e292 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
  *  CPU feature detection for SDL.
  */
 
-#ifndef _SDL_cpuinfo_h
-#define _SDL_cpuinfo_h
+#ifndef SDL_cpuinfo_h_
+#define SDL_cpuinfo_h_
 
 #include "SDL_stdinc.h"
 
 /* Need to do this here because intrin.h has C++ code in it */
 /* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */
 #if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64))
+#ifdef __clang__
+/* Many of the intrinsics SDL uses are not implemented by clang with Visual Studio */
+#undef __MMX__
+#undef __SSE__
+#undef __SSE2__
+#else
 #include <intrin.h>
 #ifndef _WIN64
+#ifndef __MMX__
 #define __MMX__
+#endif
+#ifndef __3dNOW__
 #define __3dNOW__
 #endif
+#endif
+#ifndef __SSE__
 #define __SSE__
+#endif
+#ifndef __SSE2__
 #define __SSE2__
+#endif
+#endif /* __clang__ */
 #elif defined(__MINGW64_VERSION_MAJOR)
 #include <intrin.h>
 #else
-#ifdef __ALTIVEC__
-#if HAVE_ALTIVEC_H && !defined(__APPLE_ALTIVEC__)
+/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */
+#if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H)
 #include <altivec.h>
-#undef pixel
 #endif
+#if !defined(SDL_DISABLE_ARM_NEON_H)
+#  if defined(__ARM_NEON)
+#    include <arm_neon.h>
+#  elif defined(__WINDOWS__) || defined(__WINRT__)
+/* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */
+#    if defined(_M_ARM)
+#      include <armintr.h>
+#      include <arm_neon.h>
+#      define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */
+#    endif
+#    if defined (_M_ARM64)
+#      include <armintr.h>
+#      include <arm_neon.h>
+#      define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */
+#    endif
+#  endif
 #endif
-#ifdef __MMX__
-#include <mmintrin.h>
-#endif
-#ifdef __3dNOW__
+#if defined(__3dNOW__) && !defined(SDL_DISABLE_MM3DNOW_H)
 #include <mm3dnow.h>
 #endif
-#ifdef __SSE__
+#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H)
+#include <immintrin.h>
+#else
+#if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H)
+#include <mmintrin.h>
+#endif
+#if defined(__SSE__) && !defined(SDL_DISABLE_XMMINTRIN_H)
 #include <xmmintrin.h>
 #endif
-#ifdef __SSE2__
+#if defined(__SSE2__) && !defined(SDL_DISABLE_EMMINTRIN_H)
 #include <emmintrin.h>
 #endif
+#if defined(__SSE3__) && !defined(SDL_DISABLE_PMMINTRIN_H)
+#include <pmmintrin.h>
 #endif
+#endif /* HAVE_IMMINTRIN_H */
+#endif /* compiler version */
 
 #include "begin_code.h"
 /* Set up for C function definitions, even when using C++ */
@@ -139,18 +176,95 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void);
  */
 extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void);
 
+/**
+ *  This function returns true if the CPU has AVX2 features.
+ */
+extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void);
+
+/**
+ *  This function returns true if the CPU has AVX-512F (foundation) features.
+ */
+extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void);
+
+/**
+ *  This function returns true if the CPU has NEON (ARM SIMD) features.
+ */
+extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void);
+
 /**
  *  This function returns the amount of RAM configured in the system, in MB.
  */
 extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void);
 
+/**
+ * \brief Report the alignment this system needs for SIMD allocations.
+ *
+ * This will return the minimum number of bytes to which a pointer must be
+ *  aligned to be compatible with SIMD instructions on the current machine.
+ *  For example, if the machine supports SSE only, it will return 16, but if
+ *  it supports AVX-512F, it'll return 64 (etc). This only reports values for
+ *  instruction sets SDL knows about, so if your SDL build doesn't have
+ *  SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and
+ *  not 64 for the AVX-512 instructions that exist but SDL doesn't know about.
+ *  Plan accordingly.
+ */
+extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void);
 
+/**
+ * \brief Allocate memory in a SIMD-friendly way.
+ *
+ * This will allocate a block of memory that is suitable for use with SIMD
+ *  instructions. Specifically, it will be properly aligned and padded for
+ *  the system's supported vector instructions.
+ *
+ * The memory returned will be padded such that it is safe to read or write
+ *  an incomplete vector at the end of the memory block. This can be useful
+ *  so you don't have to drop back to a scalar fallback at the end of your
+ *  SIMD processing loop to deal with the final elements without overflowing
+ *  the allocated buffer.
+ *
+ * You must free this memory with SDL_FreeSIMD(), not free() or SDL_free()
+ *  or delete[], etc.
+ *
+ * Note that SDL will only deal with SIMD instruction sets it is aware of;
+ *  for example, SDL 2.0.8 knows that SSE wants 16-byte vectors
+ *  (SDL_HasSSE()), and AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't
+ *  know that AVX-512 wants 64. To be clear: if you can't decide to use an
+ *  instruction set with an SDL_Has*() function, don't use that instruction
+ *  set with memory allocated through here.
+ *
+ * SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't
+ *  out of memory.
+ *
+ *  \param len The length, in bytes, of the block to allocated. The actual
+ *             allocated block might be larger due to padding, etc.
+ * \return Pointer to newly-allocated block, NULL if out of memory.
+ *
+ * \sa SDL_SIMDAlignment
+ * \sa SDL_SIMDFree
+ */
+extern DECLSPEC void * SDLCALL SDL_SIMDAlloc(const size_t len);
+
+/**
+ * \brief Deallocate memory obtained from SDL_SIMDAlloc
+ *
+ * It is not valid to use this function on a pointer from anything but
+ *  SDL_SIMDAlloc(). It can't be used on pointers from malloc, realloc,
+ *  SDL_malloc, memalign, new[], etc.
+ *
+ * However, SDL_SIMDFree(NULL) is a legal no-op.
+ *
+ * \sa SDL_SIMDAlloc
+ */
+extern DECLSPEC void SDLCALL SDL_SIMDFree(void *ptr);
+
+/* vi: set ts=4 sw=4 expandtab: */
 /* Ends C function definitions when using C++ */
 #ifdef __cplusplus
 }
 #endif
 #include "close_code.h"
 
-#endif /* _SDL_cpuinfo_h */
+#endif /* SDL_cpuinfo_h_ */
 
 /* vi: set ts=4 sw=4 expandtab: */
diff --git a/misc/builddeps/win32/sdl/include/SDL2/SDL_egl.h b/misc/builddeps/win32/sdl/include/SDL2/SDL_egl.h
new file mode 100644 (file)
index 0000000..f50fa5c
--- /dev/null
@@ -0,0 +1,1673 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+
+/**
+ *  \file SDL_egl.h
+ *
+ *  This is a simple file to encapsulate the EGL API headers.
+ */
+#if !defined(_MSC_VER) && !defined(__ANDROID__)
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+#else /* _MSC_VER */
+
+/* EGL headers for Visual Studio */
+
+#ifndef __khrplatform_h_
+#define __khrplatform_h_
+
+/*
+** Copyright (c) 2008-2009 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Khronos platform-specific types and definitions.
+*
+* $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $
+*
+* Adopters may modify this file to suit their platform. Adopters are
+* encouraged to submit platform specific modifications to the Khronos
+* group so that they can be included in future versions of this file.
+* Please submit changes by sending them to the public Khronos Bugzilla
+* (http://khronos.org/bugzilla) by filing a bug against product
+* "Khronos (general)" component "Registry".
+*
+* A predefined template which fills in some of the bug fields can be
+* reached using http://tinyurl.com/khrplatform-h-bugreport, but you
+* must create a Bugzilla login first.
+*
+*
+* See the Implementer's Guidelines for information about where this file
+* should be located on your system and for more details of its use:
+*    http://www.khronos.org/registry/implementers_guide.pdf
+*
+* This file should be included as
+*        #include <KHR/khrplatform.h>
+* by Khronos client API header files that use its types and defines.
+*
+* The types in khrplatform.h should only be used to define API-specific types.
+*
+* Types defined in khrplatform.h:
+*    khronos_int8_t              signed   8  bit
+*    khronos_uint8_t             unsigned 8  bit
+*    khronos_int16_t             signed   16 bit
+*    khronos_uint16_t            unsigned 16 bit
+*    khronos_int32_t             signed   32 bit
+*    khronos_uint32_t            unsigned 32 bit
+*    khronos_int64_t             signed   64 bit
+*    khronos_uint64_t            unsigned 64 bit
+*    khronos_intptr_t            signed   same number of bits as a pointer
+*    khronos_uintptr_t           unsigned same number of bits as a pointer
+*    khronos_ssize_t             signed   size
+*    khronos_usize_t             unsigned size
+*    khronos_float_t             signed   32 bit floating point
+*    khronos_time_ns_t           unsigned 64 bit time in nanoseconds
+*    khronos_utime_nanoseconds_t unsigned time interval or absolute time in
+*                                         nanoseconds
+*    khronos_stime_nanoseconds_t signed time interval in nanoseconds
+*    khronos_boolean_enum_t      enumerated boolean type. This should
+*      only be used as a base type when a client API's boolean type is
+*      an enum. Client APIs which use an integer or other type for
+*      booleans cannot use this as the base type for their boolean.
+*
+* Tokens defined in khrplatform.h:
+*
+*    KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
+*
+*    KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
+*    KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
+*
+* Calling convention macros defined in this file:
+*    KHRONOS_APICALL
+*    KHRONOS_APIENTRY
+*    KHRONOS_APIATTRIBUTES
+*
+* These may be used in function prototypes as:
+*
+*      KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
+*                                  int arg1,
+*                                  int arg2) KHRONOS_APIATTRIBUTES;
+*/
+
+/*-------------------------------------------------------------------------
+* Definition of KHRONOS_APICALL
+*-------------------------------------------------------------------------
+* This precedes the return type of the function in the function prototype.
+*/
+#if defined(_WIN32) && !defined(__SCITECH_SNAP__) && !defined(SDL_VIDEO_STATIC_ANGLE)
+#   define KHRONOS_APICALL __declspec(dllimport)
+#elif defined (__SYMBIAN32__)
+#   define KHRONOS_APICALL IMPORT_C
+#else
+#   define KHRONOS_APICALL
+#endif
+
+/*-------------------------------------------------------------------------
+* Definition of KHRONOS_APIENTRY
+*-------------------------------------------------------------------------
+* This follows the return type of the function  and precedes the function
+* name in the function prototype.
+*/
+#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
+/* Win32 but not WinCE */
+#   define KHRONOS_APIENTRY __stdcall
+#else
+#   define KHRONOS_APIENTRY
+#endif
+
+/*-------------------------------------------------------------------------
+* Definition of KHRONOS_APIATTRIBUTES
+*-------------------------------------------------------------------------
+* This follows the closing parenthesis of the function prototype arguments.
+*/
+#if defined (__ARMCC_2__)
+#define KHRONOS_APIATTRIBUTES __softfp
+#else
+#define KHRONOS_APIATTRIBUTES
+#endif
+
+/*-------------------------------------------------------------------------
+* basic type definitions
+*-----------------------------------------------------------------------*/
+#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
+
+
+/*
+* Using <stdint.h>
+*/
+#include <stdint.h>
+typedef int32_t                 khronos_int32_t;
+typedef uint32_t                khronos_uint32_t;
+typedef int64_t                 khronos_int64_t;
+typedef uint64_t                khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64   1
+#define KHRONOS_SUPPORT_FLOAT   1
+
+#elif defined(__VMS ) || defined(__sgi)
+
+/*
+* Using <inttypes.h>
+*/
+#include <inttypes.h>
+typedef int32_t                 khronos_int32_t;
+typedef uint32_t                khronos_uint32_t;
+typedef int64_t                 khronos_int64_t;
+typedef uint64_t                khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64   1
+#define KHRONOS_SUPPORT_FLOAT   1
+
+#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
+
+/*
+* Win32
+*/
+typedef __int32                 khronos_int32_t;
+typedef unsigned __int32        khronos_uint32_t;
+typedef __int64                 khronos_int64_t;
+typedef unsigned __int64        khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64   1
+#define KHRONOS_SUPPORT_FLOAT   1
+
+#elif defined(__sun__) || defined(__digital__)
+
+/*
+* Sun or Digital
+*/
+typedef int                     khronos_int32_t;
+typedef unsigned int            khronos_uint32_t;
+#if defined(__arch64__) || defined(_LP64)
+typedef long int                khronos_int64_t;
+typedef unsigned long int       khronos_uint64_t;
+#else
+typedef long long int           khronos_int64_t;
+typedef unsigned long long int  khronos_uint64_t;
+#endif /* __arch64__ */
+#define KHRONOS_SUPPORT_INT64   1
+#define KHRONOS_SUPPORT_FLOAT   1
+
+#elif 0
+
+/*
+* Hypothetical platform with no float or int64 support
+*/
+typedef int                     khronos_int32_t;
+typedef unsigned int            khronos_uint32_t;
+#define KHRONOS_SUPPORT_INT64   0
+#define KHRONOS_SUPPORT_FLOAT   0
+
+#else
+
+/*
+* Generic fallback
+*/
+#include <stdint.h>
+typedef int32_t                 khronos_int32_t;
+typedef uint32_t                khronos_uint32_t;
+typedef int64_t                 khronos_int64_t;
+typedef uint64_t                khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64   1
+#define KHRONOS_SUPPORT_FLOAT   1
+
+#endif
+
+
+/*
+* Types that are (so far) the same on all platforms
+*/
+typedef signed   char          khronos_int8_t;
+typedef unsigned char          khronos_uint8_t;
+typedef signed   short int     khronos_int16_t;
+typedef unsigned short int     khronos_uint16_t;
+
+/*
+* Types that differ between LLP64 and LP64 architectures - in LLP64,
+* pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
+* to be the only LLP64 architecture in current use.
+*/
+#ifdef _WIN64
+typedef signed   long long int khronos_intptr_t;
+typedef unsigned long long int khronos_uintptr_t;
+typedef signed   long long int khronos_ssize_t;
+typedef unsigned long long int khronos_usize_t;
+#else
+typedef signed   long  int     khronos_intptr_t;
+typedef unsigned long  int     khronos_uintptr_t;
+typedef signed   long  int     khronos_ssize_t;
+typedef unsigned long  int     khronos_usize_t;
+#endif
+
+#if KHRONOS_SUPPORT_FLOAT
+/*
+* Float type
+*/
+typedef          float         khronos_float_t;
+#endif
+
+#if KHRONOS_SUPPORT_INT64
+/* Time types
+*
+* These types can be used to represent a time interval in nanoseconds or
+* an absolute Unadjusted System Time.  Unadjusted System Time is the number
+* of nanoseconds since some arbitrary system event (e.g. since the last
+* time the system booted).  The Unadjusted System Time is an unsigned
+* 64 bit value that wraps back to 0 every 584 years.  Time intervals
+* may be either signed or unsigned.
+*/
+typedef khronos_uint64_t       khronos_utime_nanoseconds_t;
+typedef khronos_int64_t        khronos_stime_nanoseconds_t;
+#endif
+
+/*
+* Dummy value used to pad enum types to 32 bits.
+*/
+#ifndef KHRONOS_MAX_ENUM
+#define KHRONOS_MAX_ENUM 0x7FFFFFFF
+#endif
+
+/*
+* Enumerated boolean type
+*
+* Values other than zero should be considered to be true.  Therefore
+* comparisons should not be made against KHRONOS_TRUE.
+*/
+typedef enum {
+    KHRONOS_FALSE = 0,
+    KHRONOS_TRUE = 1,
+    KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
+} khronos_boolean_enum_t;
+
+#endif /* __khrplatform_h_ */
+
+
+#ifndef __eglplatform_h_
+#define __eglplatform_h_
+
+/*
+** Copyright (c) 2007-2009 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Platform-specific types and definitions for egl.h
+* $Revision: 12306 $ on $Date: 2010-08-25 09:51:28 -0700 (Wed, 25 Aug 2010) $
+*
+* Adopters may modify khrplatform.h and this file to suit their platform.
+* You are encouraged to submit all modifications to the Khronos group so that
+* they can be included in future versions of this file.  Please submit changes
+* by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
+* by filing a bug against product "EGL" component "Registry".
+*/
+
+/*#include <KHR/khrplatform.h>*/
+
+/* Macros used in EGL function prototype declarations.
+*
+* EGL functions should be prototyped as:
+*
+* EGLAPI return-type EGLAPIENTRY eglFunction(arguments);
+* typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments);
+*
+* KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h
+*/
+
+#ifndef EGLAPI
+#define EGLAPI KHRONOS_APICALL
+#endif
+
+#ifndef EGLAPIENTRY
+#define EGLAPIENTRY  KHRONOS_APIENTRY
+#endif
+#define EGLAPIENTRYP EGLAPIENTRY*
+
+/* The types NativeDisplayType, NativeWindowType, and NativePixmapType
+* are aliases of window-system-dependent types, such as X Display * or
+* Windows Device Context. They must be defined in platform-specific
+* code below. The EGL-prefixed versions of Native*Type are the same
+* types, renamed in EGL 1.3 so all types in the API start with "EGL".
+*
+* Khronos STRONGLY RECOMMENDS that you use the default definitions
+* provided below, since these changes affect both binary and source
+* portability of applications using EGL running on different EGL
+* implementations.
+*/
+
+#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN 1
+#endif
+#include <windows.h>
+
+#if __WINRT__
+#include <Unknwn.h>
+typedef IUnknown * EGLNativeWindowType;
+typedef IUnknown * EGLNativePixmapType;
+typedef IUnknown * EGLNativeDisplayType;
+#else
+typedef HDC     EGLNativeDisplayType;
+typedef HBITMAP EGLNativePixmapType;
+typedef HWND    EGLNativeWindowType;
+#endif
+
+#elif defined(__WINSCW__) || defined(__SYMBIAN32__)  /* Symbian */
+
+typedef int   EGLNativeDisplayType;
+typedef void *EGLNativeWindowType;
+typedef void *EGLNativePixmapType;
+
+#elif defined(WL_EGL_PLATFORM)
+
+typedef struct wl_display     *EGLNativeDisplayType;
+typedef struct wl_egl_pixmap  *EGLNativePixmapType;
+typedef struct wl_egl_window  *EGLNativeWindowType;
+
+#elif defined(__GBM__)
+
+typedef struct gbm_device  *EGLNativeDisplayType;
+typedef struct gbm_bo      *EGLNativePixmapType;
+typedef void               *EGLNativeWindowType;
+
+#elif defined(__ANDROID__) /* Android */
+
+struct ANativeWindow;
+struct egl_native_pixmap_t;
+
+typedef struct ANativeWindow        *EGLNativeWindowType;
+typedef struct egl_native_pixmap_t  *EGLNativePixmapType;
+typedef void                        *EGLNativeDisplayType;
+
+#elif defined(MIR_EGL_PLATFORM)
+
+#include <mir_toolkit/mir_client_library.h>
+typedef MirEGLNativeDisplayType EGLNativeDisplayType;
+typedef void                   *EGLNativePixmapType;
+typedef MirEGLNativeWindowType  EGLNativeWindowType;
+
+#elif defined(__unix__)
+
+#ifdef MESA_EGL_NO_X11_HEADERS
+
+typedef void            *EGLNativeDisplayType;
+typedef khronos_uintptr_t EGLNativePixmapType;
+typedef khronos_uintptr_t EGLNativeWindowType;
+
+#else
+
+/* X11 (tentative)  */
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+typedef Display *EGLNativeDisplayType;
+typedef Pixmap   EGLNativePixmapType;
+typedef Window   EGLNativeWindowType;
+
+#endif /* MESA_EGL_NO_X11_HEADERS */
+
+#else
+#error "Platform not recognized"
+#endif
+
+/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
+typedef EGLNativeDisplayType NativeDisplayType;
+typedef EGLNativePixmapType  NativePixmapType;
+typedef EGLNativeWindowType  NativeWindowType;
+
+
+/* Define EGLint. This must be a signed integral type large enough to contain
+* all legal attribute names and values passed into and out of EGL, whether
+* their type is boolean, bitmask, enumerant (symbolic constant), integer,
+* handle, or other.  While in general a 32-bit integer will suffice, if
+* handles are 64 bit types, then EGLint should be defined as a signed 64-bit
+* integer type.
+*/
+typedef khronos_int32_t EGLint;
+
+#endif /* __eglplatform_h */
+
+#ifndef __egl_h_
+#define __egl_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2015 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+**   http://www.opengl.org/registry/
+**
+** Khronos $Revision: 31566 $ on $Date: 2015-06-23 08:48:48 -0700 (Tue, 23 Jun 2015) $
+*/
+
+/*#include <EGL/eglplatform.h>*/
+
+/* Generated on date 20150623 */
+
+/* Generated C header for:
+ * API: egl
+ * Versions considered: .*
+ * Versions emitted: .*
+ * Default extensions included: None
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef EGL_VERSION_1_0
+#define EGL_VERSION_1_0 1
+typedef unsigned int EGLBoolean;
+typedef void *EGLDisplay;
+typedef void *EGLConfig;
+typedef void *EGLSurface;
+typedef void *EGLContext;
+typedef void (*__eglMustCastToProperFunctionPointerType)(void);
+#define EGL_ALPHA_SIZE                    0x3021
+#define EGL_BAD_ACCESS                    0x3002
+#define EGL_BAD_ALLOC                     0x3003
+#define EGL_BAD_ATTRIBUTE                 0x3004
+#define EGL_BAD_CONFIG                    0x3005
+#define EGL_BAD_CONTEXT                   0x3006
+#define EGL_BAD_CURRENT_SURFACE           0x3007
+#define EGL_BAD_DISPLAY                   0x3008
+#define EGL_BAD_MATCH                     0x3009
+#define EGL_BAD_NATIVE_PIXMAP             0x300A
+#define EGL_BAD_NATIVE_WINDOW             0x300B
+#define EGL_BAD_PARAMETER                 0x300C
+#define EGL_BAD_SURFACE                   0x300D
+#define EGL_BLUE_SIZE                     0x3022
+#define EGL_BUFFER_SIZE                   0x3020
+#define EGL_CONFIG_CAVEAT                 0x3027
+#define EGL_CONFIG_ID                     0x3028
+#define EGL_CORE_NATIVE_ENGINE            0x305B
+#define EGL_DEPTH_SIZE                    0x3025
+#define EGL_DONT_CARE                     ((EGLint)-1)
+#define EGL_DRAW                          0x3059
+#define EGL_EXTENSIONS                    0x3055
+#define EGL_FALSE                         0
+#define EGL_GREEN_SIZE                    0x3023
+#define EGL_HEIGHT                        0x3056
+#define EGL_LARGEST_PBUFFER               0x3058
+#define EGL_LEVEL                         0x3029
+#define EGL_MAX_PBUFFER_HEIGHT            0x302A
+#define EGL_MAX_PBUFFER_PIXELS            0x302B
+#define EGL_MAX_PBUFFER_WIDTH             0x302C
+#define EGL_NATIVE_RENDERABLE             0x302D
+#define EGL_NATIVE_VISUAL_ID              0x302E
+#define EGL_NATIVE_VISUAL_TYPE            0x302F
+#define EGL_NONE                          0x3038
+#define EGL_NON_CONFORMANT_CONFIG         0x3051
+#define EGL_NOT_INITIALIZED               0x3001
+#define EGL_NO_CONTEXT                    ((EGLContext)0)
+#define EGL_NO_DISPLAY                    ((EGLDisplay)0)
+#define EGL_NO_SURFACE                    ((EGLSurface)0)
+#define EGL_PBUFFER_BIT                   0x0001
+#define EGL_PIXMAP_BIT                    0x0002
+#define EGL_READ                          0x305A
+#define EGL_RED_SIZE                      0x3024
+#define EGL_SAMPLES                       0x3031
+#define EGL_SAMPLE_BUFFERS                0x3032
+#define EGL_SLOW_CONFIG                   0x3050
+#define EGL_STENCIL_SIZE                  0x3026
+#define EGL_SUCCESS                       0x3000
+#define EGL_SURFACE_TYPE                  0x3033
+#define EGL_TRANSPARENT_BLUE_VALUE        0x3035
+#define EGL_TRANSPARENT_GREEN_VALUE       0x3036
+#define EGL_TRANSPARENT_RED_VALUE         0x3037
+#define EGL_TRANSPARENT_RGB               0x3052
+#define EGL_TRANSPARENT_TYPE              0x3034
+#define EGL_TRUE                          1
+#define EGL_VENDOR                        0x3053
+#define EGL_VERSION                       0x3054
+#define EGL_WIDTH                         0x3057
+#define EGL_WINDOW_BIT                    0x0004
+EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
+EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void);
+EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id);
+EGLAPI EGLint EGLAPIENTRY eglGetError (void);
+EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname);
+EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor);
+EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
+EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface);
+EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine);
+#endif /* EGL_VERSION_1_0 */
+
+#ifndef EGL_VERSION_1_1
+#define EGL_VERSION_1_1 1
+#define EGL_BACK_BUFFER                   0x3084
+#define EGL_BIND_TO_TEXTURE_RGB           0x3039
+#define EGL_BIND_TO_TEXTURE_RGBA          0x303A
+#define EGL_CONTEXT_LOST                  0x300E
+#define EGL_MIN_SWAP_INTERVAL             0x303B
+#define EGL_MAX_SWAP_INTERVAL             0x303C
+#define EGL_MIPMAP_TEXTURE                0x3082
+#define EGL_MIPMAP_LEVEL                  0x3083
+#define EGL_NO_TEXTURE                    0x305C
+#define EGL_TEXTURE_2D                    0x305F
+#define EGL_TEXTURE_FORMAT                0x3080
+#define EGL_TEXTURE_RGB                   0x305D
+#define EGL_TEXTURE_RGBA                  0x305E
+#define EGL_TEXTURE_TARGET                0x3081
+EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval);
+#endif /* EGL_VERSION_1_1 */
+
+#ifndef EGL_VERSION_1_2
+#define EGL_VERSION_1_2 1
+typedef unsigned int EGLenum;
+typedef void *EGLClientBuffer;
+#define EGL_ALPHA_FORMAT                  0x3088
+#define EGL_ALPHA_FORMAT_NONPRE           0x308B
+#define EGL_ALPHA_FORMAT_PRE              0x308C
+#define EGL_ALPHA_MASK_SIZE               0x303E
+#define EGL_BUFFER_PRESERVED              0x3094
+#define EGL_BUFFER_DESTROYED              0x3095
+#define EGL_CLIENT_APIS                   0x308D
+#define EGL_COLORSPACE                    0x3087
+#define EGL_COLORSPACE_sRGB               0x3089
+#define EGL_COLORSPACE_LINEAR             0x308A
+#define EGL_COLOR_BUFFER_TYPE             0x303F
+#define EGL_CONTEXT_CLIENT_TYPE           0x3097
+#define EGL_DISPLAY_SCALING               10000
+#define EGL_HORIZONTAL_RESOLUTION         0x3090
+#define EGL_LUMINANCE_BUFFER              0x308F
+#define EGL_LUMINANCE_SIZE                0x303D
+#define EGL_OPENGL_ES_BIT                 0x0001
+#define EGL_OPENVG_BIT                    0x0002
+#define EGL_OPENGL_ES_API                 0x30A0
+#define EGL_OPENVG_API                    0x30A1
+#define EGL_OPENVG_IMAGE                  0x3096
+#define EGL_PIXEL_ASPECT_RATIO            0x3092
+#define EGL_RENDERABLE_TYPE               0x3040
+#define EGL_RENDER_BUFFER                 0x3086
+#define EGL_RGB_BUFFER                    0x308E
+#define EGL_SINGLE_BUFFER                 0x3085
+#define EGL_SWAP_BEHAVIOR                 0x3093
+#define EGL_UNKNOWN                       ((EGLint)-1)
+#define EGL_VERTICAL_RESOLUTION           0x3091
+EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api);
+EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void);
+#endif /* EGL_VERSION_1_2 */
+
+#ifndef EGL_VERSION_1_3
+#define EGL_VERSION_1_3 1
+#define EGL_CONFORMANT                    0x3042
+#define EGL_CONTEXT_CLIENT_VERSION        0x3098
+#define EGL_MATCH_NATIVE_PIXMAP           0x3041
+#define EGL_OPENGL_ES2_BIT                0x0004
+#define EGL_VG_ALPHA_FORMAT               0x3088
+#define EGL_VG_ALPHA_FORMAT_NONPRE        0x308B
+#define EGL_VG_ALPHA_FORMAT_PRE           0x308C
+#define EGL_VG_ALPHA_FORMAT_PRE_BIT       0x0040
+#define EGL_VG_COLORSPACE                 0x3087
+#define EGL_VG_COLORSPACE_sRGB            0x3089
+#define EGL_VG_COLORSPACE_LINEAR          0x308A
+#define EGL_VG_COLORSPACE_LINEAR_BIT      0x0020
+#endif /* EGL_VERSION_1_3 */
+
+#ifndef EGL_VERSION_1_4
+#define EGL_VERSION_1_4 1
+#define EGL_DEFAULT_DISPLAY               ((EGLNativeDisplayType)0)
+#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT   0x0200
+#define EGL_MULTISAMPLE_RESOLVE           0x3099
+#define EGL_MULTISAMPLE_RESOLVE_DEFAULT   0x309A
+#define EGL_MULTISAMPLE_RESOLVE_BOX       0x309B
+#define EGL_OPENGL_API                    0x30A2
+#define EGL_OPENGL_BIT                    0x0008
+#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT   0x0400
+EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void);
+#endif /* EGL_VERSION_1_4 */
+
+#ifndef EGL_VERSION_1_5
+#define EGL_VERSION_1_5 1
+typedef void *EGLSync;
+typedef intptr_t EGLAttrib;
+typedef khronos_utime_nanoseconds_t EGLTime;
+typedef void *EGLImage;
+#define EGL_CONTEXT_MAJOR_VERSION         0x3098
+#define EGL_CONTEXT_MINOR_VERSION         0x30FB
+#define EGL_CONTEXT_OPENGL_PROFILE_MASK   0x30FD
+#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
+#define EGL_NO_RESET_NOTIFICATION         0x31BE
+#define EGL_LOSE_CONTEXT_ON_RESET         0x31BF
+#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
+#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define EGL_CONTEXT_OPENGL_DEBUG          0x31B0
+#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
+#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS  0x31B2
+#define EGL_OPENGL_ES3_BIT                0x00000040
+#define EGL_CL_EVENT_HANDLE               0x309C
+#define EGL_SYNC_CL_EVENT                 0x30FE
+#define EGL_SYNC_CL_EVENT_COMPLETE        0x30FF
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE  0x30F0
+#define EGL_SYNC_TYPE                     0x30F7
+#define EGL_SYNC_STATUS                   0x30F1
+#define EGL_SYNC_CONDITION                0x30F8
+#define EGL_SIGNALED                      0x30F2
+#define EGL_UNSIGNALED                    0x30F3
+#define EGL_SYNC_FLUSH_COMMANDS_BIT       0x0001
+#define EGL_FOREVER                       0xFFFFFFFFFFFFFFFFull
+#define EGL_TIMEOUT_EXPIRED               0x30F5
+#define EGL_CONDITION_SATISFIED           0x30F6
+#define EGL_NO_SYNC                       ((EGLSync)0)
+#define EGL_SYNC_FENCE                    0x30F9
+#define EGL_GL_COLORSPACE                 0x309D
+#define EGL_GL_COLORSPACE_SRGB            0x3089
+#define EGL_GL_COLORSPACE_LINEAR          0x308A
+#define EGL_GL_RENDERBUFFER               0x30B9
+#define EGL_GL_TEXTURE_2D                 0x30B1
+#define EGL_GL_TEXTURE_LEVEL              0x30BC
+#define EGL_GL_TEXTURE_3D                 0x30B2
+#define EGL_GL_TEXTURE_ZOFFSET            0x30BD
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
+#define EGL_IMAGE_PRESERVED               0x30D2
+#define EGL_NO_IMAGE                      ((EGLImage)0)
+EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync);
+EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value);
+EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags);
+#endif /* EGL_VERSION_1_5 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __egl_h_ */
+
+
+
+#ifndef __eglext_h_
+#define __eglext_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2015 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+**   http://www.opengl.org/registry/
+**
+** Khronos $Revision: 31566 $ on $Date: 2015-06-23 08:48:48 -0700 (Tue, 23 Jun 2015) $
+*/
+
+/*#include <EGL/eglplatform.h>*/
+
+#define EGL_EGLEXT_VERSION 20150623
+
+/* Generated C header for:
+ * API: egl
+ * Versions considered: .*
+ * Versions emitted: _nomatch_^
+ * Default extensions included: egl
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef EGL_KHR_cl_event
+#define EGL_KHR_cl_event 1
+#define EGL_CL_EVENT_HANDLE_KHR           0x309C
+#define EGL_SYNC_CL_EVENT_KHR             0x30FE
+#define EGL_SYNC_CL_EVENT_COMPLETE_KHR    0x30FF
+#endif /* EGL_KHR_cl_event */
+
+#ifndef EGL_KHR_cl_event2
+#define EGL_KHR_cl_event2 1
+typedef void *EGLSyncKHR;
+typedef intptr_t EGLAttribKHR;
+typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
+#endif
+#endif /* EGL_KHR_cl_event2 */
+
+#ifndef EGL_KHR_client_get_all_proc_addresses
+#define EGL_KHR_client_get_all_proc_addresses 1
+#endif /* EGL_KHR_client_get_all_proc_addresses */
+
+#ifndef EGL_KHR_config_attribs
+#define EGL_KHR_config_attribs 1
+#define EGL_CONFORMANT_KHR                0x3042
+#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR  0x0020
+#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR   0x0040
+#endif /* EGL_KHR_config_attribs */
+
+#ifndef EGL_KHR_create_context
+#define EGL_KHR_create_context 1
+#define EGL_CONTEXT_MAJOR_VERSION_KHR     0x3098
+#define EGL_CONTEXT_MINOR_VERSION_KHR     0x30FB
+#define EGL_CONTEXT_FLAGS_KHR             0x30FC
+#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD
+#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD
+#define EGL_NO_RESET_NOTIFICATION_KHR     0x31BE
+#define EGL_LOSE_CONTEXT_ON_RESET_KHR     0x31BF
+#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR  0x00000001
+#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002
+#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004
+#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001
+#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002
+#define EGL_OPENGL_ES3_BIT_KHR            0x00000040
+#endif /* EGL_KHR_create_context */
+
+#ifndef EGL_KHR_create_context_no_error
+#define EGL_KHR_create_context_no_error 1
+#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR   0x31B3
+#endif /* EGL_KHR_create_context_no_error */
+
+#ifndef EGL_KHR_fence_sync
+#define EGL_KHR_fence_sync 1
+typedef khronos_utime_nanoseconds_t EGLTimeKHR;
+#ifdef KHRONOS_SUPPORT_INT64
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
+#define EGL_SYNC_CONDITION_KHR            0x30F8
+#define EGL_SYNC_FENCE_KHR                0x30F9
+typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
+typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
+EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+#endif
+#endif /* KHRONOS_SUPPORT_INT64 */
+#endif /* EGL_KHR_fence_sync */
+
+#ifndef EGL_KHR_get_all_proc_addresses
+#define EGL_KHR_get_all_proc_addresses 1
+#endif /* EGL_KHR_get_all_proc_addresses */
+
+#ifndef EGL_KHR_gl_colorspace
+#define EGL_KHR_gl_colorspace 1
+#define EGL_GL_COLORSPACE_KHR             0x309D
+#define EGL_GL_COLORSPACE_SRGB_KHR        0x3089
+#define EGL_GL_COLORSPACE_LINEAR_KHR      0x308A
+#endif /* EGL_KHR_gl_colorspace */
+
+#ifndef EGL_KHR_gl_renderbuffer_image
+#define EGL_KHR_gl_renderbuffer_image 1
+#define EGL_GL_RENDERBUFFER_KHR           0x30B9
+#endif /* EGL_KHR_gl_renderbuffer_image */
+
+#ifndef EGL_KHR_gl_texture_2D_image
+#define EGL_KHR_gl_texture_2D_image 1
+#define EGL_GL_TEXTURE_2D_KHR             0x30B1
+#define EGL_GL_TEXTURE_LEVEL_KHR          0x30BC
+#endif /* EGL_KHR_gl_texture_2D_image */
+
+#ifndef EGL_KHR_gl_texture_3D_image
+#define EGL_KHR_gl_texture_3D_image 1
+#define EGL_GL_TEXTURE_3D_KHR             0x30B2
+#define EGL_GL_TEXTURE_ZOFFSET_KHR        0x30BD
+#endif /* EGL_KHR_gl_texture_3D_image */
+
+#ifndef EGL_KHR_gl_texture_cubemap_image
+#define EGL_KHR_gl_texture_cubemap_image 1
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8
+#endif /* EGL_KHR_gl_texture_cubemap_image */
+
+#ifndef EGL_KHR_image
+#define EGL_KHR_image 1
+typedef void *EGLImageKHR;
+#define EGL_NATIVE_PIXMAP_KHR             0x30B0
+#define EGL_NO_IMAGE_KHR                  ((EGLImageKHR)0)
+typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image);
+#endif
+#endif /* EGL_KHR_image */
+
+#ifndef EGL_KHR_image_base
+#define EGL_KHR_image_base 1
+#define EGL_IMAGE_PRESERVED_KHR           0x30D2
+#endif /* EGL_KHR_image_base */
+
+#ifndef EGL_KHR_image_pixmap
+#define EGL_KHR_image_pixmap 1
+#endif /* EGL_KHR_image_pixmap */
+
+#ifndef EGL_KHR_lock_surface
+#define EGL_KHR_lock_surface 1
+#define EGL_READ_SURFACE_BIT_KHR          0x0001
+#define EGL_WRITE_SURFACE_BIT_KHR         0x0002
+#define EGL_LOCK_SURFACE_BIT_KHR          0x0080
+#define EGL_OPTIMAL_FORMAT_BIT_KHR        0x0100
+#define EGL_MATCH_FORMAT_KHR              0x3043
+#define EGL_FORMAT_RGB_565_EXACT_KHR      0x30C0
+#define EGL_FORMAT_RGB_565_KHR            0x30C1
+#define EGL_FORMAT_RGBA_8888_EXACT_KHR    0x30C2
+#define EGL_FORMAT_RGBA_8888_KHR          0x30C3
+#define EGL_MAP_PRESERVE_PIXELS_KHR       0x30C4
+#define EGL_LOCK_USAGE_HINT_KHR           0x30C5
+#define EGL_BITMAP_POINTER_KHR            0x30C6
+#define EGL_BITMAP_PITCH_KHR              0x30C7
+#define EGL_BITMAP_ORIGIN_KHR             0x30C8
+#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR   0x30C9
+#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA
+#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR  0x30CB
+#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC
+#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD
+#define EGL_LOWER_LEFT_KHR                0x30CE
+#define EGL_UPPER_LEFT_KHR                0x30CF
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface);
+#endif
+#endif /* EGL_KHR_lock_surface */
+
+#ifndef EGL_KHR_lock_surface2
+#define EGL_KHR_lock_surface2 1
+#define EGL_BITMAP_PIXEL_SIZE_KHR         0x3110
+#endif /* EGL_KHR_lock_surface2 */
+
+#ifndef EGL_KHR_lock_surface3
+#define EGL_KHR_lock_surface3 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value);
+#endif
+#endif /* EGL_KHR_lock_surface3 */
+
+#ifndef EGL_KHR_partial_update
+#define EGL_KHR_partial_update 1
+#define EGL_BUFFER_AGE_KHR                0x313D
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif
+#endif /* EGL_KHR_partial_update */
+
+#ifndef EGL_KHR_platform_android
+#define EGL_KHR_platform_android 1
+#define EGL_PLATFORM_ANDROID_KHR          0x3141
+#endif /* EGL_KHR_platform_android */
+
+#ifndef EGL_KHR_platform_gbm
+#define EGL_KHR_platform_gbm 1
+#define EGL_PLATFORM_GBM_KHR              0x31D7
+#endif /* EGL_KHR_platform_gbm */
+
+#ifndef EGL_KHR_platform_wayland
+#define EGL_KHR_platform_wayland 1
+#define EGL_PLATFORM_WAYLAND_KHR          0x31D8
+#endif /* EGL_KHR_platform_wayland */
+
+#ifndef EGL_KHR_platform_x11
+#define EGL_KHR_platform_x11 1
+#define EGL_PLATFORM_X11_KHR              0x31D5
+#define EGL_PLATFORM_X11_SCREEN_KHR       0x31D6
+#endif /* EGL_KHR_platform_x11 */
+
+#ifndef EGL_KHR_reusable_sync
+#define EGL_KHR_reusable_sync 1
+#ifdef KHRONOS_SUPPORT_INT64
+#define EGL_SYNC_STATUS_KHR               0x30F1
+#define EGL_SIGNALED_KHR                  0x30F2
+#define EGL_UNSIGNALED_KHR                0x30F3
+#define EGL_TIMEOUT_EXPIRED_KHR           0x30F5
+#define EGL_CONDITION_SATISFIED_KHR       0x30F6
+#define EGL_SYNC_TYPE_KHR                 0x30F7
+#define EGL_SYNC_REUSABLE_KHR             0x30FA
+#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR   0x0001
+#define EGL_FOREVER_KHR                   0xFFFFFFFFFFFFFFFFull
+#define EGL_NO_SYNC_KHR                   ((EGLSyncKHR)0)
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
+#endif
+#endif /* KHRONOS_SUPPORT_INT64 */
+#endif /* EGL_KHR_reusable_sync */
+
+#ifndef EGL_KHR_stream
+#define EGL_KHR_stream 1
+typedef void *EGLStreamKHR;
+typedef khronos_uint64_t EGLuint64KHR;
+#ifdef KHRONOS_SUPPORT_INT64
+#define EGL_NO_STREAM_KHR                 ((EGLStreamKHR)0)
+#define EGL_CONSUMER_LATENCY_USEC_KHR     0x3210
+#define EGL_PRODUCER_FRAME_KHR            0x3212
+#define EGL_CONSUMER_FRAME_KHR            0x3213
+#define EGL_STREAM_STATE_KHR              0x3214
+#define EGL_STREAM_STATE_CREATED_KHR      0x3215
+#define EGL_STREAM_STATE_CONNECTING_KHR   0x3216
+#define EGL_STREAM_STATE_EMPTY_KHR        0x3217
+#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218
+#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219
+#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A
+#define EGL_BAD_STREAM_KHR                0x321B
+#define EGL_BAD_STATE_KHR                 0x321C
+typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream);
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
+#endif
+#endif /* KHRONOS_SUPPORT_INT64 */
+#endif /* EGL_KHR_stream */
+
+#ifndef EGL_KHR_stream_consumer_gltexture
+#define EGL_KHR_stream_consumer_gltexture 1
+#ifdef EGL_KHR_stream
+#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream);
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream);
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream);
+#endif
+#endif /* EGL_KHR_stream */
+#endif /* EGL_KHR_stream_consumer_gltexture */
+
+#ifndef EGL_KHR_stream_cross_process_fd
+#define EGL_KHR_stream_cross_process_fd 1
+typedef int EGLNativeFileDescriptorKHR;
+#ifdef EGL_KHR_stream
+#define EGL_NO_FILE_DESCRIPTOR_KHR        ((EGLNativeFileDescriptorKHR)(-1))
+typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream);
+typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream);
+EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
+#endif
+#endif /* EGL_KHR_stream */
+#endif /* EGL_KHR_stream_cross_process_fd */
+
+#ifndef EGL_KHR_stream_fifo
+#define EGL_KHR_stream_fifo 1
+#ifdef EGL_KHR_stream
+#define EGL_STREAM_FIFO_LENGTH_KHR        0x31FC
+#define EGL_STREAM_TIME_NOW_KHR           0x31FD
+#define EGL_STREAM_TIME_CONSUMER_KHR      0x31FE
+#define EGL_STREAM_TIME_PRODUCER_KHR      0x31FF
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
+#endif
+#endif /* EGL_KHR_stream */
+#endif /* EGL_KHR_stream_fifo */
+
+#ifndef EGL_KHR_stream_producer_aldatalocator
+#define EGL_KHR_stream_producer_aldatalocator 1
+#ifdef EGL_KHR_stream
+#endif /* EGL_KHR_stream */
+#endif /* EGL_KHR_stream_producer_aldatalocator */
+
+#ifndef EGL_KHR_stream_producer_eglsurface
+#define EGL_KHR_stream_producer_eglsurface 1
+#ifdef EGL_KHR_stream
+#define EGL_STREAM_BIT_KHR                0x0800
+typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
+#endif
+#endif /* EGL_KHR_stream */
+#endif /* EGL_KHR_stream_producer_eglsurface */
+
+#ifndef EGL_KHR_surfaceless_context
+#define EGL_KHR_surfaceless_context 1
+#endif /* EGL_KHR_surfaceless_context */
+
+#ifndef EGL_KHR_swap_buffers_with_damage
+#define EGL_KHR_swap_buffers_with_damage 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif
+#endif /* EGL_KHR_swap_buffers_with_damage */
+
+#ifndef EGL_KHR_vg_parent_image
+#define EGL_KHR_vg_parent_image 1
+#define EGL_VG_PARENT_IMAGE_KHR           0x30BA
+#endif /* EGL_KHR_vg_parent_image */
+
+#ifndef EGL_KHR_wait_sync
+#define EGL_KHR_wait_sync 1
+typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
+#endif
+#endif /* EGL_KHR_wait_sync */
+
+#ifndef EGL_ANDROID_blob_cache
+#define EGL_ANDROID_blob_cache 1
+typedef khronos_ssize_t EGLsizeiANDROID;
+typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize);
+typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize);
+typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
+#endif
+#endif /* EGL_ANDROID_blob_cache */
+
+#ifndef EGL_ANDROID_framebuffer_target
+#define EGL_ANDROID_framebuffer_target 1
+#define EGL_FRAMEBUFFER_TARGET_ANDROID    0x3147
+#endif /* EGL_ANDROID_framebuffer_target */
+
+#ifndef EGL_ANDROID_image_native_buffer
+#define EGL_ANDROID_image_native_buffer 1
+#define EGL_NATIVE_BUFFER_ANDROID         0x3140
+#endif /* EGL_ANDROID_image_native_buffer */
+
+#ifndef EGL_ANDROID_native_fence_sync
+#define EGL_ANDROID_native_fence_sync 1
+#define EGL_SYNC_NATIVE_FENCE_ANDROID     0x3144
+#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID  0x3145
+#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146
+#define EGL_NO_NATIVE_FENCE_FD_ANDROID    -1
+typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync);
+#endif
+#endif /* EGL_ANDROID_native_fence_sync */
+
+#ifndef EGL_ANDROID_recordable
+#define EGL_ANDROID_recordable 1
+#define EGL_RECORDABLE_ANDROID            0x3142
+#endif /* EGL_ANDROID_recordable */
+
+#ifndef EGL_ANGLE_d3d_share_handle_client_buffer
+#define EGL_ANGLE_d3d_share_handle_client_buffer 1
+#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
+#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
+
+#ifndef EGL_ANGLE_device_d3d
+#define EGL_ANGLE_device_d3d 1
+#define EGL_D3D9_DEVICE_ANGLE             0x33A0
+#define EGL_D3D11_DEVICE_ANGLE            0x33A1
+#endif /* EGL_ANGLE_device_d3d */
+
+#ifndef EGL_ANGLE_query_surface_pointer
+#define EGL_ANGLE_query_surface_pointer 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
+#endif
+#endif /* EGL_ANGLE_query_surface_pointer */
+
+#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
+#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
+#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
+
+#ifndef EGL_ANGLE_window_fixed_size
+#define EGL_ANGLE_window_fixed_size 1
+#define EGL_FIXED_SIZE_ANGLE              0x3201
+#endif /* EGL_ANGLE_window_fixed_size */
+
+#ifndef EGL_ARM_pixmap_multisample_discard
+#define EGL_ARM_pixmap_multisample_discard 1
+#define EGL_DISCARD_SAMPLES_ARM           0x3286
+#endif /* EGL_ARM_pixmap_multisample_discard */
+
+#ifndef EGL_EXT_buffer_age
+#define EGL_EXT_buffer_age 1
+#define EGL_BUFFER_AGE_EXT                0x313D
+#endif /* EGL_EXT_buffer_age */
+
+#ifndef EGL_EXT_client_extensions
+#define EGL_EXT_client_extensions 1
+#endif /* EGL_EXT_client_extensions */
+
+#ifndef EGL_EXT_create_context_robustness
+#define EGL_EXT_create_context_robustness 1
+#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF
+#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138
+#define EGL_NO_RESET_NOTIFICATION_EXT     0x31BE
+#define EGL_LOSE_CONTEXT_ON_RESET_EXT     0x31BF
+#endif /* EGL_EXT_create_context_robustness */
+
+#ifndef EGL_EXT_device_base
+#define EGL_EXT_device_base 1
+typedef void *EGLDeviceEXT;
+#define EGL_NO_DEVICE_EXT                 ((EGLDeviceEXT)(0))
+#define EGL_BAD_DEVICE_EXT                0x322B
+#define EGL_DEVICE_EXT                    0x322C
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
+#endif
+#endif /* EGL_EXT_device_base */
+
+#ifndef EGL_EXT_device_drm
+#define EGL_EXT_device_drm 1
+#define EGL_DRM_DEVICE_FILE_EXT           0x3233
+#endif /* EGL_EXT_device_drm */
+
+#ifndef EGL_EXT_device_enumeration
+#define EGL_EXT_device_enumeration 1
+#endif /* EGL_EXT_device_enumeration */
+
+#ifndef EGL_EXT_device_openwf
+#define EGL_EXT_device_openwf 1
+#define EGL_OPENWF_DEVICE_ID_EXT          0x3237
+#endif /* EGL_EXT_device_openwf */
+
+#ifndef EGL_EXT_device_query
+#define EGL_EXT_device_query 1
+#endif /* EGL_EXT_device_query */
+
+#ifndef EGL_EXT_image_dma_buf_import
+#define EGL_EXT_image_dma_buf_import 1
+#define EGL_LINUX_DMA_BUF_EXT             0x3270
+#define EGL_LINUX_DRM_FOURCC_EXT          0x3271
+#define EGL_DMA_BUF_PLANE0_FD_EXT         0x3272
+#define EGL_DMA_BUF_PLANE0_OFFSET_EXT     0x3273
+#define EGL_DMA_BUF_PLANE0_PITCH_EXT      0x3274
+#define EGL_DMA_BUF_PLANE1_FD_EXT         0x3275
+#define EGL_DMA_BUF_PLANE1_OFFSET_EXT     0x3276
+#define EGL_DMA_BUF_PLANE1_PITCH_EXT      0x3277
+#define EGL_DMA_BUF_PLANE2_FD_EXT         0x3278
+#define EGL_DMA_BUF_PLANE2_OFFSET_EXT     0x3279
+#define EGL_DMA_BUF_PLANE2_PITCH_EXT      0x327A
+#define EGL_YUV_COLOR_SPACE_HINT_EXT      0x327B
+#define EGL_SAMPLE_RANGE_HINT_EXT         0x327C
+#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D
+#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E
+#define EGL_ITU_REC601_EXT                0x327F
+#define EGL_ITU_REC709_EXT                0x3280
+#define EGL_ITU_REC2020_EXT               0x3281
+#define EGL_YUV_FULL_RANGE_EXT            0x3282
+#define EGL_YUV_NARROW_RANGE_EXT          0x3283
+#define EGL_YUV_CHROMA_SITING_0_EXT       0x3284
+#define EGL_YUV_CHROMA_SITING_0_5_EXT     0x3285
+#endif /* EGL_EXT_image_dma_buf_import */
+
+#ifndef EGL_EXT_multiview_window
+#define EGL_EXT_multiview_window 1
+#define EGL_MULTIVIEW_VIEW_COUNT_EXT      0x3134
+#endif /* EGL_EXT_multiview_window */
+
+#ifndef EGL_EXT_output_base
+#define EGL_EXT_output_base 1
+typedef void *EGLOutputLayerEXT;
+typedef void *EGLOutputPortEXT;
+#define EGL_NO_OUTPUT_LAYER_EXT           ((EGLOutputLayerEXT)0)
+#define EGL_NO_OUTPUT_PORT_EXT            ((EGLOutputPortEXT)0)
+#define EGL_BAD_OUTPUT_LAYER_EXT          0x322D
+#define EGL_BAD_OUTPUT_PORT_EXT           0x322E
+#define EGL_SWAP_INTERVAL_EXT             0x322F
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
+EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
+#endif
+#endif /* EGL_EXT_output_base */
+
+#ifndef EGL_EXT_output_drm
+#define EGL_EXT_output_drm 1
+#define EGL_DRM_CRTC_EXT                  0x3234
+#define EGL_DRM_PLANE_EXT                 0x3235
+#define EGL_DRM_CONNECTOR_EXT             0x3236
+#endif /* EGL_EXT_output_drm */
+
+#ifndef EGL_EXT_output_openwf
+#define EGL_EXT_output_openwf 1
+#define EGL_OPENWF_PIPELINE_ID_EXT        0x3238
+#define EGL_OPENWF_PORT_ID_EXT            0x3239
+#endif /* EGL_EXT_output_openwf */
+
+#ifndef EGL_EXT_platform_base
+#define EGL_EXT_platform_base 1
+typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
+typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
+typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
+#endif
+#endif /* EGL_EXT_platform_base */
+
+#ifndef EGL_EXT_platform_device
+#define EGL_EXT_platform_device 1
+#define EGL_PLATFORM_DEVICE_EXT           0x313F
+#endif /* EGL_EXT_platform_device */
+
+#ifndef EGL_EXT_platform_wayland
+#define EGL_EXT_platform_wayland 1
+#define EGL_PLATFORM_WAYLAND_EXT          0x31D8
+#endif /* EGL_EXT_platform_wayland */
+
+#ifndef EGL_EXT_platform_x11
+#define EGL_EXT_platform_x11 1
+#define EGL_PLATFORM_X11_EXT              0x31D5
+#define EGL_PLATFORM_X11_SCREEN_EXT       0x31D6
+#endif /* EGL_EXT_platform_x11 */
+
+#ifndef EGL_EXT_protected_surface
+#define EGL_EXT_protected_surface 1
+#define EGL_PROTECTED_CONTENT_EXT         0x32C0
+#endif /* EGL_EXT_protected_surface */
+
+#ifndef EGL_EXT_stream_consumer_egloutput
+#define EGL_EXT_stream_consumer_egloutput 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
+#endif
+#endif /* EGL_EXT_stream_consumer_egloutput */
+
+#ifndef EGL_EXT_swap_buffers_with_damage
+#define EGL_EXT_swap_buffers_with_damage 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif
+#endif /* EGL_EXT_swap_buffers_with_damage */
+
+#ifndef EGL_EXT_yuv_surface
+#define EGL_EXT_yuv_surface 1
+#define EGL_YUV_ORDER_EXT                 0x3301
+#define EGL_YUV_NUMBER_OF_PLANES_EXT      0x3311
+#define EGL_YUV_SUBSAMPLE_EXT             0x3312
+#define EGL_YUV_DEPTH_RANGE_EXT           0x3317
+#define EGL_YUV_CSC_STANDARD_EXT          0x330A
+#define EGL_YUV_PLANE_BPP_EXT             0x331A
+#define EGL_YUV_BUFFER_EXT                0x3300
+#define EGL_YUV_ORDER_YUV_EXT             0x3302
+#define EGL_YUV_ORDER_YVU_EXT             0x3303
+#define EGL_YUV_ORDER_YUYV_EXT            0x3304
+#define EGL_YUV_ORDER_UYVY_EXT            0x3305
+#define EGL_YUV_ORDER_YVYU_EXT            0x3306
+#define EGL_YUV_ORDER_VYUY_EXT            0x3307
+#define EGL_YUV_ORDER_AYUV_EXT            0x3308
+#define EGL_YUV_SUBSAMPLE_4_2_0_EXT       0x3313
+#define EGL_YUV_SUBSAMPLE_4_2_2_EXT       0x3314
+#define EGL_YUV_SUBSAMPLE_4_4_4_EXT       0x3315
+#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT   0x3318
+#define EGL_YUV_DEPTH_RANGE_FULL_EXT      0x3319
+#define EGL_YUV_CSC_STANDARD_601_EXT      0x330B
+#define EGL_YUV_CSC_STANDARD_709_EXT      0x330C
+#define EGL_YUV_CSC_STANDARD_2020_EXT     0x330D
+#define EGL_YUV_PLANE_BPP_0_EXT           0x331B
+#define EGL_YUV_PLANE_BPP_8_EXT           0x331C
+#define EGL_YUV_PLANE_BPP_10_EXT          0x331D
+#endif /* EGL_EXT_yuv_surface */
+
+#ifndef EGL_HI_clientpixmap
+#define EGL_HI_clientpixmap 1
+struct EGLClientPixmapHI {
+    void  *pData;
+    EGLint iWidth;
+    EGLint iHeight;
+    EGLint iStride;
+};
+#define EGL_CLIENT_PIXMAP_POINTER_HI      0x8F74
+typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap);
+#endif
+#endif /* EGL_HI_clientpixmap */
+
+#ifndef EGL_HI_colorformats
+#define EGL_HI_colorformats 1
+#define EGL_COLOR_FORMAT_HI               0x8F70
+#define EGL_COLOR_RGB_HI                  0x8F71
+#define EGL_COLOR_RGBA_HI                 0x8F72
+#define EGL_COLOR_ARGB_HI                 0x8F73
+#endif /* EGL_HI_colorformats */
+
+#ifndef EGL_IMG_context_priority
+#define EGL_IMG_context_priority 1
+#define EGL_CONTEXT_PRIORITY_LEVEL_IMG    0x3100
+#define EGL_CONTEXT_PRIORITY_HIGH_IMG     0x3101
+#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG   0x3102
+#define EGL_CONTEXT_PRIORITY_LOW_IMG      0x3103
+#endif /* EGL_IMG_context_priority */
+
+#ifndef EGL_MESA_drm_image
+#define EGL_MESA_drm_image 1
+#define EGL_DRM_BUFFER_FORMAT_MESA        0x31D0
+#define EGL_DRM_BUFFER_USE_MESA           0x31D1
+#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2
+#define EGL_DRM_BUFFER_MESA               0x31D3
+#define EGL_DRM_BUFFER_STRIDE_MESA        0x31D4
+#define EGL_DRM_BUFFER_USE_SCANOUT_MESA   0x00000001
+#define EGL_DRM_BUFFER_USE_SHARE_MESA     0x00000002
+typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
+#endif
+#endif /* EGL_MESA_drm_image */
+
+#ifndef EGL_MESA_image_dma_buf_export
+#define EGL_MESA_image_dma_buf_export 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
+EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
+#endif
+#endif /* EGL_MESA_image_dma_buf_export */
+
+#ifndef EGL_MESA_platform_gbm
+#define EGL_MESA_platform_gbm 1
+#define EGL_PLATFORM_GBM_MESA             0x31D7
+#endif /* EGL_MESA_platform_gbm */
+
+#ifndef EGL_NOK_swap_region
+#define EGL_NOK_swap_region 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#endif
+#endif /* EGL_NOK_swap_region */
+
+#ifndef EGL_NOK_swap_region2
+#define EGL_NOK_swap_region2 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#endif
+#endif /* EGL_NOK_swap_region2 */
+
+#ifndef EGL_NOK_texture_from_pixmap
+#define EGL_NOK_texture_from_pixmap 1
+#define EGL_Y_INVERTED_NOK                0x307F
+#endif /* EGL_NOK_texture_from_pixmap */
+
+#ifndef EGL_NV_3dvision_surface
+#define EGL_NV_3dvision_surface 1
+#define EGL_AUTO_STEREO_NV                0x3136
+#endif /* EGL_NV_3dvision_surface */
+
+#ifndef EGL_NV_coverage_sample
+#define EGL_NV_coverage_sample 1
+#define EGL_COVERAGE_BUFFERS_NV           0x30E0
+#define EGL_COVERAGE_SAMPLES_NV           0x30E1
+#endif /* EGL_NV_coverage_sample */
+
+#ifndef EGL_NV_coverage_sample_resolve
+#define EGL_NV_coverage_sample_resolve 1
+#define EGL_COVERAGE_SAMPLE_RESOLVE_NV    0x3131
+#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132
+#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133
+#endif /* EGL_NV_coverage_sample_resolve */
+
+#ifndef EGL_NV_cuda_event
+#define EGL_NV_cuda_event 1
+#define EGL_CUDA_EVENT_HANDLE_NV          0x323B
+#define EGL_SYNC_CUDA_EVENT_NV            0x323C
+#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV   0x323D
+#endif /* EGL_NV_cuda_event */
+
+#ifndef EGL_NV_depth_nonlinear
+#define EGL_NV_depth_nonlinear 1
+#define EGL_DEPTH_ENCODING_NV             0x30E2
+#define EGL_DEPTH_ENCODING_NONE_NV        0
+#define EGL_DEPTH_ENCODING_NONLINEAR_NV   0x30E3
+#endif /* EGL_NV_depth_nonlinear */
+
+#ifndef EGL_NV_device_cuda
+#define EGL_NV_device_cuda 1
+#define EGL_CUDA_DEVICE_NV                0x323A
+#endif /* EGL_NV_device_cuda */
+
+#ifndef EGL_NV_native_query
+#define EGL_NV_native_query 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap);
+#endif
+#endif /* EGL_NV_native_query */
+
+#ifndef EGL_NV_post_convert_rounding
+#define EGL_NV_post_convert_rounding 1
+#endif /* EGL_NV_post_convert_rounding */
+
+#ifndef EGL_NV_post_sub_buffer
+#define EGL_NV_post_sub_buffer 1
+#define EGL_POST_SUB_BUFFER_SUPPORTED_NV  0x30BE
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
+#endif
+#endif /* EGL_NV_post_sub_buffer */
+
+#ifndef EGL_NV_stream_sync
+#define EGL_NV_stream_sync 1
+#define EGL_SYNC_NEW_FRAME_NV             0x321F
+typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list);
+#endif
+#endif /* EGL_NV_stream_sync */
+
+#ifndef EGL_NV_sync
+#define EGL_NV_sync 1
+typedef void *EGLSyncNV;
+typedef khronos_utime_nanoseconds_t EGLTimeNV;
+#ifdef KHRONOS_SUPPORT_INT64
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6
+#define EGL_SYNC_STATUS_NV                0x30E7
+#define EGL_SIGNALED_NV                   0x30E8
+#define EGL_UNSIGNALED_NV                 0x30E9
+#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV    0x0001
+#define EGL_FOREVER_NV                    0xFFFFFFFFFFFFFFFFull
+#define EGL_ALREADY_SIGNALED_NV           0x30EA
+#define EGL_TIMEOUT_EXPIRED_NV            0x30EB
+#define EGL_CONDITION_SATISFIED_NV        0x30EC
+#define EGL_SYNC_TYPE_NV                  0x30ED
+#define EGL_SYNC_CONDITION_NV             0x30EE
+#define EGL_SYNC_FENCE_NV                 0x30EF
+#define EGL_NO_SYNC_NV                    ((EGLSyncNV)0)
+typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
+typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync);
+EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync);
+EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
+EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value);
+#endif
+#endif /* KHRONOS_SUPPORT_INT64 */
+#endif /* EGL_NV_sync */
+
+#ifndef EGL_NV_system_time
+#define EGL_NV_system_time 1
+typedef khronos_utime_nanoseconds_t EGLuint64NV;
+#ifdef KHRONOS_SUPPORT_INT64
+typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void);
+typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void);
+EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void);
+#endif
+#endif /* KHRONOS_SUPPORT_INT64 */
+#endif /* EGL_NV_system_time */
+
+#ifndef EGL_TIZEN_image_native_buffer
+#define EGL_TIZEN_image_native_buffer 1
+#define EGL_NATIVE_BUFFER_TIZEN           0x32A0
+#endif /* EGL_TIZEN_image_native_buffer */
+
+#ifndef EGL_TIZEN_image_native_surface
+#define EGL_TIZEN_image_native_surface 1
+#define EGL_NATIVE_SURFACE_TIZEN          0x32A1
+#endif /* EGL_TIZEN_image_native_surface */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __eglext_h_ */
+
+
+#endif /* _MSC_VER */
index 161c418de9bb7d3d7b343c95830b93b4f327503c..54d5d486d75e1edb14add43ef43d056edb2e4bed 100644 (file)
@@ -1,6 +1,6 @@
 /*
   Simple DirectMedia Layer
-  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
+  Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
 
   This software is provided 'as-is', without any express or implied