From 4442a826ed4e3f23272064fb2f24a25d42313058 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Wed, 26 Sep 2012 19:47:18 +0000 Subject: [PATCH] add commandline arguments to serialize demo for xml export and Bullet import file name update AntTweakBar version in CDTestFramework add btCompoundShape support in BulletXmlWorldImporter (this importer is still premature/work-in-progress) --- Demos/OpenGL/CommandLineArguments.h | 112 + Demos/SerializeDemo/SerializeDemo.cpp | 10 +- Demos/SerializeDemo/SerializeDemo.h | 24 +- Demos/SerializeDemo/main.cpp | 27 +- .../CDTestFramework/AntTweakBar/ChangeLog.txt | 219 +- Extras/CDTestFramework/AntTweakBar/Clean.bat | 15 +- .../CDTestFramework/AntTweakBar/License.txt | 17 +- Extras/CDTestFramework/AntTweakBar/Readme.txt | 6 +- .../AntTweakBar/examples/Examples.ncb | Bin 150528 -> 0 bytes .../AntTweakBar/examples/Examples.sln | 65 - .../AntTweakBar/examples/Examples.suo | Bin 15360 -> 0 bytes .../AntTweakBar/examples/Makefile | 80 - .../AntTweakBar/examples/Makefile.x86_64 | 82 - .../AntTweakBar/examples/TwAdvanced1.cpp | 693 - .../AntTweakBar/examples/TwAdvanced1.vcproj | 142 - .../AntTweakBar/examples/TwCopyDLL.vcproj | 53 - .../AntTweakBar/examples/TwSimpleDX9.cpp | 228 - .../AntTweakBar/examples/TwSimpleDX9.vcproj | 138 - .../AntTweakBar/examples/TwSimpleGLFW.c | 200 - .../AntTweakBar/examples/TwSimpleGLFW.vcproj | 137 - .../AntTweakBar/examples/TwSimpleGLUT.c | 194 - .../AntTweakBar/examples/TwSimpleGLUT.vcproj | 141 - .../AntTweakBar/examples/TwSimpleSDL.c | 216 - .../AntTweakBar/examples/TwSimpleSDL.vcproj | 178 - .../AntTweakBar/examples/glfw.h | 482 - .../AntTweakBar/examples/glfwdll.lib | Bin 15196 -> 0 bytes .../AntTweakBar/include/AntTweakBar.h | 223 +- .../AntTweakBar/lib/AntTweakBar.dll | Bin 315392 -> 0 bytes .../AntTweakBar/lib/AntTweakBar.exp | Bin 4769 -> 0 bytes .../AntTweakBar/lib/AntTweakBar.lib | Bin 8904 -> 0 bytes .../AntTweakBar/lib/Readme.txt | 6 - .../AntTweakBar/lib/libAntTweakBar.so | Bin 380940 -> 0 bytes .../AntTweakBar/lib/libAntTweakBar.so.ldd | 4 - .../AntTweakBar/src/AntPerfTimer.h | 66 +- .../AntTweakBar/src/AntTweakBar.sln | 40 +- .../AntTweakBar/src/AntTweakBar.vcproj | 955 +- .../AntTweakBar/src/LoadOGL.cpp | 275 +- .../CDTestFramework/AntTweakBar/src/LoadOGL.h | 52 +- .../AntTweakBar/src/LoadOGLCore.cpp | 527 + .../AntTweakBar/src/LoadOGLCore.h | 403 + .../CDTestFramework/AntTweakBar/src/Makefile | 26 +- .../AntTweakBar/src/MiniGLUT.h | 142 + .../CDTestFramework/AntTweakBar/src/TwBar.cpp | 11715 ++++--- .../CDTestFramework/AntTweakBar/src/TwBar.h | 669 +- .../AntTweakBar/src/TwColors.cpp | 234 +- .../AntTweakBar/src/TwColors.h | 57 +- .../AntTweakBar/src/TwDirect3D10.cpp | 1291 + .../AntTweakBar/src/TwDirect3D10.h | 108 + .../AntTweakBar/src/TwDirect3D11.cpp | 1653 + .../AntTweakBar/src/TwDirect3D11.h | 117 + .../AntTweakBar/src/TwDirect3D9.cpp | 984 +- .../AntTweakBar/src/TwDirect3D9.h | 113 +- .../AntTweakBar/src/TwEventGLFW.c | 337 +- .../AntTweakBar/src/TwEventGLUT.c | 210 +- .../AntTweakBar/src/TwEventSDL.c | 91 +- .../AntTweakBar/src/TwEventWin.c | 256 + .../AntTweakBar/src/TwEventX11.c | 205 + .../AntTweakBar/src/TwFonts.cpp | 8833 ++--- .../CDTestFramework/AntTweakBar/src/TwFonts.h | 41 +- .../CDTestFramework/AntTweakBar/src/TwGraph.h | 62 +- .../CDTestFramework/AntTweakBar/src/TwMgr.cpp | 8781 +++-- .../CDTestFramework/AntTweakBar/src/TwMgr.h | 671 +- .../AntTweakBar/src/TwOpenGL.cpp | 1467 +- .../AntTweakBar/src/TwOpenGL.h | 119 +- .../AntTweakBar/src/TwOpenGLCore.cpp | 927 + .../AntTweakBar/src/TwOpenGLCore.h | 121 + .../AntTweakBar/src/TwPrecomp.h | 102 +- .../AntTweakBar/src/d3d10vs2003.h | 46 + .../AntTweakBar/src/res/FontChars.txt | 270 +- .../AntTweakBar/src/res/FontFixed1.pgm | 28788 ++++++++++++++++ .../AntTweakBar/src/res/FontLargeAA.pgm | 332 +- .../AntTweakBar/src/res/FontNormalAA.pgm | 364 +- .../AntTweakBar/src/res/FontSmall.pgm | 548 +- .../AntTweakBar/src/res/TwXCursors.h | 1777 +- Extras/CDTestFramework/Bin/AntTweakBar.dll | Bin 315392 -> 0 bytes Extras/CDTestFramework/Bin/Opcode.dll | Bin 438272 -> 0 bytes .../CDTestFramework/BipartiteBoxPruning.cpp | 1 + Extras/CDTestFramework/CDTestFramework.cpp | 6 +- Extras/CDTestFramework/CDTestFramework.sln | 72 +- Extras/CDTestFramework/CDTestFramework.vcproj | 92 +- Extras/CDTestFramework/CompleteBoxPruning.cpp | 2 +- .../BulletWorldImporter/btWorldImporter.cpp | 9 +- .../btBulletXmlWorldImporter.cpp | 142 +- .../btBulletXmlWorldImporter.h | 2 +- .../BulletXmlWorldImporter/string_split.cpp | 2 + 85 files changed, 59310 insertions(+), 18485 deletions(-) create mode 100644 Demos/OpenGL/CommandLineArguments.h delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/Examples.ncb delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/Examples.sln delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/Examples.suo delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/Makefile delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/Makefile.x86_64 delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwAdvanced1.cpp delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwAdvanced1.vcproj delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwCopyDLL.vcproj delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwSimpleDX9.cpp delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwSimpleDX9.vcproj delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwSimpleGLFW.c delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwSimpleGLFW.vcproj delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwSimpleGLUT.c delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwSimpleGLUT.vcproj delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwSimpleSDL.c delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/TwSimpleSDL.vcproj delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/glfw.h delete mode 100644 Extras/CDTestFramework/AntTweakBar/examples/glfwdll.lib delete mode 100644 Extras/CDTestFramework/AntTweakBar/lib/AntTweakBar.dll delete mode 100644 Extras/CDTestFramework/AntTweakBar/lib/AntTweakBar.exp delete mode 100644 Extras/CDTestFramework/AntTweakBar/lib/AntTweakBar.lib delete mode 100644 Extras/CDTestFramework/AntTweakBar/lib/Readme.txt delete mode 100644 Extras/CDTestFramework/AntTweakBar/lib/libAntTweakBar.so delete mode 100644 Extras/CDTestFramework/AntTweakBar/lib/libAntTweakBar.so.ldd create mode 100644 Extras/CDTestFramework/AntTweakBar/src/LoadOGLCore.cpp create mode 100644 Extras/CDTestFramework/AntTweakBar/src/LoadOGLCore.h create mode 100644 Extras/CDTestFramework/AntTweakBar/src/MiniGLUT.h create mode 100644 Extras/CDTestFramework/AntTweakBar/src/TwDirect3D10.cpp create mode 100644 Extras/CDTestFramework/AntTweakBar/src/TwDirect3D10.h create mode 100644 Extras/CDTestFramework/AntTweakBar/src/TwDirect3D11.cpp create mode 100644 Extras/CDTestFramework/AntTweakBar/src/TwDirect3D11.h create mode 100644 Extras/CDTestFramework/AntTweakBar/src/TwEventWin.c create mode 100644 Extras/CDTestFramework/AntTweakBar/src/TwEventX11.c create mode 100644 Extras/CDTestFramework/AntTweakBar/src/TwOpenGLCore.cpp create mode 100644 Extras/CDTestFramework/AntTweakBar/src/TwOpenGLCore.h create mode 100644 Extras/CDTestFramework/AntTweakBar/src/d3d10vs2003.h create mode 100644 Extras/CDTestFramework/AntTweakBar/src/res/FontFixed1.pgm delete mode 100644 Extras/CDTestFramework/Bin/AntTweakBar.dll delete mode 100644 Extras/CDTestFramework/Bin/Opcode.dll diff --git a/Demos/OpenGL/CommandLineArguments.h b/Demos/OpenGL/CommandLineArguments.h new file mode 100644 index 000000000..4c11c4b01 --- /dev/null +++ b/Demos/OpenGL/CommandLineArguments.h @@ -0,0 +1,112 @@ +/****************************************************************************** + * Copyright 2010 Duane Merrill + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * For more information, see our Google Code project site: + * http://code.google.com/p/back40computing/ + * + * Thanks! + ******************************************************************************/ + +#ifndef COMMAND_LINE_ARGS_H +#define COMMAND_LINE_ARGS_H + +/****************************************************************************** + * Command-line parsing + ******************************************************************************/ +#include +#include +#include +#include +class CommandLineArguments +{ +protected: + + std::map pairs; + +public: + + // Constructor + CommandLineArguments(int argc, char **argv) + { + using namespace std; + + for (int i = 1; i < argc; i++) + { + string arg = argv[i]; + + if ((arg[0] != '-') || (arg[1] != '-')) { + continue; + } + + string::size_type pos; + string key, val; + if ((pos = arg.find( '=')) == string::npos) { + key = string(arg, 2, arg.length() - 2); + val = ""; + } else { + key = string(arg, 2, pos - 2); + val = string(arg, pos + 1, arg.length() - 1); + } + pairs[key] = val; + } + } + + bool CheckCmdLineFlag(const char* arg_name) + { + using namespace std; + map::iterator itr; + if ((itr = pairs.find(arg_name)) != pairs.end()) { + return true; + } + return false; + } + + template + void GetCmdLineArgument(const char *arg_name, T &val); + + int ParsedArgc() + { + return pairs.size(); + } +}; + +template +void CommandLineArguments::GetCmdLineArgument(const char *arg_name, T &val) +{ + using namespace std; + map::iterator itr; + if ((itr = pairs.find(arg_name)) != pairs.end()) { + istringstream strstream(itr->second); + strstream >> val; + } +} + +template <> +void CommandLineArguments::GetCmdLineArgument(const char* arg_name, char* &val) +{ + using namespace std; + map::iterator itr; + if ((itr = pairs.find(arg_name)) != pairs.end()) { + + string s = itr->second; + val = (char*) malloc(sizeof(char) * (s.length() + 1)); + strcpy(val, s.c_str()); + + } else { + val = NULL; + } +} + +#endif //COMMAND_LINE_ARGS_H diff --git a/Demos/SerializeDemo/SerializeDemo.cpp b/Demos/SerializeDemo/SerializeDemo.cpp index 403c335c8..3862dd20e 100644 --- a/Demos/SerializeDemo/SerializeDemo.cpp +++ b/Demos/SerializeDemo/SerializeDemo.cpp @@ -732,7 +732,13 @@ public: }; #endif //DESERIALIZE_SOFT_BODIES +SerializeDemo::SerializeDemo() +:m_verboseMode(0), +m_fileName("testFile.bullet") +{ + m_idle=true; +} SerializeDemo::~SerializeDemo() { m_fileLoader->deleteAllData(); @@ -743,7 +749,7 @@ SerializeDemo::~SerializeDemo() void SerializeDemo::initPhysics() { setTexturing(true); - setShadows(true); + setShadows(false);//true); setCameraDistance(btScalar(SCALING*30.)); @@ -755,7 +761,7 @@ void SerializeDemo::initPhysics() m_fileLoader = new btBulletWorldImporter(m_dynamicsWorld); #endif //DESERIALIZE_SOFT_BODIES - //m_fileLoader->setVerboseMode(bParse::FD_VERBOSE_EXPORT_XML); + m_fileLoader->setVerboseMode(m_verboseMode); diff --git a/Demos/SerializeDemo/SerializeDemo.h b/Demos/SerializeDemo/SerializeDemo.h index 42cc4e9eb..560ef8085 100644 --- a/Demos/SerializeDemo/SerializeDemo.h +++ b/Demos/SerializeDemo/SerializeDemo.h @@ -50,12 +50,12 @@ class SerializeDemo : public PlatformDemoApplication btDefaultCollisionConfiguration* m_collisionConfiguration; class btBulletWorldImporter* m_fileLoader; + const char* m_fileName; + int m_verboseMode; public: - SerializeDemo() - { - } + SerializeDemo(); virtual ~SerializeDemo(); void initPhysics(); @@ -70,6 +70,24 @@ class SerializeDemo : public PlatformDemoApplication virtual void displayCallback(); + void setFileName(const char* name) + { + m_fileName = name; + } + const char* getFileName() const + { + return m_fileName; + } + + void setVerboseMode(int mode) + { + m_verboseMode = mode; + } + int getVerboseMode() const + { + return m_verboseMode; + } + static DemoApplication* Create() { SerializeDemo* demo = new SerializeDemo; diff --git a/Demos/SerializeDemo/main.cpp b/Demos/SerializeDemo/main.cpp index cd5914718..87b88f8f0 100644 --- a/Demos/SerializeDemo/main.cpp +++ b/Demos/SerializeDemo/main.cpp @@ -18,7 +18,8 @@ subject to the following restrictions: #include "GLDebugDrawer.h" #include "btBulletDynamicsCommon.h" #include "LinearMath/btHashMap.h" - +#include "btBulletFile.h" +#include "CommandLineArguments.h" #ifdef USE_AMD_OPENCL @@ -84,6 +85,22 @@ bool initCL( void* glCtx, void* glDC ) int main(int argc,char** argv) { + CommandLineArguments arg(argc,argv); + char* filename=0; + arg.GetCmdLineArgument("filename", filename); + bool dumpXml = arg.CheckCmdLineFlag("dump_xml"); + if (!dumpXml && !filename) + { + printf("There are some optional commandline arguments for this demo:\n"); + printf("Load another .bullet file instead of testFile.bullet:\n"); + printf("--filename=testfile.bullet\n"); + printf("Dump the imported .bullet file to XML\n"); + printf("--dump_xml\n"); + + } + + + GLDebugDrawer gDebugDrawer; #ifdef USE_AMD_OPENCL @@ -93,6 +110,14 @@ int main(int argc,char** argv) SerializeDemo serializeDemo; + + int mode = 0; + if (dumpXml) + mode |=bParse::FD_VERBOSE_EXPORT_XML; + if (filename) + serializeDemo.setFileName(filename); + serializeDemo.setVerboseMode(mode); + serializeDemo.initPhysics(); serializeDemo.getDynamicsWorld()->setDebugDrawer(&gDebugDrawer); diff --git a/Extras/CDTestFramework/AntTweakBar/ChangeLog.txt b/Extras/CDTestFramework/AntTweakBar/ChangeLog.txt index 3277df751..a4ca26182 100644 --- a/Extras/CDTestFramework/AntTweakBar/ChangeLog.txt +++ b/Extras/CDTestFramework/AntTweakBar/ChangeLog.txt @@ -1,23 +1,208 @@ ---- AntTweakBar library changes --- +--- AntTweakBar library release notes --- -- Version 1.04 - OpenGL: Vertex buffer object state and Vertex/fragment program and object states are now reset and restored by TwDraw (thanks to Dylan and Siva for pointing this out). +* Version 1.15 (2012/07/22) -- Version 1.03 (2006/10/28) - Medium font is now antialiased. - Now also compiles on 64 bits x86 platform; use Makefile.x86_64 (thanks to Herling). - Slight changes to avoid visual 8 secure crt warnings. - Correct behaviour if min/max values are not defined. - Modif to avoid looping to max value when reaching zero with unsigned types. - Min/max/step commands for type TW_TYPE_CHAR now read ascii codes (not characters). - Add FPU precision control (because DirectX changes it). - Fix problem that occurs when the lib is initialized/unitialized more than once (thanks Lukasz for reporting it). - Distribution follows Savannah's recommendations. + - Added support for OpenGL Core Profile (3.2 and higher); it is enabled by + setting the TwGraphAPI parameter of the TwInit function to TW_OPENGL_CORE + (Thanks to Oystein E. and Arnaud M. for their contribution). + - Added a simple example that uses OpenGL Core Profile and SDL; see + TwGLCoreSDL.c . + - Added helper function TwEventX11 to handle native X11 events (Thanks to + Greg P. for the code). + - Added builtin fixed-width font for tweak bars; it is enabled through + the fontstyle bar parameter; it is not resizable (Thanks to Jay D. for + the font). + - Store and restore states of OpenGL vertex attribute arrays (Thanks to + Jerry J. and Eduard B.). + - Fixed memory access violation caused by the popup bar (Thanks to Matthias R. + for reporting it). + - Added code to overcome issue caused by the memory representation change + of std::string that occurs between Visual Studio 2008 and 2010. -- Version 1.02 (2006/09/27) - Library sources released. +* Version 1.14 (2011/03/26) -- Version 1.01 (2006/09/14) - First official release. + - Added 64 bit version of the library. + - Added multiple windows support (Inspired by comments and code from Evan F. + and Ivo H.) + - Better MacOSX support (Thanks to Alexis DH., Fabrice N., Diederick H., + Alec J.). + - Improved readability of overlapped transparent bars. Content of overlapped + regions is clipped and not drawn. This behavior can be disabled using + the bar parameter "overlap". + - Added support for Direct3D11 (Thanks to Jorge H., Lukasz M., Se1zen). + - Added an example based on DirectX 11. + - Added support for SDL 1.3 integration in addition to SDL 1.2. + ABI modification: TwEventSDL takes SDL version as an additional parameter. + - Added support for SFML 1.6 integration. + - Added support for GLFW 2.7 integration in addition to GLFW 2.6. This may + imply changing the calling convention of event callbacks. Can be done by + defining GLFW_CDECL before including AntTweakBar.h if needed. + - Added function TwKeyTest that checks if a key event would be processed by + AntTweakBar but without processing it. Needed to fix bad handling report of + WM_KEYUP and WM_KEYDOWN in TwEventWin (Thanks to Ryan DB. for reporting it). + - Added check sign for vars of type boolean. + - Added new bar parameter "buttonalign" to center or left-align buttons + (Suggested by Michael R.). + - Allowed values column width to be adjusted to fit its content. This is done + by setting the bar parameter valueswidth=fit (Requested by Koshmaar and + Michael R.). The user can also click in the left or right area near the + value width slider to fit column content. + - Added new helper function TwDefineEnumFromString to ease the defining of an + enum through a string of comma-separated enum values (Thanks to Bruno L. + for the suggestion and code). + - Fixed compilation issues with gcc4 (missing includes, warnings). + - Fixes for the fedora package maintained by Sean Middleditch. + - Fixed rotation widget display and interaction issues when the library is + compiled with gcc -O3 (Thanks to Ares L. for reporting this). + - Fixed SDL key event SDLK_RETURN handling after a bar is minimized (Thanks + to Sean M. for reporting this). + - Fixed issue with SDL_ShowCursor (Thanks to Hugues M. for reporting it). + - Fixed DirectX10 resource issue. + - Store and restore GL_TEXTURE_COORD_ARRAY state (Thanks to Jerry J. for + reporting this). + - Fixed mouse click repetition issue with passive event loop (Thanks to + Bruno L. for reporting it). + - Fixed issue with mouse button event when glut windows doesn't have focus + (Thanks to Scott J. for the fix). + - Reset enum content each time the var parameter "enum" is set using TwDefine + or TwSetParam (Following Carsten W. and Sulaiman remarks). + - Fixed memory corruption when more than one std_string are defined in a + custom struct (Thanks to Sulaiman for reporting it). + - Fixed mouse position issue with Direct3D9 fullscreen mode in TwSimpleDX9 + (Thanks to Paolo S. for pointing this out). + - Fixed ignored double-click in TwEvenWin (Thanks to H. Seungho for this). + +* Version 1.13 (2009/04/19) + + - Now compiles on Mac OSX (Many thanks to Evan F. for rewritting the OS + specific code, and to Tyler S. and Konstantin L. for their feedback). + - Added functions TwGetBarCount, TwGetBarByIndex, TwGetBarByName, + TwRefreshBar. + - Fixed bug related to var of type TW_TYPE_STDSTRING on Windows: Microsoft + implementation of std::string does not have the same size in Debug and + Release mode (hidden member added for debugging), which caused a crash when + mixing the Release version of AntTweakBar with a program compiled in Debug + mode (Thanks to Minh D. for reporting it). + - Added function TwGetParam and TwSetParam to allow access to the parameters + defining the behavior of bars and variables. + - Changed the bar/var parameters without value (like "show"/"hide") to + parameters with value ("visible=true or false") to be compatible with the + new TwGetParam and TwSetParam functions (the old syntax is still kept + for backward compatibility). + - Arrow keys and Return key can now be used to navigate and tweak values. + - Bars can now be moved partly outside of the window. They can still be + constrained to be fully contained in the window by setting the parameter + "contained=true". + - Added another way to move a bar by pressing mouse middle button in the bar. + +* Version 1.12 (2008/09/27) + + - Added new var types TW_TYPE_QUAT* and TW_TYPE_DIR* allowing for the + interactive tweaking of rotations (through quaternions) and 3D vectors + (directions). + - Better management of transparent tweak bars. New bar parameters added: + alpha=n text=dark/light. + - Default color scheme changed (now transparent by default). To reactivate the + previous scheme, call TwDefine("GLOBAL colorscheme=0") before creating bars. + - Added paramters to manage the bar behavior: resizable, movable, iconifiable, + fontresizable, alwaystop, alwaysbottom, visible, iconified (following + Jeppe F. B. feedback). + - Added functions TwSetBottomBar and TwGetBottomBar. + - The library can now be recompiled without requiring to install GLUT, GLFW + and SDL. + - New var parameters arrow, arrowcolor, axisx, axusy, axisz and showval added + for quaternion and direction types. + - Msvc specific keyword removed from PrefTimer (thanks to Tim J. for pointing + this out). + - Fixed bug related to popup behavior when the help bar is visible. + - GL_TEXTURE_RECTANGLE_ARB/EXT state is now saved and restored by TwDraw + (thanks to Cyril C. for suggesting this). + - glBlendFunc and glBlendEquationEXT are now saved and restored by TwDraw + (thanks to Sebastion B. for reporting the problem). + - Fixed bug related cursor visibility state with SDL (Thanks to Jeppe F. B. + for reporting it). + +* Version 1.11 (2007/12/10) + + - Now DirectX10 is also supported in addition to OpenGL and DirectX9. + Initialization of AntTweakBar with DX10: TwInit(TW_DIRECT3D10, d3d10Device). + - A new example that uses DirectX10 has been added: see TwSimpleDX10 in the + examples directory. + - Recap for string variables added to the doc. See + http://www.antisphere.com/Wiki/tools:anttweakbar:varstring + - An example that illustrates the use of the different types of string + variables has been added. See TwString in the examples directory. + - Added some code for multi-thread safety (thanks to Daniel 'DrUiD' B. for + the tip). + - Cleanup of the Help bar. Now only variables having help are displayed in + the Help bar. + - Function TwHandleErrors documented. + - Separators don't require a name anymore. + - Var parameter 'order' becomes 'colororder', and its values become 'rgba' and + 'argb' (order=ogl and order=dx still exist but are deprecated). + - A small icon added for variables of type bool. + - Function TwCopyCDStringToLibrary added. + - The keyword 'GLOBAL' has been added for TwDefine commands that don't apply + to a specific tweak bar (suggested by Koshmaar). + - TwEventWin32 becomes TwEventWin (a #define has been added to keep + compatibility with previous applications). + - TwWindowSize(0,0) now releases graphics resources allocated by AntTweakBar + (may be useful for Direct3D applications, before resizing for instance). + - A wrong assert removed from TwMgr.cpp (thanks to Chris W. for reporting it). + - Some slight cosmetic changes (again). + +* Version 1.10 (2007/08/31) + + - Variable values can now also be entered and edited via keyboard input + (implementation based on modifications made by Laury M., thank you Laury). + - Variables of type string are now handled: 3 types of string added + TW_TYPE_CSSTRING, TW_TYPE_CDSTRING and TW_STDSTRING. + - Text selection and copy/paste added. + - Position of bar icons is modifiable (cf. TwBar paramters iconPos, iconAlign + and iconMargin). + - Separators can be added in a bar (TwAddSeparator). + - OpenGL: states related to 3D textures and multitexturing are now saved and + restored by TwDraw (thanks to Dylan D. for pointing this out). + - Selected element of a listbox now highlighted. + - ReadOnly and ReadWrite behavior of buttons revisited. + - Documentation improved (examples for TwType, new functions documented,...). + - Some slight cosmetic changes. + +* Version 1.05 (2007/03/01) + + - Listbox and rotoslider buttons added. + - Icon resources (AntTweakBar.rc) no more required for static linkage (thanks + to Joe C. for pointing this out). + - Fixed a rotoslider precision problem when mouse button is released. + +* Version 1.04 (2006/12/16) + + - OpenGL: Vertex buffer object state and Vertex/fragment program and object + states are now reset and restored by TwDraw (thanks to Dylan D. and Siva K. + for pointing this out). + - Fixed problem that occurs when an initialized variable of type float/double + is displayed. + +* Version 1.03 (2006/10/28) + + - Medium font antialiased. + - Now also compiles on 64 bits x86 platform (thanks to Herling G. for this). + - Slight changes to avoid visual 8 secure crt warnings. + - Corrected behaviour if min/max values are not defined. + - Modif to avoid looping to max value when reaching zero with unsigned types. + - Min/max/step parameters for type TW_TYPE_CHAR now read ascii codes (not + characters). + - Added FPU precision control (because DirectX changes it). + - Fixed problem that occurs when the lib is initialized/uninitialized more + than once (thanks Lukasz P. for reporting it). + - Distribution follows Savannah's recommendations. + +* Version 1.02 (2006/09/27) + + - Library sources released. + +* Version 1.01 (2006/09/14) + + - First official release. \ No newline at end of file diff --git a/Extras/CDTestFramework/AntTweakBar/Clean.bat b/Extras/CDTestFramework/AntTweakBar/Clean.bat index 34d2a4f51..06d91863e 100644 --- a/Extras/CDTestFramework/AntTweakBar/Clean.bat +++ b/Extras/CDTestFramework/AntTweakBar/Clean.bat @@ -1,13 +1,18 @@ -RMDIR /S /Q src\debug -RMDIR /S /Q src\release +RMDIR /S /Q src\debug32 +RMDIR /S /Q src\debug64 +RMDIR /S /Q src\release32 +RMDIR /S /Q src\release64 CD src -DEL *.ncb *.aps *.o *.bak +DEL *.ncb *.aps *.o *.bak *.user DEL /A:h *.suo CD .. RMDIR /S /Q lib\debug -RMDIR /S /Q examples\debug +RMDIR /S /Q examples\debug32 +RMDIR /S /Q examples\debug64 +RMDIR /S /Q examples\tmp +DEL lib\*.exp CD examples -DEL *.ncb *.aps *.o *.bak +DEL *.ncb *.aps *.o *.bak *.user DEL /A:h *.suo DEL /S BuildLog.htm DEL bin\*.obj diff --git a/Extras/CDTestFramework/AntTweakBar/License.txt b/Extras/CDTestFramework/AntTweakBar/License.txt index 0e3f29370..f9ce6ffef 100644 --- a/Extras/CDTestFramework/AntTweakBar/License.txt +++ b/Extras/CDTestFramework/AntTweakBar/License.txt @@ -1,18 +1,19 @@ ---- AntTweakBar license --- +--- AntTweakBar license --- -Copyright 2005, 2006 Philippe Decaudin +Copyright (C) 2005-2012 Philippe Decaudin 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. +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: +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. +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. diff --git a/Extras/CDTestFramework/AntTweakBar/Readme.txt b/Extras/CDTestFramework/AntTweakBar/Readme.txt index 87c46cb9b..19ab5ba38 100644 --- a/Extras/CDTestFramework/AntTweakBar/Readme.txt +++ b/Extras/CDTestFramework/AntTweakBar/Readme.txt @@ -3,13 +3,13 @@ AntTweakBar is a small and easy-to-use C/C++ library that allows programmers to quickly add a light and intuitive GUI into OpenGL and DirectX based -graphic programs to interactively tweak them. +graphic programs to interactively tweak parameters. This package includes the development version of the AntTweakBar library -for GNU/Linux and Windows, + some program examples (sources + binaries). +for Windows, GNU/Linux and OSX, and some program examples (sources + binaries). For installation and documentation please refer to: http://www.antisphere.com/Wiki/tools:anttweakbar -Philippe Decaudin - http://www.antisphere.com - 2006/05/20 +Philippe Decaudin - http://www.antisphere.com diff --git a/Extras/CDTestFramework/AntTweakBar/examples/Examples.ncb b/Extras/CDTestFramework/AntTweakBar/examples/Examples.ncb deleted file mode 100644 index 57e218451ad7a728ba261536e0daf508abe46932..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150528 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 a;m7o!(ZI_8%&?C~eXN1U8u(wJf&T)-|8L>| diff --git a/Extras/CDTestFramework/AntTweakBar/examples/Examples.sln b/Extras/CDTestFramework/AntTweakBar/examples/Examples.sln deleted file mode 100644 index 728596ecc..000000000 --- a/Extras/CDTestFramework/AntTweakBar/examples/Examples.sln +++ /dev/null @@ -1,65 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TwCopyDLL", "TwCopyDLL.vcproj", "{AB180E0E-0EFA-4AD4-8F08-4492D144D963}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TwSimpleGLFW", "TwSimpleGLFW.vcproj", "{29C096AF-172E-4A36-A1FE-E15B259D6834}" - ProjectSection(ProjectDependencies) = postProject - {AB180E0E-0EFA-4AD4-8F08-4492D144D963} = {AB180E0E-0EFA-4AD4-8F08-4492D144D963} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TwSimpleGLUT", "TwSimpleGLUT.vcproj", "{CC6C3AFD-5DD9-498F-9184-C53E663C2ABF}" - ProjectSection(ProjectDependencies) = postProject - {AB180E0E-0EFA-4AD4-8F08-4492D144D963} = {AB180E0E-0EFA-4AD4-8F08-4492D144D963} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TwSimpleSDL", "TwSimpleSDL.vcproj", "{3B516919-D0DA-43CE-820E-8306368F605B}" - ProjectSection(ProjectDependencies) = postProject - {AB180E0E-0EFA-4AD4-8F08-4492D144D963} = {AB180E0E-0EFA-4AD4-8F08-4492D144D963} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TwSimpleDX9", "TwSimpleDX9.vcproj", "{6B414E54-701C-4ED3-9034-F5CD7BFC3451}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TwAdvanced1", "TwAdvanced1.vcproj", "{008D1CEC-1586-4C89-B524-DF15D9605163}" - ProjectSection(ProjectDependencies) = postProject - {AB180E0E-0EFA-4AD4-8F08-4492D144D963} = {AB180E0E-0EFA-4AD4-8F08-4492D144D963} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {AB180E0E-0EFA-4AD4-8F08-4492D144D963}.Debug.ActiveCfg = Debug|Win32 - {AB180E0E-0EFA-4AD4-8F08-4492D144D963}.Debug.Build.0 = Debug|Win32 - {AB180E0E-0EFA-4AD4-8F08-4492D144D963}.Release.ActiveCfg = Release|Win32 - {AB180E0E-0EFA-4AD4-8F08-4492D144D963}.Release.Build.0 = Release|Win32 - {29C096AF-172E-4A36-A1FE-E15B259D6834}.Debug.ActiveCfg = Debug|Win32 - {29C096AF-172E-4A36-A1FE-E15B259D6834}.Debug.Build.0 = Debug|Win32 - {29C096AF-172E-4A36-A1FE-E15B259D6834}.Release.ActiveCfg = Release|Win32 - {29C096AF-172E-4A36-A1FE-E15B259D6834}.Release.Build.0 = Release|Win32 - {CC6C3AFD-5DD9-498F-9184-C53E663C2ABF}.Debug.ActiveCfg = Debug|Win32 - {CC6C3AFD-5DD9-498F-9184-C53E663C2ABF}.Debug.Build.0 = Debug|Win32 - {CC6C3AFD-5DD9-498F-9184-C53E663C2ABF}.Release.ActiveCfg = Release|Win32 - {CC6C3AFD-5DD9-498F-9184-C53E663C2ABF}.Release.Build.0 = Release|Win32 - {3B516919-D0DA-43CE-820E-8306368F605B}.Debug.ActiveCfg = Debug|Win32 - {3B516919-D0DA-43CE-820E-8306368F605B}.Debug.Build.0 = Debug|Win32 - {3B516919-D0DA-43CE-820E-8306368F605B}.Release.ActiveCfg = Release|Win32 - {3B516919-D0DA-43CE-820E-8306368F605B}.Release.Build.0 = Release|Win32 - {6B414E54-701C-4ED3-9034-F5CD7BFC3451}.Debug.ActiveCfg = Debug|Win32 - {6B414E54-701C-4ED3-9034-F5CD7BFC3451}.Debug.Build.0 = Debug|Win32 - {6B414E54-701C-4ED3-9034-F5CD7BFC3451}.Release.ActiveCfg = Release|Win32 - {6B414E54-701C-4ED3-9034-F5CD7BFC3451}.Release.Build.0 = Release|Win32 - {008D1CEC-1586-4C89-B524-DF15D9605163}.Debug.ActiveCfg = Debug|Win32 - {008D1CEC-1586-4C89-B524-DF15D9605163}.Debug.Build.0 = Debug|Win32 - {008D1CEC-1586-4C89-B524-DF15D9605163}.Release.ActiveCfg = Release|Win32 - {008D1CEC-1586-4C89-B524-DF15D9605163}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/Extras/CDTestFramework/AntTweakBar/examples/Examples.suo b/Extras/CDTestFramework/AntTweakBar/examples/Examples.suo deleted file mode 100644 index 0a6131804ea3796859a442915f1841d30f552bf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15360 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 /dev/null -EXP_PATH = "export LD_LIBRARY_PATH=\"../../lib:$(LD_LIBRARY_PATH)\"" - - -####### Files - - -SRC_FILES = TwSimpleGLFW.c TwSimpleGLUT.c TwSimpleSDL.c TwAdvanced1.cpp - - -####### Build rules - - -#first: depend all -first: all - -all: Makefile $(SRC_FILES) - - @echo "===== Build TwSimpleGLFW ====" - $(CXX) $(CXXFLAGS) $(INCPATH) TwSimpleGLFW.c $(LFLAGS) -lglfw $(LIBS) -o $(OUT_DIR)/TwSimpleGLFW.out - @echo "$(EXP_PATH) ; ./TwSimpleGLFW.out" > $(OUT_DIR)/TwSimpleGLFW - - @echo "===== Build TwSimpleGLUT ====" - $(CXX) $(CXXFLAGS) $(INCPATH) TwSimpleGLUT.c $(LFLAGS) -lglut $(LIBS) -o $(OUT_DIR)/TwSimpleGLUT.out - @echo "$(EXP_PATH) ; ./TwSimpleGLUT.out" > $(OUT_DIR)/TwSimpleGLUT - - @echo "===== Build TwSimpleSDL ====" - $(CXX) $(CXXFLAGS) $(INCPATH) TwSimpleSDL.c $(LFLAGS) -lSDL $(LIBS) -o $(OUT_DIR)/TwSimpleSDL.out - @echo "$(EXP_PATH) ; ./TwSimpleSDL.out" > $(OUT_DIR)/TwSimpleSDL - - @echo "===== Build TwAdvanced1 ====" - $(CXX) $(CXXFLAGS) $(INCPATH) TwAdvanced1.cpp $(LFLAGS) -lglfw $(LIBS) -o $(OUT_DIR)/TwAdvanced1.out - @echo "$(EXP_PATH) ; ./TwAdvanced1.out" > $(OUT_DIR)/TwAdvanced1 - -# append dependencies to this Makefile -#depend: -# @echo "===== Make dependencies =====" -# makedepend -Y -# makedepend -a -Y -- $(CXXFLAGS) $(INCPATH) -- $(SRC_FILES) $(NO_STDERR) - - -# clean temporary files -clean: - @echo "===== Clean =====" - -$(DEL_FILE) *.o - -$(DEL_FILE) *~ core *.core *.stackdump - -$(DEL_FILE) debug/* - -$(DEL_DIR) debug - - -####### DEPENDENCIES - -TwSimpleGLFW.o: ../include/AntTweakBar.h -TwSimpleGLUT.o: ../include/AntTweakBar.h -TwSimpleSDL.o: ../include/AntTweakBar.h -TwAdvanced1.o: ../include/AntTweakBar.h diff --git a/Extras/CDTestFramework/AntTweakBar/examples/Makefile.x86_64 b/Extras/CDTestFramework/AntTweakBar/examples/Makefile.x86_64 deleted file mode 100644 index 067e1bbe2..000000000 --- a/Extras/CDTestFramework/AntTweakBar/examples/Makefile.x86_64 +++ /dev/null @@ -1,82 +0,0 @@ -####### Compiler, tools and options - -#---- MinGW -#MINGWFLAGS = -mno-cygwin - - -#---- Release -CXXCFG = -O3 -LFLAGS = -L../lib -OUT_DIR = bin -#---- Debug -#CXXCFG = -g -D_DEBUG -#LFLAGS = -Wl -L./debug -#OUT_DIR = debug - - -CXX = gcc -#CXXFLAGS = $(CXXCFG) $(MINGWFLAGS) -pipe -Wall -ffast-math -fpic -fno-strength-reduce -mcpu=pentiumpro -march=i586 -#CXXFLAGS = $(CXXCFG) -Wall -mcpu=i386 -march=i386 -CXXFLAGS = $(CXXCFG) -Wall -INCPATH = -I../include -I/usr/local/include -I/usr/X11R6/include -I/usr/include -#LIBS = -L/usr/X11R6/lib -lAntTweakBar -lGL -lGLU -lX11 -lXxf86vm -lXext -lXmu -lpthread -lm -LIBS = -L/usr/lib64 -lAntTweakBar -lglfw -lGL -lGLU -lX11 -lXxf86vm -lXext -lXmu -lpthread -lm - -DEL_FILE = rm -f -DEL_DIR = rmdir -NO_STDERR = 2> /dev/null -EXP_PATH = "export LD_LIBRARY_PATH=\"../../lib:$(LD_LIBRARY_PATH)\"" - - -####### Files - - -SRC_FILES = TwSimpleGLFW.c TwSimpleGLUT.c TwSimpleSDL.c TwAdvanced1.cpp - - -####### Build rules - - -#first: depend all -first: all - -all: Makefile $(SRC_FILES) - - @echo "===== Build TwSimpleGLFW ====" - $(CXX) $(CXXFLAGS) $(INCPATH) TwSimpleGLFW.c $(LFLAGS) -lglfw $(LIBS) -o $(OUT_DIR)/TwSimpleGLFW.out - @echo "$(EXP_PATH) ; ./TwSimpleGLFW.out" > $(OUT_DIR)/TwSimpleGLFW - - @echo "===== Build TwSimpleGLUT ====" - $(CXX) $(CXXFLAGS) $(INCPATH) TwSimpleGLUT.c $(LFLAGS) -lglut $(LIBS) -o $(OUT_DIR)/TwSimpleGLUT.out - @echo "$(EXP_PATH) ; ./TwSimpleGLUT.out" > $(OUT_DIR)/TwSimpleGLUT - - @echo "===== Build TwSimpleSDL ====" - $(CXX) $(CXXFLAGS) $(INCPATH) TwSimpleSDL.c $(LFLAGS) -lSDL $(LIBS) -o $(OUT_DIR)/TwSimpleSDL.out - @echo "$(EXP_PATH) ; ./TwSimpleSDL.out" > $(OUT_DIR)/TwSimpleSDL - - @echo "===== Build TwAdvanced1 ====" - $(CXX) $(CXXFLAGS) $(INCPATH) TwAdvanced1.cpp $(LFLAGS) -lglfw $(LIBS) -o $(OUT_DIR)/TwAdvanced1.out - @echo "$(EXP_PATH) ; ./TwAdvanced1.out" > $(OUT_DIR)/TwAdvanced1 - -# append dependencies to this Makefile -#depend: -# @echo "===== Make dependencies =====" -# makedepend -Y -# makedepend -a -Y -- $(CXXFLAGS) $(INCPATH) -- $(SRC_FILES) $(NO_STDERR) - - -# clean temporary files -clean: - @echo "===== Clean =====" - -$(DEL_FILE) *.o - -$(DEL_FILE) *~ core *.core *.stackdump - -$(DEL_FILE) debug/* - -$(DEL_DIR) debug - - -####### DEPENDENCIES - -TwSimpleGLFW.o: ../include/AntTweakBar.h -TwSimpleGLUT.o: ../include/AntTweakBar.h -TwSimpleSDL.o: ../include/AntTweakBar.h -TwAdvanced1.o: ../include/AntTweakBar.h diff --git a/Extras/CDTestFramework/AntTweakBar/examples/TwAdvanced1.cpp b/Extras/CDTestFramework/AntTweakBar/examples/TwAdvanced1.cpp deleted file mode 100644 index 70e6ac58e..000000000 --- a/Extras/CDTestFramework/AntTweakBar/examples/TwAdvanced1.cpp +++ /dev/null @@ -1,693 +0,0 @@ -// --------------------------------------------------------------------------- -// -// @file TwAdvanced1.cpp -// @brief An example showing many features of AntTweakBar. -// It also uses OpenGL and GLFW windowing system -// but could be easily adapted to other frameworks. -// -// AntTweakBar: http://www.antisphere.com/Wiki/tools:anttweakbar -// OpenGL: http://www.opengl.org -// GLFW: http://glfw.sourceforge.net -// -// -// This example draws a simple scene that can be re-tesselated -// interactively, and illuminated dynamically by an adjustable -// number of moving lights. -// -// -// @author Philippe Decaudin - http://www.antisphere.com -// @date 2006/05/20 -// -// note: TAB=4 -// -// Compilation: -// http://www.antisphere.com/Wiki/tools:anttweakbar:examples#twadvanced1 -// -// --------------------------------------------------------------------------- - -#include - -#define GLFW_DLL // use GLFW as a dynamically linked library -#include "glfw.h" - -#include -#include -#ifndef _WIN32 -# define _snprintf snprintf -#endif -const float FLOAT_2PI = 6.283185307f; // 2*PI - - -// Light structure: embed light parameters -struct Light -{ - bool Active; // light On or Off - float Pos[4]; // light position (in homogeneous coordinates, ie. Pos[4]=1) - float Color[4]; // light color (no alpha, ie. Color[4]=1) - float Radius; // radius of the light influence area - float Dist0, Angle0, Height0, Speed0; // light initial cylindrical coordinates and speed - char Name[4]; // light short name (will be named "1", "2", "3",...) - enum AnimMode { ANIM_FIXED, ANIM_BOUNCE, ANIM_ROTATE, ANIM_COMBINED }; - AnimMode Animation; // light animation mode -}; - - -// Class that describes the scene and its methods -class Scene -{ -public: - bool Wireframe; // draw scene in wireframe or filled - int Subdiv; // number of subdivisions used to tesselate the scene - int NumLights; // number of dynamic lights - float BgColor0[3], BgColor1[3]; // top and bottom background colors - float Ambient; // scene ambient factor - float Reflection; // ground plane reflection factor (0=no reflection, 1=full reflection) - float RotYAngle; // rotation angle of the scene around its Y axis (in degree) - enum RotMode { ROT_OFF, ROT_CW, ROT_CCW }; - RotMode Rotation; // scene rotation mode (off, clockwise, counter-clockwise) - - Scene(); // constructor - ~Scene(); // destructor - void Init(bool changeLightPos); // (re)intialize the scene - void Draw(); // draw scene - void Update(float time); // move lights - -private: - void CreateBar(); // create a tweak bar for lights - // Some drawing subroutines - void DrawSubdivPlaneY(float xMin, float xMax, float y, float zMin, float zMax, int xSubdiv, int zSubdiv); - void DrawSubdivCylinderY(float xCenter, float yBottom, float zCenter, float height, float radiusBottom, float radiusTop, int sideSubdiv, int ySubdiv); - void DrawSubdivHaloZ(float x, float y, float z, float radius, int subdiv); - void DrawHalos(bool reflected); - - GLuint objList, groundList, haloList; // OpenGL display list IDs - int maxLights; // maximum number of dynamic lights allowed by the graphic card - Light * lights; // array of lights - TwBar * lightsBar; // pointer to the tweak bar for lights created by CreateBar() -}; - - -// Constructor -Scene::Scene() -{ - // Set scene members. - // The scene will be created by Scene::Init( ) - Wireframe = false; - Subdiv = 20; - NumLights = 0; - BgColor0[0] = 0.9f; - BgColor0[1] = 0.0f; - BgColor0[2] = 0.0f; - BgColor1[0] = 0.6f; - BgColor1[1] = 0.6f; - BgColor1[2] = 0.6f; - Ambient = 0.3f; - Reflection = 0.5f; - RotYAngle = 0; - Rotation = ROT_CCW; - objList = 0; - groundList = 0; - haloList = 0; - maxLights = 0; - lights = NULL; - lightsBar = NULL; -} - - -// Destructor -Scene::~Scene() -{ - // delete all lights - if( lights ) - delete[] lights; -} - - -// Create the scene, and (re)initialize lights if changeLights is true -void Scene::Init(bool changeLights) -{ - // Get the max number of lights allowed by the graphic card - glGetIntegerv(GL_MAX_LIGHTS, &maxLights); - if( maxLights>16 ) - maxLights = 16; - - // Create the lights array - if( lights==NULL && maxLights>0 ) - { - lights = new Light[maxLights]; - NumLights = maxLights/2; // default number of lights - if( NumLights==0 ) - NumLights = 1; - changeLights = true; // force lights initialization - - // Create a tweak bar for lights - CreateBar(); - } - - // (Re)initialize lights if needed (uses random values) - if( changeLights ) - for(int i=0; ilights[i].Color[1]) ? 1.0f-lights[i].Color[1] : 1.0f-lights[i].Color[0]; - lights[i].Color[3] = 1; - lights[i].Active = true; - } - - // Initialize some OpenGL states - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glEnable(GL_DEPTH_TEST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_LIGHTING); - glEnable(GL_CULL_FACE); - glEnable(GL_NORMALIZE); - glEnable(GL_COLOR_MATERIAL); - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); - - // Create objects display list using the current Subdiv parameter to control the tesselation - if( objList>0 ) - glDeleteLists(objList, 1); // delete previously created display list - objList = glGenLists(1); - glNewList(objList, GL_COMPILE); - DrawSubdivCylinderY(-0.9f, 0, -0.9f, 1.4f, 0.15f, 0.12f, Subdiv/2+8, Subdiv); - DrawSubdivCylinderY(+0.9f, 0, -0.9f, 1.4f, 0.15f, 0.12f, Subdiv/2+8, Subdiv); - DrawSubdivCylinderY(+0.9f, 0, +0.9f, 1.4f, 0.15f, 0.12f, Subdiv/2+8, Subdiv); - DrawSubdivCylinderY(-0.9f, 0, +0.9f, 1.4f, 0.15f, 0.12f, Subdiv/2+8, Subdiv); - DrawSubdivCylinderY(0, 0, 0, 0.4f, 0.5f, 0.3f, Subdiv+16, Subdiv/8+1); - DrawSubdivCylinderY(0, 0.4f, 0, 0.05f, 0.3f, 0.0f, Subdiv+16, Subdiv/16+1); - glEndList(); - - // Create ground display list - if( groundList>0 ) - glDeleteLists(groundList, 1); // delete previously created display list - groundList = glGenLists(1); - glNewList(groundList, GL_COMPILE); - DrawSubdivPlaneY(-1.2f, 1.2f, 0, -1.2f, 1.2f, (3*Subdiv)/2, (3*Subdiv)/2); - glEndList(); - - // Create display list to draw light halos - if( haloList>0 ) - glDeleteLists(haloList, 1); // delete previously created display list - haloList = glGenLists(1); - glNewList(haloList, GL_COMPILE); - DrawSubdivHaloZ(0, 0, 0, 1, 32); - glEndList(); -} - - -// Callback function associated to the 'Change lights' button of the lights tweak bar. -void TW_CALL ReinitCB(void *clientData) -{ - Scene *scene = static_cast(clientData); // scene pointer is stored in clientData - scene->Init(true); // re-initialize the scene -} - - -// Create a tweak bar for lights. -// New enum type and struct type are defined and used by this bar. -void Scene::CreateBar() -{ - // Create a new tweak bar and change its label - lightsBar = TwNewBar("Lights"); - TwDefine(" Lights label='Lights TweakBar' "); - - // Add a variable of type int to control the number of lights - TwAddVarRW(lightsBar, "NumLights", TW_TYPE_INT32, &NumLights, " label='Number of lights' keyIncr=l keyDecr=L "); - // Set the NumLights min value (=0) and max value (depends on the user graphic card) - char def[256]; - _snprintf(def, 255, "Lights/NumLights min=0 max=%d", maxLights); - TwDefine(def); // min and max are defined using a defintion string - - // Add a button to re-initialize the lights; this button calls the ReinitCB callback function - TwAddButton(lightsBar, "Reinit", ReinitCB, this, " label='Change lights' key=RETURN "); - - // Define a new enum type for the tweak bar - TwEnumVal modeEV[] = // array used to describe the Scene::AnimMode enum values - { - { Light::ANIM_FIXED, "Fixed" }, - { Light::ANIM_BOUNCE, "Bounce" }, - { Light::ANIM_ROTATE, "Rotate" }, - { Light::ANIM_COMBINED, "Combined" } - }; - TwType modeType = TwDefineEnum("Mode", modeEV, 4); // create a new TwType associated to the enum defined by the modeEV array - - // Define a new struct type: light variables are embeded in this structure - TwStructMember lightMembers[] = // array used to describe tweakable variables of the Light structure - { - { "Active", TW_TYPE_BOOLCPP, offsetof(Light, Active), "" }, // Light::Active is a C++ boolean value - { "Color", TW_TYPE_COLOR4F, offsetof(Light, Color), "noalpha" }, // Light::Color is represented by 4 floats, but alpha channel should be ignored - { "Radius", TW_TYPE_FLOAT, offsetof(Light, Radius), "min=0 max=4 step=0.02" }, - { "Animation", modeType, offsetof(Light, Animation), "" }, // use the enum 'modeType' created before to tweak the Light::Animation variable - { "Speed", TW_TYPE_FLOAT, offsetof(Light, Speed0), "readonly" } // Light::Speed is made read-only - }; - TwType lightType = TwDefineStruct("Light", lightMembers, 5, sizeof(Light), NULL, NULL); // create a new TwType associated to the struct defined by the lightMembers array - - // Use the newly created 'lightType' to add variables associated with lights - for(int i=0; i