├── AntTweakBar ├── AntPerfTimer.h ├── AntTweakBar.h ├── AntTweakBar.rc ├── LoadOGL.cpp ├── LoadOGL.h ├── LoadOGLCore.cpp ├── LoadOGLCore.h ├── Makefile ├── Makefile.osx ├── MiniGLFW.h ├── MiniGLUT.h ├── MiniSDL12.h ├── MiniSDL13.h ├── MiniSFML16.h ├── TwBar.cpp ├── TwBar.h ├── TwColors.cpp ├── TwColors.h ├── TwEventGLFW.c ├── TwEventGLUT.c ├── TwEventSDL.c ├── TwEventSDL12.c ├── TwEventSDL13.c ├── TwEventSFML.cpp ├── TwEventWin.c ├── TwFonts.cpp ├── TwFonts.h ├── TwGraph.h ├── TwMgr.cpp ├── TwMgr.h ├── TwOpenGL.cpp ├── TwOpenGL.h ├── TwOpenGLCore.cpp ├── TwOpenGLCore.h ├── TwPrecomp.cpp ├── TwPrecomp.h ├── res │ ├── FontChars.txt │ ├── FontLargeAA.pgm │ ├── FontNormal.pgm │ ├── FontNormalAA.pgm │ ├── FontSmall.pgm │ ├── TwXCursors.h │ ├── cur00000.cur │ ├── cur00001.cur │ ├── cur00002.cur │ ├── cur00003.cur │ ├── cur00004.cur │ ├── cur00005.cur │ ├── cur00006.cur │ ├── cur00007.cur │ ├── cur00008.cur │ ├── cur00009.cur │ ├── cur00010.cur │ ├── cur00011.cur │ ├── cur00012.cur │ ├── cur00013.cur │ ├── curs00.pbm │ ├── curs01.pbm │ ├── curs02.pbm │ ├── curs03.pbm │ ├── curs04.pbm │ ├── curs05.pbm │ ├── curs06.pbm │ ├── curs07.pbm │ ├── curs08.pbm │ ├── curs09.pbm │ ├── curs10.pbm │ ├── curs11.pbm │ ├── curs12.pbm │ ├── curs13.pbm │ ├── mask00.pbm │ ├── mask01.pbm │ ├── mask02.pbm │ ├── mask03.pbm │ ├── mask04.pbm │ ├── mask05.pbm │ ├── mask06.pbm │ ├── mask07.pbm │ ├── mask08.pbm │ ├── mask09.pbm │ ├── mask10.pbm │ ├── mask11.pbm │ ├── mask12.pbm │ └── mask13.pbm └── resource.h ├── Cover ├── Images │ ├── City.jpg │ └── Distorted.jpg ├── PostTess │ ├── PostTess.c │ ├── PostTess.glsl │ ├── SConstruct │ ├── Utility.h │ ├── WinGdi.cpp │ ├── glew.c │ ├── glew.h │ ├── pez.c │ ├── pez.h │ └── vmath.h ├── PreTess │ ├── City.dat │ ├── City.jpg │ ├── City.ptc │ ├── PreTess.c │ ├── PreTess.glsl │ ├── SConstruct │ ├── glew.c │ ├── glew.h │ ├── pez.c │ ├── pez.h │ └── vmath.h └── Python │ ├── AmbientOcclusion.sl │ ├── City.py │ ├── City.xml │ ├── Five.xml │ ├── LSystem.py │ ├── Panorama.py │ ├── PanoramicDistortion.sl │ └── euclid.py ├── Gumbo ├── elephant.png ├── gumbo.ctm ├── gumbo.py ├── gumbo.rib ├── gumbo.vbo ├── normals.py ├── pyctm │ ├── ctminfo.py │ ├── openctm.dll │ └── openctm.py ├── pyeuclid │ ├── euclid.py │ └── setup.py └── pymesh │ ├── blob.py │ ├── export_ctm.py │ ├── import_ctm.py │ ├── parametric.py │ ├── patch.py │ ├── platform_open.py │ ├── polyhedra.py │ ├── rules_surface.py │ ├── tubes.py │ └── weld.py ├── README.md ├── Teapot ├── SConstruct ├── Surface.glsl ├── Teapot.c ├── glew.c ├── glew.h ├── pez.c ├── pez.h ├── teapot.h └── vmath.h └── Windows ├── Insights.sln ├── PostTess.vcxproj ├── PostTess.vcxproj.filters ├── PreTess.vcxproj ├── PreTess.vcxproj.filters ├── Teapot.vcxproj └── Teapot.vcxproj.filters /AntTweakBar/AntPerfTimer.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file AntPerfTimer.h 4 | // @brief A performance (precision) timer for benchs 5 | // @author Philippe Decaudin - http://www.antisphere.com 6 | // @license This file is part of the AntTweakBar library. 7 | // For conditions of distribution and use, see License.txt 8 | // 9 | // note: No cpp file is needed, everything is defined in this header 10 | // 11 | // --------------------------------------------------------------------------- 12 | 13 | #if !defined ANT_PERF_TIMER_INCLUDED 14 | #define ANT_PERF_TIMER_INCLUDED 15 | 16 | #ifndef __cplusplus 17 | # error This is a C++ header 18 | #endif // __cplusplus 19 | 20 | 21 | #if defined(WIN32) || defined(WIN64) || defined(_WIN32) || defined(_WIN64) 22 | 23 | #include 24 | #include 25 | 26 | struct PerfTimer 27 | { 28 | inline PerfTimer() { if( !QueryPerformanceFrequency(&Freq) ) MessageBox(NULL, _T("Precision timer not supported"), _T("Problem"), MB_ICONEXCLAMATION); Reset(); } 29 | inline void Reset() { QueryPerformanceCounter(&Start); } 30 | inline double GetTime() { if( QueryPerformanceCounter(&End) ) return ((double)End.QuadPart - (double)Start.QuadPart)/((double)Freq.QuadPart); else return 0; } 31 | protected: 32 | LARGE_INTEGER Start, End, Freq; 33 | }; 34 | 35 | #else // !_WIN (-> LINUX) 36 | 37 | #include 38 | #include 39 | 40 | struct PerfTimer 41 | { 42 | inline PerfTimer() { Reset(); } 43 | inline void Reset() { gettimeofday(&Start, &TZ); } 44 | inline double GetTime() { gettimeofday(&End,&TZ); 45 | double t1 = (double)Start.tv_sec + (double)Start.tv_usec/(1000*1000); 46 | double t2 = (double)End.tv_sec + (double)End.tv_usec/(1000*1000); 47 | return t2-t1; } 48 | protected: 49 | struct timeval Start, End; 50 | struct timezone TZ; 51 | }; 52 | 53 | #endif // _WIN 54 | 55 | 56 | #endif // ANT_PERF_TIMER_INCLUDED 57 | -------------------------------------------------------------------------------- /AntTweakBar/AntTweakBar.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/AntTweakBar.rc -------------------------------------------------------------------------------- /AntTweakBar/Makefile: -------------------------------------------------------------------------------- 1 | ####### Compiler, tools and options 2 | 3 | #---- LINUX 4 | SO_EXT = .so 5 | SO_VERSION = 1 6 | 7 | #---- Release 8 | CXXCFG = -O3 9 | LFLAGS = 10 | OUT_DIR = ../lib 11 | #---- Debug 12 | #CXXCFG = -g -D_DEBUG 13 | #LFLAGS = 14 | #OUT_DIR = ../lib/debug 15 | 16 | 17 | CXX = gcc 18 | CXXFLAGS = $(CXXCFG) -Wall -fPIC -fno-strict-aliasing -D_UNIX -D__PLACEMENT_NEW_INLINE 19 | INCPATH = -I../include -I/usr/local/include -I/usr/X11R6/include -I/usr/include 20 | LINK = gcc 21 | #LIBS = -L/usr/X11R6/lib -L. -lglfw -lGL -lGLU -lX11 -lXxf86vm -lXext -lpthread -lm 22 | #LIBS = -L/usr/X11R6/lib -lGL -lX11 -lXxf86vm -lXext -lpthread -lm 23 | LIBS = 24 | AR = ar cqs 25 | RANLIB = 26 | TAR = tar -cf 27 | GZIP = gzip -9f 28 | COPY = cp -f 29 | COPY_FILE = $(COPY) -p 30 | COPY_DIR = $(COPY) -pR 31 | DEL_FILE = rm -f 32 | SYMLINK = ln -sf 33 | DEL_DIR = rmdir 34 | MOVE = mv 35 | NO_STDERR = 2> /dev/null 36 | 37 | 38 | ####### Files 39 | 40 | 41 | # name of the application: 42 | TARGET = AntTweakBar 43 | 44 | # source files without extension: 45 | SRC_FILES = TwColors.cpp TwFonts.cpp TwOpenGL.cpp TwBar.cpp TwMgr.cpp TwPrecomp.cpp LoadOGL.cpp TwEventGLFW.c TwEventGLUT.c TwEventSDL.c TwEventSDL12.c TwEventSDL13.c TwEventSFML.cpp 46 | 47 | # build object list from source files 48 | OBJS_1 = $(SRC_FILES:.c=.o) 49 | OBJS = $(OBJS_1:.cpp=.o) 50 | 51 | 52 | ####### Build rules 53 | 54 | 55 | #first: depend all 56 | first: all 57 | 58 | all: Makefile $(TARGET) 59 | 60 | # append dependencies to this Makefile 61 | #depend: 62 | # @echo "==== Make dependencies =====" 63 | # makedepend -Y 64 | # makedepend -a -Y -- $(CXXFLAGS) $(INCPATH) -- $(SRC_FILES) $(NO_STDERR) 65 | 66 | $(TARGET): $(OBJS) 67 | @echo "===== Link $@ =====" 68 | $(LINK) $(LFLAGS) -shared -Wl,-soname,lib$(TARGET)$(SO_EXT).$(SO_VERSION) -o $(OUT_DIR)/lib$(TARGET)$(SO_EXT) $(OBJS) $(LIBS) 69 | $(SYMLINK) $(OUT_DIR)/lib$(TARGET)$(SO_EXT) $(OUT_DIR)/lib$(TARGET)$(SO_EXT).$(SO_VERSION) 70 | 71 | .cpp.o: 72 | @echo "===== Compile $< =====" 73 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< 74 | 75 | .c.o: 76 | @echo "===== Compile $< =====" 77 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< 78 | 79 | clean: 80 | @echo "===== Clean =====" 81 | -$(DEL_FILE) *.o 82 | -$(DEL_FILE) *~ core *.core *.stackdump 83 | 84 | 85 | ####### DEPENDENCIES 86 | 87 | TwColors.o: TwPrecomp.h TwColors.h 88 | TwFonts.o: TwPrecomp.h ../include/AntTweakBar.h TwFonts.h TwMgr.h TwColors.h TwGraph.h AntPerfTimer.h 89 | TwOpenGL.o: TwPrecomp.h ../include/AntTweakBar.h TwOpenGL.h LoadOGL.h TwGraph.h TwColors.h TwFonts.h TwMgr.h AntPerfTimer.h 90 | TwBar.o: TwPrecomp.h ../include/AntTweakBar.h TwBar.h TwMgr.h TwColors.h TwFonts.h TwGraph.h AntPerfTimer.h 91 | TwMgr.o: TwPrecomp.h ../include/AntTweakBar.h TwMgr.h TwColors.h TwFonts.h TwGraph.h AntPerfTimer.h TwBar.h TwOpenGL.h res/TwXCursors.h 92 | TwPrecomp.o: TwPrecomp.h 93 | LoadOGL.o: TwPrecomp.h LoadOGL.h 94 | TwEventGLFW.o: ../include/AntTweakBar.h MiniGLFW.h 95 | TwEventGLUT.o: ../include/AntTweakBar.h MiniGLUT.h 96 | TwEventSDL.o: ../include/AntTweakBar.h 97 | TwEventSDL12.o: ../include/AntTweakBar.h MiniSDL12.h 98 | TwEventSDL13.o: ../include/AntTweakBar.h MiniSDL13.h 99 | -------------------------------------------------------------------------------- /AntTweakBar/Makefile.osx: -------------------------------------------------------------------------------- 1 | ####### Compiler, tools and options 2 | 3 | SO_EXT = .dylib 4 | 5 | #---- Release 6 | CXXCFG = -O3 -arch i386 -arch x86_64 7 | LFLAGS = -arch i386 -arch x86_64 8 | OUT_DIR = ../lib 9 | #---- Debug 10 | #CXXCFG = -g -D_DEBUG -arch i386 -arch x86_64 11 | #LFLAGS = -arch i386 -arch x86_64 12 | #OUT_DIR = ../lib/debug 13 | 14 | #BASE = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks 15 | CXX = gcc 16 | CXXFLAGS = $(CXXCFG) -Wall -fPIC -fno-strict-aliasing -D_MACOSX -ObjC++ -D__PLACEMENT_NEW_INLINE 17 | INCPATH = -I../include -I/usr/local/include -I/usr/X11R6/include -I/usr/include 18 | #-I$(BASE)/OpenGL.framework/Headers/ -I$(BASE)/GLUT.framework/Headers/ -I$(BASE)/AppKit.framework/Headers/ 19 | LINK = gcc 20 | #LIBS = -L/usr/X11R6/lib -L. -lglfw -lGL -lGLU -lX11 -lXxf86vm -lXext -lpthread -lm 21 | #LIBS = -L/usr/X11R6/lib -lGL -lX11 -lXxf86vm -lXext -lpthread -lm 22 | LIBS = -framework OpenGL -framework GLUT -framework AppKit 23 | AR = ar cqs 24 | RANLIB = 25 | TAR = tar -cf 26 | GZIP = gzip -9f 27 | COPY = cp -f 28 | COPY_FILE = $(COPY) -p 29 | COPY_DIR = $(COPY) -pR 30 | DEL_FILE = rm -f 31 | SYMLINK = ln -sf 32 | DEL_DIR = rmdir 33 | MOVE = mv 34 | NO_STDERR = 2> /dev/null 35 | 36 | 37 | ####### Files 38 | 39 | 40 | # name of the application: 41 | TARGET = AntTweakBar 42 | 43 | # source files without extension: 44 | SRC_FILES = TwColors.cpp TwFonts.cpp TwOpenGL.cpp TwBar.cpp TwMgr.cpp TwPrecomp.cpp LoadOGL.cpp TwEventGLFW.c TwEventGLUT.c TwEventSDL.c TwEventSDL12.c TwEventSDL13.c TwEventSFML.cpp 45 | 46 | # build object list from source files 47 | OBJS_1 = $(SRC_FILES:.c=.o) 48 | OBJS = $(OBJS_1:.cpp=.o) 49 | 50 | 51 | ####### Build rules 52 | 53 | 54 | #first: depend all 55 | first: all 56 | 57 | all: Makefile $(TARGET) 58 | 59 | # append dependencies to this Makefile 60 | #depend: 61 | # @echo "==== Make dependencies =====" 62 | # makedepend -Y 63 | # makedepend -a -Y -- $(CXXFLAGS) $(INCPATH) -- $(SRC_FILES) $(NO_STDERR) 64 | 65 | $(TARGET): $(OBJS) 66 | @echo "===== Link $@ =====" 67 | $(LINK) $(LFLAGS) -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o $(OUT_DIR)/lib$(TARGET)$(SO_EXT) $(OBJS) $(LIBS) 68 | 69 | .cpp.o: 70 | @echo "===== Compile $< =====" 71 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< 72 | 73 | .c.o: 74 | @echo "===== Compile $< =====" 75 | $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< 76 | 77 | clean: 78 | @echo "===== Clean =====" 79 | -$(DEL_FILE) *.o 80 | -$(DEL_FILE) *~ core *.core *.stackdump 81 | 82 | 83 | ####### DEPENDENCIES 84 | 85 | TwColors.o: TwPrecomp.h TwColors.h 86 | TwFonts.o: TwPrecomp.h ../include/AntTweakBar.h TwFonts.h TwMgr.h TwColors.h TwGraph.h AntPerfTimer.h 87 | TwOpenGL.o: TwPrecomp.h ../include/AntTweakBar.h TwOpenGL.h LoadOGL.h TwGraph.h TwColors.h TwFonts.h TwMgr.h AntPerfTimer.h 88 | TwBar.o: TwPrecomp.h ../include/AntTweakBar.h TwBar.h TwMgr.h TwColors.h TwFonts.h TwGraph.h AntPerfTimer.h 89 | TwMgr.o: TwPrecomp.h ../include/AntTweakBar.h TwMgr.h TwColors.h TwFonts.h TwGraph.h AntPerfTimer.h TwBar.h TwOpenGL.h res/TwXCursors.h 90 | TwPrecomp.o: TwPrecomp.h 91 | LoadOGL.o: TwPrecomp.h LoadOGL.h 92 | TwEventGLFW.o: ../include/AntTweakBar.h MiniGLFW.h 93 | TwEventGLUT.o: ../include/AntTweakBar.h MiniGLUT.h 94 | TwEventSDL.o: ../include/AntTweakBar.h 95 | TwEventSDL12.o: ../include/AntTweakBar.h MiniSDL12.h 96 | TwEventSDL13.o: ../include/AntTweakBar.h MiniSDL13.h 97 | -------------------------------------------------------------------------------- /AntTweakBar/MiniGLFW.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file MiniGLFW.h 4 | // @brief A subset of GLFW definitions needed to compile helper functions 5 | // implemented in TwEventGLFW.c 6 | // 7 | // notes: - Private header 8 | // - AntTweakBar.dll does not need to link with GLFW, 9 | // it just needs some definitions for its helper functions. 10 | // - This header is provided to avoid the need of having GLFW 11 | // installed to recompile AntTweakBar. 12 | // - Do not use this header in your own programs, better use the 13 | // glfw.h header from the actual GLFW library SDK : 14 | // http://glfw.sourceforge.net/ 15 | // 16 | // --------------------------------------------------------------------------- 17 | 18 | #if !defined MINI_GLFW_INCLUDED 19 | #define MINI_GLFW_INCLUDED 20 | 21 | #ifdef __cplusplus 22 | extern "C" { 23 | #endif 24 | 25 | 26 | // Key and button state/action definitions 27 | #define GLFW_RELEASE 0 28 | #define GLFW_PRESS 1 29 | 30 | // Keyboard key definitions 31 | #define GLFW_KEY_UNKNOWN -1 32 | #define GLFW_KEY_SPACE 32 33 | #define GLFW_KEY_SPECIAL 256 34 | #define GLFW_KEY_ESC (GLFW_KEY_SPECIAL+1) 35 | #define GLFW_KEY_F1 (GLFW_KEY_SPECIAL+2) 36 | #define GLFW_KEY_F2 (GLFW_KEY_SPECIAL+3) 37 | #define GLFW_KEY_F3 (GLFW_KEY_SPECIAL+4) 38 | #define GLFW_KEY_F4 (GLFW_KEY_SPECIAL+5) 39 | #define GLFW_KEY_F5 (GLFW_KEY_SPECIAL+6) 40 | #define GLFW_KEY_F6 (GLFW_KEY_SPECIAL+7) 41 | #define GLFW_KEY_F7 (GLFW_KEY_SPECIAL+8) 42 | #define GLFW_KEY_F8 (GLFW_KEY_SPECIAL+9) 43 | #define GLFW_KEY_F9 (GLFW_KEY_SPECIAL+10) 44 | #define GLFW_KEY_F10 (GLFW_KEY_SPECIAL+11) 45 | #define GLFW_KEY_F11 (GLFW_KEY_SPECIAL+12) 46 | #define GLFW_KEY_F12 (GLFW_KEY_SPECIAL+13) 47 | #define GLFW_KEY_F13 (GLFW_KEY_SPECIAL+14) 48 | #define GLFW_KEY_F14 (GLFW_KEY_SPECIAL+15) 49 | #define GLFW_KEY_F15 (GLFW_KEY_SPECIAL+16) 50 | #define GLFW_KEY_F16 (GLFW_KEY_SPECIAL+17) 51 | #define GLFW_KEY_F17 (GLFW_KEY_SPECIAL+18) 52 | #define GLFW_KEY_F18 (GLFW_KEY_SPECIAL+19) 53 | #define GLFW_KEY_F19 (GLFW_KEY_SPECIAL+20) 54 | #define GLFW_KEY_F20 (GLFW_KEY_SPECIAL+21) 55 | #define GLFW_KEY_F21 (GLFW_KEY_SPECIAL+22) 56 | #define GLFW_KEY_F22 (GLFW_KEY_SPECIAL+23) 57 | #define GLFW_KEY_F23 (GLFW_KEY_SPECIAL+24) 58 | #define GLFW_KEY_F24 (GLFW_KEY_SPECIAL+25) 59 | #define GLFW_KEY_F25 (GLFW_KEY_SPECIAL+26) 60 | #define GLFW_KEY_UP (GLFW_KEY_SPECIAL+27) 61 | #define GLFW_KEY_DOWN (GLFW_KEY_SPECIAL+28) 62 | #define GLFW_KEY_LEFT (GLFW_KEY_SPECIAL+29) 63 | #define GLFW_KEY_RIGHT (GLFW_KEY_SPECIAL+30) 64 | #define GLFW_KEY_LSHIFT (GLFW_KEY_SPECIAL+31) 65 | #define GLFW_KEY_RSHIFT (GLFW_KEY_SPECIAL+32) 66 | #define GLFW_KEY_LCTRL (GLFW_KEY_SPECIAL+33) 67 | #define GLFW_KEY_RCTRL (GLFW_KEY_SPECIAL+34) 68 | #define GLFW_KEY_LALT (GLFW_KEY_SPECIAL+35) 69 | #define GLFW_KEY_RALT (GLFW_KEY_SPECIAL+36) 70 | #define GLFW_KEY_TAB (GLFW_KEY_SPECIAL+37) 71 | #define GLFW_KEY_ENTER (GLFW_KEY_SPECIAL+38) 72 | #define GLFW_KEY_BACKSPACE (GLFW_KEY_SPECIAL+39) 73 | #define GLFW_KEY_INSERT (GLFW_KEY_SPECIAL+40) 74 | #define GLFW_KEY_DEL (GLFW_KEY_SPECIAL+41) 75 | #define GLFW_KEY_PAGEUP (GLFW_KEY_SPECIAL+42) 76 | #define GLFW_KEY_PAGEDOWN (GLFW_KEY_SPECIAL+43) 77 | #define GLFW_KEY_HOME (GLFW_KEY_SPECIAL+44) 78 | #define GLFW_KEY_END (GLFW_KEY_SPECIAL+45) 79 | #define GLFW_KEY_KP_0 (GLFW_KEY_SPECIAL+46) 80 | #define GLFW_KEY_KP_1 (GLFW_KEY_SPECIAL+47) 81 | #define GLFW_KEY_KP_2 (GLFW_KEY_SPECIAL+48) 82 | #define GLFW_KEY_KP_3 (GLFW_KEY_SPECIAL+49) 83 | #define GLFW_KEY_KP_4 (GLFW_KEY_SPECIAL+50) 84 | #define GLFW_KEY_KP_5 (GLFW_KEY_SPECIAL+51) 85 | #define GLFW_KEY_KP_6 (GLFW_KEY_SPECIAL+52) 86 | #define GLFW_KEY_KP_7 (GLFW_KEY_SPECIAL+53) 87 | #define GLFW_KEY_KP_8 (GLFW_KEY_SPECIAL+54) 88 | #define GLFW_KEY_KP_9 (GLFW_KEY_SPECIAL+55) 89 | #define GLFW_KEY_KP_DIVIDE (GLFW_KEY_SPECIAL+56) 90 | #define GLFW_KEY_KP_MULTIPLY (GLFW_KEY_SPECIAL+57) 91 | #define GLFW_KEY_KP_SUBTRACT (GLFW_KEY_SPECIAL+58) 92 | #define GLFW_KEY_KP_ADD (GLFW_KEY_SPECIAL+59) 93 | #define GLFW_KEY_KP_DECIMAL (GLFW_KEY_SPECIAL+60) 94 | #define GLFW_KEY_KP_EQUAL (GLFW_KEY_SPECIAL+61) 95 | #define GLFW_KEY_KP_ENTER (GLFW_KEY_SPECIAL+62) 96 | #define GLFW_KEY_LAST GLFW_KEY_KP_ENTER 97 | 98 | // Mouse button 99 | #define GLFW_MOUSE_BUTTON_LEFT 0 100 | #define GLFW_MOUSE_BUTTON_RIGHT 1 101 | #define GLFW_MOUSE_BUTTON_MIDDLE 2 102 | 103 | 104 | #ifdef __cplusplus 105 | } 106 | #endif 107 | 108 | #endif // !defined MINI_GLFW_INCLUDED 109 | 110 | -------------------------------------------------------------------------------- /AntTweakBar/MiniGLUT.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file MiniGLUT.h 4 | // @brief A subset of GLUT definitions needed to compile helper functions 5 | // implemented in TwEventGLUT.c 6 | // 7 | // notes: - Private header 8 | // - AntTweakBar.dll does not need to link with GLUT, 9 | // it just needs some definitions for its helper functions. 10 | // - This header is provided to avoid the need of having GLUT 11 | // installed to recompile AntTweakBar. 12 | // - Do not use this header in your own programs, better use the 13 | // GLUT.h header from the actual GLUT library SDK : 14 | // http://opengl.org/resources/libraries/glut 15 | // 16 | // --------------------------------------------------------------------------- 17 | 18 | #if !defined MINI_GLUT_INCLUDED 19 | #define MINI_GLUT_INCLUDED 20 | 21 | #if defined(_WIN32) || defined(_WIN64) 22 | # define WIN32_LEAN_AND_MEAN 23 | # include // needed by gl.h 24 | # define GLUT_CALL __stdcall 25 | # define GLUT_CALLBACK __cdecl 26 | # define GLUT_API __declspec(dllimport) 27 | #else 28 | # define GLUT_CALL 29 | # define GLUT_CALLBACK 30 | # define GLUT_API extern 31 | #endif 32 | 33 | #if defined(_MACOSX) 34 | # include 35 | # include 36 | #else 37 | # include // must be included after windows.h 38 | # include 39 | #endif 40 | 41 | #ifdef __cplusplus 42 | extern "C" { 43 | #endif 44 | 45 | 46 | // Mouse buttons 47 | #define GLUT_LEFT_BUTTON 0 48 | #define GLUT_MIDDLE_BUTTON 1 49 | #define GLUT_RIGHT_BUTTON 2 50 | 51 | // Mouse button state 52 | #define GLUT_DOWN 0 53 | #define GLUT_UP 1 54 | 55 | // glutGetModifiers return mask 56 | #define GLUT_ACTIVE_SHIFT 1 57 | #define GLUT_ACTIVE_CTRL 2 58 | #define GLUT_ACTIVE_ALT 4 59 | 60 | // function keys 61 | #define GLUT_KEY_F1 1 62 | #define GLUT_KEY_F2 2 63 | #define GLUT_KEY_F3 3 64 | #define GLUT_KEY_F4 4 65 | #define GLUT_KEY_F5 5 66 | #define GLUT_KEY_F6 6 67 | #define GLUT_KEY_F7 7 68 | #define GLUT_KEY_F8 8 69 | #define GLUT_KEY_F9 9 70 | #define GLUT_KEY_F10 10 71 | #define GLUT_KEY_F11 11 72 | #define GLUT_KEY_F12 12 73 | 74 | // directional keys 75 | #define GLUT_KEY_LEFT 100 76 | #define GLUT_KEY_UP 101 77 | #define GLUT_KEY_RIGHT 102 78 | #define GLUT_KEY_DOWN 103 79 | #define GLUT_KEY_PAGE_UP 104 80 | #define GLUT_KEY_PAGE_DOWN 105 81 | #define GLUT_KEY_HOME 106 82 | #define GLUT_KEY_END 107 83 | #define GLUT_KEY_INSERT 108 84 | 85 | // display mode bit masks 86 | #define GLUT_RGB 0 87 | #define GLUT_RGBA GLUT_RGB 88 | #define GLUT_INDEX 1 89 | #define GLUT_SINGLE 0 90 | #define GLUT_DOUBLE 2 91 | #define GLUT_ACCUM 4 92 | #define GLUT_ALPHA 8 93 | #define GLUT_DEPTH 16 94 | #define GLUT_STENCIL 32 95 | 96 | // timer 97 | #define GLUT_ELAPSED_TIME ((GLenum) 700) 98 | 99 | 100 | // functions subset 101 | GLUT_API void GLUT_CALL glutInit(int *argcp, char **argv); 102 | GLUT_API void GLUT_CALL glutInitDisplayMode(unsigned int mode); 103 | GLUT_API int GLUT_CALL glutCreateWindow(const char *title); 104 | GLUT_API int GLUT_CALL glutGetWindow(void); 105 | GLUT_API void GLUT_CALL glutSetWindow(int win); 106 | GLUT_API int GLUT_CALL glutCreateSubWindow(int win, int x, int y, int width, int height); 107 | GLUT_API int GLUT_CALL glutGet(GLenum type); 108 | GLUT_API void GLUT_CALL glutSwapBuffers(); 109 | GLUT_API void GLUT_CALL glutPostRedisplay(); 110 | GLUT_API void GLUT_CALL glutInitWindowPosition(int x, int y); 111 | GLUT_API void GLUT_CALL glutInitWindowSize(int width, int height); 112 | GLUT_API void GLUT_CALL glutPositionWindow(int x, int y); 113 | GLUT_API void GLUT_CALL glutReshapeWindow(int width, int height); 114 | GLUT_API void GLUT_CALL glutMainLoop(); 115 | GLUT_API int GLUT_CALL glutCreateMenu(void (GLUT_CALLBACK *func)(int)); 116 | GLUT_API void GLUT_CALL glutDisplayFunc(void (GLUT_CALLBACK *func)(void)); 117 | GLUT_API void GLUT_CALL glutReshapeFunc(void (GLUT_CALLBACK *func)(int width, int height)); 118 | GLUT_API void GLUT_CALL glutKeyboardFunc(void (GLUT_CALLBACK *func)(unsigned char key, int x, int y)); 119 | GLUT_API void GLUT_CALL glutMouseFunc(void (GLUT_CALLBACK *func)(int button, int state, int x, int y)); 120 | GLUT_API void GLUT_CALL glutMotionFunc(void (GLUT_CALLBACK *func)(int x, int y)); 121 | GLUT_API void GLUT_CALL glutPassiveMotionFunc(void (GLUT_CALLBACK *func)(int x, int y)); 122 | GLUT_API void GLUT_CALL glutSpecialFunc(void (GLUT_CALLBACK *func)(int key, int x, int y)); 123 | GLUT_API int GLUT_CALL glutGetModifiers(void); 124 | GLUT_API void GLUT_CALL glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings); 125 | GLUT_API void GLUT_CALL glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks); 126 | GLUT_API void GLUT_CALL glutSolidTeapot(GLdouble size); 127 | 128 | // GLUT exit problem workaround (see glut.h) 129 | #if (defined(_WIN32) || defined(_WIN64)) && !defined(GLUT_DISABLE_ATEXIT_HACK) 130 | extern void __cdecl exit(int); 131 | GLUT_API void GLUT_CALL __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)); 132 | static void GLUT_CALL glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); } 133 | #define glutInit glutInit_ATEXIT_HACK 134 | #endif 135 | 136 | 137 | #ifdef __cplusplus 138 | } 139 | #endif 140 | 141 | #endif // !defined MINI_GLUT_INCLUDED 142 | 143 | -------------------------------------------------------------------------------- /AntTweakBar/TwColors.cpp: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwColors.cpp 4 | // @author Philippe Decaudin - http://www.antisphere.com 5 | // @license This file is part of the AntTweakBar library. 6 | // For conditions of distribution and use, see License.txt 7 | // 8 | // --------------------------------------------------------------------------- 9 | 10 | 11 | #include "TwPrecomp.h" 12 | #include "TwColors.h" 13 | 14 | 15 | void ColorRGBToHLSf(float _R, float _G, float _B, float *_Hue, float *_Light, float *_Saturation) 16 | { 17 | // Compute HLS from RGB. The r,g,b triplet is between [0,1], 18 | // hue is between [0,360], light and saturation are [0,1]. 19 | 20 | float rnorm, gnorm, bnorm, minval, maxval, msum, mdiff, r, g, b; 21 | r = g = b = 0; 22 | if(_R>0) r = _R; if(r>1) r = 1; 23 | if(_G>0) g = _G; if(g>1) g = 1; 24 | if(_B>0) b = _B; if(b>1) b = 1; 25 | 26 | minval = r; 27 | if(gmaxval) maxval = g; 31 | if(b>maxval) maxval = b; 32 | 33 | rnorm = gnorm = bnorm = 0; 34 | mdiff = maxval - minval; 35 | msum = maxval + minval; 36 | float l = 0.5f * msum; 37 | if(_Light) 38 | *_Light = l; 39 | if(maxval!=minval) 40 | { 41 | rnorm = (maxval - r)/mdiff; 42 | gnorm = (maxval - g)/mdiff; 43 | bnorm = (maxval - b)/mdiff; 44 | } 45 | else 46 | { 47 | if(_Saturation) 48 | *_Saturation = 0; 49 | if(_Hue) 50 | *_Hue = 0; 51 | return; 52 | } 53 | 54 | if(_Saturation) 55 | { 56 | if(l<0.5f) 57 | *_Saturation = mdiff/msum; 58 | else 59 | *_Saturation = mdiff/(2.0f - msum); 60 | } 61 | 62 | if(_Hue) 63 | { 64 | if(r==maxval) 65 | *_Hue = 60.0f * (6.0f + bnorm - gnorm); 66 | else if(g==maxval) 67 | *_Hue = 60.0f * (2.0f + rnorm - bnorm); 68 | else 69 | *_Hue = 60.0f * (4.0f + gnorm - rnorm); 70 | 71 | if(*_Hue>360.0f) 72 | *_Hue -= 360.0f; 73 | } 74 | } 75 | 76 | 77 | void ColorRGBToHLSi(int _R, int _G, int _B, int *_Hue, int *_Light, int *_Saturation) 78 | { 79 | float h, l, s; 80 | ColorRGBToHLSf((1.0f/255.0f)*float(_R), (1.0f/255.0f)*float(_G), (1.0f/255.0f)*float(_B), &h, &l, &s); 81 | if(_Hue) *_Hue = (int)TClamp(h*(256.0f/360.0f), 0.0f, 255.0f); 82 | if(_Light) *_Light = (int)TClamp(l*256.0f, 0.0f, 255.0f); 83 | if(_Saturation) *_Saturation= (int)TClamp(s*256.0f, 0.0f, 255.0f); 84 | } 85 | 86 | 87 | void ColorHLSToRGBf(float _Hue, float _Light, float _Saturation, float *_R, float *_G, float *_B) 88 | { 89 | // Compute RGB from HLS. The light and saturation are between [0,1] 90 | // and hue is between [0,360]. The returned r,g,b triplet is between [0,1]. 91 | 92 | // a local auxiliary function 93 | struct CLocal 94 | { 95 | static float HLSToRGB(float _Rn1, float _Rn2, float _Huei) 96 | { 97 | float hue = _Huei; 98 | if(hue>360) hue = hue - 360; 99 | if(hue<0) hue = hue + 360; 100 | if(hue<60 ) return _Rn1 + (_Rn2-_Rn1)*hue/60; 101 | if(hue<180) return _Rn2; 102 | if(hue<240) return _Rn1 + (_Rn2-_Rn1)*(240-hue)/60; 103 | return _Rn1; 104 | } 105 | }; 106 | 107 | float rh, rl, rs, rm1, rm2; 108 | rh = rl = rs = 0; 109 | if(_Hue>0) rh = _Hue; if(rh>360) rh = 360; 110 | if(_Light>0) rl = _Light; if(rl>1) rl = 1; 111 | if(_Saturation>0) rs = _Saturation; if(rs>1) rs = 1; 112 | 113 | if(rl<=0.5f) 114 | rm2 = rl*(1.0f + rs); 115 | else 116 | rm2 = rl + rs - rl*rs; 117 | rm1 = 2.0f*rl - rm2; 118 | 119 | if(!rs) 120 | { 121 | if(_R) *_R = rl; 122 | if(_G) *_G = rl; 123 | if(_B) *_B = rl; 124 | } 125 | else 126 | { 127 | if(_R) *_R = CLocal::HLSToRGB(rm1, rm2, rh+120); 128 | if(_G) *_G = CLocal::HLSToRGB(rm1, rm2, rh); 129 | if(_B) *_B = CLocal::HLSToRGB(rm1, rm2, rh-120); 130 | } 131 | } 132 | 133 | 134 | void ColorHLSToRGBi(int _Hue, int _Light, int _Saturation, int *_R, int *_G, int *_B) 135 | { 136 | float r, g, b; 137 | ColorHLSToRGBf((360.0f/255.0f)*float(_Hue), (1.0f/255.0f)*float(_Light), (1.0f/255.0f)*float(_Saturation), &r, &g, &b); 138 | if(_R) *_R = (int)TClamp(r*256.0f, 0.0f, 255.0f); 139 | if(_G) *_G = (int)TClamp(g*256.0f, 0.0f, 255.0f); 140 | if(_B) *_B = (int)TClamp(b*256.0f, 0.0f, 255.0f); 141 | } 142 | 143 | 144 | color32 ColorBlend(color32 _Color1, color32 _Color2, float _S) 145 | { 146 | float a1, r1, g1, b1, a2, r2, g2, b2; 147 | Color32ToARGBf(_Color1, &a1, &r1, &g1, &b1); 148 | Color32ToARGBf(_Color2, &a2, &r2, &g2, &b2); 149 | float t = 1.0f-_S; 150 | return Color32FromARGBf(t*a1+_S*a2, t*r1+_S*r2, t*g1+_S*g2, t*b1+_S*b2); 151 | } 152 | 153 | 154 | -------------------------------------------------------------------------------- /AntTweakBar/TwColors.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwColors.h 4 | // @brief Color conversions 5 | // @author Philippe Decaudin - http://www.antisphere.com 6 | // @license This file is part of the AntTweakBar library. 7 | // For conditions of distribution and use, see License.txt 8 | // 9 | // note: Private header 10 | // 11 | // --------------------------------------------------------------------------- 12 | 13 | 14 | #if !defined ANT_TW_COLORS_INCLUDED 15 | #define ANT_TW_COLORS_INCLUDED 16 | 17 | 18 | // --------------------------------------------------------------------------- 19 | 20 | 21 | typedef unsigned int color32; 22 | 23 | 24 | const color32 COLOR32_BLACK = 0xff000000; // Black 25 | const color32 COLOR32_WHITE = 0xffffffff; // White 26 | const color32 COLOR32_ZERO = 0x00000000; // Zero 27 | const color32 COLOR32_RED = 0xffff0000; // Red 28 | const color32 COLOR32_GREEN = 0xff00ff00; // Green 29 | const color32 COLOR32_BLUE = 0xff0000ff; // Blue 30 | 31 | 32 | template inline const _T& TClamp(const _T& _X, const _T& _Limit1, const _T& _Limit2) 33 | { 34 | if( _Limit1<_Limit2 ) 35 | return (_X<=_Limit1) ? _Limit1 : ( (_X>=_Limit2) ? _Limit2 : _X ); 36 | else 37 | return (_X<=_Limit2) ? _Limit2 : ( (_X>=_Limit1) ? _Limit1 : _X ); 38 | } 39 | 40 | inline color32 Color32FromARGBi(int _A, int _R, int _G, int _B) 41 | { 42 | return (((color32)TClamp(_A, 0, 255))<<24) | (((color32)TClamp(_R, 0, 255))<<16) | (((color32)TClamp(_G, 0, 255))<<8) | ((color32)TClamp(_B, 0, 255)); 43 | } 44 | 45 | inline color32 Color32FromARGBf(float _A, float _R, float _G, float _B) 46 | { 47 | return (((color32)TClamp(_A*256.0f, 0.0f, 255.0f))<<24) | (((color32)TClamp(_R*256.0f, 0.0f, 255.0f))<<16) | (((color32)TClamp(_G*256.0f, 0.0f, 255.0f))<<8) | ((color32)TClamp(_B*256.0f, 0.0f, 255.0f)); 48 | } 49 | 50 | inline void Color32ToARGBi(color32 _Color, int *_A, int *_R, int *_G, int *_B) 51 | { 52 | if(_A) *_A = (_Color>>24)&0xff; 53 | if(_R) *_R = (_Color>>16)&0xff; 54 | if(_G) *_G = (_Color>>8)&0xff; 55 | if(_B) *_B = _Color&0xff; 56 | } 57 | 58 | inline void Color32ToARGBf(color32 _Color, float *_A, float *_R, float *_G, float *_B) 59 | { 60 | if(_A) *_A = (1.0f/255.0f)*float((_Color>>24)&0xff); 61 | if(_R) *_R = (1.0f/255.0f)*float((_Color>>16)&0xff); 62 | if(_G) *_G = (1.0f/255.0f)*float((_Color>>8)&0xff); 63 | if(_B) *_B = (1.0f/255.0f)*float(_Color&0xff); 64 | } 65 | 66 | void ColorRGBToHLSf(float _R, float _G, float _B, float *_Hue, float *_Light, float *_Saturation); 67 | 68 | void ColorRGBToHLSi(int _R, int _G, int _B, int *_Hue, int *_Light, int *_Saturation); 69 | 70 | void ColorHLSToRGBf(float _Hue, float _Light, float _Saturation, float *_R, float *_G, float *_B); 71 | 72 | void ColorHLSToRGBi(int _Hue, int _Light, int _Saturation, int *_R, int *_G, int *_B); 73 | 74 | color32 ColorBlend(color32 _Color1, color32 _Color2, float _S); 75 | 76 | 77 | // --------------------------------------------------------------------------- 78 | 79 | 80 | #endif // !defined ANT_TW_COLORS_INCLUDED 81 | -------------------------------------------------------------------------------- /AntTweakBar/TwEventGLUT.c: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwEventGLUT.c 4 | // @brief Helper: 5 | // translate and re-send mouse and keyboard events 6 | // from GLUT event callbacks to AntTweakBar 7 | // 8 | // @author Philippe Decaudin - http://www.antisphere.com 9 | // @date 2006/05/10 10 | // @license This file is part of the AntTweakBar library. 11 | // For conditions of distribution and use, see License.txt 12 | // 13 | // --------------------------------------------------------------------------- 14 | 15 | 16 | #define GLUT_NO_LIB_PRAGMA // we do not want to force linkage with glut 17 | #ifdef _MSC_VER 18 | # pragma warning(disable: 4505) // glut generates 'unreferenced function' warnings 19 | # pragma warning(disable: 4100) // unreferenced parameter 20 | #endif // _MSC_VER 21 | 22 | // #include 23 | #include "MiniGLUT.h" // a subset of glut.h needed to compile TwEventGLUT.c 24 | // note: AntTweakBar.dll does not need to link with GLUT, 25 | // it just needs some definitions for its helper functions. 26 | 27 | #include 28 | 29 | 30 | int TW_GLUT_CALL TwEventMouseButtonGLUT(int glutButton, int glutState, int mouseX, int mouseY) 31 | { 32 | TwMouseAction action = (glutState==GLUT_DOWN) ? TW_MOUSE_PRESSED : TW_MOUSE_RELEASED; 33 | 34 | TwMouseMotion(mouseX, mouseY); 35 | switch( glutButton ) 36 | { 37 | case GLUT_LEFT_BUTTON: 38 | return TwMouseButton(action, TW_MOUSE_LEFT); 39 | case GLUT_RIGHT_BUTTON: 40 | return TwMouseButton(action, TW_MOUSE_RIGHT); 41 | case GLUT_MIDDLE_BUTTON: 42 | return TwMouseButton(action, TW_MOUSE_MIDDLE); 43 | default: 44 | return 0; 45 | } 46 | } 47 | 48 | int TW_GLUT_CALL TwEventMouseMotionGLUT(int mouseX, int mouseY) 49 | { 50 | return TwMouseMotion(mouseX, mouseY); 51 | } 52 | 53 | 54 | // GLUT does not send modifiers state to 'Key' and 'Special' callbacks, 55 | // and we cannot call glutGetModifiers here because we do not want to link 56 | // AntTweakBar with glut, so the following function is used to store 57 | // a pointer to the glutGetModifiers function of the calling application. 58 | // It must be called at initialisation of the application. 59 | 60 | int (TW_CALL *g_GLUTGetModifiers)(void) = NULL; 61 | 62 | int TW_CALL TwGLUTModifiersFunc(int (TW_CALL *glutGetModifiersFunc)(void)) 63 | { 64 | g_GLUTGetModifiers = glutGetModifiersFunc; 65 | return (g_GLUTGetModifiers==NULL) ? 0 : 1; 66 | } 67 | 68 | 69 | int TW_GLUT_CALL TwEventKeyboardGLUT(unsigned char glutKey, int mouseX, int mouseY) 70 | { 71 | int kmod = 0; 72 | 73 | if( g_GLUTGetModifiers!=NULL ) 74 | { 75 | int glutMod = g_GLUTGetModifiers(); 76 | 77 | if( glutMod&GLUT_ACTIVE_SHIFT ) 78 | kmod |= TW_KMOD_SHIFT; 79 | if( glutMod&GLUT_ACTIVE_CTRL ) 80 | kmod |= TW_KMOD_CTRL; 81 | if( glutMod&GLUT_ACTIVE_ALT ) 82 | kmod |= TW_KMOD_ALT; 83 | } 84 | 85 | if( (kmod&TW_KMOD_CTRL) && (glutKey>0 && glutKey<27) ) // CTRL special case 86 | glutKey += 'a'-1; 87 | 88 | return TwKeyPressed((int)glutKey, kmod); 89 | } 90 | 91 | 92 | int TW_GLUT_CALL TwEventSpecialGLUT(int glutKey, int mouseX, int mouseY) 93 | { 94 | int k = 0, kmod = 0; 95 | 96 | if( g_GLUTGetModifiers!=NULL ) 97 | { 98 | int glutMod = g_GLUTGetModifiers(); 99 | 100 | if( glutMod&GLUT_ACTIVE_SHIFT ) 101 | kmod |= TW_KMOD_SHIFT; 102 | if( glutMod&GLUT_ACTIVE_CTRL ) 103 | kmod |= TW_KMOD_CTRL; 104 | if( glutMod&GLUT_ACTIVE_ALT ) 105 | kmod |= TW_KMOD_ALT; 106 | } 107 | 108 | if( glutKey>=GLUT_KEY_F1 && glutKey<=GLUT_KEY_F12 ) 109 | k = TW_KEY_F1 + (glutKey-GLUT_KEY_F1); 110 | else 111 | { 112 | switch( glutKey ) 113 | { 114 | case GLUT_KEY_LEFT: 115 | k = TW_KEY_LEFT; 116 | break; 117 | case GLUT_KEY_UP: 118 | k = TW_KEY_UP; 119 | break; 120 | case GLUT_KEY_RIGHT: 121 | k = TW_KEY_RIGHT; 122 | break; 123 | case GLUT_KEY_DOWN: 124 | k = TW_KEY_DOWN; 125 | break; 126 | case GLUT_KEY_PAGE_UP: 127 | k = TW_KEY_PAGE_UP; 128 | break; 129 | case GLUT_KEY_PAGE_DOWN: 130 | k = TW_KEY_PAGE_DOWN; 131 | break; 132 | case GLUT_KEY_HOME: 133 | k = TW_KEY_HOME; 134 | break; 135 | case GLUT_KEY_END: 136 | k = TW_KEY_END; 137 | break; 138 | case GLUT_KEY_INSERT: 139 | k = TW_KEY_INSERT; 140 | break; 141 | } 142 | } 143 | 144 | if( k>0 && k 18 | 19 | int TW_CALL TwEventSDL12(const void *sdlEvent); // implemented in TwEventSDL12.c 20 | int TW_CALL TwEventSDL13(const void *sdlEvent); // implmeneted in TwEventSDL13.c 21 | int TW_CALL TwSetLastError(const char *staticErrorMessage); 22 | 23 | // TwEventSDL returns zero if msg has not been handled or the SDL version 24 | // is not supported, and a non-zero value if it has been handled by the 25 | // AntTweakBar library. 26 | int TW_CALL TwEventSDL(const void *sdlEvent, unsigned char majorVersion, unsigned char minorVersion) 27 | { 28 | if (majorVersion < 1 || (majorVersion == 1 && minorVersion < 2)) 29 | { 30 | static const char *g_ErrBadSDLVersion = "Unsupported SDL version"; 31 | TwSetLastError(g_ErrBadSDLVersion); 32 | return 0; 33 | } 34 | else if (majorVersion == 1 && minorVersion == 2) 35 | return TwEventSDL12(sdlEvent); 36 | else // if( majorVersion==1 && minorVersion==3 ) 37 | return TwEventSDL13(sdlEvent); // will probably not work for version > 1.3, but give it a chance 38 | } 39 | -------------------------------------------------------------------------------- /AntTweakBar/TwEventSDL12.c: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwEventSDL12.c 4 | // @brief Helper: 5 | // translate and re-send mouse and keyboard events 6 | // from SDL 1.2 event loop to AntTweakBar 7 | // 8 | // @author Philippe Decaudin - http://www.antisphere.com 9 | // @date 2006/05/10 10 | // @license This file is part of the AntTweakBar library. 11 | // For conditions of distribution and use, see License.txt 12 | // 13 | // --------------------------------------------------------------------------- 14 | 15 | 16 | #include "MiniSDL12.h" // a subset of SDL.h needed to compile TwEventSDL12.c 17 | // note: AntTweakBar.dll does not need to link with SDL, 18 | // it just needs some definitions for its helper functions. 19 | 20 | #include 21 | 22 | 23 | // TwEventSDL12 returns zero if msg has not been handled, 24 | // and a non-zero value if it has been handled by the AntTweakBar library. 25 | int TW_CALL TwEventSDL12(const void *sdlEvent) 26 | { 27 | int handled = 0; 28 | const SDL_Event *event = (const SDL_Event *)sdlEvent; 29 | 30 | if( event==NULL ) 31 | return 0; 32 | 33 | switch( event->type ) 34 | { 35 | case SDL_KEYDOWN: 36 | if( event->key.keysym.unicode!=0 && (event->key.keysym.unicode & 0xFF00)==0 ) 37 | { 38 | if( (event->key.keysym.unicode & 0xFF)<32 && (event->key.keysym.unicode & 0xFF)!=event->key.keysym.sym ) 39 | handled = TwKeyPressed((event->key.keysym.unicode & 0xFF)+'a'-1, event->key.keysym.mod); 40 | else 41 | handled = TwKeyPressed(event->key.keysym.unicode & 0xFF, event->key.keysym.mod); 42 | } 43 | else 44 | handled = TwKeyPressed(event->key.keysym.sym, event->key.keysym.mod); 45 | break; 46 | case SDL_MOUSEMOTION: 47 | handled = TwMouseMotion(event->motion.x, event->motion.y); 48 | break; 49 | case SDL_MOUSEBUTTONUP: 50 | case SDL_MOUSEBUTTONDOWN: 51 | if( event->type==SDL_MOUSEBUTTONDOWN && (event->button.button==4 || event->button.button==5) ) // mouse wheel 52 | { 53 | static int s_WheelPos = 0; 54 | if( event->button.button==4 ) 55 | ++s_WheelPos; 56 | else 57 | --s_WheelPos; 58 | handled = TwMouseWheel(s_WheelPos); 59 | } 60 | else 61 | handled = TwMouseButton((event->type==SDL_MOUSEBUTTONUP)?TW_MOUSE_RELEASED:TW_MOUSE_PRESSED, (TwMouseButtonID)event->button.button); 62 | break; 63 | case SDL_VIDEORESIZE: 64 | // tell the new size to TweakBar 65 | TwWindowSize(event->resize.w, event->resize.h); 66 | // do not set 'handled', SDL_VIDEORESIZE may be also processed by the calling application 67 | break; 68 | } 69 | 70 | return handled; 71 | } 72 | -------------------------------------------------------------------------------- /AntTweakBar/TwEventSDL13.c: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwEventSDL13.c 4 | // @brief Helper: 5 | // translate and re-send mouse and keyboard events 6 | // from SDL 1.3 event loop to AntTweakBar 7 | // 8 | // @author Philippe Decaudin - http://www.antisphere.com 9 | // @license This file is part of the AntTweakBar library. 10 | // For conditions of distribution and use, see License.txt 11 | // 12 | // --------------------------------------------------------------------------- 13 | 14 | 15 | #include "MiniSDL13.h" // a subset of SDL.h needed to compile TwEventSDL.c 16 | // note: AntTweakBar.dll does not need to link with SDL, 17 | // it just needs some definitions for its helper functions. 18 | 19 | #include 20 | 21 | 22 | // The way SDL handles keyboard events has changed between version 1.2 23 | // and 1.3. It is now more difficult to translate SDL keyboard events to 24 | // AntTweakBar events. The following code is an attempt to do so, but 25 | // it is rather complex and not always accurate (eg, CTRL+1 is not handled). 26 | // If someone knows a better and more robust way to do the keyboard events 27 | // translation, please let me know. 28 | 29 | // TwEventSDL returns zero if msg has not been handled, 30 | // and a non-zero value if it has been handled by the AntTweakBar library. 31 | int TW_CALL TwEventSDL13(const void *sdlEvent) 32 | { 33 | int handled = 0; 34 | static int s_KeyMod = 0; 35 | const SDL_Event *event = (const SDL_Event *)sdlEvent; 36 | 37 | if( event==NULL ) 38 | return 0; 39 | 40 | switch( event->type ) 41 | { 42 | case SDL_TEXTINPUT: 43 | if( event->text.text[0]!=0 && event->text.text[1]==0 ) 44 | { 45 | if( s_KeyMod & TW_KMOD_CTRL && event->text.text[0]<32 ) 46 | handled = TwKeyPressed(event->text.text[0]+'a'-1, s_KeyMod); 47 | else 48 | { 49 | if (s_KeyMod & KMOD_RALT) 50 | s_KeyMod &= ~KMOD_CTRL; 51 | handled = TwKeyPressed(event->text.text[0], s_KeyMod); 52 | } 53 | } 54 | s_KeyMod = 0; 55 | break; 56 | case SDL_KEYDOWN: 57 | if( event->key.keysym.sym & SDLK_SCANCODE_MASK ) 58 | { 59 | int key = 0; 60 | switch( event->key.keysym.sym ) 61 | { 62 | case SDLK_UP: 63 | key = TW_KEY_UP; 64 | break; 65 | case SDLK_DOWN: 66 | key = TW_KEY_DOWN; 67 | break; 68 | case SDLK_RIGHT: 69 | key = TW_KEY_RIGHT; 70 | break; 71 | case SDLK_LEFT: 72 | key = TW_KEY_LEFT; 73 | break; 74 | case SDLK_INSERT: 75 | key = TW_KEY_INSERT; 76 | break; 77 | case SDLK_HOME: 78 | key = TW_KEY_HOME; 79 | break; 80 | case SDLK_END: 81 | key = TW_KEY_END; 82 | break; 83 | case SDLK_PAGEUP: 84 | key = TW_KEY_PAGE_UP; 85 | break; 86 | case SDLK_PAGEDOWN: 87 | key = TW_KEY_PAGE_DOWN; 88 | break; 89 | default: 90 | if( event->key.keysym.sym>=SDLK_F1 && event->key.keysym.sym<=SDLK_F12 ) 91 | key = event->key.keysym.sym + TW_KEY_F1 - SDLK_F1; 92 | } 93 | if( key!=0 ) 94 | handled = TwKeyPressed(key, event->key.keysym.mod); 95 | } 96 | else if( event->key.keysym.mod & TW_KMOD_ALT ) 97 | handled = TwKeyPressed(event->key.keysym.sym & 0xFF, event->key.keysym.mod); 98 | else 99 | s_KeyMod = event->key.keysym.mod; 100 | break; 101 | case SDL_KEYUP: 102 | s_KeyMod = 0; 103 | break; 104 | case SDL_MOUSEMOTION: 105 | handled = TwMouseMotion(event->motion.x, event->motion.y); 106 | break; 107 | case SDL_MOUSEBUTTONUP: 108 | case SDL_MOUSEBUTTONDOWN: 109 | if( event->type==SDL_MOUSEBUTTONDOWN && (event->button.button==4 || event->button.button==5) ) // mouse wheel 110 | { 111 | static int s_WheelPos = 0; 112 | if( event->button.button==4 ) 113 | ++s_WheelPos; 114 | else 115 | --s_WheelPos; 116 | handled = TwMouseWheel(s_WheelPos); 117 | } 118 | else 119 | handled = TwMouseButton((event->type==SDL_MOUSEBUTTONUP)?TW_MOUSE_RELEASED:TW_MOUSE_PRESSED, (TwMouseButtonID)event->button.button); 120 | break; 121 | case SDL_VIDEORESIZE: 122 | // tell the new size to TweakBar 123 | TwWindowSize(event->resize.w, event->resize.h); 124 | // do not set 'handled', SDL_VIDEORESIZE may be also processed by the calling application 125 | break; 126 | } 127 | 128 | return handled; 129 | } 130 | -------------------------------------------------------------------------------- /AntTweakBar/TwEventSFML.cpp: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwEventSFML.cpp 4 | // @brief Helper: 5 | // translate and re-send mouse and keyboard events 6 | // from SFML 1.6 event loop to AntTweakBar 7 | // 8 | // @author Philippe Decaudin - http://www.antisphere.com 9 | // @license This file is part of the AntTweakBar library. 10 | // For conditions of distribution and use, see License.txt 11 | // 12 | // --------------------------------------------------------------------------- 13 | 14 | 15 | #include "MiniSFML16.h" // a subset of SFML 1.6 headers needed to compile TwEventSFML.cpp 16 | // note: AntTweakBar.dll does not need to link with SFML, 17 | // it just needs some definitions for its helper functions. 18 | 19 | #include 20 | 21 | 22 | // TwEventSFML returns zero if msg has not been handled, 23 | // and a non-zero value if it has been handled by the AntTweakBar library. 24 | int TW_CALL TwEventSFML(const void *sfmlEvent, unsigned char majorVersion, unsigned char minorVersion) 25 | { 26 | // Assume version 1.6 (will possibly not work for version != 1.6, but give it a chance) 27 | /* 28 | if (majorVersion > 1 || (majorVersion == 1 && minorVersion > 6) 29 | { 30 | static const char *g_ErrBadSFMLVersion = "Unsupported SFML version"; 31 | TwSetLastError(g_ErrBadSFMLVersion); 32 | return 0; 33 | } 34 | */ 35 | (void)majorVersion, (void)minorVersion; 36 | 37 | int handled = 0; 38 | const sf::Event *event = (const sf::Event *)sfmlEvent; 39 | TwMouseAction mouseAction; 40 | int key = 0; 41 | static int s_KMod = 0; 42 | static bool s_PreventTextHandling = false; 43 | static int s_WheelPos = 0; 44 | 45 | if (event == NULL) 46 | return 0; 47 | 48 | switch (event->Type) 49 | { 50 | case sf::Event::KeyPressed: 51 | s_PreventTextHandling = false; 52 | s_KMod = 0; 53 | if (event->Key.Shift) s_KMod |= TW_KMOD_SHIFT; 54 | if (event->Key.Alt) s_KMod |= TW_KMOD_ALT; 55 | if (event->Key.Control) s_KMod |= TW_KMOD_CTRL; 56 | key = 0; 57 | switch (event->Key.Code) 58 | { 59 | case sf::Key::Escape: 60 | key = TW_KEY_ESCAPE; 61 | break; 62 | case sf::Key::Return: 63 | key = TW_KEY_RETURN; 64 | break; 65 | case sf::Key::Tab: 66 | key = TW_KEY_TAB; 67 | break; 68 | case sf::Key::Back: 69 | key = TW_KEY_BACKSPACE; 70 | break; 71 | case sf::Key::PageUp: 72 | key = TW_KEY_PAGE_UP; 73 | break; 74 | case sf::Key::PageDown: 75 | key = TW_KEY_PAGE_DOWN; 76 | break; 77 | case sf::Key::Up: 78 | key = TW_KEY_UP; 79 | break; 80 | case sf::Key::Down: 81 | key = TW_KEY_DOWN; 82 | break; 83 | case sf::Key::Left: 84 | key = TW_KEY_LEFT; 85 | break; 86 | case sf::Key::Right: 87 | key = TW_KEY_RIGHT; 88 | break; 89 | case sf::Key::End: 90 | key = TW_KEY_END; 91 | break; 92 | case sf::Key::Home: 93 | key = TW_KEY_HOME; 94 | break; 95 | case sf::Key::Insert: 96 | key = TW_KEY_INSERT; 97 | break; 98 | case sf::Key::Delete: 99 | key = TW_KEY_DELETE; 100 | break; 101 | case sf::Key::Space: 102 | key = TW_KEY_SPACE; 103 | break; 104 | default: 105 | if (event->Key.Code >= sf::Key::F1 && event->Key.Code <= sf::Key::F15) 106 | key = TW_KEY_F1 + event->Key.Code - sf::Key::F1; 107 | else if (s_KMod & TW_KMOD_ALT) 108 | { 109 | if (event->Key.Code >= sf::Key::A && event->Key.Code <= sf::Key::Z) 110 | { 111 | if (s_KMod & TW_KMOD_SHIFT) 112 | key = 'A' + event->Key.Code - sf::Key::A; 113 | else 114 | key = 'a' + event->Key.Code - sf::Key::A; 115 | } 116 | } 117 | } 118 | if (key != 0) 119 | { 120 | handled = TwKeyPressed(key, s_KMod); 121 | s_PreventTextHandling = true; 122 | } 123 | break; 124 | case sf::Event::KeyReleased: 125 | s_PreventTextHandling = false; 126 | s_KMod = 0; 127 | break; 128 | case sf::Event::TextEntered: 129 | if (!s_PreventTextHandling && event->Text.Unicode != 0 && (event->Text.Unicode & 0xFF00) == 0) 130 | { 131 | if ((event->Text.Unicode & 0xFF) < 32) // CTRL+letter 132 | handled = TwKeyPressed((event->Text.Unicode & 0xFF)+'a'-1, TW_KMOD_CTRL|s_KMod); 133 | else 134 | handled = TwKeyPressed(event->Text.Unicode & 0xFF, 0); 135 | } 136 | s_PreventTextHandling = false; 137 | break; 138 | case sf::Event::MouseMoved: 139 | handled = TwMouseMotion(event->MouseMove.X, event->MouseMove.Y); 140 | break; 141 | case sf::Event::MouseButtonPressed: 142 | case sf::Event::MouseButtonReleased: 143 | mouseAction = (event->Type==sf::Event::MouseButtonPressed) ? TW_MOUSE_PRESSED : TW_MOUSE_RELEASED; 144 | switch (event->MouseButton.Button) 145 | { 146 | case sf::Mouse::Left: 147 | handled = TwMouseButton(mouseAction, TW_MOUSE_LEFT); 148 | break; 149 | case sf::Mouse::Middle: 150 | handled = TwMouseButton(mouseAction, TW_MOUSE_MIDDLE); 151 | break; 152 | case sf::Mouse::Right: 153 | handled = TwMouseButton(mouseAction, TW_MOUSE_RIGHT); 154 | break; 155 | default: 156 | break; 157 | } 158 | break; 159 | case sf::Event::MouseWheelMoved: 160 | s_WheelPos += event->MouseWheel.Delta; 161 | handled = TwMouseWheel(s_WheelPos); 162 | break; 163 | case sf::Event::Resized: 164 | // tell the new size to TweakBar 165 | TwWindowSize(event->Size.Width, event->Size.Height); 166 | // do not set 'handled', sf::Event::Resized may be also processed by the client application 167 | break; 168 | default: 169 | break; 170 | } 171 | 172 | return handled; 173 | } 174 | -------------------------------------------------------------------------------- /AntTweakBar/TwFonts.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/TwFonts.h -------------------------------------------------------------------------------- /AntTweakBar/TwGraph.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwGraph.h 4 | // @brief ITwGraph pure interface 5 | // @author Philippe Decaudin - http://www.antisphere.com 6 | // @license This file is part of the AntTweakBar library. 7 | // For conditions of distribution and use, see License.txt 8 | // 9 | // note: Private header 10 | // 11 | // --------------------------------------------------------------------------- 12 | 13 | 14 | #if !defined ANT_TW_GRAPH_INCLUDED 15 | #define ANT_TW_GRAPH_INCLUDED 16 | 17 | #include "TwColors.h" 18 | #include "TwFonts.h" 19 | 20 | 21 | // --------------------------------------------------------------------------- 22 | 23 | #ifdef DrawText // DirectX redefines 'DrawText' !! 24 | # undef DrawText 25 | #endif // DrawText 26 | 27 | class ITwGraph 28 | { 29 | public: 30 | virtual int Init() = 0; 31 | virtual int Shut() = 0; 32 | virtual void BeginDraw(int _WndWidth, int _WndHeight) = 0; 33 | virtual void EndDraw() = 0; 34 | virtual bool IsDrawing() = 0; 35 | virtual void Restore() = 0; 36 | 37 | virtual void DrawLine(int _X0, int _Y0, int _X1, int _Y1, color32 _Color0, color32 _Color1, bool _AntiAliased=false) = 0; 38 | virtual void DrawLine(int _X0, int _Y0, int _X1, int _Y1, color32 _Color, bool _AntiAliased=false) = 0; 39 | virtual void DrawRect(int _X0, int _Y0, int _X1, int _Y1, color32 _Color00, color32 _Color10, color32 _Color01, color32 _Color11) = 0; 40 | virtual void DrawRect(int _X0, int _Y0, int _X1, int _Y1, color32 _Color) = 0; 41 | enum Cull { CULL_NONE, CULL_CW, CULL_CCW }; 42 | virtual void DrawTriangles(int _NumTriangles, int *_Vertices, color32 *_Colors, Cull _CullMode) = 0; 43 | 44 | virtual void * NewTextObj() = 0; 45 | virtual void DeleteTextObj(void *_TextObj) = 0; 46 | virtual void BuildText(void *_TextObj, const std::string *_TextLines, color32 *_LineColors, color32 *_LineBgColors, int _NbLines, const CTexFont *_Font, int _Sep, int _BgWidth) = 0; 47 | virtual void DrawText(void *_TextObj, int _X, int _Y, color32 _Color, color32 _BgColor) = 0; 48 | 49 | virtual void ChangeViewport(int _X0, int _Y0, int _Width, int _Height, int _OffsetX, int _OffsetY) = 0; 50 | virtual void RestoreViewport() = 0; 51 | virtual void SetScissor(int _X0, int _Y0, int _Width, int _Height) = 0; 52 | 53 | virtual ~ITwGraph() {} // required by gcc 54 | }; 55 | 56 | // --------------------------------------------------------------------------- 57 | 58 | #endif // ANT_TW_GRAPH_INCLUDED 59 | -------------------------------------------------------------------------------- /AntTweakBar/TwMgr.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/TwMgr.cpp -------------------------------------------------------------------------------- /AntTweakBar/TwOpenGL.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwOpenGL.h 4 | // @brief OpenGL graph functions 5 | // @author Philippe Decaudin - http://www.antisphere.com 6 | // @license This file is part of the AntTweakBar library. 7 | // For conditions of distribution and use, see License.txt 8 | // 9 | // notes: Private header 10 | // TAB=4 11 | // 12 | // --------------------------------------------------------------------------- 13 | 14 | 15 | #if !defined ANT_TW_OPENGL_INCLUDED 16 | #define ANT_TW_OPENGL_INCLUDED 17 | 18 | #include "TwGraph.h" 19 | 20 | // --------------------------------------------------------------------------- 21 | 22 | class CTwGraphOpenGL : public ITwGraph 23 | { 24 | public: 25 | virtual int Init(); 26 | virtual int Shut(); 27 | virtual void BeginDraw(int _WndWidth, int _WndHeight); 28 | virtual void EndDraw(); 29 | virtual bool IsDrawing(); 30 | virtual void Restore(); 31 | virtual void DrawLine(int _X0, int _Y0, int _X1, int _Y1, color32 _Color0, color32 _Color1, bool _AntiAliased=false); 32 | virtual void DrawLine(int _X0, int _Y0, int _X1, int _Y1, color32 _Color, bool _AntiAliased=false) { DrawLine(_X0, _Y0, _X1, _Y1, _Color, _Color, _AntiAliased); } 33 | virtual void DrawRect(int _X0, int _Y0, int _X1, int _Y1, color32 _Color00, color32 _Color10, color32 _Color01, color32 _Color11); 34 | virtual void DrawRect(int _X0, int _Y0, int _X1, int _Y1, color32 _Color) { DrawRect(_X0, _Y0, _X1, _Y1, _Color, _Color, _Color, _Color); } 35 | virtual void DrawTriangles(int _NumTriangles, int *_Vertices, color32 *_Colors, Cull _CullMode); 36 | 37 | virtual void * NewTextObj(); 38 | virtual void DeleteTextObj(void *_TextObj); 39 | virtual void BuildText(void *_TextObj, const std::string *_TextLines, color32 *_LineColors, color32 *_LineBgColors, int _NbLines, const CTexFont *_Font, int _Sep, int _BgWidth); 40 | virtual void DrawText(void *_TextObj, int _X, int _Y, color32 _Color, color32 _BgColor); 41 | 42 | virtual void ChangeViewport(int _X0, int _Y0, int _Width, int _Height, int _OffsetX, int _OffsetY); 43 | virtual void RestoreViewport(); 44 | virtual void SetScissor(int _X0, int _Y0, int _Width, int _Height); 45 | 46 | protected: 47 | bool m_Drawing; 48 | GLuint m_FontTexID; 49 | const CTexFont * m_FontTex; 50 | GLfloat m_PrevLineWidth; 51 | GLint m_PrevTexEnv; 52 | GLint m_PrevPolygonMode[2]; 53 | GLint m_MaxClipPlanes; 54 | GLint m_PrevTexture; 55 | GLint m_PrevArrayBufferARB; 56 | GLint m_PrevElementArrayBufferARB; 57 | GLboolean m_PrevVertexProgramARB; 58 | GLboolean m_PrevFragmentProgramARB; 59 | GLuint m_PrevProgramObjectARB; 60 | GLboolean m_PrevTexture3D; 61 | enum EMaxTextures { MAX_TEXTURES = 128 }; 62 | GLboolean m_PrevActiveTexture1D[MAX_TEXTURES]; 63 | GLboolean m_PrevActiveTexture2D[MAX_TEXTURES]; 64 | GLboolean m_PrevActiveTexture3D[MAX_TEXTURES]; 65 | GLboolean m_PrevClientTexCoordArray[MAX_TEXTURES]; 66 | GLint m_PrevActiveTextureARB; 67 | GLint m_PrevClientActiveTextureARB; 68 | bool m_SupportTexRect; 69 | GLboolean m_PrevTexRectARB; 70 | GLint m_PrevBlendEquation; 71 | GLint m_PrevBlendEquationRGB; 72 | GLint m_PrevBlendEquationAlpha; 73 | GLint m_PrevBlendSrcRGB; 74 | GLint m_PrevBlendDstRGB; 75 | GLint m_PrevBlendSrcAlpha; 76 | GLint m_PrevBlendDstAlpha; 77 | GLint m_ViewportInit[4]; 78 | GLfloat m_ProjMatrixInit[16]; 79 | int m_WndWidth; 80 | int m_WndHeight; 81 | 82 | struct Vec2 { GLfloat x, y; Vec2(){} Vec2(GLfloat _X, GLfloat _Y):x(_X),y(_Y){} Vec2(int _X, int _Y):x(GLfloat(_X)),y(GLfloat(_Y)){} }; 83 | struct CTextObj 84 | { 85 | std::vector m_TextVerts; 86 | std::vector m_TextUVs; 87 | std::vector m_BgVerts; 88 | std::vectorm_Colors; 89 | std::vectorm_BgColors; 90 | }; 91 | }; 92 | 93 | // --------------------------------------------------------------------------- 94 | 95 | 96 | #endif // !defined ANT_TW_OPENGL_INCLUDED 97 | -------------------------------------------------------------------------------- /AntTweakBar/TwOpenGLCore.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwOpenGLCore.h 4 | // @brief OpenGL Core graph functions 5 | // @author Philippe Decaudin - http://www.antisphere.com 6 | // @license This file is part of the AntTweakBar library. 7 | // For conditions of distribution and use, see License.txt 8 | // 9 | // notes: Private header, 10 | // Work In Progress, Disabled. 11 | // 12 | // --------------------------------------------------------------------------- 13 | 14 | 15 | #if !defined ANT_TW_OPENGL_CORE_INCLUDED 16 | #define ANT_TW_OPENGL_CORE_INCLUDED 17 | 18 | #include "TwGraph.h" 19 | 20 | // --------------------------------------------------------------------------- 21 | 22 | class CTwGraphOpenGLCore : public ITwGraph 23 | { 24 | public: 25 | virtual int Init(); 26 | virtual int Shut(); 27 | virtual void BeginDraw(int _WndWidth, int _WndHeight); 28 | virtual void EndDraw(); 29 | virtual bool IsDrawing(); 30 | virtual void Restore(); 31 | virtual void DrawLine(int _X0, int _Y0, int _X1, int _Y1, color32 _Color0, color32 _Color1, bool _AntiAliased=false); 32 | virtual void DrawLine(int _X0, int _Y0, int _X1, int _Y1, color32 _Color, bool _AntiAliased=false) { DrawLine(_X0, _Y0, _X1, _Y1, _Color, _Color, _AntiAliased); } 33 | virtual void DrawRect(int _X0, int _Y0, int _X1, int _Y1, color32 _Color00, color32 _Color10, color32 _Color01, color32 _Color11); 34 | virtual void DrawRect(int _X0, int _Y0, int _X1, int _Y1, color32 _Color) { DrawRect(_X0, _Y0, _X1, _Y1, _Color, _Color, _Color, _Color); } 35 | virtual void DrawTriangles(int _NumTriangles, int *_Vertices, color32 *_Colors, Cull _CullMode); 36 | 37 | virtual void * NewTextObj(); 38 | virtual void DeleteTextObj(void *_TextObj); 39 | virtual void BuildText(void *_TextObj, const std::string *_TextLines, color32 *_LineColors, color32 *_LineBgColors, int _NbLines, const CTexFont *_Font, int _Sep, int _BgWidth); 40 | virtual void DrawText(void *_TextObj, int _X, int _Y, color32 _Color, color32 _BgColor); 41 | 42 | virtual void ChangeViewport(int _X0, int _Y0, int _Width, int _Height, int _OffsetX, int _OffsetY); 43 | virtual void RestoreViewport(); 44 | 45 | protected: 46 | bool m_Drawing; 47 | GLuint m_FontTexID; 48 | const CTexFont * m_FontTex; 49 | 50 | GLfloat m_PrevLineWidth; 51 | GLint m_PrevTexture; 52 | GLint m_PrevArrayBuffer; 53 | GLint m_PrevElementArrayBuffer; 54 | GLboolean m_PrevVertexProgram; 55 | GLboolean m_PrevFragmentProgram; 56 | GLuint m_PrevProgramObject; 57 | GLboolean m_PrevTexture3D; 58 | GLboolean m_PrevActiveTexture1D[32]; 59 | GLboolean m_PrevActiveTexture2D[32]; 60 | GLboolean m_PrevActiveTexture3D[32]; 61 | GLint m_PrevActiveTexture; 62 | GLboolean m_PrevTexRect; 63 | GLint m_PrevBlendEquation; 64 | GLint m_PrevBlendEquationRGB; 65 | GLint m_PrevBlendEquationAlpha; 66 | GLint m_PrevBlendSrcRGB; 67 | GLint m_PrevBlendDstRGB; 68 | GLint m_PrevBlendSrcAlpha; 69 | GLint m_PrevBlendDstAlpha; 70 | GLint m_ViewportInit[4]; 71 | GLuint m_LineRectVS; 72 | GLuint m_LineRectFS; 73 | GLuint m_LineRectProgram; 74 | GLuint m_LineRectVArray; 75 | GLuint m_LineRectBuffer; 76 | 77 | int m_WndWidth; 78 | int m_WndHeight; 79 | int m_OffsetX; 80 | int m_OffsetY; 81 | 82 | struct Vec2 { GLfloat x, y; Vec2(){} Vec2(GLfloat _X, GLfloat _Y):x(_X),y(_Y){} Vec2(int _X, int _Y):x(GLfloat(_X)),y(GLfloat(_Y)){} }; 83 | struct CTextObj 84 | { 85 | std::vector m_TextVerts; 86 | std::vector m_TextUVs; 87 | std::vector m_BgVerts; 88 | std::vectorm_Colors; 89 | std::vectorm_BgColors; 90 | }; 91 | }; 92 | 93 | // --------------------------------------------------------------------------- 94 | 95 | 96 | #endif // !defined ANT_TW_OPENGL_CORE_INCLUDED 97 | -------------------------------------------------------------------------------- /AntTweakBar/TwPrecomp.cpp: -------------------------------------------------------------------------------- 1 | #include "TwPrecomp.h" 2 | -------------------------------------------------------------------------------- /AntTweakBar/TwPrecomp.h: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------------------- 2 | // 3 | // @file TwPrecomp.h 4 | // @brief Precompiled header 5 | // @author Philippe Decaudin - http://www.antisphere.com 6 | // @license This file is part of the AntTweakBar library. 7 | // For conditions of distribution and use, see License.txt 8 | // 9 | // note: Private header 10 | // 11 | // --------------------------------------------------------------------------- 12 | 13 | 14 | #if !defined ANT_TW_PRECOMP_INCLUDED 15 | #define ANT_TW_PRECOMP_INCLUDED 16 | 17 | 18 | #if defined _MSC_VER 19 | # pragma warning(disable: 4514) // unreferenced inline function has been removed 20 | # pragma warning(disable: 4710) // function not inlined 21 | # pragma warning(disable: 4786) // template name truncated 22 | # pragma warning(disable: 4530) // exceptions not handled 23 | # define _CRT_SECURE_NO_DEPRECATE // visual 8 secure crt warning 24 | #endif 25 | 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | 34 | #if defined(_MSC_VER) && _MSC_VER<=1200 35 | # pragma warning(push, 3) 36 | #endif 37 | #include 38 | #include 39 | #include 40 | #include 41 | #include 42 | #include 43 | #if defined(_MSC_VER) && _MSC_VER<=1200 44 | # pragma warning(pop) 45 | #endif 46 | 47 | #if defined(_UNIX) 48 | # define ANT_UNIX 49 | # include 50 | # define GLX_GLXEXT_LEGACY 51 | # include 52 | # include 53 | # include 54 | # include 55 | # undef _WIN32 56 | # undef WIN32 57 | # undef _WIN64 58 | # undef WIN64 59 | # undef _WINDOWS 60 | # undef ANT_WINDOWS 61 | # undef ANT_OSX 62 | #elif defined(_MACOSX) 63 | # define ANT_OSX 64 | # include 65 | # include 66 | # include 67 | # include 68 | # undef _WIN32 69 | # undef WIN32 70 | # undef _WIN64 71 | # undef WIN64 72 | # undef _WINDOWS 73 | # undef ANT_WINDOWS 74 | # undef ANT_UNIX 75 | #elif defined(_WINDOWS) || defined(WIN32) || defined(WIN64) || defined(_WIN32) || defined(_WIN64) 76 | # define ANT_WINDOWS 77 | # define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 78 | # include 79 | # include 80 | #endif 81 | 82 | #if !defined(ANT_OGL_HEADER_INCLUDED) 83 | # if defined(ANT_OSX) 84 | # include 85 | # else 86 | # include // must be included after windows.h 87 | # endif 88 | # define ANT_OGL_HEADER_INCLUDED 89 | #endif 90 | 91 | #endif // !defined ANT_TW_PRECOMP_INCLUDED 92 | -------------------------------------------------------------------------------- /AntTweakBar/res/FontChars.txt: -------------------------------------------------------------------------------- 1 |  !"#$%&'()*+,-./0123456789:;<=>? 2 | @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ 3 | `abcdefghijklmnopqrstuvwxyz{|}~√ 4 | €‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ 5 |  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ 6 | ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß 7 | àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 8 | 9 | 032 10 | 033 ! 11 | 034 " 12 | 035 # 13 | 036 $ 14 | 037 % 15 | 038 & 16 | 039 ' 17 | 040 ( 18 | 041 ) 19 | 042 * 20 | 043 + 21 | 044 , 22 | 045 - 23 | 046 . 24 | 047 / 25 | 048 0 26 | 049 1 27 | 050 2 28 | 051 3 29 | 052 4 30 | 053 5 31 | 054 6 32 | 055 7 33 | 056 8 34 | 057 9 35 | 058 : 36 | 059 ; 37 | 060 < 38 | 061 = 39 | 062 > 40 | 063 ? 41 | 064 @ 42 | 065 A 43 | 066 B 44 | 067 C 45 | 068 D 46 | 069 E 47 | 070 F 48 | 071 G 49 | 072 H 50 | 073 I 51 | 074 J 52 | 075 K 53 | 076 L 54 | 077 M 55 | 078 N 56 | 079 O 57 | 080 P 58 | 081 Q 59 | 082 R 60 | 083 S 61 | 084 T 62 | 085 U 63 | 086 V 64 | 087 W 65 | 088 X 66 | 089 Y 67 | 090 Z 68 | 091 [ 69 | 092 \ 70 | 093 ] 71 | 094 ^ 72 | 095 _ 73 | 096 ` 74 | 097 a 75 | 098 b 76 | 099 c 77 | 100 d 78 | 101 e 79 | 102 f 80 | 103 g 81 | 104 h 82 | 105 i 83 | 106 j 84 | 107 k 85 | 108 l 86 | 109 m 87 | 110 n 88 | 111 o 89 | 112 p 90 | 113 q 91 | 114 r 92 | 115 s 93 | 116 t 94 | 117 u 95 | 118 v 96 | 119 w 97 | 120 x 98 | 121 y 99 | 122 z 100 | 123 { 101 | 124 | 102 | 125 } 103 | 126 ~ 104 | 127 √ 105 | 128 € 106 | 129  107 | 130 ‚ 108 | 131 ƒ 109 | 132 „ 110 | 133 … 111 | 134 † 112 | 135 ‡ 113 | 136 ˆ 114 | 137 ‰ 115 | 138 Š 116 | 139 ‹ 117 | 140 Œ 118 | 141  119 | 142 Ž 120 | 143  121 | 144  122 | 145 ‘ 123 | 146 ’ 124 | 147 “ 125 | 148 ” 126 | 149 • 127 | 150 – 128 | 151 — 129 | 152 ˜ 130 | 153 ™ 131 | 154 š 132 | 155 › 133 | 156 œ 134 | 157  135 | 158 ž 136 | 159 Ÿ 137 | 160   138 | 161 ¡ 139 | 162 ¢ 140 | 163 £ 141 | 164 ¤ 142 | 165 ¥ 143 | 166 ¦ 144 | 167 § 145 | 168 ¨ 146 | 169 © 147 | 170 ª 148 | 171 « 149 | 172 ¬ 150 | 173 ­ 151 | 174 ® 152 | 175 ¯ 153 | 176 ° 154 | 177 ± 155 | 178 ² 156 | 179 ³ 157 | 180 ´ 158 | 181 µ 159 | 182 ¶ 160 | 183 · 161 | 184 ¸ 162 | 185 ¹ 163 | 186 º 164 | 187 » 165 | 188 ¼ 166 | 189 ½ 167 | 190 ¾ 168 | 191 ¿ 169 | 192 À 170 | 193 Á 171 | 194  172 | 195 à 173 | 196 Ä 174 | 197 Å 175 | 198 Æ 176 | 199 Ç 177 | 200 È 178 | 201 É 179 | 202 Ê 180 | 203 Ë 181 | 204 Ì 182 | 205 Í 183 | 206 Î 184 | 207 Ï 185 | 208 Ð 186 | 209 Ñ 187 | 210 Ò 188 | 211 Ó 189 | 212 Ô 190 | 213 Õ 191 | 214 Ö 192 | 215 × 193 | 216 Ø 194 | 217 Ù 195 | 218 Ú 196 | 219 Û 197 | 220 Ü 198 | 221 Ý 199 | 222 Þ 200 | 223 ß 201 | 224 à 202 | 225 á 203 | 226 â 204 | 227 ã 205 | 228 ä 206 | 229 å 207 | 230 æ 208 | 231 ç 209 | 232 è 210 | 233 é 211 | 234 ê 212 | 235 ë 213 | 236 ì 214 | 237 í 215 | 238 î 216 | 239 ï 217 | 240 ð 218 | 241 ñ 219 | 242 ò 220 | 243 ó 221 | 244 ô 222 | 245 õ 223 | 246 ö 224 | 247 ÷ 225 | 248 ø 226 | 249 ù 227 | 250 ú 228 | 251 û 229 | 252 ü 230 | 253 ý 231 | 254 þ 232 | 255 ÿ 233 | -------------------------------------------------------------------------------- /AntTweakBar/res/cur00000.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00000.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00001.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00001.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00002.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00002.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00003.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00003.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00004.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00004.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00005.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00005.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00006.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00006.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00007.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00007.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00008.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00008.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00009.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00009.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00010.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00010.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00011.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00011.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00012.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00012.cur -------------------------------------------------------------------------------- /AntTweakBar/res/cur00013.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/AntTweakBar/res/cur00013.cur -------------------------------------------------------------------------------- /AntTweakBar/res/curs00.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 18 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs01.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 23 | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 24 | 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs02.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 1 0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 8 | 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 9 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 10 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs03.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 8 | 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs04.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 14 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 1 19 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs05.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 18 | 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 0 19 | 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 0 20 | 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 21 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs06.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs07.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 9 | 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10 | 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 22 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 23 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs08.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 8 | 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 9 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 30 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs09.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 7 | 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 25 | 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 26 | 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs10.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs11.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 18 | 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs12.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 1 19 | 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 20 | 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 21 | 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/curs13.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 10 | 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 16 | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask00.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 17 | 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 18 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 19 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 24 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask01.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 15 | 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 17 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 18 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 23 | 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 24 | 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 25 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask02.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 7 | 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 8 | 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 9 | 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 10 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 24 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 27 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask03.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 7 | 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 8 | 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 9 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 25 | 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask04.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 7 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 13 | 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 14 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 15 | 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 16 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 18 | 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 19 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 26 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask05.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 11 | 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 13 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 17 | 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 18 | 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 19 | 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 20 | 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 21 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask06.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 | 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 13 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 16 | 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 17 | 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 18 | 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 22 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask07.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 8 | 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 9 | 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 10 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 21 | 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 22 | 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 23 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask08.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 7 | 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 8 | 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 9 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 24 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 1 1 1 0 0 0 0 0 27 | 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 28 | 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 30 | 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 31 | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask09.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 7 | 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 13 | 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 24 | 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 25 | 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 26 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask10.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 | 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 15 | 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 16 | 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 18 | 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 19 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 26 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask11.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 | 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 13 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 17 | 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 18 | 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 19 | 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 26 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 27 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 28 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask12.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 | 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10 | 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 11 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 0 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 16 | 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 17 | 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 18 | 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 19 | 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 20 | 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 21 | 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 22 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 23 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/res/mask13.pbm: -------------------------------------------------------------------------------- 1 | P1 2 | # Created by Paint Shop Pro 3 | 32 32 4 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 | 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 | 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 | 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 | 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 10 | 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 11 | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 12 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 13 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 14 | 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 | 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 16 | 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 17 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 19 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 20 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21 | 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 | 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 23 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 24 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 25 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 26 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 27 | 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 28 | 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 29 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 | -------------------------------------------------------------------------------- /AntTweakBar/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by AntTweakBar.rc 4 | // 5 | #define IDC_CURSOR1 101 6 | #define IDC_CURSOR2 102 7 | #define IDC_CURSOR3 103 8 | #define IDC_CURSOR4 104 9 | #define IDC_CURSOR5 105 10 | #define IDC_CURSOR6 106 11 | #define IDC_CURSOR7 107 12 | #define IDC_CURSOR8 108 13 | #define IDC_CURSOR9 109 14 | #define IDC_CURSOR10 110 15 | #define IDC_CURSOR11 111 16 | #define IDC_CURSOR12 112 17 | #define IDC_CURSOR13 113 18 | #define IDC_CURSOR14 114 19 | 20 | // Next default values for new objects 21 | // 22 | #ifdef APSTUDIO_INVOKED 23 | #ifndef APSTUDIO_READONLY_SYMBOLS 24 | #define _APS_NEXT_RESOURCE_VALUE 115 25 | #define _APS_NEXT_COMMAND_VALUE 40001 26 | #define _APS_NEXT_CONTROL_VALUE 1001 27 | #define _APS_NEXT_SYMED_VALUE 101 28 | #endif 29 | #endif 30 | -------------------------------------------------------------------------------- /Cover/Images/City.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Cover/Images/City.jpg -------------------------------------------------------------------------------- /Cover/Images/Distorted.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Cover/Images/Distorted.jpg -------------------------------------------------------------------------------- /Cover/PostTess/PostTess.glsl: -------------------------------------------------------------------------------- 1 | -- VS 2 | 3 | in vec4 Position; 4 | in vec3 Normal; 5 | 6 | out vec3 vPosition; 7 | out vec3 vNormal; 8 | 9 | in vec2 TexCoord; 10 | out vec2 vTexCoord; 11 | 12 | in float Occlusion; 13 | out float vOcclusion; 14 | 15 | void main() 16 | { 17 | vTexCoord = TexCoord; 18 | vPosition = Position.xyz; 19 | vOcclusion = Occlusion; 20 | vNormal = Normal; 21 | } 22 | 23 | -- TessControl 24 | 25 | layout(vertices = 4) out; 26 | 27 | in vec3 vPosition[]; 28 | out vec3 tcPosition[]; 29 | 30 | in vec3 vNormal[]; 31 | out vec3 tcNormal[]; 32 | 33 | in vec2 vTexCoord[]; 34 | out vec2 tcTexCoord[]; 35 | 36 | in float vOcclusion[]; 37 | out float tcOcclusion[]; 38 | 39 | uniform float TessLevelInner; 40 | uniform float TessLevelOuter; 41 | 42 | #define ID gl_InvocationID 43 | 44 | void main() 45 | { 46 | tcPosition[ID] = vPosition[ID]; 47 | tcNormal[ID] = vNormal[ID]; 48 | tcTexCoord[ID] = vTexCoord[ID]; 49 | tcOcclusion[ID] = vOcclusion[ID]; 50 | 51 | if (ID == 0) { 52 | gl_TessLevelInner[0] = TessLevelInner; 53 | gl_TessLevelInner[1] = TessLevelInner; 54 | gl_TessLevelOuter[0] = TessLevelOuter; 55 | gl_TessLevelOuter[1] = TessLevelOuter; 56 | gl_TessLevelOuter[2] = TessLevelOuter; 57 | gl_TessLevelOuter[3] = TessLevelOuter; 58 | } 59 | } 60 | 61 | -- TessEval 62 | 63 | layout(quads) in; 64 | 65 | in vec3 tcPosition[]; 66 | out vec3 tePosition; 67 | 68 | in vec3 tcNormal[]; 69 | out vec3 teNormal; 70 | 71 | in vec2 tcTexCoord[]; 72 | out vec2 teTexCoord; 73 | 74 | in float tcOcclusion[]; 75 | out float teOcclusion; 76 | out vec4 tePatchDistance; 77 | 78 | uniform mat4 Projection; 79 | uniform mat4 Modelview; 80 | uniform mat4 ViewMatrix; 81 | uniform mat4 ModelMatrix; 82 | uniform mat3 NormalMatrix; 83 | uniform float YScale, YOffset; 84 | 85 | void main() 86 | { 87 | float u = gl_TessCoord.x, v = gl_TessCoord.y; 88 | tePatchDistance = vec4(u, v, 1-u, 1-v); 89 | 90 | vec3 a = mix(tcPosition[0], tcPosition[1], u); 91 | vec3 b = mix(tcPosition[3], tcPosition[2], u); 92 | tePosition = mix(a, b, v); 93 | 94 | a = mix(tcNormal[0], tcNormal[1], u); 95 | b = mix(tcNormal[3], tcNormal[2], u); 96 | teNormal = mix(a, b, v); 97 | 98 | float x = mix(tcOcclusion[0], tcOcclusion[1], u); 99 | float y = mix(tcOcclusion[3], tcOcclusion[2], u); 100 | teOcclusion = mix(x, y, v); 101 | 102 | vec2 s2 = mix(tcTexCoord[0], tcTexCoord[1], u); 103 | vec2 t2 = mix(tcTexCoord[3], tcTexCoord[2], u); 104 | teTexCoord = mix(s2, t2, v); 105 | 106 | gl_Position = Projection * Modelview * vec4(tePosition, 1); 107 | 108 | x = 2 * gl_Position.x / gl_Position.w; 109 | y = gl_Position.y / gl_Position.w; 110 | 111 | x = clamp(x, -1.0, 1.0); 112 | float s = acos(x) / (3.14 / 2.0) - 1; 113 | float t = y * YScale + YOffset; 114 | gl_Position.xy = vec2(s, t); 115 | gl_Position.z /= gl_Position.w; 116 | gl_Position.w = 1; 117 | } 118 | 119 | -- Display 120 | 121 | in vec3 teNormal; 122 | in float teOcclusion; 123 | out vec4 FragColor; 124 | uniform vec4 Color; 125 | 126 | void main() 127 | { 128 | FragColor = vec4(Color.rgb * vec3(1.0 - teOcclusion), 1.0); 129 | } 130 | 131 | -- Offscreen 132 | 133 | in vec3 teNormal; 134 | in vec3 tePosition; 135 | 136 | uniform vec4 Color; 137 | 138 | const int Positions = 0; 139 | const int Normals = 1; 140 | const int Colors = 2; 141 | out vec3 FragData[3]; 142 | 143 | void main() 144 | { 145 | FragData[Colors] = Color.rgb; 146 | FragData[Positions] = tePosition; 147 | FragData[Normals] = -normalize(teNormal); 148 | } 149 | 150 | -- Floor 151 | 152 | in vec3 teNormal; 153 | in vec3 tePosition; 154 | in vec4 tePatchDistance; 155 | 156 | uniform vec4 Color; 157 | 158 | const int Positions = 0; 159 | const int Normals = 1; 160 | const int Colors = 2; 161 | out vec3 FragData[3]; 162 | 163 | const vec3 LineColor = vec3(0, 0, 0); 164 | 165 | float amplify(float d, float scale, float offset) 166 | { 167 | d = scale * d + offset; 168 | d = clamp(d, 0, 1); 169 | d = 1 - exp2(-2*d*d); 170 | return d; 171 | } 172 | 173 | void main() 174 | { 175 | if (true) { 176 | float d2 = min(min(min(tePatchDistance.x, tePatchDistance.y), tePatchDistance.z), tePatchDistance.w); 177 | d2 = amplify(d2, 50, -0.5); 178 | FragData[Colors] = d2 * Color.rgb; 179 | } 180 | 181 | FragData[Positions] = tePosition; 182 | FragData[Normals] = -normalize(teNormal); 183 | } 184 | 185 | -- Quad.VS 186 | 187 | in vec4 Position; 188 | out vec2 vTexCoord; 189 | 190 | void main() 191 | { 192 | gl_Position = Position; 193 | vTexCoord = 0.5 + Position.xy * 0.5; 194 | } 195 | 196 | -- Quad.FS 197 | 198 | uniform sampler2D PostageStamp; 199 | 200 | in vec2 vTexCoord; 201 | out vec4 FragColor; 202 | 203 | void main() 204 | { 205 | FragColor = texture(PostageStamp, vTexCoord); 206 | } -------------------------------------------------------------------------------- /Cover/PostTess/SConstruct: -------------------------------------------------------------------------------- 1 | # Clean: 2 | # > scons -c 3 | # 4 | # Debug configuration: 5 | # > scons debug=1 6 | # 7 | # Parallel build: 8 | # > scons -j 4 9 | 10 | import sys 11 | import os 12 | 13 | source = Split(""" 14 | PostTess.c 15 | glew.c 16 | pez.c 17 | """) 18 | 19 | env = Environment(ENV = os.environ) 20 | 21 | env.Program('PostTess', source) 22 | env.Append(CPPPATH = '.') 23 | 24 | UseMingw = True 25 | 26 | if sys.platform == 'win32': 27 | prman = "c:\Program Files\Pixar\RenderManProServer-16.0" 28 | env.Append(LIBPATH=prman + '\\lib') 29 | env.Append(CPPPATH=[prman + '\\include']) 30 | env.Append(CPPDEFINES=['WIN32']) 31 | env.Append(LIBS=Split('opengl32 Gdi32 Comdlg32 liblibprman')) 32 | env.Append(LINKFLAGS = [ "-m64" ]) 33 | if UseMingw: 34 | Tool('mingw')(env) 35 | env.Append(CCFLAGS = '-Wl,--subsystem,windows') 36 | else: 37 | env.Append(CPPDEFINES=['inline=__inline']) 38 | else: 39 | env.Append(LIBS=Split('X11 GL')) 40 | 41 | if env['CC'] == 'gcc': 42 | if sys.platform != 'win32': 43 | env.Replace(CC = '/usr/bin/colorgcc') 44 | env.Append(CPPDEFINES=['inline=__inline']) 45 | env.Replace(CCFLAGS = Split('-std=c99 -Wc++-compat')) 46 | 47 | if ARGUMENTS.get('debug', 0): 48 | env.Append(CCFLAGS = '-g') 49 | 50 | -------------------------------------------------------------------------------- /Cover/PostTess/Utility.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "vmath.h" 4 | #include "pez.h" 5 | 6 | enum AttributeSlot { 7 | SlotPosition, 8 | SlotTexCoord, 9 | }; 10 | 11 | struct TexturePod { 12 | GLuint Handle; 13 | GLsizei Width; 14 | GLsizei Height; 15 | }; 16 | 17 | struct SurfacePod { 18 | GLuint FboHandle; 19 | GLuint ColorTexture; 20 | GLsizei Width; 21 | GLsizei Height; 22 | GLsizei Depth; 23 | }; 24 | 25 | struct SlabPod { 26 | SurfacePod Ping; 27 | SurfacePod Pong; 28 | }; 29 | 30 | TexturePod LoadTexture(const char* path); 31 | SurfacePod CreateSurface(int width, int height, int numComponents = 4); 32 | SurfacePod CreateVolume(int width, int height, int depth, int numComponents = 4); 33 | GLuint CreatePointVbo(float x, float y, float z); 34 | GLuint CreateQuadVbo(); 35 | void CreateObstacles(SurfacePod dest); 36 | SlabPod CreateSlab(GLsizei width, GLsizei height, GLsizei depth, int numComponents); 37 | void InitSlabOps(); 38 | void SwapSurfaces(SlabPod* slab); 39 | void ClearSurface(SurfacePod s, float v); 40 | TexturePod OverlayText(std::string message); 41 | void ExportScreenshot(const char* filename); 42 | 43 | extern const int ViewportWidth; 44 | extern const int ViewportHeight; 45 | -------------------------------------------------------------------------------- /Cover/PostTess/WinGdi.cpp: -------------------------------------------------------------------------------- 1 | #include "Utility.h" 2 | #include 3 | using namespace std; 4 | 5 | #ifdef WIN32 6 | #include 7 | #include 8 | 9 | #pragma comment(lib,"gdiplus.lib") 10 | 11 | using namespace Gdiplus; 12 | 13 | struct OverlayContext 14 | { 15 | string PreviousMessage; 16 | Bitmap* GdiBitmap; 17 | TexturePod MessageTexture; 18 | }; 19 | 20 | static OverlayContext oc; 21 | 22 | extern "C" { 23 | extern HDC hDC; 24 | } 25 | 26 | void InitializeGdi() 27 | { 28 | PezConfig cfg = PezGetConfig(); 29 | 30 | // Create a new text context if it doesn't already exist: 31 | static bool first = true; 32 | if (first) { 33 | first = false; 34 | 35 | GdiplusStartupInput gdiplusStartupInput; 36 | ULONG_PTR gdiplusToken; 37 | GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, 0); 38 | 39 | oc.GdiBitmap = new Bitmap(cfg.Width, cfg.Height, PixelFormat32bppARGB); 40 | glGenTextures(1, &oc.MessageTexture.Handle); 41 | 42 | oc.MessageTexture.Width = cfg.Width; 43 | oc.MessageTexture.Height = cfg.Height; 44 | } 45 | } 46 | 47 | TexturePod OverlayText(string message) 48 | { 49 | InitializeGdi(); 50 | PezConfig cfg = PezGetConfig(); 51 | 52 | // Skip GDI text generation if the string is unchanged: 53 | if (message == oc.PreviousMessage) 54 | return oc.MessageTexture; 55 | 56 | oc.PreviousMessage = message; 57 | 58 | // Create the GDI+ drawing context and set it up: 59 | Graphics* gfx = Graphics::FromImage(oc.GdiBitmap); 60 | gfx->Clear(Color::Transparent); 61 | gfx->SetSmoothingMode(SmoothingModeAntiAlias); 62 | gfx->SetInterpolationMode(InterpolationModeHighQualityBicubic); 63 | 64 | // Select a font: 65 | FontFamily fontFamily(L"Trebuchet MS"); 66 | const float fontSize = 14; 67 | PointF origin(10.0f, 10.0f); 68 | StringFormat format(StringAlignmentNear); 69 | 70 | // Create a path along the outline of the glyphs: 71 | GraphicsPath path; 72 | path.AddString( 73 | wstring(message.begin(), message.end()).c_str(), 74 | -1, 75 | &fontFamily, 76 | FontStyleRegular, 77 | fontSize, 78 | origin, 79 | &format); 80 | 81 | // Draw some glow to steer clear of crappy AA: 82 | for (float width = 0; width < 3; ++width) { 83 | Pen pen(Color(64, 0, 0, 0), width); 84 | pen.SetLineJoin(LineJoinRound); 85 | gfx->DrawPath(&pen, &path); 86 | } 87 | 88 | // Fill the glyphs: 89 | SolidBrush brush(Color(50, 100, 200)); 90 | gfx->FillPath(&brush, &path); 91 | 92 | // Lock the raw pixel data and pass it to OpenGL: 93 | BitmapData data; 94 | oc.GdiBitmap->LockBits(0, ImageLockModeRead, PixelFormat32bppARGB, &data); 95 | _ASSERT(data.Stride == sizeof(unsigned int) * cfg.Width); 96 | glBindTexture(GL_TEXTURE_2D, oc.MessageTexture.Handle); 97 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, cfg.Width, cfg.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data.Scan0); 98 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 99 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 100 | oc.GdiBitmap->UnlockBits(&data); 101 | 102 | return oc.MessageTexture; 103 | } 104 | 105 | int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) 106 | { 107 | using namespace Gdiplus; 108 | UINT num = 0; // number of image encoders 109 | UINT size = 0; // size of the image encoder array in bytes 110 | 111 | ImageCodecInfo* pImageCodecInfo = NULL; 112 | 113 | GetImageEncodersSize(&num, &size); 114 | if(size == 0) 115 | return -1; // Failure 116 | 117 | pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); 118 | if(pImageCodecInfo == NULL) 119 | return -1; // Failure 120 | 121 | GetImageEncoders(num, size, pImageCodecInfo); 122 | 123 | for(UINT j = 0; j < num; ++j) 124 | { 125 | if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) 126 | { 127 | *pClsid = pImageCodecInfo[j].Clsid; 128 | free(pImageCodecInfo); 129 | return j; // Success 130 | } 131 | } 132 | 133 | free(pImageCodecInfo); 134 | return 0; 135 | } 136 | 137 | void ExportScreenshot(const char* filename) 138 | { 139 | InitializeGdi(); 140 | PezConfig cfg = PezGetConfig(); 141 | int Width = cfg.Width; 142 | int Height = cfg.Height; 143 | HDC memdc = CreateCompatibleDC(hDC); 144 | HBITMAP membit = CreateCompatibleBitmap(hDC, Width, Height); 145 | HBITMAP hOldBitmap = (HBITMAP) SelectObject(memdc, membit); 146 | BitBlt(memdc, 0, 0, Width, Height, hDC, 0, 0, SRCCOPY); 147 | Gdiplus::Bitmap bitmap(membit, NULL); 148 | CLSID clsid; 149 | GetEncoderClsid(L"image/png", &clsid); 150 | wstring wfilename(filename, filename + strlen(filename)); 151 | bitmap.Save(wfilename.c_str(), &clsid); 152 | SelectObject(memdc, hOldBitmap); 153 | DeleteObject(memdc); 154 | DeleteObject(membit); 155 | } 156 | 157 | #else 158 | 159 | struct OverlayContext 160 | { 161 | string PreviousMessage; 162 | TexturePod MessageTexture; 163 | }; 164 | 165 | static OverlayContext oc; 166 | 167 | TexturePod OverlayText(string message) 168 | { 169 | static bool first = true; 170 | if (first) { 171 | first = false; 172 | glGenTextures(1, &oc.MessageTexture.Handle); 173 | oc.MessageTexture.Width = cfg.Width; 174 | oc.MessageTexture.Height = cfg.Height; 175 | } 176 | 177 | return oc.MessageTexture; 178 | } 179 | 180 | void ExportScreenshot(const char* filename) 181 | { 182 | } 183 | 184 | #endif -------------------------------------------------------------------------------- /Cover/PostTess/pez.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifdef __cplusplus 4 | extern "C" { 5 | #endif 6 | 7 | #define PEZ_MAINLOOP 1 8 | 9 | #include "glew.h" 10 | 11 | #define PEZ_FORWARD_COMPATIBLE_GL 0 12 | 13 | typedef struct PezConfigRec 14 | { 15 | const char* Title; 16 | int Width; 17 | int Height; 18 | int Multisampling; 19 | int VerticalSync; 20 | } PezConfig; 21 | 22 | #ifdef PEZ_MAINLOOP 23 | PezConfig PezGetConfig(); 24 | void PezInitialize(); 25 | void PezRender(); 26 | void PezUpdate(float seconds); 27 | 28 | #ifdef PEZ_MOUSE_HANDLER 29 | void PezHandleMouse(int x, int y, int action); 30 | #endif 31 | 32 | #ifdef PEZ_DROP_HANDLER 33 | void PezReceiveDrop(const char* filename); 34 | #endif 35 | 36 | #else 37 | void pezSwapBuffers(); 38 | #endif 39 | 40 | enum {PEZ_DOWN, PEZ_UP, PEZ_MOVE, PEZ_DOUBLECLICK}; 41 | #define TwoPi (6.28318531f) 42 | #define Pi (3.14159265f) 43 | #define countof(A) (sizeof(A) / sizeof(A[0])) 44 | 45 | void pezPrintString(const char* pStr, ...); 46 | void pezFatal(const char* pStr, ...); 47 | void pezCheck(int condition, ...); 48 | int pezIsPressing(char key); 49 | const char* pezResourcePath(); 50 | const char* pezOpenFileDialog(); 51 | const char* pezGetDesktopFolder(); 52 | 53 | int pezInit(); 54 | int pezShutdown(); 55 | int pezAddPath(const char* pathPrefix, const char* pathSuffix); 56 | const char* pezGetShader(const char* effectKey); 57 | const char* pezGetError(); 58 | int pezAddDirective(const char* token, const char* directive); 59 | 60 | 61 | typedef struct PezAttribRec { 62 | const GLchar* Name; 63 | GLint Size; 64 | GLenum Type; 65 | GLsizei Stride; 66 | int FrameCount; 67 | GLvoid* Frames; 68 | } PezAttrib; 69 | 70 | typedef struct PezVertsRec { 71 | int AttribCount; 72 | int IndexCount; 73 | int VertexCount; 74 | GLenum IndexType; 75 | GLsizeiptr IndexBufferSize; 76 | PezAttrib* Attribs; 77 | GLvoid* Indices; 78 | void* RawHeader; 79 | } PezVerts; 80 | 81 | typedef struct PezPixelsRec { 82 | int FrameCount; 83 | GLsizei Width; 84 | GLsizei Height; 85 | GLsizei Depth; 86 | GLint MipLevels; 87 | GLenum Format; 88 | GLenum InternalFormat; 89 | GLenum Type; 90 | GLsizeiptr BytesPerFrame; 91 | GLvoid* Frames; 92 | void* RawHeader; 93 | } PezPixels; 94 | 95 | PezVerts pezLoadVerts(const char* filename); 96 | PezVerts pezGenQuad(float left, float top, float right, float bottom); 97 | void pezFreeVerts(PezVerts verts); 98 | void pezSaveVerts(PezVerts verts, const char* filename); 99 | 100 | PezPixels pezLoadPixels(const char* filename); 101 | void pezFreePixels(PezPixels pixels); 102 | void pezSavePixels(PezPixels pixels, const char* filename); 103 | void pezRenderText(PezPixels pixels, const char* message); 104 | PezPixels pezGenNoise(PezPixels desc, float alpha, float beta, int n); 105 | #ifdef __cplusplus 106 | } 107 | #endif 108 | -------------------------------------------------------------------------------- /Cover/PreTess/City.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Cover/PreTess/City.dat -------------------------------------------------------------------------------- /Cover/PreTess/City.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Cover/PreTess/City.jpg -------------------------------------------------------------------------------- /Cover/PreTess/City.ptc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Cover/PreTess/City.ptc -------------------------------------------------------------------------------- /Cover/PreTess/PreTess.glsl: -------------------------------------------------------------------------------- 1 | -- VS 2 | 3 | in vec4 Position; 4 | in vec3 Normal; 5 | 6 | out vec3 vPosition; 7 | out vec3 vNormal; 8 | 9 | in vec2 TexCoord; 10 | out vec2 vTexCoord; 11 | 12 | in float Occlusion; 13 | out float vOcclusion; 14 | 15 | uniform float YScale, YOffset; 16 | uniform mat4 Projection; 17 | uniform mat4 Modelview; 18 | uniform mat4 ViewMatrix; 19 | uniform mat4 ModelMatrix; 20 | uniform mat3 NormalMatrix; 21 | 22 | void main() 23 | { 24 | vTexCoord = TexCoord; 25 | vPosition = Position.xyz; 26 | vOcclusion = Occlusion; 27 | vNormal = Normal; 28 | gl_Position = Projection * Modelview * Position; 29 | 30 | float x = 2 * gl_Position.x / gl_Position.w; 31 | float y = gl_Position.y / gl_Position.w; 32 | 33 | x = clamp(x, -1.0, 1.0); 34 | float s = acos(x) / (3.14 / 2.0) - 1; 35 | float t = y * YScale + YOffset; 36 | gl_Position.xy = vec2(s, t); 37 | gl_Position.z /= gl_Position.w; 38 | gl_Position.w = 1; 39 | } 40 | 41 | -- Display 42 | 43 | in vec3 vNormal; 44 | in float vOcclusion; 45 | out vec4 FragColor; 46 | uniform vec4 Color; 47 | 48 | void main() 49 | { 50 | FragColor = vec4(Color.rgb * vec3(1.0 - vOcclusion), 1.0); 51 | } 52 | 53 | -- Offscreen 54 | 55 | in vec3 vNormal; 56 | in vec3 vPosition; 57 | 58 | uniform vec4 Color; 59 | 60 | const int Positions = 0; 61 | const int Normals = 1; 62 | const int Colors = 2; 63 | out vec3 FragData[3]; 64 | 65 | void main() 66 | { 67 | FragData[Colors] = Color.rgb; 68 | FragData[Positions] = vPosition; 69 | FragData[Normals] = -normalize(vNormal); 70 | } 71 | 72 | -- Quad.VS 73 | 74 | in vec4 Position; 75 | out vec2 vTexCoord; 76 | 77 | void main() 78 | { 79 | gl_Position = Position; 80 | vTexCoord = 0.5 + Position.xy * 0.5; 81 | } 82 | 83 | -- Quad.FS 84 | 85 | uniform sampler2D PostageStamp; 86 | 87 | in vec2 vTexCoord; 88 | out vec4 FragColor; 89 | 90 | void main() 91 | { 92 | FragColor = texture(PostageStamp, vTexCoord); 93 | } -------------------------------------------------------------------------------- /Cover/PreTess/SConstruct: -------------------------------------------------------------------------------- 1 | # Clean: 2 | # > scons -c 3 | # 4 | # Debug configuration: 5 | # > scons debug=1 6 | # 7 | # Parallel build: 8 | # > scons -j 4 9 | 10 | import sys 11 | import os 12 | 13 | source = Split(""" 14 | PreTess.c 15 | glew.c 16 | pez.c 17 | """) 18 | 19 | env = Environment(ENV = os.environ) 20 | 21 | env.Program('PreTess', source) 22 | env.Append(CPPPATH = '.') 23 | 24 | UseMingw = True 25 | 26 | if sys.platform == 'win32': 27 | prman = "c:\Program Files\Pixar\RenderManProServer-16.0" 28 | env.Append(LIBPATH=prman + '\\lib') 29 | env.Append(CPPPATH=[prman + '\\include']) 30 | env.Append(CPPDEFINES=['WIN32']) 31 | env.Append(LIBS=Split('opengl32 Gdi32 Comdlg32 liblibprman')) 32 | env.Append(LINKFLAGS = [ "-m64" ]) 33 | if UseMingw: 34 | Tool('mingw')(env) 35 | env.Append(CCFLAGS = '-Wl,--subsystem,windows') 36 | else: 37 | env.Append(CPPDEFINES=['inline=__inline']) 38 | else: 39 | env.Append(LIBS=Split('X11 GL')) 40 | 41 | if env['CC'] == 'gcc': 42 | if sys.platform != 'win32': 43 | env.Replace(CC = '/usr/bin/colorgcc') 44 | env.Append(CPPDEFINES=['inline=__inline']) 45 | env.Replace(CCFLAGS = Split('-std=c99 -Wc++-compat')) 46 | 47 | if ARGUMENTS.get('debug', 0): 48 | env.Append(CCFLAGS = '-g') 49 | 50 | -------------------------------------------------------------------------------- /Cover/PreTess/pez.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifdef __cplusplus 4 | extern "C" { 5 | #endif 6 | 7 | #define PEZ_MAINLOOP 1 8 | 9 | #include "glew.h" 10 | 11 | #define PEZ_FORWARD_COMPATIBLE_GL 0 12 | 13 | typedef struct PezConfigRec 14 | { 15 | const char* Title; 16 | int Width; 17 | int Height; 18 | int Multisampling; 19 | int VerticalSync; 20 | } PezConfig; 21 | 22 | #ifdef PEZ_MAINLOOP 23 | PezConfig PezGetConfig(); 24 | void PezInitialize(); 25 | void PezRender(); 26 | void PezUpdate(float seconds); 27 | 28 | #ifdef PEZ_MOUSE_HANDLER 29 | void PezHandleMouse(int x, int y, int action); 30 | #endif 31 | 32 | #ifdef PEZ_DROP_HANDLER 33 | void PezReceiveDrop(const char* filename); 34 | #endif 35 | 36 | #else 37 | void pezSwapBuffers(); 38 | #endif 39 | 40 | enum {PEZ_DOWN, PEZ_UP, PEZ_MOVE, PEZ_DOUBLECLICK}; 41 | #define TwoPi (6.28318531f) 42 | #define Pi (3.14159265f) 43 | #define countof(A) (sizeof(A) / sizeof(A[0])) 44 | 45 | void pezPrintString(const char* pStr, ...); 46 | void pezFatal(const char* pStr, ...); 47 | void pezCheck(int condition, ...); 48 | int pezIsPressing(char key); 49 | const char* pezResourcePath(); 50 | const char* pezOpenFileDialog(); 51 | const char* pezGetDesktopFolder(); 52 | 53 | int pezInit(); 54 | int pezShutdown(); 55 | int pezAddPath(const char* pathPrefix, const char* pathSuffix); 56 | const char* pezGetShader(const char* effectKey); 57 | const char* pezGetError(); 58 | int pezAddDirective(const char* token, const char* directive); 59 | 60 | 61 | typedef struct PezAttribRec { 62 | const GLchar* Name; 63 | GLint Size; 64 | GLenum Type; 65 | GLsizei Stride; 66 | int FrameCount; 67 | GLvoid* Frames; 68 | } PezAttrib; 69 | 70 | typedef struct PezVertsRec { 71 | int AttribCount; 72 | int IndexCount; 73 | int VertexCount; 74 | GLenum IndexType; 75 | GLsizeiptr IndexBufferSize; 76 | PezAttrib* Attribs; 77 | GLvoid* Indices; 78 | void* RawHeader; 79 | } PezVerts; 80 | 81 | typedef struct PezPixelsRec { 82 | int FrameCount; 83 | GLsizei Width; 84 | GLsizei Height; 85 | GLsizei Depth; 86 | GLint MipLevels; 87 | GLenum Format; 88 | GLenum InternalFormat; 89 | GLenum Type; 90 | GLsizeiptr BytesPerFrame; 91 | GLvoid* Frames; 92 | void* RawHeader; 93 | } PezPixels; 94 | 95 | PezVerts pezLoadVerts(const char* filename); 96 | PezVerts pezGenQuad(float left, float top, float right, float bottom); 97 | void pezFreeVerts(PezVerts verts); 98 | void pezSaveVerts(PezVerts verts, const char* filename); 99 | 100 | PezPixels pezLoadPixels(const char* filename); 101 | void pezFreePixels(PezPixels pixels); 102 | void pezSavePixels(PezPixels pixels, const char* filename); 103 | void pezRenderText(PezPixels pixels, const char* message); 104 | PezPixels pezGenNoise(PezPixels desc, float alpha, float beta, int n); 105 | #ifdef __cplusplus 106 | } 107 | #endif 108 | -------------------------------------------------------------------------------- /Cover/Python/AmbientOcclusion.sl: -------------------------------------------------------------------------------- 1 | class AmbientOcclusion( 2 | string filename = "", 3 | displaychannels = "", 4 | coordsys = ""; 5 | color em = (1,0,1); 6 | float samples = 64; 7 | float Ka = 0.0; 8 | float Kd = 0.0; 9 | float Ks = 0.0; 10 | float roughness =.1; 11 | color specularcolor = 1; 12 | ) 13 | { 14 | public void surface(output color Ci, Oi) 15 | { 16 | normal Nf = normalize(faceforward(N, I)); 17 | vector V = vector(0) - normalize(I); 18 | normal Nn = normalize(Nf); 19 | 20 | float occ = occlusion(P, Nn, samples, 21 | "maxdist", 500.0); 22 | 23 | if (filename != "") 24 | bake3d(filename, displaychannels, P, N, 25 | "coordsystem", coordsys, 26 | "_occlusion", occ); 27 | 28 | color c = (em + Ka*ambient() + Kd*diffuse(Nf)) + 29 | specularcolor * Ks * specular(Nf, V, roughness); 30 | 31 | Ci = (1 - occ) * Cs * c * Os; 32 | Oi = Os; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Cover/Python/City.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Cover/Python/Five.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Cover/Python/Panorama.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | ThreadCount = 4 4 | ShadingRate = 4 # Bigger is faster 5 | ImageFormat = (350*3/2,500*3/2,1) 6 | PixelSamples = (1,1) 7 | OccSamples = 4 8 | Crop = None # left, top, width, height 9 | 10 | import sys 11 | import os 12 | import time 13 | import LSystem 14 | import euclid 15 | 16 | if 'RMANTREE' in os.environ: 17 | from sys import path as module_paths 18 | path = os.environ['RMANTREE'] + '/bin' 19 | module_paths.append(path) 20 | 21 | import prman 22 | 23 | def SetLabel( self, label, groups = '' ): 24 | """Sets the id and ray group(s) for subsequent gprims""" 25 | self.Attribute(self.IDENTIFIER,{self.NAME:label}) 26 | if groups != '': 27 | self.Attribute("grouping",{"membership":groups}) 28 | 29 | def Compile(shader): 30 | """Compiles the given RSL file""" 31 | print 'Compiling %s...' % shader 32 | retval = os.system("shader %s.sl" % shader) 33 | if retval: 34 | quit() 35 | 36 | def CreateBrickmap(base): 37 | """Creates a brick map from a point cloud""" 38 | if os.path.exists('%s.bkm' % base): 39 | print "Found brickmap for %s" % base 40 | else: 41 | print "Creating brickmap for %s..." % base 42 | if not os.path.exists('%s.ptc' % base): 43 | print "Error: %s.ptc has not been generated." % base 44 | else: 45 | os.system("brickmake %s.ptc %s.bkm" % (base, base)) 46 | 47 | def Clean(): 48 | """Removes build artifacts from the current directory""" 49 | from glob import glob 50 | filespec = "*.slo *.bkm *.ptc *.xml *.tif *.mov *.pyc" 51 | patterns = map(glob, filespec.split(" ")) 52 | for files in patterns: 53 | map(os.remove, files) 54 | 55 | def ReportProgress(): 56 | """Communicates with the prman process, printing progress""" 57 | previous = progress = 0 58 | while progress < 100: 59 | prman.RicProcessCallbacks() 60 | progress = prman.RicGetProgress() 61 | if progress == 100 or progress < previous: 62 | break 63 | if progress != previous: 64 | print "\r%04d - %s%%" % (ReportProgress.counter, progress), 65 | previous = progress 66 | time.sleep(0.1) 67 | print "\r%04d - 100%%" % ReportProgress.counter 68 | ReportProgress.counter += 1 69 | ReportProgress.counter = 0 70 | 71 | Cages = [] 72 | Curves = [] 73 | 74 | def DrawScene(ri, time): 75 | """Everything between RiBegin and RiEnd""" 76 | 77 | frameString = "%04d" % DrawScene.counter 78 | filename = "Art%s.tif" % frameString 79 | DrawScene.counter += 1 80 | 81 | bakeArgs = dict(filename="AO.ptc",samples=OccSamples) 82 | bakeArgs['displaychannels'] = '_occlusion' 83 | 84 | if Crop: 85 | crop = (Crop[0] / ImageFormat[0], 86 | (Crop[0] + Crop[2]) / ImageFormat[0], 87 | Crop[1] / ImageFormat[1], 88 | (Crop[1] + Crop[3]) / ImageFormat[1]) 89 | ri.CropWindow(*crop) 90 | 91 | ri.Option("limits", {"int threads" : ThreadCount}) 92 | ri.Display("panorama", "framebuffer", "rgba") 93 | ri.Format(*ImageFormat) 94 | ri.ShadingRate(ShadingRate) 95 | ri.PixelSamples(*PixelSamples) 96 | ri.Projection(ri.PERSPECTIVE, {ri.FOV: 30}) 97 | #ri.Imager("PanoramicDistortion", {"background": (0.0/255.0,165.0/255.0,211.0/255.0)}) 98 | ri.WorldBegin() 99 | ri.Declare("samples", "float") 100 | ri.Declare("displaychannels", "string") 101 | ri.Attribute("cull", dict(hidden=0,backfacing=0)) 102 | ri.Attribute("dice", dict(rasterorient=0)) 103 | ri.Attribute("visibility", dict(diffuse=1,specular=1)) 104 | 105 | ri.SetLabel('Floor') 106 | bakeArgs['color em'] = (0.0/255.0,165.0/255.0,211.0/255.0) 107 | ri.Surface("AmbientOcclusion", bakeArgs) 108 | ri.TransformBegin() 109 | ri.Rotate(90, 1, 0, 0) 110 | ri.Disk(0.7, 30, 360) 111 | ri.TransformEnd() 112 | 113 | width = 0.15 114 | height = 0.1 115 | sharpness = 2.0 116 | 117 | ri.SetLabel('Sculpture') 118 | bakeArgs['color em'] = (1.5,1.5,1.5) 119 | ri.Surface("AmbientOcclusion", bakeArgs) 120 | tree = open('City.xml').read() 121 | shapes = [] 122 | seed = 76 123 | for x in xrange(5): 124 | shapes += LSystem.Evaluate(tree, seed) 125 | seed = seed + 1 126 | ri.TransformBegin() 127 | ri.Translate(-1.25,0,20.0) # 2.5 for panoromic 128 | ri.Rotate(45, 0, 1, 0) 129 | for shape in shapes: 130 | if shape == None: 131 | continue 132 | P, U, V, W = shape 133 | if P.y > 0: 134 | continue 135 | corners = [] 136 | corners += (P - U - V - W)[:] 137 | corners += (P + U - V - W)[:] 138 | corners += (P - U + V - W)[:] 139 | corners += (P + U + V - W)[:] 140 | corners += (P - U - V + W)[:] 141 | corners += (P + U - V + W)[:] 142 | corners += (P - U + V + W)[:] 143 | corners += (P + U + V + W)[:] 144 | ri.PointsPolygons([4, 4, 4, 4, 4, 4], 145 | [2,3,1,0, 1,5,4,0, 7,6,4,5, 3,2,6,7, 0,4,6,2, 7,5,1,3], 146 | {ri.P:corners}) 147 | ri.TransformEnd() 148 | ri.WorldEnd() 149 | DrawScene.counter = 0 150 | 151 | if __name__ == "__main__": 152 | 153 | if sys.argv[-1] == "clean": 154 | Clean() 155 | quit() 156 | 157 | Compile('AmbientOcclusion') 158 | Compile('PanoramicDistortion') 159 | prman.Ri.SetLabel = SetLabel 160 | ri = prman.Ri() 161 | 162 | ri.Begin("launch:prman? -ctrl $ctrlin $ctrlout") 163 | DrawScene(ri, 0) 164 | ReportProgress() 165 | ri.End() 166 | -------------------------------------------------------------------------------- /Cover/Python/PanoramicDistortion.sl: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * panorama.sl 3 | * 4 | * Procedural lens to capture a panorama around the y-axis 5 | * from a location in world space. 6 | * 7 | * This can mimic both cylindrical (spherical = 0.) 8 | * and spherical (spherical = 1., ymax == ymin) 9 | * panoramic lenses. 10 | * 11 | * To avoid intersecting the scene, the point P is 12 | * cast from the axis rather than the surface of 13 | * the cylinder or sphere. 14 | * 15 | * The theta angles select a range of angles around 16 | * the y-axis which span [0, 1] in s. 17 | * 18 | * The fovy angles set the "field of view" in the y-direction. 19 | * For example, a fovylo = -15; fovyhi = 15 sets a centered 20 | * field-of-view of 30 degrees. 21 | * 22 | * When usendc is set, the parametric coordinates are overridden 23 | * by screen filling normalized device coordinates, allowing 24 | * any clip-plane object to look through the lens. 25 | * 26 | * Reference: 27 | * _Advanced RenderMan: Creating CGI for Motion Picture_, 28 | * by Anthony A. Apodaca and Larry Gritz, Morgan Kaufmann, 1999. 29 | * 30 | ****************************************************************************/ 31 | 32 | 33 | /* Converted to an Imager shader by Philip Rideout */ 34 | /* I'm not sure why RiCurves look so bad with this. */ 35 | /* Might be one of the "Curve Dicing" attributes... */ 36 | 37 | class 38 | PanoramicDistortion ( 39 | color background = (0,0,0); 40 | float usendc = 0; 41 | float spherical = 0; 42 | float thetamin = 125-90.; // raise X to move to left 43 | float thetamax = 125+90.; 44 | 45 | float worldx = 0.; 46 | float worldz = 0.; 47 | 48 | float ymin = -1.5; // increase to lower the top crop line 49 | float ymax = -2.0; // increase to lower the bottom crop line 50 | float fovylo = -80; 51 | float fovyhi = 80; ) 52 | { 53 | public void imager( 54 | output varying color Ci; 55 | output varying color Oi;) 56 | { 57 | varying float ss = s; 58 | varying float tt = t; 59 | 60 | if (usendc != 0.0) { 61 | varying point P2 = transform("NDC", P); 62 | ss = xcomp(P2); 63 | tt = 1. - ycomp(P2); 64 | } 65 | 66 | varying float theta = radians(thetamin + ss * (thetamax - thetamin)); 67 | 68 | varying float angley; 69 | if (spherical != 0.0) { 70 | angley = radians(fovylo + (fovyhi - fovylo) * tt); 71 | } else { 72 | uniform float sfovylo = sin(radians(fovylo)); 73 | uniform float sfovyhi = sin(radians(fovyhi)); 74 | varying float sfovyt = sfovylo + (sfovyhi - sfovylo) * tt; 75 | angley = asin(sfovyt); 76 | } 77 | 78 | varying float sy = sin(angley); 79 | varying float cy = cos(angley); 80 | varying vector It = vector "world" ( cos(theta) * cy, sy, sin(theta) * cy); 81 | varying point Pt = point "world" ( worldx, ymin + tt * (ymax - ymin), worldz); 82 | 83 | float d; 84 | Ci = (0,0,0); 85 | d = trace(Pt, It); if (d > 1000.0) Ci += background; else Ci += trace(Pt, It); 86 | 87 | // Vignette: 88 | float x = s - 0.5; 89 | float y = t - 0.5; 90 | d = x * x + y * y; 91 | Ci *= 1.0 - d; 92 | 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /Gumbo/elephant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Gumbo/elephant.png -------------------------------------------------------------------------------- /Gumbo/gumbo.ctm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Gumbo/gumbo.ctm -------------------------------------------------------------------------------- /Gumbo/gumbo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | from sys import path as module_paths 4 | module_paths.append('./pymesh') 5 | 6 | from platform_open import * 7 | from weld import * 8 | import parametric, patch 9 | 10 | outfile = "gumbo.ctm" 11 | infile = "gumbo.rib" 12 | 13 | print "Loading RIB file..." 14 | 15 | GenerateCtm = False 16 | 17 | if GenerateCtm: 18 | 19 | from export_ctm import * 20 | 21 | funcs = patch.gen_funcs_from_rib(infile) 22 | slices, stacks = 8, 8 23 | 24 | print "Evaluating parametric functions..." 25 | verts, faces = parametric.multisurface(slices, stacks, funcs) 26 | 27 | # Note that creases are not supported by weld(). 28 | print "Welding verts..." 29 | verts, faces = weld(verts, faces) 30 | 31 | export_raw(verts, faces, outfile) 32 | platform_open(outfile) 33 | 34 | else: 35 | 36 | def dump_tuples(headerFile, mylist): 37 | for v in mylist: 38 | s = [] 39 | for value in v[:]: 40 | if math.floor(value) == value: 41 | s.append(str(int(value))) 42 | else: 43 | s.append('%gf' % value) 44 | headerFile.write("\t{ %s, %s, %s },\n" % tuple(s)) 45 | 46 | verts, norms, knots = patch.gen_indexed_knots_from_rib(infile) 47 | headerFile = open('GumboData.h', 'w') 48 | headerFile.write('float GumboPositions[%d][3] = {\n' % len(verts)); 49 | dump_tuples(headerFile, verts) 50 | headerFile.write('};\n\n'); 51 | headerFile.write('float GumboNormals[%d][3] = {\n' % len(verts)); 52 | dump_tuples(headerFile, norms) 53 | headerFile.write('};\n\n'); 54 | patchCount = len(knots) / 16 55 | headerFile.write('unsigned short GumboKnots[%d][16] = {\n' % patchCount); 56 | grouper = [iter(knots)] * 16 57 | for v in izip(*grouper): 58 | headerFile.write( "\t{%s},\n" % ", ".join(map(str,v)) ) 59 | headerFile.write('};\n\n'); 60 | -------------------------------------------------------------------------------- /Gumbo/gumbo.vbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Gumbo/gumbo.vbo -------------------------------------------------------------------------------- /Gumbo/normals.py: -------------------------------------------------------------------------------- 1 | from sympy import * 2 | 3 | def Mat4(s): 4 | return Matrix(4,4,lambda i,j:Symbol(s + str(i) + str(j))) 5 | 6 | def Syms(s): 7 | return map(Symbol,s.split()) 8 | 9 | def Mats(s): 10 | return map(Mat4,s.split()) 11 | 12 | def Vec3(*v): 13 | return Matrix(3,1,v) 14 | 15 | u,v=Syms('u v') 16 | x,y,z,w=Syms('x y z w') 17 | P = Matrix(4,1,[x,y,z,w]) 18 | U = Matrix(1,4, [u*u*u, u*u, u, 1]) 19 | V = Matrix(4,1, [v*v*v, v*v, v, 1]) 20 | cx,cy,cz = Mats('cx cy cz') 21 | correct = diff((U*cx*V)[0], u) 22 | dU = Matrix(1,4, [3*u*u, 2*u, 1, 0]) 23 | guess = (dU*cx*V)[0] 24 | print guess - correct 25 | print "Hurray they're equal!" 26 | 27 | f = Vec3( 28 | (U*cx*V)[0], 29 | (U*cy*V)[0], 30 | (U*cz*V)[0]) 31 | dfdu = Vec3(*[diff(g, u) for g in f]) 32 | dfdv = Vec3(*[diff(g, v) for g in f]) 33 | print dfdu.cross(dfdv) 34 | -------------------------------------------------------------------------------- /Gumbo/pyctm/ctminfo.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python 2 | #------------------------------------------------------------------------------ 3 | # Program: ctminfo.py 4 | # Description: Show information about an OpenCTM file 5 | # License: Public domain 6 | #------------------------------------------------------------------------------ 7 | 8 | import sys 9 | import openctm 10 | from openctm import * 11 | 12 | # Check arguments 13 | if len(sys.argv) != 2: 14 | print("Usage: " + sys.argv[0] + " file") 15 | sys.exit() 16 | 17 | # Create an OpenCTM context, and load the file 18 | ctm = ctmNewContext(CTM_IMPORT) 19 | ctmLoad(ctm, sys.argv[1]) 20 | err = ctmGetError(ctm) 21 | if err != CTM_NONE: 22 | print("Error loading file: " + str(ctmErrorString(err))) 23 | sys.exit() 24 | 25 | # Interpret information 26 | if ctmGetInteger(ctm, CTM_HAS_NORMALS) == CTM_TRUE: 27 | hasNormals = "yes" 28 | else: 29 | hasNormals = "no"; 30 | method = ctmGetInteger(ctm, CTM_COMPRESSION_METHOD) 31 | if method == CTM_METHOD_RAW: 32 | methodStr = "RAW" 33 | elif method == CTM_METHOD_MG1: 34 | methodStr = "MG1" 35 | elif method == CTM_METHOD_MG2: 36 | methodStr = "MG2" 37 | else: 38 | methodStr = "Unknown" 39 | 40 | # Print information 41 | print(" File: " + sys.argv[1]) 42 | print(" Comment: " + str(ctmGetString(ctm, CTM_FILE_COMMENT))) 43 | print("Triangle count: " + str(ctmGetInteger(ctm, CTM_TRIANGLE_COUNT))) 44 | print(" Vertex count: " + str(ctmGetInteger(ctm, CTM_VERTEX_COUNT))) 45 | print(" Has normals: " + hasNormals) 46 | print(" Method: " + methodStr) 47 | 48 | # List UV maps 49 | uvMapCount = ctmGetInteger(ctm, CTM_UV_MAP_COUNT) 50 | print(" UV maps: " + str(uvMapCount)) 51 | for i in range(uvMapCount): 52 | print(" CTM_UV_MAP_" + str(i+1) + ": \"" + str(ctmGetUVMapString(ctm, CTM_UV_MAP_1 + i, CTM_NAME)) + "\", ref = \"" + str(ctmGetUVMapString(ctm, CTM_UV_MAP_1 + i, CTM_FILE_NAME)) + "\"") 53 | 54 | # List attrib maps 55 | attribMapCount = ctmGetInteger(ctm, CTM_ATTRIB_MAP_COUNT) 56 | print("Attribute maps: " + str(attribMapCount)) 57 | for i in range(attribMapCount): 58 | print(" CTM_ATTRIB_MAP_" + str(i+1) + ": \"" + str(ctmGetAttribMapString(ctm, CTM_ATTRIB_MAP_1 + i, CTM_NAME)) + "\"") 59 | 60 | # Free the OpenCTM context 61 | ctmFreeContext(ctm) 62 | -------------------------------------------------------------------------------- /Gumbo/pyctm/openctm.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prideout/opengl-insights/34391b87c58023f3d1466988efe4be10fba02425/Gumbo/pyctm/openctm.dll -------------------------------------------------------------------------------- /Gumbo/pyeuclid/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | ''' 4 | ''' 5 | 6 | __docformat__ = 'restructuredtext' 7 | __version__ = '$Id$' 8 | 9 | from distutils.core import setup 10 | 11 | setup(name='euclid', 12 | version='0.01', 13 | description='2D and 3D vector, matrix, quaternion and geometry module', 14 | author='Alex Holkner', 15 | author_email='alex@partiallydisassembled.net', 16 | url='http://partiallydisassembled.net/euclid.html', 17 | py_modules=['euclid'], 18 | ) 19 | 20 | -------------------------------------------------------------------------------- /Gumbo/pymesh/blob.py: -------------------------------------------------------------------------------- 1 | from ctypes import * 2 | 3 | def make_blob(verts, T): 4 | """Convert a list of tuples of numbers into a ctypes pointer-to-array""" 5 | size = len(verts) * len(verts[0]) 6 | Blob = T * size 7 | floats = [c for v in verts for c in v] 8 | blob = Blob(*floats) 9 | return cast(blob, POINTER(T)) 10 | -------------------------------------------------------------------------------- /Gumbo/pymesh/export_ctm.py: -------------------------------------------------------------------------------- 1 | from sys import path as module_paths 2 | module_paths.append('../pyctm') 3 | module_paths.append('./pyctm') 4 | 5 | from ctypes import * 6 | from blob import * 7 | from openctm import * 8 | 9 | def export_ctm(verts, faces, outfile): 10 | pVerts = make_blob(verts, c_float) 11 | pFaces = make_blob(faces, c_uint) 12 | pNormals = POINTER(c_float)() 13 | ctm = ctmNewContext(CTM_EXPORT) 14 | 15 | ctmCompressionLevel(ctm, 9) # 0 to 9; default is 1 16 | #ctmVertexPrecision # only matters for MG2; defaults to 0.00098 17 | #ctmCompressionMethod(ctm, CTM_METHOD_MG2) # MG1 or MG2 18 | 19 | ctmDefineMesh(ctm, pVerts, len(verts), pFaces, len(faces), pNormals) 20 | ctmSave(ctm, outfile) 21 | ctmFreeContext(ctm) 22 | 23 | def export_raw(verts, faces, outfile): 24 | pVerts = make_blob(verts, c_float) 25 | pFaces = make_blob(faces, c_uint) 26 | pNormals = POINTER(c_float)() 27 | ctm = ctmNewContext(CTM_EXPORT) 28 | ctmCompressionMethod(ctm, CTM_METHOD_RAW) 29 | ctmDefineMesh(ctm, pVerts, len(verts), pFaces, len(faces), pNormals) 30 | ctmSave(ctm, outfile) 31 | ctmFreeContext(ctm) 32 | -------------------------------------------------------------------------------- /Gumbo/pymesh/import_ctm.py: -------------------------------------------------------------------------------- 1 | from sys import path as module_paths 2 | module_paths.append('../pyctm') 3 | module_paths.append('./pyctm') 4 | 5 | from ctypes import * 6 | from blob import * 7 | from openctm import * 8 | 9 | def import_ctm(infile): 10 | ctm = ctmNewContext(CTM_IMPORT) 11 | ctmLoad(ctm, infile) 12 | vertexCount = ctmGetInteger(ctm, CTM_VERTEX_COUNT); 13 | faceCount = ctmGetInteger(ctm, CTM_TRIANGLE_COUNT); 14 | 15 | facePointer = ctmGetIntegerArray(ctm, CTM_INDICES); 16 | vertPointer = ctmGetFloatArray(ctm, CTM_VERTICES) 17 | 18 | verts = [(vertPointer[3*i], vertPointer[3*i+1], vertPointer[3*i+2]) for i in xrange(vertexCount)] 19 | faces = [(facePointer[3*i], facePointer[3*i+1], facePointer[3*i+2]) for i in xrange(faceCount)] 20 | 21 | ctmFreeContext(ctm) 22 | return (verts, faces) -------------------------------------------------------------------------------- /Gumbo/pymesh/parametric.py: -------------------------------------------------------------------------------- 1 | from math import * 2 | from euclid import * 3 | 4 | def make_torus(major, minor): 5 | def torus(u, v): 6 | u = u * 2 7 | x = (major + minor * cos(v)) * cos(u) 8 | y = (major + minor * cos(v)) * sin(u) 9 | z = minor * sin(v) 10 | return x, y, z 11 | return torus 12 | 13 | def sphere(u, v): 14 | x = sin(u) * cos(v) 15 | y = cos(u) 16 | z = -sin(u) * sin(v) 17 | return x, y, z 18 | 19 | def klein(u, v): 20 | u = u * 2 21 | if u < pi: 22 | x = 3 * cos(u) * (1 + sin(u)) + (2 * (1 - cos(u) / 2)) * cos(u) * cos(v) 23 | z = -8 * sin(u) - 2 * (1 - cos(u) / 2) * sin(u) * cos(v) 24 | else: 25 | x = 3 * cos(u) * (1 + sin(u)) + (2 * (1 - cos(u) / 2)) * cos(v + pi) 26 | z = -8 * sin(u) 27 | y = -2 * (1 - cos(u) / 2) * sin(v) 28 | return x, y, z 29 | 30 | def mobius(u, t): 31 | u = u * 2 32 | phi = u / 2 33 | major, a, b = 1.25, 0.125, 0.5 34 | x = a * cos(t) * cos(phi) - b * sin(t) * sin(phi) 35 | z = a * cos(t) * sin(phi) + b * sin(t) * cos(phi) 36 | y = (major + x) * sin(u) 37 | x = (major + x) * cos(u) 38 | return x, y, z 39 | 40 | def create_indices(slices, stacks): 41 | faces = [] 42 | v = 0 43 | for i in xrange(slices - 1): 44 | for j in xrange(stacks): 45 | next = (j + 1) % stacks 46 | faces.append((v + j, v + next, v + j + stacks)) 47 | faces.append((v + next, v + next + stacks, v + j + stacks)) 48 | v = v + stacks 49 | return faces, v 50 | 51 | def normalized_surface(slices, stacks, func): 52 | verts = [] 53 | for i in xrange(slices): 54 | u = i * 1. / (slices - 1) 55 | for j in xrange(stacks): 56 | v = j * 1. / (stacks - 1) 57 | p = func(u, v) 58 | verts.append(p) 59 | faces = [] 60 | v = 0 61 | for i in xrange(slices - 1): 62 | for j in xrange(stacks - 1): 63 | faces.append((v, v + 1, v + 1 + stacks)) 64 | faces.append((v + 1 + stacks, v + stacks, v)) 65 | v = v + 1 66 | v = v + 1 67 | return verts, faces 68 | 69 | def multisurface(slices, stacks, funcs): 70 | allverts = [] 71 | allfaces = [] 72 | for func in funcs: 73 | verts, faces = normalized_surface(slices, stacks, func) 74 | n = len(allverts) 75 | allverts = allverts + verts 76 | for face in faces: 77 | i,j,k = face 78 | allfaces.append((i+n,j+n,k+n)) 79 | return allverts, allfaces 80 | 81 | def closed_surface(slices, stacks, func): 82 | verts = [] 83 | for i in xrange(slices): 84 | theta = i * pi / slices 85 | for j in xrange(stacks): 86 | phi = j * 2.0 * pi / stacks 87 | p = func(theta, phi) 88 | verts.append(p) 89 | 90 | faces, v = create_indices(slices - 1, stacks) 91 | for j in xrange(stacks): 92 | next = (j + 1) % stacks 93 | faces.append((v + j, v + next, j)) 94 | faces.append((v + next, next, j)) 95 | 96 | return verts, faces 97 | 98 | def open_surface(slices, stacks, func): 99 | verts = [] 100 | for i in xrange(slices + 1): 101 | theta = i * pi / slices 102 | for j in xrange(stacks): 103 | phi = j * 2.0 * pi / stacks 104 | p = func(theta, phi) 105 | verts.append(p) 106 | 107 | faces, v = create_indices(slices, stacks) 108 | return verts, faces 109 | -------------------------------------------------------------------------------- /Gumbo/pymesh/platform_open.py: -------------------------------------------------------------------------------- 1 | from platform import uname as platform_name 2 | import os 3 | 4 | def platform_open(str): 5 | """Open specified file using your window manager's preferred application""" 6 | name = platform_name()[0] 7 | if name == "Linux": 8 | os.system("gnome-open " + str) 9 | elif name == "Windows": 10 | os.system("start " + str) 11 | else: 12 | os.system("open " + str) 13 | -------------------------------------------------------------------------------- /Gumbo/pymesh/polyhedra.py: -------------------------------------------------------------------------------- 1 | from math import * 2 | from euclid import * 3 | 4 | def icosahedron(): 5 | """Construct a 20-sided polyhedron""" 6 | faces = [ \ 7 | (0,1,2), 8 | (0,2,3), 9 | (0,3,4), 10 | (0,4,5), 11 | (0,5,1), 12 | (11,6,7), 13 | (11,7,8), 14 | (11,8,9), 15 | (11,9,10), 16 | (11,10,6), 17 | (1,2,6), 18 | (2,3,7), 19 | (3,4,8), 20 | (4,5,9), 21 | (5,1,10), 22 | (6,7,2), 23 | (7,8,3), 24 | (8,9,4), 25 | (9,10,5), 26 | (10,6,1) ] 27 | verts = [ \ 28 | ( 0.000, 0.000, 1.000 ), 29 | ( 0.894, 0.000, 0.447 ), 30 | ( 0.276, 0.851, 0.447 ), 31 | (-0.724, 0.526, 0.447 ), 32 | (-0.724, -0.526, 0.447 ), 33 | ( 0.276, -0.851, 0.447 ), 34 | ( 0.724, 0.526, -0.447 ), 35 | (-0.276, 0.851, -0.447 ), 36 | (-0.894, 0.000, -0.447 ), 37 | (-0.276, -0.851, -0.447 ), 38 | ( 0.724, -0.526, -0.447 ), 39 | ( 0.000, 0.000, -1.000 ) ] 40 | return verts, faces 41 | 42 | def octohedron(): 43 | """Construct an eight-sided polyhedron""" 44 | f = sqrt(2.0) / 2.0 45 | verts = [ \ 46 | ( 0, -1, 0), 47 | (-f, 0, f), 48 | ( f, 0, f), 49 | ( f, 0, -f), 50 | (-f, 0, -f), 51 | ( 0, 1, 0) ] 52 | faces = [ \ 53 | (0, 2, 1), 54 | (0, 3, 2), 55 | (0, 4, 3), 56 | (0, 1, 4), 57 | (5, 1, 2), 58 | (5, 2, 3), 59 | (5, 3, 4), 60 | (5, 4, 1) ] 61 | return verts, faces 62 | 63 | def subdivide(verts, faces): 64 | """Subdivide each triangle into four triangles, pushing verts to the unit sphere""" 65 | triangles = len(faces) 66 | for faceIndex in xrange(triangles): 67 | 68 | # Create three new verts at the midpoints of each edge: 69 | face = faces[faceIndex] 70 | a,b,c = (Vector3(*verts[vertIndex]) for vertIndex in face) 71 | verts.append((a + b).normalized()[:]) 72 | verts.append((b + c).normalized()[:]) 73 | verts.append((a + c).normalized()[:]) 74 | 75 | # Split the current triangle into four smaller triangles: 76 | i = len(verts) - 3 77 | j, k = i+1, i+2 78 | faces.append((i, j, k)) 79 | faces.append((face[0], i, k)) 80 | faces.append((i, face[1], j)) 81 | faces[faceIndex] = (k, j, face[2]) 82 | 83 | return verts, faces 84 | -------------------------------------------------------------------------------- /Gumbo/pymesh/rules_surface.py: -------------------------------------------------------------------------------- 1 | from math import * 2 | from euclid import * 3 | from lxml import etree 4 | from lxml import objectify 5 | import random 6 | 7 | # Each shape is a 2-tuple: (verts, faces) 8 | shapes = { 'box' : ([ \ 9 | # Box Verts 10 | (0, 0, 0), 11 | (0, 0, 1), 12 | (0, 1, 0), 13 | (0, 1, 1), 14 | (1, 0, 0), 15 | (1, 0, 1), 16 | (1, 1, 0), 17 | (1, 1, 1) ], [ \ 18 | # Box Faces 19 | (0, 1, 4), (1, 5, 4), # Front 20 | (2, 3, 6), (3, 7, 6), # Back 21 | (0, 2, 6), (6, 4, 0), # Top 22 | (1, 3, 7), (7, 5, 1), # Bottom 23 | ]) } 24 | 25 | # Build a tube shape programmatically 26 | if True: 27 | slices = 16 28 | circle = [] 29 | for slice in xrange(slices): 30 | theta = 2.0 * pi * slice / slices 31 | circle.append((cos(theta), sin(theta))) 32 | faces = [] 33 | for s in xrange(slices): 34 | s0 = s*2 35 | s1 = (s0+1) % (2*slices) 36 | s2 = (s0+2) % (2*slices) 37 | s3 = (s0+3) % (2*slices) 38 | faces.append((s2, s1, s0)) 39 | faces.append((s2, s3, s1)) 40 | verts = [] 41 | for p in circle: 42 | verts.append((0.0, p[0], p[1])) 43 | verts.append((1.0, p[0], p[1])) 44 | shapes['tubex'] = (verts, faces) 45 | verts = [] 46 | for p in circle: 47 | verts.append((p[0], 0.0, p[1])) 48 | verts.append((p[0], 1.0, p[1])) 49 | shapes['tubey'] = (verts, faces) 50 | verts = [] 51 | for p in circle: 52 | verts.append((p[0], p[1], 0.0)) 53 | verts.append((p[0], p[1], 1.0)) 54 | shapes['tubez'] = (verts, faces) 55 | 56 | def pick_rule(tree, name): 57 | elements = tree.xpath("rule[@name='%s']" % name) 58 | sum, tuples = 0, [] 59 | for e in elements: 60 | weight = int(e.get("weight", 1)) 61 | sum = sum + weight 62 | tuples.append((e, weight)) 63 | n = random.randint(0, sum - 1) 64 | for (item, weight) in tuples: 65 | if n < weight: 66 | break 67 | n = n - weight 68 | return item 69 | 70 | def parse_xform(xform_string): 71 | matrix = Matrix4.new_identity() 72 | tokens = xform_string.split(' ') 73 | t = 0 74 | while t < len(tokens) - 1: 75 | command, t = tokens[t], t + 1 76 | 77 | # Translation 78 | if command == 'tx': 79 | x, t = float(tokens[t]), t + 1 80 | matrix *= Matrix4.new_translate(x, 0, 0) 81 | elif command == 'ty': 82 | y, t = float(tokens[t]), t + 1 83 | matrix *= Matrix4.new_translate(0, y, 0) 84 | elif command == 'tz': 85 | z, t = float(tokens[t]), t + 1 86 | matrix *= Matrix4.new_translate(0, 0, z) 87 | elif command == 't': 88 | x, t = float(tokens[t]), t + 1 89 | y, t = float(tokens[t]), t + 1 90 | z, t = float(tokens[t]), t + 1 91 | matrix *= Matrix4.new_translate(x, y, z) 92 | 93 | # Rotation 94 | elif command == 'rx': 95 | theta, t = radians(float(tokens[t])), t + 1 96 | matrix *= Matrix4.new_rotatex(theta) 97 | elif command == 'ry': 98 | theta, t = radians(float(tokens[t])), t + 1 99 | matrix *= Matrix4.new_rotatey(theta) 100 | elif command == 'rz': 101 | theta, t = radians(float(tokens[t])), t + 1 102 | matrix *= Matrix4.new_rotatez(theta) 103 | 104 | # Scale 105 | elif command == 'sx': 106 | x, t = float(tokens[t]), t + 1 107 | matrix *= Matrix4.new_scale(x, 1, 1) 108 | elif command == 'sy': 109 | y, t = float(tokens[t]), t + 1 110 | matrix *= Matrix4.new_scale(1, y, 1) 111 | elif command == 'sz': 112 | z, t = float(tokens[t]), t + 1 113 | matrix *= Matrix4.new_scale(1, 1, z) 114 | elif command == 'sa': 115 | v, t = float(tokens[t]), t + 1 116 | x, y, z = v, v, v 117 | matrix *= Matrix4.new_scale(x, y, z) 118 | elif command == 's': 119 | x, t = float(tokens[t]), t + 1 120 | y, t = float(tokens[t]), t + 1 121 | z, t = float(tokens[t]), t + 1 122 | matrix *= Matrix4.new_scale(x, y, z) 123 | 124 | else: 125 | print "unrecognized transformation: '%s' at position %d in '%s'" % (command, t, xform_string) 126 | quit() 127 | 128 | return matrix 129 | 130 | def process_rule(rule, tree, depth, verts, faces, matrix = Matrix4.new_identity()): 131 | if depth < 1: 132 | return 133 | children = list(rule.iter(tag=etree.Element))[1:] # there's got to be a better way 134 | for statement in children: 135 | xform = parse_xform(statement.get("transforms", "")) 136 | count = int(statement.get("count", 1)) 137 | for n in xrange(count): 138 | matrix *= xform 139 | if statement.tag == "call": 140 | rule = pick_rule(tree, statement.get("rule")) 141 | cloned_matrix = matrix.copy() 142 | process_rule(rule, tree, depth - 1, verts, faces, cloned_matrix) 143 | elif statement.tag == "instance": 144 | shape_name = statement.get("shape") 145 | #print "rendering", shape_name, depth 146 | shape_verts, shape_faces = shapes[shape_name] 147 | n = len(verts) 148 | for v in shape_verts: 149 | transformed_vert = matrix * Point3(*v) 150 | verts.append(transformed_vert[:]) 151 | for i, j, k in shape_faces: 152 | faces.append((i+n, j+n, k+n)) 153 | else: 154 | print "malformed xml" 155 | quit() 156 | 157 | def surface(rules_string): 158 | verts, faces = [], [] 159 | tree = objectify.fromstring(rules_string) 160 | max_depth = int(tree.get('max_depth')) 161 | entry = pick_rule(tree, "entry") 162 | process_rule(entry, tree, max_depth, verts, faces) 163 | print "nverts, nfaces = ", len(verts), len(faces) 164 | return verts, faces 165 | -------------------------------------------------------------------------------- /Gumbo/pymesh/tubes.py: -------------------------------------------------------------------------------- 1 | from math import * 2 | from euclid import * 3 | 4 | def perp(u): 5 | """Randomly picks a reasonable perpendicular vector""" 6 | v = Vector3(1, 0, 0); 7 | u_prime = u.cross(v) 8 | if u_prime.magnitude_squared() < 0.01: 9 | v = Vector3(0, 1, 0); 10 | u_prime = u.cross(v) 11 | return u_prime.normalized() 12 | 13 | def tube(u, v, func, radius): 14 | 15 | # Compute three basis vectors 16 | p1 = Vector3(*func(u)) 17 | p2 = Vector3(*func(u + 0.01)) 18 | A = (p2 - p1).normalized() 19 | B = perp(A) 20 | C = A.cross(B).normalized() 21 | 22 | # Rotate the Z-plane circle appropriately 23 | m = Matrix4.new_rotate_triple_axis(B, C, A) 24 | spoke_vector = m * Vector3(cos(2*v), sin(2*v), 0) 25 | 26 | # Add the spoke vector to the center to obtain the rim position. 27 | center = p1 + radius * spoke_vector 28 | return center[:] 29 | 30 | def granny_path(t): 31 | t = 2 * t 32 | x = -0.22 * cos(t) - 1.28 * sin(t) - 0.44 * cos(3 * t) - 0.78 * sin(3 * t) 33 | y = -0.1 * cos(2 * t) - 0.27 * sin(2 * t) + 0.38 * cos(4 * t) + 0.46 * sin(4 * t) 34 | z = 0.7 * cos(3 * t) - 0.4 * sin(3 * t) 35 | return x, y, z 36 | 37 | def granny(u, v): 38 | return tube(u, v, granny_path, radius = 0.1) 39 | -------------------------------------------------------------------------------- /Gumbo/pymesh/weld.py: -------------------------------------------------------------------------------- 1 | from math import * 2 | from euclid import * 3 | from itertools import * 4 | 5 | def weld(verts, faces, epsilon = 0.00001): 6 | """Find duplicated verts and merge them""" 7 | 8 | # Create the remapping table: (this is the slow part) 9 | count = len(verts) 10 | remap_table = range(count) 11 | for i1 in xrange(0, count): 12 | 13 | # Crude progress indicator: 14 | if i1 % (count / 10) == 0: 15 | print (count - i1) / (count / 10) 16 | 17 | p1 = verts[i1] 18 | if not p1: continue 19 | 20 | for i2 in xrange(i1 + 1, count): 21 | p2 = verts[i2] 22 | if not p2: continue 23 | 24 | if abs(p1[0] - p2[0]) < epsilon and \ 25 | abs(p1[1] - p2[1]) < epsilon and \ 26 | abs(p1[2] - p2[2]) < epsilon: 27 | remap_table[i2] = i1 28 | verts[i2] = None 29 | 30 | # Remove holes from the vert list: 31 | newverts = [] 32 | shift = 0 33 | shifts = [] 34 | for v in xrange(count): 35 | if verts[v]: 36 | newverts.append(verts[v]) 37 | else: 38 | shift = shift + 1 39 | shifts.append(shift) 40 | verts = newverts 41 | print "Reduced from %d verts to %d verts" % (count, len(verts)) 42 | 43 | # Apply the remapping table: 44 | if type(faces[0]) is tuple: 45 | faces = [[x - shifts[x] for x in (remap_table[y] for y in f)] for f in faces] 46 | else: 47 | faces = [x - shifts[x] for x in [remap_table[i] for i in faces]] 48 | 49 | return verts, faces 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This code has been tested on Windows 7 and Linux. It's easiest to build using [scons](http://www.scons.org). 2 | 3 | * See the **Windows** folder if you need to build using Visual Studio. 4 | * The **Cover/PostTess** folder contains source for cylindrical warping. 5 | * The hairy **Teapot** demo is our example for isoline tessellation. 6 | * The **Gumbo** folder was used for the elephant model in our article. 7 | * **AntTweakBar** is a third party library for lightweight widgets in OpenGL. 8 | -------------------------------------------------------------------------------- /Teapot/SConstruct: -------------------------------------------------------------------------------- 1 | 2 | # Clean: 3 | # > scons -c 4 | # 5 | # Debug configuration: 6 | # > scons debug=1 7 | # 8 | # Parallel build: 9 | # > scons -j 4 10 | 11 | import sys 12 | import os 13 | 14 | source = Split(""" 15 | Teapot.c 16 | glew.c 17 | pez.c 18 | """) 19 | 20 | env = Environment(ENV = os.environ) 21 | 22 | env.Program('Teapot', source) 23 | env.Append(CPPPATH = '.') 24 | 25 | if sys.platform == 'win32': 26 | env.Append(CPPDEFINES=['WIN32']) 27 | env.Append(CCFLAGS = '-Wl,--subsystem,windows') 28 | env.Append(LIBS=Split('opengl32 Gdi32 Comdlg32')) 29 | Tool('mingw')(env) 30 | else: 31 | env.Append(LIBS=Split('X11 GL')) 32 | 33 | if env['CC'] is 'gcc': 34 | colorgcc = '/usr/bin/colorgcc' 35 | if os.path.exists(colorgcc): 36 | env.Replace(CC = colorgcc) 37 | env.Append(CPPDEFINES=['inline=__inline']) 38 | env.Replace(CCFLAGS = Split('-std=c99 -Wc++-compat')) 39 | 40 | if ARGUMENTS.get('debug', 0): 41 | env.Append(CCFLAGS = '-g') 42 | 43 | -------------------------------------------------------------------------------- /Teapot/pez.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifdef __cplusplus 4 | extern "C" { 5 | #endif 6 | 7 | #define PEZ_MAINLOOP 1 8 | 9 | #include "glew.h" 10 | 11 | #define PEZ_FORWARD_COMPATIBLE_GL 1 12 | #define PEZ_MOUSE_HANDLER 1 13 | 14 | typedef struct PezConfigRec 15 | { 16 | const char* Title; 17 | int Width; 18 | int Height; 19 | int Multisampling; 20 | int VerticalSync; 21 | } PezConfig; 22 | 23 | #ifdef PEZ_MAINLOOP 24 | PezConfig PezGetConfig(); 25 | void PezInitialize(); 26 | void PezRender(); 27 | void PezUpdate(float seconds); 28 | 29 | #ifdef PEZ_MOUSE_HANDLER 30 | void PezHandleMouse(int x, int y, int action); 31 | #endif 32 | 33 | #ifdef PEZ_DROP_HANDLER 34 | void PezReceiveDrop(const char* filename); 35 | #endif 36 | 37 | #else 38 | void pezSwapBuffers(); 39 | #endif 40 | 41 | enum {PEZ_DOWN, PEZ_UP, PEZ_MOVE, PEZ_DOUBLECLICK}; 42 | #define TwoPi (6.28318531f) 43 | #define Pi (3.14159265f) 44 | #define countof(A) (sizeof(A) / sizeof(A[0])) 45 | 46 | void pezPrintString(const char* pStr, ...); 47 | void pezFatal(const char* pStr, ...); 48 | void pezCheck(int condition, ...); 49 | int pezIsPressing(char key); 50 | const char* pezResourcePath(); 51 | const char* pezOpenFileDialog(); 52 | const char* pezGetDesktopFolder(); 53 | 54 | int pezInit(); 55 | int pezShutdown(); 56 | int pezAddPath(const char* pathPrefix, const char* pathSuffix); 57 | const char* pezGetShader(const char* effectKey); 58 | const char* pezGetError(); 59 | int pezAddDirective(const char* token, const char* directive); 60 | 61 | 62 | typedef struct PezAttribRec { 63 | const GLchar* Name; 64 | GLint Size; 65 | GLenum Type; 66 | GLsizei Stride; 67 | int FrameCount; 68 | GLvoid* Frames; 69 | } PezAttrib; 70 | 71 | typedef struct PezVertsRec { 72 | int AttribCount; 73 | int IndexCount; 74 | int VertexCount; 75 | GLenum IndexType; 76 | GLsizeiptr IndexBufferSize; 77 | PezAttrib* Attribs; 78 | GLvoid* Indices; 79 | void* RawHeader; 80 | } PezVerts; 81 | 82 | typedef struct PezPixelsRec { 83 | int FrameCount; 84 | GLsizei Width; 85 | GLsizei Height; 86 | GLsizei Depth; 87 | GLint MipLevels; 88 | GLenum Format; 89 | GLenum InternalFormat; 90 | GLenum Type; 91 | GLsizeiptr BytesPerFrame; 92 | GLvoid* Frames; 93 | void* RawHeader; 94 | } PezPixels; 95 | 96 | PezVerts pezLoadVerts(const char* filename); 97 | PezVerts pezGenQuad(float left, float top, float right, float bottom); 98 | void pezFreeVerts(PezVerts verts); 99 | void pezSaveVerts(PezVerts verts, const char* filename); 100 | 101 | PezPixels pezLoadPixels(const char* filename); 102 | void pezFreePixels(PezPixels pixels); 103 | void pezSavePixels(PezPixels pixels, const char* filename); 104 | void pezRenderText(PezPixels pixels, const char* message); 105 | PezPixels pezGenNoise(PezPixels desc, float alpha, float beta, int n); 106 | #ifdef __cplusplus 107 | } 108 | #endif 109 | -------------------------------------------------------------------------------- /Windows/Insights.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Teapot", "Teapot.vcxproj", "{BDEF8655-8CD9-4DB1-A3F6-5A22E84D6D77}" 5 | EndProject 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PreTess", "PreTess.vcxproj", "{5AB7D12F-D23D-47CE-9202-55D27532C506}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PostTess", "PostTess.vcxproj", "{4D5EF53A-68E3-437B-A36B-131BC17B8E1E}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Win32 = Debug|Win32 13 | Debug|x64 = Debug|x64 14 | Release|Win32 = Release|Win32 15 | Release|x64 = Release|x64 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {BDEF8655-8CD9-4DB1-A3F6-5A22E84D6D77}.Debug|Win32.ActiveCfg = Debug|Win32 19 | {BDEF8655-8CD9-4DB1-A3F6-5A22E84D6D77}.Debug|Win32.Build.0 = Debug|Win32 20 | {BDEF8655-8CD9-4DB1-A3F6-5A22E84D6D77}.Debug|x64.ActiveCfg = Debug|Win32 21 | {BDEF8655-8CD9-4DB1-A3F6-5A22E84D6D77}.Release|Win32.ActiveCfg = Release|Win32 22 | {BDEF8655-8CD9-4DB1-A3F6-5A22E84D6D77}.Release|Win32.Build.0 = Release|Win32 23 | {BDEF8655-8CD9-4DB1-A3F6-5A22E84D6D77}.Release|x64.ActiveCfg = Release|Win32 24 | {5AB7D12F-D23D-47CE-9202-55D27532C506}.Debug|Win32.ActiveCfg = Debug|Win32 25 | {5AB7D12F-D23D-47CE-9202-55D27532C506}.Debug|Win32.Build.0 = Debug|Win32 26 | {5AB7D12F-D23D-47CE-9202-55D27532C506}.Debug|x64.ActiveCfg = Debug|x64 27 | {5AB7D12F-D23D-47CE-9202-55D27532C506}.Debug|x64.Build.0 = Debug|x64 28 | {5AB7D12F-D23D-47CE-9202-55D27532C506}.Release|Win32.ActiveCfg = Release|Win32 29 | {5AB7D12F-D23D-47CE-9202-55D27532C506}.Release|Win32.Build.0 = Release|Win32 30 | {5AB7D12F-D23D-47CE-9202-55D27532C506}.Release|x64.ActiveCfg = Release|x64 31 | {5AB7D12F-D23D-47CE-9202-55D27532C506}.Release|x64.Build.0 = Release|x64 32 | {4D5EF53A-68E3-437B-A36B-131BC17B8E1E}.Debug|Win32.ActiveCfg = Debug|Win32 33 | {4D5EF53A-68E3-437B-A36B-131BC17B8E1E}.Debug|Win32.Build.0 = Debug|Win32 34 | {4D5EF53A-68E3-437B-A36B-131BC17B8E1E}.Debug|x64.ActiveCfg = Debug|x64 35 | {4D5EF53A-68E3-437B-A36B-131BC17B8E1E}.Debug|x64.Build.0 = Debug|x64 36 | {4D5EF53A-68E3-437B-A36B-131BC17B8E1E}.Release|Win32.ActiveCfg = Release|Win32 37 | {4D5EF53A-68E3-437B-A36B-131BC17B8E1E}.Release|Win32.Build.0 = Release|Win32 38 | {4D5EF53A-68E3-437B-A36B-131BC17B8E1E}.Release|x64.ActiveCfg = Release|x64 39 | {4D5EF53A-68E3-437B-A36B-131BC17B8E1E}.Release|x64.Build.0 = Release|x64 40 | EndGlobalSection 41 | GlobalSection(SolutionProperties) = preSolution 42 | HideSolutionNode = FALSE 43 | EndGlobalSection 44 | EndGlobal 45 | -------------------------------------------------------------------------------- /Windows/PostTess.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {27f2b508-f514-4cb7-9a34-422154caebb3} 18 | 19 | 20 | 21 | 22 | Source Files 23 | 24 | 25 | Source Files 26 | 27 | 28 | Source Files 29 | 30 | 31 | AntTweakBar 32 | 33 | 34 | AntTweakBar 35 | 36 | 37 | AntTweakBar 38 | 39 | 40 | AntTweakBar 41 | 42 | 43 | AntTweakBar 44 | 45 | 46 | AntTweakBar 47 | 48 | 49 | AntTweakBar 50 | 51 | 52 | AntTweakBar 53 | 54 | 55 | AntTweakBar 56 | 57 | 58 | AntTweakBar 59 | 60 | 61 | Source Files 62 | 63 | 64 | 65 | 66 | Header Files 67 | 68 | 69 | Header Files 70 | 71 | 72 | Header Files 73 | 74 | 75 | AntTweakBar 76 | 77 | 78 | AntTweakBar 79 | 80 | 81 | AntTweakBar 82 | 83 | 84 | AntTweakBar 85 | 86 | 87 | AntTweakBar 88 | 89 | 90 | AntTweakBar 91 | 92 | 93 | AntTweakBar 94 | 95 | 96 | AntTweakBar 97 | 98 | 99 | AntTweakBar 100 | 101 | 102 | AntTweakBar 103 | 104 | 105 | AntTweakBar 106 | 107 | 108 | AntTweakBar 109 | 110 | 111 | AntTweakBar 112 | 113 | 114 | 115 | 116 | Shaders 117 | 118 | 119 | -------------------------------------------------------------------------------- /Windows/PreTess.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {27f2b508-f514-4cb7-9a34-422154caebb3} 18 | 19 | 20 | 21 | 22 | Source Files 23 | 24 | 25 | Source Files 26 | 27 | 28 | Source Files 29 | 30 | 31 | AntTweakBar 32 | 33 | 34 | AntTweakBar 35 | 36 | 37 | AntTweakBar 38 | 39 | 40 | AntTweakBar 41 | 42 | 43 | AntTweakBar 44 | 45 | 46 | AntTweakBar 47 | 48 | 49 | AntTweakBar 50 | 51 | 52 | AntTweakBar 53 | 54 | 55 | AntTweakBar 56 | 57 | 58 | AntTweakBar 59 | 60 | 61 | 62 | 63 | Header Files 64 | 65 | 66 | Header Files 67 | 68 | 69 | Header Files 70 | 71 | 72 | AntTweakBar 73 | 74 | 75 | AntTweakBar 76 | 77 | 78 | AntTweakBar 79 | 80 | 81 | AntTweakBar 82 | 83 | 84 | AntTweakBar 85 | 86 | 87 | AntTweakBar 88 | 89 | 90 | AntTweakBar 91 | 92 | 93 | AntTweakBar 94 | 95 | 96 | AntTweakBar 97 | 98 | 99 | AntTweakBar 100 | 101 | 102 | AntTweakBar 103 | 104 | 105 | AntTweakBar 106 | 107 | 108 | AntTweakBar 109 | 110 | 111 | 112 | 113 | Shaders 114 | 115 | 116 | -------------------------------------------------------------------------------- /Windows/Teapot.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {BDEF8655-8CD9-4DB1-A3F6-5A22E84D6D77} 15 | Win32Proj 16 | Teapot 17 | 18 | 19 | 20 | Application 21 | true 22 | NotSet 23 | 24 | 25 | Application 26 | false 27 | true 28 | NotSet 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | true 42 | 43 | 44 | false 45 | 46 | 47 | 48 | 49 | 50 | Level3 51 | Disabled 52 | WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) 53 | 4996 54 | 55 | 56 | Windows 57 | true 58 | opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) 59 | 60 | 61 | 62 | 63 | Level3 64 | 65 | 66 | MaxSpeed 67 | true 68 | true 69 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) 70 | 4996 71 | 72 | 73 | Windows 74 | true 75 | true 76 | true 77 | opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) 78 | 79 | 80 | 81 | 82 | CompileAsCpp 83 | 84 | 85 | CompileAsCpp 86 | 87 | 88 | CompileAsCpp 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /Windows/Teapot.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {bb6b93a6-c7c0-454e-a32a-99769cc30173} 14 | 15 | 16 | 17 | 18 | Source Files 19 | 20 | 21 | Source Files 22 | 23 | 24 | Source Files 25 | 26 | 27 | 28 | 29 | Header Files 30 | 31 | 32 | Header Files 33 | 34 | 35 | Header Files 36 | 37 | 38 | Header Files 39 | 40 | 41 | 42 | 43 | Shaders 44 | 45 | 46 | --------------------------------------------------------------------------------