From 2eb3abfb60f8f3b27f1874ccaabfd7b1c155da82 Mon Sep 17 00:00:00 2001 From: Graham Pentheny Date: Fri, 18 Dec 2015 00:29:48 -0500 Subject: [PATCH] Updated RecastDemo to SDL2 * Renamed a bunch of variables in main.cpp to be more descriptive. * Removed unnecessary SDLMain.h and SDLMain.m OSX objective-c class as well as the plist, strings, xib and icns files, which are not needed. * included cstdio in imguiRenderGL since SDL2 doesn't do it for us. * Updated premake5 script to support SDL2 and to set the debug directory, as well as copy the SDL2.dll to the target directory on Windows. * Updated readme with more descriptive, platform-specific demo project setup instructions * Updated appveyor build script to build vs2015 as well. * Updated Travis build script to build SDL2 from source, because they use Ubuntu 12.04 which doesn't have the libsdl2-dev package in its repositories. --- .travis.yml | 18 +- README.md | 27 +- RecastDemo/English.lproj/InfoPlist.strings | Bin 92 -> 0 bytes RecastDemo/English.lproj/MainMenu.xib | 3034 ------------------- RecastDemo/Icon.icns | Bin 139831 -> 0 bytes RecastDemo/Include/SDLMain.h | 11 - RecastDemo/Info.plist | 28 - RecastDemo/Source/CrowdTool.cpp | 6 +- RecastDemo/Source/NavMeshTesterTool.cpp | 5 + RecastDemo/Source/OffMeshConnectionTool.cpp | 5 + RecastDemo/Source/SDLMain.m | 384 --- RecastDemo/Source/Sample_TempObstacles.cpp | 7 +- RecastDemo/Source/Sample_TileMesh.cpp | 5 + RecastDemo/Source/SlideShow.cpp | 2 +- RecastDemo/Source/TestCase.cpp | 5 + RecastDemo/Source/imguiRenderGL.cpp | 3 +- RecastDemo/Source/main.cpp | 387 +-- RecastDemo/premake5.lua | 32 +- appveyor.yml | 11 +- 19 files changed, 292 insertions(+), 3678 deletions(-) delete mode 100644 RecastDemo/English.lproj/InfoPlist.strings delete mode 100644 RecastDemo/English.lproj/MainMenu.xib delete mode 100644 RecastDemo/Icon.icns delete mode 100644 RecastDemo/Include/SDLMain.h delete mode 100644 RecastDemo/Info.plist delete mode 100644 RecastDemo/Source/SDLMain.m diff --git a/.travis.yml b/.travis.yml index 9918a4e..cbb489b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,12 +2,6 @@ sudo: false language: cpp -# Install SDL 1.2 development libraries. -addons: - apt: - packages: - - libsdl1.2-dev - # Build with gcc and clang. compiler: - gcc @@ -20,6 +14,18 @@ env: - CONFIGURATION=release install: + # Download and build SDL2 from source. + - mkdir dummyprefix + - export PREFIX=$PWD/dummyprefix + - export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig + - export PATH=$PATH:$PWD/dummyprefix/bin + - wget https://www.libsdl.org/release/SDL2-2.0.4.tar.gz -O SDL2.tar.gz + - tar -xzf SDL2.tar.gz + - cd SDL2-2.0.4 + - ./configure --prefix=$PREFIX + - make -j5 + - make install + - cd .. # Download and build premake5 from source; the Travis environment doesn't have the right version of glibc6 for the prebuilt binaries to work. - wget https://github.com/premake/premake-core/releases/download/v5.0.0-alpha6/premake-5.0.0-alpha6-src.zip -O premake.zip - unzip premake.zip diff --git a/README.md b/README.md index 92822b3..7697b64 100644 --- a/README.md +++ b/README.md @@ -40,28 +40,39 @@ You can find a comprehensive demo project in RecastDemo folder. It is a kitchen ### Building RecastDemo -RecastDemo uses [premake5](http://premake.github.io/) to build platform specific projects. Download it and make sure it's available on your path, or specify the path to it. To build *RecastDemo*, in your favorite terminal navigate into the `RecastDemo` folder, then: +RecastDemo uses [premake5](http://premake.github.io/) to build platform specific projects. Download it and make sure it's available on your path, or specify the path to it. -- *OS X*: `premake5 xcode4` -- *Windows*: `"premake5" vs2015` -- *Linux*: `premake5 gmake` +#### Linux -See premake5 documentation for full list of supported build file types. The projects will be created in `RecastDemo/Build` folder. And after you have compiled the project, the *RecastDemo* executable will be located in `RecastDemo/Bin` folder. +- Install SDl2 and its dependencies according to your distro's guidelines. +- run `premake5 gmake` from the `RecastDemo` folder. +- `cd Build/gmake` then `make` +- Run `RecastDemo\Bin\RecastDemo` -*Note:* On Windows, please use x86 version of the SDL.dll to run the demo Application. +#### OSX +- Grab the latest SDL2 development library dmg from [here](https://www.libsdl.org/download-2.0.php) and place `SDL2.framework` in `/Library/Frameworks/` +- Navigate to the `RecastDemo` folder and run `premake5 xcode4` +- Open `Build/xcode4/recastnavigation.xcworkspace` +- Select the "RecastDemo" project in the left pane, go to the "BuildPhases" tab and expand "Link Binary With Libraries" +- Remove the existing entry for SDL2 (it should have a white box icon) and re-add it by hitting the plus, selecting "Add Other", and selecting `/Library/Frameworks/SDL2.framework`. It should now have a suitcase icon. +- Set the RecastDemo project as the target and build. + +#### Windows + +- Grab the latest SDL2 development library release from [here](https://www.libsdl.org/download-2.0.php) and unzip it `RecastDemo\Contrib`. Rename the SDL folder such that the path `RecastDemo\Contrib\SDL\lib\x86` is valid. +- Run `"premake5" vs2015` from the `RecastDemo` folder +- Open the solution, build, and run. ## Integrating with your own project It is recommended to add the source directories `DebugUtils`, `Detour`, `DetourCrowd`, `DetourTileCache`, and `Recast` into your own project depending on which parts of the project you need. For example your level building tool could include DebugUtils, Recast, and Detour, and your game runtime could just include Detour. - ## Discuss - Discuss Recast & Detour: http://groups.google.com/group/recastnavigation - Development blog: http://digestingduck.blogspot.com/ - ## License Recast & Detour is licensed under ZLib license, see License.txt for more information. diff --git a/RecastDemo/English.lproj/InfoPlist.strings b/RecastDemo/English.lproj/InfoPlist.strings deleted file mode 100644 index 5e45963c382ba690b781b953a00585212b898ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmW-XQ3`+{5C!MkQ~2$No+IcIkqMDxWCV8j>LCj|yTg2Mz+o9F%uHlf9u}h9EuK`F a!Y*1dX%G66ZqL#C$|bw0ZoP5@jOGW1ArT7z diff --git a/RecastDemo/English.lproj/MainMenu.xib b/RecastDemo/English.lproj/MainMenu.xib deleted file mode 100644 index 3a7530a..0000000 --- a/RecastDemo/English.lproj/MainMenu.xib +++ /dev/null @@ -1,3034 +0,0 @@ - - - - 1050 - 9D29 - 664 - 949.33 - 352.00 - - YES - - - - - YES - com.apple.InterfaceBuilderKit - com.apple.InterfaceBuilder.CocoaPlugin - - - YES - - NSApplication - - - FirstResponder - - - NSApplication - - - AMainMenu - - YES - - - NewApplication - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - NewApplication - - YES - - - About NewApplication - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - UHJlZmVyZW5jZXPigKY - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - YES - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide NewApplication - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit NewApplication - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 1048576 - 2147483647 - - - submenuAction: - - File - - YES - - - New - n - 1048576 - 2147483647 - - - - - - T3BlbuKApg - o - 1048576 - 2147483647 - - - - - - Open Recent - - 1048576 - 2147483647 - - - submenuAction: - - Open Recent - - YES - - - Clear Menu - - 1048576 - 2147483647 - - - - - _NSRecentDocumentsMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Close - w - 1048576 - 2147483647 - - - - - - Save - s - 1048576 - 2147483647 - - - - - - U2F2ZSBBc+KApg - S - 1179648 - 2147483647 - - - - - - Revert to Saved - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Page Setup... - P - 1179648 - 2147483647 - - - - - - - UHJpbnTigKY - p - 1048576 - 2147483647 - - - - - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - Edit - - YES - - - Undo - z - 1048576 - 2147483647 - - - - - - Redo - Z - 1179648 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cut - x - 1048576 - 2147483647 - - - - - - Copy - c - 1048576 - 2147483647 - - - - - - Paste - v - 1048576 - 2147483647 - - - - - - Delete - - 1048576 - 2147483647 - - - - - - Select All - a - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Find - - 1048576 - 2147483647 - - - submenuAction: - - Find - - YES - - - RmluZOKApg - f - 1048576 - 2147483647 - - - 1 - - - - Find Next - g - 1048576 - 2147483647 - - - 2 - - - - Find Previous - G - 1179648 - 2147483647 - - - 3 - - - - Use Selection for Find - e - 1048576 - 2147483647 - - - 7 - - - - Jump to Selection - j - 1048576 - 2147483647 - - - - - - - - - Spelling and Grammar - - 1048576 - 2147483647 - - - submenuAction: - - Spelling and Grammar - - YES - - - U2hvdyBTcGVsbGluZ+KApg - : - 1048576 - 2147483647 - - - - - - Check Spelling - ; - 1048576 - 2147483647 - - - - - - Check Spelling While Typing - - 1048576 - 2147483647 - - - - - - Check Grammar With Spelling - - 1048576 - 2147483647 - - - - - - - - - Substitutions - - 1048576 - 2147483647 - - - submenuAction: - - Substitutions - - YES - - - Smart Copy/Paste - f - 1048576 - 2147483647 - - - 1 - - - - Smart Quotes - g - 1048576 - 2147483647 - - - 2 - - - - Smart Links - G - 1179648 - 2147483647 - - - 3 - - - - - - - Speech - - 1048576 - 2147483647 - - - submenuAction: - - Speech - - YES - - - Start Speaking - - 1048576 - 2147483647 - - - - - - Stop Speaking - - 1048576 - 2147483647 - - - - - - - - - - - - Format - - 2147483647 - - - submenuAction: - - Format - - YES - - - Font - - 2147483647 - - - submenuAction: - - Font - - YES - - - Show Fonts - t - 1048576 - 2147483647 - - - - - - Bold - b - 1048576 - 2147483647 - - - 2 - - - - Italic - i - 1048576 - 2147483647 - - - 1 - - - - Underline - u - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Bigger - + - 1048576 - 2147483647 - - - 3 - - - - Smaller - - - 1048576 - 2147483647 - - - 4 - - - - YES - YES - - - 2147483647 - - - - - - Kern - - 2147483647 - - - submenuAction: - - Kern - - YES - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Tighten - - 2147483647 - - - - - - Loosen - - 2147483647 - - - - - - - - - Ligature - - 2147483647 - - - submenuAction: - - Ligature - - YES - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Use All - - 2147483647 - - - - - - - - - Baseline - - 2147483647 - - - submenuAction: - - Baseline - - YES - - - Use Default - - 2147483647 - - - - - - Superscript - - 2147483647 - - - - - - Subscript - - 2147483647 - - - - - - Raise - - 2147483647 - - - - - - Lower - - 2147483647 - - - - - - - - - YES - YES - - - 2147483647 - - - - - - Show Colors - C - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Copy Style - c - 1572864 - 2147483647 - - - - - - Paste Style - v - 1572864 - 2147483647 - - - - - _NSFontMenu - - - - - Text - - 2147483647 - - - submenuAction: - - Text - - YES - - - Align Left - { - 1048576 - 2147483647 - - - - - - Center - | - 1048576 - 2147483647 - - - - - - Justify - - 2147483647 - - - - - - Align Right - } - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Ruler - - 2147483647 - - - - - - Copy Ruler - c - 1310720 - 2147483647 - - - - - - Paste Ruler - v - 1310720 - 2147483647 - - - - - - - - - - - - View - - 1048576 - 2147483647 - - - submenuAction: - - View - - YES - - - Show Toolbar - t - 1572864 - 2147483647 - - - - - - Q3VzdG9taXplIFRvb2xiYXLigKY - - 1048576 - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - YES - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - _NSWindowsMenu - - - - - Help - - 1048576 - 2147483647 - - - submenuAction: - - Help - - YES - - - NewApplication Help - ? - 1048576 - 2147483647 - - - - - - - - _NSMainMenu - - - 15 - 2 - {{335, 390}, {480, 360}} - 1946157056 - Window - NSWindow - - {3.40282e+38, 3.40282e+38} - - - 256 - {480, 360} - - - {{0, 0}, {1440, 878}} - {3.40282e+38, 3.40282e+38} - - - NSFontManager - - - - - YES - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - print: - - - - 86 - - - - runPageLayout: - - - - 87 - - - - clearRecentDocuments: - - - - 127 - - - - orderFrontStandardAboutPanel: - - - - 142 - - - - performClose: - - - - 193 - - - - toggleContinuousSpellChecking: - - - - 222 - - - - undo: - - - - 223 - - - - copy: - - - - 224 - - - - checkSpelling: - - - - 225 - - - - paste: - - - - 226 - - - - stopSpeaking: - - - - 227 - - - - cut: - - - - 228 - - - - showGuessPanel: - - - - 230 - - - - redo: - - - - 231 - - - - selectAll: - - - - 232 - - - - startSpeaking: - - - - 233 - - - - delete: - - - - 235 - - - - performZoom: - - - - 240 - - - - performFindPanelAction: - - - - 241 - - - - centerSelectionInVisibleArea: - - - - 245 - - - - toggleGrammarChecking: - - - - 347 - - - - toggleSmartInsertDelete: - - - - 355 - - - - toggleAutomaticQuoteSubstitution: - - - - 356 - - - - toggleAutomaticLinkDetection: - - - - 357 - - - - showHelp: - - - - 360 - - - - saveDocument: - - - - 362 - - - - saveDocumentAs: - - - - 363 - - - - revertDocumentToSaved: - - - - 364 - - - - runToolbarCustomizationPalette: - - - - 365 - - - - toggleToolbarShown: - - - - 366 - - - - hide: - - - - 367 - - - - hideOtherApplications: - - - - 368 - - - - unhideAllApplications: - - - - 370 - - - - newDocument: - - - - 373 - - - - openDocument: - - - - 374 - - - - addFontTrait: - - - - 421 - - - - addFontTrait: - - - - 422 - - - - modifyFont: - - - - 423 - - - - orderFrontFontPanel: - - - - 424 - - - - modifyFont: - - - - 425 - - - - raiseBaseline: - - - - 426 - - - - lowerBaseline: - - - - 427 - - - - copyFont: - - - - 428 - - - - subscript: - - - - 429 - - - - superscript: - - - - 430 - - - - tightenKerning: - - - - 431 - - - - underline: - - - - 432 - - - - orderFrontColorPanel: - - - - 433 - - - - useAllLigatures: - - - - 434 - - - - loosenKerning: - - - - 435 - - - - pasteFont: - - - - 436 - - - - unscript: - - - - 437 - - - - useStandardKerning: - - - - 438 - - - - useStandardLigatures: - - - - 439 - - - - turnOffLigatures: - - - - 440 - - - - turnOffKerning: - - - - 441 - - - - alignLeft: - - - - 442 - - - - alignJustified: - - - - 443 - - - - copyRuler: - - - - 444 - - - - alignCenter: - - - - 445 - - - - toggleRuler: - - - - 446 - - - - alignRight: - - - - 447 - - - - pasteRuler: - - - - 448 - - - - terminate: - - - - 449 - - - - - YES - - 0 - - YES - - - - - - -2 - - - RmlsZSdzIE93bmVyA - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - YES - - - - - - - - - - MainMenu - - - 19 - - - YES - - - - - - 56 - - - YES - - - - - - 103 - - - YES - - - - 1 - - - 217 - - - YES - - - - - - 83 - - - YES - - - - - - 81 - - - YES - - - - - - - - - - - - - - - - 75 - - - 3 - - - 80 - - - 8 - - - 78 - - - 6 - - - 72 - - - - - 82 - - - 9 - - - 124 - - - YES - - - - - - 77 - - - 5 - - - 73 - - - 1 - - - 79 - - - 7 - - - 112 - - - 10 - - - 74 - - - 2 - - - 125 - - - YES - - - - - - 126 - - - - - 205 - - - YES - - - - - - - - - - - - - - - - - - 202 - - - - - 198 - - - - - 207 - - - - - 214 - - - - - 199 - - - - - 203 - - - - - 197 - - - - - 206 - - - - - 215 - - - - - 218 - - - YES - - - - - - 216 - - - YES - - - - - - 200 - - - YES - - - - - - - - - 219 - - - - - 201 - - - - - 204 - - - - - 220 - - - YES - - - - - - - - - - 213 - - - - - 210 - - - - - 221 - - - - - 208 - - - - - 209 - - - - - 106 - - - YES - - - - 2 - - - 111 - - - - - 57 - - - YES - - - - - - - - - - - - - - - - 58 - - - - - 134 - - - - - 150 - - - - - 136 - - - 1111 - - - 144 - - - - - 129 - - - 121 - - - 143 - - - - - 236 - - - - - 131 - - - YES - - - - - - 149 - - - - - 145 - - - - - 130 - - - - - 24 - - - YES - - - - - - - - - 92 - - - - - 5 - - - - - 239 - - - - - 23 - - - - - 295 - - - YES - - - - - - 296 - - - YES - - - - - - - 297 - - - - - 298 - - - - - 211 - - - YES - - - - - - 212 - - - YES - - - - - - - 195 - - - - - 196 - - - - - 346 - - - - - 348 - - - YES - - - - - - 349 - - - YES - - - - - - - - 350 - - - - - 351 - - - - - 354 - - - - - 371 - - - YES - - - - - - 372 - - - - - 375 - - - YES - - - - - - 376 - - - YES - - - - - - - 377 - - - YES - - - - - - 378 - - - YES - - - - - - 379 - - - YES - - - - - - - - - - - - - 380 - - - - - 381 - - - - - 382 - - - - - 383 - - - - - 384 - - - - - 385 - - - - - 386 - - - - - 387 - - - - - 388 - - - YES - - - - - - - - - - - - - - - - - - - - - 389 - - - - - 390 - - - - - 391 - - - - - 392 - - - - - 393 - - - - - 394 - - - - - 395 - - - - - 396 - - - - - 397 - - - YES - - - - - - 398 - - - YES - - - - - - 399 - - - YES - - - - - - 400 - - - - - 401 - - - - - 402 - - - - - 403 - - - - - 404 - - - - - 405 - - - YES - - - - - - - - - - 406 - - - - - 407 - - - - - 408 - - - - - 409 - - - - - 410 - - - - - 411 - - - YES - - - - - - - - 412 - - - - - 413 - - - - - 414 - - - - - 415 - - - YES - - - - - - - - - 416 - - - - - 417 - - - - - 418 - - - - - 419 - - - - - 420 - - - - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 103.IBPluginDependency - 103.ImportedFromIB2 - 106.IBPluginDependency - 106.ImportedFromIB2 - 106.editorWindowContentRectSynchronizationRect - 111.IBPluginDependency - 111.ImportedFromIB2 - 112.IBPluginDependency - 112.ImportedFromIB2 - 124.IBPluginDependency - 124.ImportedFromIB2 - 125.IBPluginDependency - 125.ImportedFromIB2 - 125.editorWindowContentRectSynchronizationRect - 126.IBPluginDependency - 126.ImportedFromIB2 - 129.IBPluginDependency - 129.ImportedFromIB2 - 130.IBPluginDependency - 130.ImportedFromIB2 - 130.editorWindowContentRectSynchronizationRect - 131.IBPluginDependency - 131.ImportedFromIB2 - 134.IBPluginDependency - 134.ImportedFromIB2 - 136.IBPluginDependency - 136.ImportedFromIB2 - 143.IBPluginDependency - 143.ImportedFromIB2 - 144.IBPluginDependency - 144.ImportedFromIB2 - 145.IBPluginDependency - 145.ImportedFromIB2 - 149.IBPluginDependency - 149.ImportedFromIB2 - 150.IBPluginDependency - 150.ImportedFromIB2 - 19.IBPluginDependency - 19.ImportedFromIB2 - 195.IBPluginDependency - 195.ImportedFromIB2 - 196.IBPluginDependency - 196.ImportedFromIB2 - 197.IBPluginDependency - 197.ImportedFromIB2 - 198.IBPluginDependency - 198.ImportedFromIB2 - 199.IBPluginDependency - 199.ImportedFromIB2 - 200.IBPluginDependency - 200.ImportedFromIB2 - 200.editorWindowContentRectSynchronizationRect - 201.IBPluginDependency - 201.ImportedFromIB2 - 202.IBPluginDependency - 202.ImportedFromIB2 - 203.IBPluginDependency - 203.ImportedFromIB2 - 204.IBPluginDependency - 204.ImportedFromIB2 - 205.IBPluginDependency - 205.ImportedFromIB2 - 205.editorWindowContentRectSynchronizationRect - 206.IBPluginDependency - 206.ImportedFromIB2 - 207.IBPluginDependency - 207.ImportedFromIB2 - 208.IBPluginDependency - 208.ImportedFromIB2 - 209.IBPluginDependency - 209.ImportedFromIB2 - 210.IBPluginDependency - 210.ImportedFromIB2 - 211.IBPluginDependency - 211.ImportedFromIB2 - 212.IBPluginDependency - 212.ImportedFromIB2 - 212.editorWindowContentRectSynchronizationRect - 213.IBPluginDependency - 213.ImportedFromIB2 - 214.IBPluginDependency - 214.ImportedFromIB2 - 215.IBPluginDependency - 215.ImportedFromIB2 - 216.IBPluginDependency - 216.ImportedFromIB2 - 217.IBPluginDependency - 217.ImportedFromIB2 - 218.IBPluginDependency - 218.ImportedFromIB2 - 219.IBPluginDependency - 219.ImportedFromIB2 - 220.IBPluginDependency - 220.ImportedFromIB2 - 220.editorWindowContentRectSynchronizationRect - 221.IBPluginDependency - 221.ImportedFromIB2 - 23.IBPluginDependency - 23.ImportedFromIB2 - 236.IBPluginDependency - 236.ImportedFromIB2 - 239.IBPluginDependency - 239.ImportedFromIB2 - 24.IBPluginDependency - 24.ImportedFromIB2 - 24.editorWindowContentRectSynchronizationRect - 29.IBEditorWindowLastContentRect - 29.IBPluginDependency - 29.ImportedFromIB2 - 29.WindowOrigin - 29.editorWindowContentRectSynchronizationRect - 295.IBPluginDependency - 296.IBPluginDependency - 296.editorWindowContentRectSynchronizationRect - 297.IBPluginDependency - 298.IBPluginDependency - 346.IBPluginDependency - 346.ImportedFromIB2 - 348.IBPluginDependency - 348.ImportedFromIB2 - 349.IBPluginDependency - 349.ImportedFromIB2 - 349.editorWindowContentRectSynchronizationRect - 350.IBPluginDependency - 350.ImportedFromIB2 - 351.IBPluginDependency - 351.ImportedFromIB2 - 354.IBPluginDependency - 354.ImportedFromIB2 - 371.IBEditorWindowLastContentRect - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 371.editorWindowContentRectSynchronizationRect - 371.windowTemplate.maxSize - 372.IBPluginDependency - 375.IBPluginDependency - 376.IBEditorWindowLastContentRect - 376.IBPluginDependency - 377.IBPluginDependency - 378.IBPluginDependency - 379.IBPluginDependency - 380.IBPluginDependency - 381.IBPluginDependency - 382.IBPluginDependency - 383.IBPluginDependency - 384.IBPluginDependency - 385.IBPluginDependency - 386.IBPluginDependency - 387.IBPluginDependency - 388.IBEditorWindowLastContentRect - 388.IBPluginDependency - 389.IBPluginDependency - 390.IBPluginDependency - 391.IBPluginDependency - 392.IBPluginDependency - 393.IBPluginDependency - 394.IBPluginDependency - 395.IBPluginDependency - 396.IBPluginDependency - 397.IBPluginDependency - 398.IBPluginDependency - 399.IBPluginDependency - 400.IBPluginDependency - 401.IBPluginDependency - 402.IBPluginDependency - 403.IBPluginDependency - 404.IBPluginDependency - 405.IBPluginDependency - 406.IBPluginDependency - 407.IBPluginDependency - 408.IBPluginDependency - 409.IBPluginDependency - 410.IBPluginDependency - 411.IBPluginDependency - 412.IBPluginDependency - 413.IBPluginDependency - 414.IBPluginDependency - 415.IBPluginDependency - 416.IBPluginDependency - 417.IBPluginDependency - 418.IBPluginDependency - 419.IBPluginDependency - 5.IBPluginDependency - 5.ImportedFromIB2 - 56.IBPluginDependency - 56.ImportedFromIB2 - 57.IBEditorWindowLastContentRect - 57.IBPluginDependency - 57.ImportedFromIB2 - 57.editorWindowContentRectSynchronizationRect - 58.IBPluginDependency - 58.ImportedFromIB2 - 72.IBPluginDependency - 72.ImportedFromIB2 - 73.IBPluginDependency - 73.ImportedFromIB2 - 74.IBPluginDependency - 74.ImportedFromIB2 - 75.IBPluginDependency - 75.ImportedFromIB2 - 77.IBPluginDependency - 77.ImportedFromIB2 - 78.IBPluginDependency - 78.ImportedFromIB2 - 79.IBPluginDependency - 79.ImportedFromIB2 - 80.IBPluginDependency - 80.ImportedFromIB2 - 81.IBPluginDependency - 81.ImportedFromIB2 - 81.editorWindowContentRectSynchronizationRect - 82.IBPluginDependency - 82.ImportedFromIB2 - 83.IBPluginDependency - 83.ImportedFromIB2 - 92.IBPluginDependency - 92.ImportedFromIB2 - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilderKit - com.apple.InterfaceBuilderKit - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{596, 852}, {216, 23}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{522, 812}, {146, 23}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{436, 809}, {64, 6}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {275, 83}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{187, 434}, {243, 243}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {167, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {241, 103}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{525, 802}, {197, 73}} - {{207, 285}, {478, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - - {74, 862} - {{6, 978}, {478, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{475, 832}, {234, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {215, 63}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{335, 390}, {480, 360}} - com.apple.InterfaceBuilder.CocoaPlugin - {{335, 390}, {480, 360}} - - {{33, 99}, {480, 360}} - {3.40282e+38, 3.40282e+38} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{437, 242}, {86, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{523, 2}, {178, 283}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{219, 102}, {245, 183}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{23, 794}, {245, 183}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{145, 474}, {199, 203}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - YES - - YES - - - YES - - - - - YES - - YES - - - YES - - - - 449 - - - 0 - - 3 - - diff --git a/RecastDemo/Icon.icns b/RecastDemo/Icon.icns deleted file mode 100644 index 8b482fd920c6e97fc9815eb046ec353dc1fe66b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139831 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 diff --git a/RecastDemo/Include/SDLMain.h b/RecastDemo/Include/SDLMain.h deleted file mode 100644 index 4683df5..0000000 --- a/RecastDemo/Include/SDLMain.h +++ /dev/null @@ -1,11 +0,0 @@ -/* SDLMain.m - main entry point for our Cocoa-ized SDL app - Initial Version: Darrell Walisser - Non-NIB-Code & other changes: Max Horn - - Feel free to customize this file to suit your needs -*/ - -#import - -@interface SDLMain : NSObject -@end diff --git a/RecastDemo/Info.plist b/RecastDemo/Info.plist deleted file mode 100644 index 4c6f919..0000000 --- a/RecastDemo/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - Icon.icns - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/RecastDemo/Source/CrowdTool.cpp b/RecastDemo/Source/CrowdTool.cpp index c838a1e..454cb1f 100644 --- a/RecastDemo/Source/CrowdTool.cpp +++ b/RecastDemo/Source/CrowdTool.cpp @@ -23,6 +23,11 @@ #include #include "SDL.h" #include "SDL_opengl.h" +#ifdef __APPLE__ +# include +#else +# include +#endif #include "imgui.h" #include "CrowdTool.h" #include "InputGeom.h" @@ -38,7 +43,6 @@ # define snprintf _snprintf #endif - static bool isectSegAABB(const float* sp, const float* sq, const float* amin, const float* amax, float& tmin, float& tmax) diff --git a/RecastDemo/Source/NavMeshTesterTool.cpp b/RecastDemo/Source/NavMeshTesterTool.cpp index 8547bea..289a8ab 100644 --- a/RecastDemo/Source/NavMeshTesterTool.cpp +++ b/RecastDemo/Source/NavMeshTesterTool.cpp @@ -23,6 +23,11 @@ #include #include "SDL.h" #include "SDL_opengl.h" +#ifdef __APPLE__ +# include +#else +# include +#endif #include "imgui.h" #include "NavMeshTesterTool.h" #include "Sample.h" diff --git a/RecastDemo/Source/OffMeshConnectionTool.cpp b/RecastDemo/Source/OffMeshConnectionTool.cpp index d258979..604b927 100644 --- a/RecastDemo/Source/OffMeshConnectionTool.cpp +++ b/RecastDemo/Source/OffMeshConnectionTool.cpp @@ -23,6 +23,11 @@ #include #include "SDL.h" #include "SDL_opengl.h" +#ifdef __APPLE__ +# include +#else +# include +#endif #include "imgui.h" #include "OffMeshConnectionTool.h" #include "InputGeom.h" diff --git a/RecastDemo/Source/SDLMain.m b/RecastDemo/Source/SDLMain.m deleted file mode 100644 index 2eaa1c1..0000000 --- a/RecastDemo/Source/SDLMain.m +++ /dev/null @@ -1,384 +0,0 @@ -/* SDLMain.m - main entry point for our Cocoa-ized SDL app - Initial Version: Darrell Walisser - Non-NIB-Code & other changes: Max Horn - - Feel free to customize this file to suit your needs -*/ - -#import "SDL.h" -#import "SDLMain.h" -#import /* for MAXPATHLEN */ -#import - -/* For some reaon, Apple removed setAppleMenu from the headers in 10.4, - but the method still is there and works. To avoid warnings, we declare - it ourselves here. */ -@interface NSApplication(SDL_Missing_Methods) -- (void)setAppleMenu:(NSMenu *)menu; -@end - -/* Use this flag to determine whether we use SDLMain.nib or not */ -#define SDL_USE_NIB_FILE 0 - -/* Use this flag to determine whether we use CPS (docking) or not */ -#define SDL_USE_CPS 1 -#ifdef SDL_USE_CPS -/* Portions of CPS.h */ -typedef struct CPSProcessSerNum -{ - UInt32 lo; - UInt32 hi; -} CPSProcessSerNum; - -extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn); -extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5); -extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn); - -#endif /* SDL_USE_CPS */ - -static int gArgc; -static char **gArgv; -static BOOL gFinderLaunch; -static BOOL gCalledAppMainline = FALSE; - -static NSString *getApplicationName(void) -{ - NSDictionary *dict; - NSString *appName = 0; - - /* Determine the application name */ - dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle()); - if (dict) - appName = [dict objectForKey: @"CFBundleName"]; - - if (![appName length]) - appName = [[NSProcessInfo processInfo] processName]; - - return appName; -} - -#if SDL_USE_NIB_FILE -/* A helper category for NSString */ -@interface NSString (ReplaceSubString) -- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString; -@end -#endif - -@interface SDLApplication : NSApplication -@end - -@implementation SDLApplication -/* Invoked from the Quit menu item */ -- (void)terminate:(id)sender -{ - /* Post a SDL_QUIT event */ - SDL_Event event; - event.type = SDL_QUIT; - SDL_PushEvent(&event); -} -@end - -/* The main class of the application, the application's delegate */ -@implementation SDLMain - -/* Set the working directory to the .app's parent directory */ -- (void) setupWorkingDirectory:(BOOL)shouldChdir -{ - if (shouldChdir) - { - char parentdir[MAXPATHLEN]; - CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url); - if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) { - assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */ - } - CFRelease(url); - CFRelease(url2); - } - -} - -#if SDL_USE_NIB_FILE - -/* Fix menu to contain the real app name instead of "SDL App" */ -- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName -{ - NSRange aRange; - NSEnumerator *enumerator; - NSMenuItem *menuItem; - - aRange = [[aMenu title] rangeOfString:@"SDL App"]; - if (aRange.length != 0) - [aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]]; - - enumerator = [[aMenu itemArray] objectEnumerator]; - while ((menuItem = [enumerator nextObject])) - { - aRange = [[menuItem title] rangeOfString:@"SDL App"]; - if (aRange.length != 0) - [menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]]; - if ([menuItem hasSubmenu]) - [self fixMenu:[menuItem submenu] withAppName:appName]; - } - [ aMenu sizeToFit ]; -} - -#else - -static void setApplicationMenu(void) -{ - /* warning: this code is very odd */ - NSMenu *appleMenu; - NSMenuItem *menuItem; - NSString *title; - NSString *appName; - - appName = getApplicationName(); - appleMenu = [[NSMenu alloc] initWithTitle:@""]; - - /* Add menu items */ - title = [@"About " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; - - [appleMenu addItem:[NSMenuItem separatorItem]]; - - title = [@"Hide " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"]; - - menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; - [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)]; - - [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; - - [appleMenu addItem:[NSMenuItem separatorItem]]; - - title = [@"Quit " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"]; - - - /* Put menu into the menubar */ - menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; - [menuItem setSubmenu:appleMenu]; - [[NSApp mainMenu] addItem:menuItem]; - - /* Tell the application object that this is now the application menu */ - [NSApp setAppleMenu:appleMenu]; - - /* Finally give up our references to the objects */ - [appleMenu release]; - [menuItem release]; -} - -/* Create a window menu */ -static void setupWindowMenu(void) -{ - NSMenu *windowMenu; - NSMenuItem *windowMenuItem; - NSMenuItem *menuItem; - - windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; - - /* "Minimize" item */ - menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; - [windowMenu addItem:menuItem]; - [menuItem release]; - - /* Put menu into the menubar */ - windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; - [windowMenuItem setSubmenu:windowMenu]; - [[NSApp mainMenu] addItem:windowMenuItem]; - - /* Tell the application object that this is now the window menu */ - [NSApp setWindowsMenu:windowMenu]; - - /* Finally give up our references to the objects */ - [windowMenu release]; - [windowMenuItem release]; -} - -/* Replacement for NSApplicationMain */ -static void CustomApplicationMain (int argc, char **argv) -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - SDLMain *sdlMain; - - /* Ensure the application object is initialised */ - [SDLApplication sharedApplication]; - -#ifdef SDL_USE_CPS - { - CPSProcessSerNum PSN; - /* Tell the dock about us */ - if (!CPSGetCurrentProcess(&PSN)) - if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103)) - if (!CPSSetFrontProcess(&PSN)) - [SDLApplication sharedApplication]; - } -#endif /* SDL_USE_CPS */ - - /* Set up the menubar */ - [NSApp setMainMenu:[[NSMenu alloc] init]]; - setApplicationMenu(); - setupWindowMenu(); - - /* Create SDLMain and make it the app delegate */ - sdlMain = [[SDLMain alloc] init]; - [NSApp setDelegate:sdlMain]; - - /* Start the main event loop */ - [NSApp run]; - - [sdlMain release]; - [pool release]; -} - -#endif - - -/* - * Catch document open requests...this lets us notice files when the app - * was launched by double-clicking a document, or when a document was - * dragged/dropped on the app's icon. You need to have a - * CFBundleDocumentsType section in your Info.plist to get this message, - * apparently. - * - * Files are added to gArgv, so to the app, they'll look like command line - * arguments. Previously, apps launched from the finder had nothing but - * an argv[0]. - * - * This message may be received multiple times to open several docs on launch. - * - * This message is ignored once the app's mainline has been called. - */ -- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename -{ - const char *temparg; - size_t arglen; - char *arg; - char **newargv; - - if (!gFinderLaunch) /* MacOS is passing command line args. */ - return FALSE; - - if (gCalledAppMainline) /* app has started, ignore this document. */ - return FALSE; - - temparg = [filename UTF8String]; - arglen = SDL_strlen(temparg) + 1; - arg = (char *) SDL_malloc(arglen); - if (arg == NULL) - return FALSE; - - newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2)); - if (newargv == NULL) - { - SDL_free(arg); - return FALSE; - } - gArgv = newargv; - - SDL_strlcpy(arg, temparg, arglen); - gArgv[gArgc++] = arg; - gArgv[gArgc] = NULL; - return TRUE; -} - - -/* Called when the internal event loop has just started running */ -- (void) applicationDidFinishLaunching: (NSNotification *) note -{ - int status; - - /* Set the working directory to the .app's parent directory */ - [self setupWorkingDirectory:gFinderLaunch]; - -#if SDL_USE_NIB_FILE - /* Set the main menu to contain the real app name instead of "SDL App" */ - [self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()]; -#endif - - /* Hand off to main application code */ - gCalledAppMainline = TRUE; - status = SDL_main (gArgc, gArgv); - - /* We're done, thank you for playing */ - exit(status); -} -@end - - -@implementation NSString (ReplaceSubString) - -- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString -{ - unsigned int bufferSize; - unsigned int selfLen = [self length]; - unsigned int aStringLen = [aString length]; - unichar *buffer; - NSRange localRange; - NSString *result; - - bufferSize = selfLen + aStringLen - aRange.length; - buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar)); - - /* Get first part into buffer */ - localRange.location = 0; - localRange.length = aRange.location; - [self getCharacters:buffer range:localRange]; - - /* Get middle part into buffer */ - localRange.location = 0; - localRange.length = aStringLen; - [aString getCharacters:(buffer+aRange.location) range:localRange]; - - /* Get last part into buffer */ - localRange.location = aRange.location + aRange.length; - localRange.length = selfLen - localRange.location; - [self getCharacters:(buffer+aRange.location+aStringLen) range:localRange]; - - /* Build output string */ - result = [NSString stringWithCharacters:buffer length:bufferSize]; - - NSDeallocateMemoryPages(buffer, bufferSize); - - return result; -} - -@end - - - -#ifdef main -# undef main -#endif - - -/* Main entry point to executable - should *not* be SDL_main! */ -int main (int argc, char **argv) -{ - /* Copy the arguments into a global variable */ - /* This is passed if we are launched by double-clicking */ - if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) { - gArgv = (char **) SDL_malloc(sizeof (char *) * 2); - gArgv[0] = argv[0]; - gArgv[1] = NULL; - gArgc = 1; - gFinderLaunch = YES; - } else { - int i; - gArgc = argc; - gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1)); - for (i = 0; i <= argc; i++) - gArgv[i] = argv[i]; - gFinderLaunch = NO; - } - -#if SDL_USE_NIB_FILE - [SDLApplication poseAsClass:[NSApplication class]]; - NSApplicationMain (argc, argv); -#else - CustomApplicationMain (argc, argv); -#endif - return 0; -} - diff --git a/RecastDemo/Source/Sample_TempObstacles.cpp b/RecastDemo/Source/Sample_TempObstacles.cpp index 5601648..04f66a5 100644 --- a/RecastDemo/Source/Sample_TempObstacles.cpp +++ b/RecastDemo/Source/Sample_TempObstacles.cpp @@ -24,6 +24,11 @@ #include #include "SDL.h" #include "SDL_opengl.h" +#ifdef __APPLE__ +# include +#else +# include +#endif #include "imgui.h" #include "InputGeom.h" #include "Sample.h" @@ -1508,4 +1513,4 @@ void Sample_TempObstacles::loadAll(const char* path) } fclose(fp); -} \ No newline at end of file +} diff --git a/RecastDemo/Source/Sample_TileMesh.cpp b/RecastDemo/Source/Sample_TileMesh.cpp index 6fbc1c3..8794586 100644 --- a/RecastDemo/Source/Sample_TileMesh.cpp +++ b/RecastDemo/Source/Sample_TileMesh.cpp @@ -22,6 +22,11 @@ #include #include "SDL.h" #include "SDL_opengl.h" +#ifdef __APPLE__ +# include +#else +# include +#endif #include "imgui.h" #include "InputGeom.h" #include "Sample.h" diff --git a/RecastDemo/Source/SlideShow.cpp b/RecastDemo/Source/SlideShow.cpp index 65b2dcf..ca82cc4 100644 --- a/RecastDemo/Source/SlideShow.cpp +++ b/RecastDemo/Source/SlideShow.cpp @@ -19,7 +19,7 @@ #include "SlideShow.h" #include #include -#include +#include "SDL_opengl.h" //#define STBI_HEADER_FILE_ONLY #include "stb_image.h" diff --git a/RecastDemo/Source/TestCase.cpp b/RecastDemo/Source/TestCase.cpp index a8e3e4d..f0bd2c8 100644 --- a/RecastDemo/Source/TestCase.cpp +++ b/RecastDemo/Source/TestCase.cpp @@ -26,6 +26,11 @@ #include "DetourCommon.h" #include "SDL.h" #include "SDL_opengl.h" +#ifdef __APPLE__ +# include +#else +# include +#endif #include "imgui.h" #include "PerfTimer.h" diff --git a/RecastDemo/Source/imguiRenderGL.cpp b/RecastDemo/Source/imguiRenderGL.cpp index 891b300..a595964 100644 --- a/RecastDemo/Source/imguiRenderGL.cpp +++ b/RecastDemo/Source/imguiRenderGL.cpp @@ -17,7 +17,8 @@ // #define _USE_MATH_DEFINES -#include +#include +#include #include "imgui.h" #include "SDL.h" #include "SDL_opengl.h" diff --git a/RecastDemo/Source/main.cpp b/RecastDemo/Source/main.cpp index c9546a1..e60b497 100644 --- a/RecastDemo/Source/main.cpp +++ b/RecastDemo/Source/main.cpp @@ -16,20 +16,27 @@ // 3. This notice may not be removed or altered from any source distribution. // -#include +#include #define _USE_MATH_DEFINES -#include +#include + #include "SDL.h" #include "SDL_opengl.h" +#ifdef __APPLE__ +# include +#else +# include +#endif + #include "imgui.h" #include "imguiRenderGL.h" + #include "Recast.h" #include "RecastDebugDraw.h" #include "InputGeom.h" #include "TestCase.h" #include "Filelist.h" #include "SlideShow.h" - #include "Sample_SoloMesh.h" #include "Sample_TileMesh.h" #include "Sample_TempObstacles.h" @@ -45,12 +52,10 @@ struct SampleItem Sample* (*create)(); const char* name; }; - Sample* createSolo() { return new Sample_SoloMesh(); } Sample* createTile() { return new Sample_TileMesh(); } Sample* createTempObstacle() { return new Sample_TempObstacles(); } Sample* createDebug() { return new Sample_Debug(); } - static SampleItem g_samples[] = { { createSolo, "Solo Mesh" }, @@ -58,65 +63,65 @@ static SampleItem g_samples[] = { createTempObstacle, "Temp Obstacles" }, // { createDebug, "Debug" }, }; -static const int g_nsamples = sizeof(g_samples)/sizeof(SampleItem); - +static const int g_nsamples = sizeof(g_samples) / sizeof(SampleItem); int main(int /*argc*/, char** /*argv*/) { // Init SDL if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { - printf("Could not initialise SDL\n"); + printf("Could not initialise SDL.\nError: %s\n", SDL_GetError()); return -1; } - - // Center window - char env[] = "SDL_VIDEO_CENTERED=1"; - putenv(env); - // Init OpenGL + // Enable depth buffer. SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); + + // Set color channel depth. SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); -//#ifndef WIN32 + + // 4x MSAA. SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4); -//#endif - const SDL_VideoInfo* vi = SDL_GetVideoInfo(); + SDL_DisplayMode displayMode; + SDL_GetCurrentDisplayMode(0, &displayMode); bool presentationMode = false; - - int width, height; - SDL_Surface* screen = 0; - + Uint32 flags = SDL_WINDOW_OPENGL; + int width; + int height; if (presentationMode) { - width = vi->current_w; - height = vi->current_h; - screen = SDL_SetVideoMode(width, height, 0, SDL_OPENGL|SDL_FULLSCREEN); + // Create a fullscreen window at the native resolution. + width = displayMode.w; + height = displayMode.h; + flags |= SDL_WINDOW_FULLSCREEN; } else - { - width = rcMin(vi->current_w, (int)(vi->current_h * 16.0 / 9.0)); - width = width - 80; - height = vi->current_h - 80; - screen = SDL_SetVideoMode(width, height, 0, SDL_OPENGL); + { + float aspect = 16.0f / 9.0f; + width = rcMin(displayMode.w, (int)(displayMode.h * aspect)) - 80; + height = displayMode.h - 80; } - if (!screen) + SDL_Window* window; + SDL_Renderer* renderer; + int errorCode = SDL_CreateWindowAndRenderer(width, height, flags, &window, &renderer); + + if (errorCode != 0 || !window || !renderer) { - printf("Could not initialise SDL opengl\n"); + printf("Could not initialise SDL opengl\nError: %s\n", SDL_GetError()); return -1; } - glEnable(GL_MULTISAMPLE); + SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + SDL_GL_CreateContext(window); - SDL_WM_SetCaption("Recast Demo", 0); - if (!imguiRenderGLInit("DroidSans.ttf")) { printf("Could not init GUI renderer.\n"); @@ -126,19 +131,24 @@ int main(int /*argc*/, char** /*argv*/) float t = 0.0f; float timeAcc = 0.0f; - Uint32 lastTime = SDL_GetTicks(); - int mx = 0, my = 0; - float rx = 45; - float ry = -45; + Uint32 prevFrameTime = SDL_GetTicks(); + int mousePos[2] = {0, 0}; + float origMousePos[2] = {0, 0}; // Used to compute mouse movement totals across frames. + + float cameraEulers[] = {45, -45}; + float cameraPos[] = {0, 0, 0}; + float camr = 1000; + float origCameraEulers[] = {0, 0}; // Used to compute rotational changes across frames. + float moveW = 0, moveS = 0, moveA = 0, moveD = 0; - float camx = 0, camy = 0, camz = 0, camr = 1000; - float origrx = 0, origry = 0; - int origx = 0, origy = 0; + float scrollZoom = 0; bool rotate = false; bool movedDuringRotate = false; - float rays[3], raye[3]; + float rayStart[3]; + float rayEnd[3]; bool mouseOverMenu = false; + bool showMenu = !presentationMode; bool showLog = false; bool showTools = true; @@ -146,6 +156,7 @@ int main(int /*argc*/, char** /*argv*/) bool showSample = false; bool showTestCases = false; + // Window scroll positions. int propScroll = 0; int logScroll = 0; int toolsScroll = 0; @@ -155,8 +166,8 @@ int main(int /*argc*/, char** /*argv*/) FileList files; char meshName[128] = "Choose Mesh..."; - float mpos[3] = {0,0,0}; - bool mposSet = false; + float markerPosition[3] = {0, 0, 0}; + bool markerPositionSet = false; SlideShow slideShow; slideShow.init("slides/"); @@ -167,22 +178,22 @@ int main(int /*argc*/, char** /*argv*/) BuildContext ctx; - glEnable(GL_CULL_FACE); - - float fogCol[4] = { 0.32f, 0.31f, 0.30f, 1.0f }; + // Fog. + float fogColor[4] = { 0.32f, 0.31f, 0.30f, 1.0f }; glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_LINEAR); - glFogf(GL_FOG_START, camr*0.1f); - glFogf(GL_FOG_END, camr*1.25f); - glFogfv(GL_FOG_COLOR, fogCol); + glFogf(GL_FOG_START, camr * 0.1f); + glFogf(GL_FOG_END, camr * 1.25f); + glFogfv(GL_FOG_COLOR, fogColor); + glEnable(GL_CULL_FACE); glDepthFunc(GL_LEQUAL); bool done = false; while(!done) { // Handle input events. - int mscroll = 0; + int mouseScroll = 0; bool processHitTest = false; bool processHitTestShift = false; SDL_Event event; @@ -258,18 +269,18 @@ int main(int /*argc*/, char** /*argv*/) // Reset camera and fog to match the mesh bounds. if (bmin && bmax) { - camr = sqrtf(rcSqr(bmax[0]-bmin[0]) + - rcSqr(bmax[1]-bmin[1]) + - rcSqr(bmax[2]-bmin[2])) / 2; - camx = (bmax[0] + bmin[0]) / 2 + camr; - camy = (bmax[1] + bmin[1]) / 2 + camr; - camz = (bmax[2] + bmin[2]) / 2 + camr; + camr = sqrtf(rcSqr(bmax[0] - bmin[0]) + + rcSqr(bmax[1] - bmin[1]) + + rcSqr(bmax[2] - bmin[2])) / 2; + cameraPos[0] = (bmax[0] + bmin[0]) / 2 + camr; + cameraPos[1] = (bmax[1] + bmin[1]) / 2 + camr; + cameraPos[2] = (bmax[2] + bmin[2]) / 2 + camr; camr *= 3; } - rx = 45; - ry = -45; - glFogf(GL_FOG_START, camr*0.2f); - glFogf(GL_FOG_END, camr*1.25f); + cameraEulers[0] = 45; + cameraEulers[1] = -45; + glFogf(GL_FOG_START, camr * 0.2f); + glFogf(GL_FOG_END, camr * 1.25f); } } else if (event.key.keysym.sym == SDLK_RIGHT) @@ -281,7 +292,32 @@ int main(int /*argc*/, char** /*argv*/) slideShow.prevSlide(); } break; - + + case SDL_MOUSEWHEEL: + if (event.wheel.y < 0) + { + // wheel down + if (mouseOverMenu) + { + mouseScroll++; + } + else + { + scrollZoom += 1.0f; + } + } + else + { + if (mouseOverMenu) + { + mouseScroll--; + } + else + { + scrollZoom -= 1.0f; + } + } + break; case SDL_MOUSEBUTTONDOWN: if (event.button.button == SDL_BUTTON_RIGHT) { @@ -290,25 +326,11 @@ int main(int /*argc*/, char** /*argv*/) // Rotate view rotate = true; movedDuringRotate = false; - origx = mx; - origy = my; - origrx = rx; - origry = ry; + origMousePos[0] = mousePos[0]; + origMousePos[1] = mousePos[1]; + origCameraEulers[0] = cameraEulers[0]; + origCameraEulers[1] = cameraEulers[1]; } - } - else if (event.button.button == SDL_BUTTON_WHEELUP) - { - if (mouseOverMenu) - mscroll--; - else - scrollZoom -= 1.0f; - } - else if (event.button.button == SDL_BUTTON_WHEELDOWN) - { - if (mouseOverMenu) - mscroll++; - else - scrollZoom += 1.0f; } break; @@ -338,16 +360,19 @@ int main(int /*argc*/, char** /*argv*/) break; case SDL_MOUSEMOTION: - mx = event.motion.x; - my = height-1 - event.motion.y; + mousePos[0] = event.motion.x; + mousePos[1] = height-1 - event.motion.y; + if (rotate) { - int dx = mx - origx; - int dy = my - origy; - rx = origrx - dy*0.25f; - ry = origry + dx*0.25f; - if (dx*dx+dy*dy > 3*3) + int dx = mousePos[0] - origMousePos[0]; + int dy = mousePos[1] - origMousePos[1]; + cameraEulers[0] = origCameraEulers[0] - dy * 0.25f; + cameraEulers[1] = origCameraEulers[1] + dx * 0.25f; + if (dx * dx + dy * dy > 3 * 3) + { movedDuringRotate = true; + } } break; @@ -360,42 +385,41 @@ int main(int /*argc*/, char** /*argv*/) } } - unsigned char mbut = 0; - if (SDL_GetMouseState(0,0) & SDL_BUTTON_LMASK) - mbut |= IMGUI_MBUT_LEFT; - if (SDL_GetMouseState(0,0) & SDL_BUTTON_RMASK) - mbut |= IMGUI_MBUT_RIGHT; + unsigned char mouseButtonMask = 0; + if (SDL_GetMouseState(0, 0) & SDL_BUTTON_LMASK) + mouseButtonMask |= IMGUI_MBUT_LEFT; + if (SDL_GetMouseState(0, 0) & SDL_BUTTON_RMASK) + mouseButtonMask |= IMGUI_MBUT_RIGHT; - Uint32 time = SDL_GetTicks(); - float dt = (time - lastTime) / 1000.0f; - lastTime = time; + Uint32 time = SDL_GetTicks(); + float dt = (time - prevFrameTime) / 1000.0f; + prevFrameTime = time; t += dt; - // Hit test mesh. if (processHitTest && geom && sample) { - float hitt; - bool hit = geom->raycastMesh(rays, raye, hitt); + float hitTime; + bool hit = geom->raycastMesh(rayStart, rayEnd, hitTime); if (hit) { if (SDL_GetModState() & KMOD_CTRL) { // Marker - mposSet = true; - mpos[0] = rays[0] + (raye[0] - rays[0])*hitt; - mpos[1] = rays[1] + (raye[1] - rays[1])*hitt; - mpos[2] = rays[2] + (raye[2] - rays[2])*hitt; + markerPositionSet = true; + markerPosition[0] = rayStart[0] + (rayEnd[0] - rayStart[0]) * hitTime; + markerPosition[1] = rayStart[1] + (rayEnd[1] - rayStart[1]) * hitTime; + markerPosition[2] = rayStart[2] + (rayEnd[2] - rayStart[2]) * hitTime; } else { float pos[3]; - pos[0] = rays[0] + (raye[0] - rays[0])*hitt; - pos[1] = rays[1] + (raye[1] - rays[1])*hitt; - pos[2] = rays[2] + (raye[2] - rays[2])*hitt; - sample->handleClick(rays, pos, processHitTestShift); + pos[0] = rayStart[0] + (rayEnd[0] - rayStart[0]) * hitTime; + pos[1] = rayStart[1] + (rayEnd[1] - rayStart[1]) * hitTime; + pos[2] = rayStart[2] + (rayEnd[2] - rayStart[2]) * hitTime; + sample->handleClick(rayStart, pos, processHitTestShift); } } else @@ -403,94 +427,99 @@ int main(int /*argc*/, char** /*argv*/) if (SDL_GetModState() & KMOD_CTRL) { // Marker - mposSet = false; + markerPositionSet = false; } } } // Update sample simulation. const float SIM_RATE = 20; - const float DELTA_TIME = 1.0f/SIM_RATE; - timeAcc = rcClamp(timeAcc+dt, -1.0f, 1.0f); + const float DELTA_TIME = 1.0f / SIM_RATE; + timeAcc = rcClamp(timeAcc + dt, -1.0f, 1.0f); int simIter = 0; while (timeAcc > DELTA_TIME) { timeAcc -= DELTA_TIME; - if (simIter < 5) + if (simIter < 5 && sample) { - if (sample) - sample->handleUpdate(DELTA_TIME); + sample->handleUpdate(DELTA_TIME); } simIter++; } // Clamp the framerate so that we do not hog all the CPU. - const float MIN_FRAME_TIME = 1.0f/40.0f; + const float MIN_FRAME_TIME = 1.0f / 40.0f; if (dt < MIN_FRAME_TIME) { - int ms = (int)((MIN_FRAME_TIME - dt)*1000.0f); + int ms = (int)((MIN_FRAME_TIME - dt) * 1000.0f); if (ms > 10) ms = 10; - if (ms >= 0) - SDL_Delay(ms); + if (ms >= 0) SDL_Delay(ms); } - - // Update and render + // Set the viewport. glViewport(0, 0, width, height); + GLint viewport[4]; + glGetIntegerv(GL_VIEWPORT, viewport); + + // Clear the screen glClearColor(0.3f, 0.3f, 0.32f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_TEXTURE_2D); - - // Render 3d glEnable(GL_DEPTH_TEST); + + // Compute the projection matrix. glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(50.0f, (float)width/(float)height, 1.0f, camr); + GLdouble projectionMatrix[16]; + glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix); + + // Compute the modelview matrix. glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - glRotatef(rx,1,0,0); - glRotatef(ry,0,1,0); - glTranslatef(-camx, -camy, -camz); + glRotatef(cameraEulers[0], 1, 0, 0); + glRotatef(cameraEulers[1], 0, 1, 0); + glTranslatef(-cameraPos[0], -cameraPos[1], -cameraPos[2]); + GLdouble modelviewMatrix[16]; + glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix); // Get hit ray position and direction. - GLdouble proj[16]; - GLdouble model[16]; - GLint view[4]; - glGetDoublev(GL_PROJECTION_MATRIX, proj); - glGetDoublev(GL_MODELVIEW_MATRIX, model); - glGetIntegerv(GL_VIEWPORT, view); GLdouble x, y, z; - gluUnProject(mx, my, 0.0f, model, proj, view, &x, &y, &z); - rays[0] = (float)x; rays[1] = (float)y; rays[2] = (float)z; - gluUnProject(mx, my, 1.0f, model, proj, view, &x, &y, &z); - raye[0] = (float)x; raye[1] = (float)y; raye[2] = (float)z; + gluUnProject(mousePos[0], mousePos[1], 0.0f, modelviewMatrix, projectionMatrix, viewport, &x, &y, &z); + rayStart[0] = (float)x; + rayStart[1] = (float)y; + rayStart[2] = (float)z; + gluUnProject(mousePos[0], mousePos[1], 1.0f, modelviewMatrix, projectionMatrix, viewport, &x, &y, &z); + rayEnd[0] = (float)x; + rayEnd[1] = (float)y; + rayEnd[2] = (float)z; // Handle keyboard movement. - Uint8* keystate = SDL_GetKeyState(NULL); - moveW = rcClamp(moveW + dt * 4 * (keystate[SDLK_w] ? 1 : -1), 0.0f, 1.0f); - moveS = rcClamp(moveS + dt * 4 * (keystate[SDLK_s] ? 1 : -1), 0.0f, 1.0f); - moveA = rcClamp(moveA + dt * 4 * (keystate[SDLK_a] ? 1 : -1), 0.0f, 1.0f); - moveD = rcClamp(moveD + dt * 4 * (keystate[SDLK_d] ? 1 : -1), 0.0f, 1.0f); + const Uint8* keystate = SDL_GetKeyboardState(NULL); + moveW = rcClamp(moveW + dt * 4 * (keystate[SDL_SCANCODE_W] ? 1 : -1), 0.0f, 1.0f); + moveA = rcClamp(moveA + dt * 4 * (keystate[SDL_SCANCODE_A] ? 1 : -1), 0.0f, 1.0f); + moveS = rcClamp(moveS + dt * 4 * (keystate[SDL_SCANCODE_S] ? 1 : -1), 0.0f, 1.0f); + moveD = rcClamp(moveD + dt * 4 * (keystate[SDL_SCANCODE_D] ? 1 : -1), 0.0f, 1.0f); float keybSpeed = 22.0f; if (SDL_GetModState() & KMOD_SHIFT) + { keybSpeed *= 4.0f; + } float movex = (moveD - moveA) * keybSpeed * dt; - float movey = (moveS - moveW) * keybSpeed * dt; - - movey += scrollZoom * 2.0f; + float movey = (moveS - moveW) * keybSpeed * dt + scrollZoom * 2.0f; scrollZoom = 0; - camx += movex * (float)model[0]; - camy += movex * (float)model[4]; - camz += movex * (float)model[8]; + cameraPos[0] += movex * (float)modelviewMatrix[0]; + cameraPos[1] += movex * (float)modelviewMatrix[4]; + cameraPos[2] += movex * (float)modelviewMatrix[8]; - camx += movey * (float)model[2]; - camy += movey * (float)model[6]; - camz += movey * (float)model[10]; + cameraPos[0] += movey * (float)modelviewMatrix[2]; + cameraPos[1] += movey * (float)modelviewMatrix[6]; + cameraPos[2] += movey * (float)modelviewMatrix[10]; glEnable(GL_FOG); @@ -511,15 +540,15 @@ int main(int /*argc*/, char** /*argv*/) mouseOverMenu = false; - imguiBeginFrame(mx,my,mbut,mscroll); + imguiBeginFrame(mousePos[0], mousePos[1], mouseButtonMask, mouseScroll); if (sample) { - sample->handleRenderOverlay((double*)proj, (double*)model, (int*)view); + sample->handleRenderOverlay((double*)projectionMatrix, (double*)modelviewMatrix, (int*)viewport); } if (test) { - if (test->handleRenderOverlay((double*)proj, (double*)model, (int*)view)) + if (test->handleRenderOverlay((double*)projectionMatrix, (double*)modelviewMatrix, (int*)viewport)) mouseOverMenu = true; } @@ -664,13 +693,13 @@ int main(int /*argc*/, char** /*argv*/) camr = sqrtf(rcSqr(bmax[0]-bmin[0]) + rcSqr(bmax[1]-bmin[1]) + rcSqr(bmax[2]-bmin[2])) / 2; - camx = (bmax[0] + bmin[0]) / 2 + camr; - camy = (bmax[1] + bmin[1]) / 2 + camr; - camz = (bmax[2] + bmin[2]) / 2 + camr; + cameraPos[0] = (bmax[0] + bmin[0]) / 2 + camr; + cameraPos[1] = (bmax[1] + bmin[1]) / 2 + camr; + cameraPos[2] = (bmax[2] + bmin[2]) / 2 + camr; camr *= 3; } - rx = 45; - ry = -45; + cameraEulers[0] = 45; + cameraEulers[1] = -45; glFogf(GL_FOG_START, camr*0.1f); glFogf(GL_FOG_END, camr*1.25f); } @@ -682,7 +711,7 @@ int main(int /*argc*/, char** /*argv*/) if (showLevels) { static int levelScroll = 0; - if (imguiBeginScrollArea("Choose Level", width-10-250-10-200, height-10-450, 200, 450, &levelScroll)) + if (imguiBeginScrollArea("Choose Level", width - 10 - 250 - 10 - 200, height - 10 - 450, 200, 450, &levelScroll)) mouseOverMenu = true; int levelToLoad = -1; @@ -740,15 +769,15 @@ int main(int /*argc*/, char** /*argv*/) camr = sqrtf(rcSqr(bmax[0]-bmin[0]) + rcSqr(bmax[1]-bmin[1]) + rcSqr(bmax[2]-bmin[2])) / 2; - camx = (bmax[0] + bmin[0]) / 2 + camr; - camy = (bmax[1] + bmin[1]) / 2 + camr; - camz = (bmax[2] + bmin[2]) / 2 + camr; + cameraPos[0] = (bmax[0] + bmin[0]) / 2 + camr; + cameraPos[1] = (bmax[1] + bmin[1]) / 2 + camr; + cameraPos[2] = (bmax[2] + bmin[2]) / 2 + camr; camr *= 3; } - rx = 45; - ry = -45; - glFogf(GL_FOG_START, camr*0.1f); - glFogf(GL_FOG_END, camr*1.25f); + cameraEulers[0] = 45; + cameraEulers[1] = -45; + glFogf(GL_FOG_START, camr * 0.1f); + glFogf(GL_FOG_END, camr * 1.25f); } } @@ -854,18 +883,18 @@ int main(int /*argc*/, char** /*argv*/) // Reset camera and fog to match the mesh bounds. if (bmin && bmax) { - camr = sqrtf(rcSqr(bmax[0]-bmin[0]) + - rcSqr(bmax[1]-bmin[1]) + - rcSqr(bmax[2]-bmin[2])) / 2; - camx = (bmax[0] + bmin[0]) / 2 + camr; - camy = (bmax[1] + bmin[1]) / 2 + camr; - camz = (bmax[2] + bmin[2]) / 2 + camr; + camr = sqrtf(rcSqr(bmax[0] - bmin[0]) + + rcSqr(bmax[1] - bmin[1]) + + rcSqr(bmax[2] - bmin[2])) / 2; + cameraPos[0] = (bmax[0] + bmin[0]) / 2 + camr; + cameraPos[1] = (bmax[1] + bmin[1]) / 2 + camr; + cameraPos[2] = (bmax[2] + bmin[2]) / 2 + camr; camr *= 3; } - rx = 45; - ry = -45; - glFogf(GL_FOG_START, camr*0.2f); - glFogf(GL_FOG_END, camr*1.25f); + cameraEulers[0] = 45; + cameraEulers[1] = -45; + glFogf(GL_FOG_START, camr * 0.2f); + glFogf(GL_FOG_END, camr * 1.25f); } // Do the tests. @@ -881,17 +910,17 @@ int main(int /*argc*/, char** /*argv*/) // Log if (showLog && showMenu) { - if (imguiBeginScrollArea("Log", 250+20, 10, width - 300 - 250, 200, &logScroll)) + if (imguiBeginScrollArea("Log", 250 + 20, 10, width - 300 - 250, 200, &logScroll)) mouseOverMenu = true; for (int i = 0; i < ctx.getLogCount(); ++i) imguiLabel(ctx.getLogText(i)); imguiEndScrollArea(); } - // Tools + // Left column tools menu if (!showTestCases && showTools && showMenu) // && geom && sample) { - if (imguiBeginScrollArea("Tools", 10, 10, 250, height-20, &toolsScroll)) + if (imguiBeginScrollArea("Tools", 10, 10, 250, height - 20, &toolsScroll)) mouseOverMenu = true; if (sample) @@ -903,8 +932,8 @@ int main(int /*argc*/, char** /*argv*/) slideShow.updateAndDraw(dt, (float)width, (float)height); // Marker - if (mposSet && gluProject((GLdouble)mpos[0], (GLdouble)mpos[1], (GLdouble)mpos[2], - model, proj, view, &x, &y, &z)) + if (markerPositionSet && gluProject((GLdouble)markerPosition[0], (GLdouble)markerPosition[1], (GLdouble)markerPosition[2], + modelviewMatrix, projectionMatrix, viewport, &x, &y, &z)) { // Draw marker circle glLineWidth(5.0f); @@ -926,7 +955,7 @@ int main(int /*argc*/, char** /*argv*/) imguiRenderGLDraw(); glEnable(GL_DEPTH_TEST); - SDL_GL_SwapBuffers(); + SDL_GL_SwapWindow(window); } imguiRenderGLDestroy(); diff --git a/RecastDemo/premake5.lua b/RecastDemo/premake5.lua index 2dee608..53240a1 100644 --- a/RecastDemo/premake5.lua +++ b/RecastDemo/premake5.lua @@ -17,10 +17,10 @@ solution "recastnavigation" flags { "ExtraWarnings", "FloatFast", - "NoExceptions", - "NoRTTI", "Symbols" } + exceptionhandling "Off" + rtti "Off" -- debug configs configuration "Debug*" @@ -135,12 +135,12 @@ project "RecastDemo" -- linux library cflags and libs configuration { "linux", "gmake" } buildoptions { - "`pkg-config --cflags sdl`", + "`pkg-config --cflags sdl2`", "`pkg-config --cflags gl`", "`pkg-config --cflags glu`" } linkoptions { - "`pkg-config --libs sdl`", + "`pkg-config --libs sdl2`", "`pkg-config --libs gl`", "`pkg-config --libs glu`" } @@ -149,30 +149,26 @@ project "RecastDemo" configuration { "windows" } includedirs { "../RecastDemo/Contrib/SDL/include" } libdirs { "../RecastDemo/Contrib/SDL/lib/x86" } + debugdir "../RecastDemo/Bin/" links { - "opengl32", "glu32", - "sdlmain", - "sdl" + "opengl32", + "SDL2", + "SDL2main", + } + postbuildcommands { + -- Copy the SDL2 dll to the Bin folder. + "{COPY} %{wks.location}../../Contrib/SDL/lib/x86/SDL2.dll %{cfg.targetdir}" } -- mac includes and libs configuration { "macosx" } kind "ConsoleApp" -- xcode4 failes to run the project if using WindowedApp - includedirs { "/Library/Frameworks/SDL.framework/Headers" } + includedirs { "/Library/Frameworks/SDL2.framework/Headers" } buildoptions { "-Wunused-value -Wshadow -Wreorder -Wsign-compare -Wall" } links { "OpenGL.framework", - "/Library/Frameworks/SDL.framework", + "SDL2.framework", "Cocoa.framework", } - files { - "../RecastDemo/Include/SDLMain.h", - "../RecastDemo/Source/SDLMain.m", --- These don't seem to work in xcode4 target yet. --- "Info.plist", --- "Icon.icns", --- "English.lproj/InfoPlist.strings", --- "English.lproj/MainMenu.xib", - } diff --git a/appveyor.yml b/appveyor.yml index c95e178..af1e03a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,21 +7,20 @@ environment: matrix: - TOOLSET: vs2010 - TOOLSET: vs2013 - # Can't use vs2015 toolset yet as it appears SDL 1.2 has some link errors with it. - # - TOOLSET: vs2015 + - TOOLSET: vs2015 install: # Download Premake - - ps: Start-FileDownload 'https://github.com/premake/premake-core/releases/download/v5.0.0-alpha6/premake-5.0.0-alpha6-windows.zip' 'premake.zip' + - ps: Start-FileDownload 'https://github.com/premake/premake-core/releases/download/v5.0.0-alpha7/premake-5.0.0-alpha7-windows.zip' 'premake.zip' # Extract it in-place; premake5.exe is at the top level. - 7z x premake.zip # Download SDL. - - ps: Start-FileDownload 'https://www.libsdl.org/release/SDL-devel-1.2.15-VC.zip' 'RecastDemo/Contrib/SDL.zip' + - ps: Start-FileDownload 'https://www.libsdl.org/release/SDL2-devel-2.0.4-VC.zip' 'RecastDemo/Contrib/SDL.zip' - # Extract it and put it in the right place. - - cd RecastDemo/Contrib && 7z x SDL.zip && mv SDL-1.2.15 SDL && cd ../.. + # Extract it, put it in the right place, and rename it. + - cd RecastDemo/Contrib && 7z x SDL.zip && ren SDL2-2.0.4 SDL && cd ../.. # Generate solution files using premake. - cd RecastDemo && "../premake5.exe" %TOOLSET% && cd ..