├── .gitignore ├── README.md ├── examples ├── example_mesh │ ├── Makefile │ ├── Project.xcconfig │ ├── addons.make │ ├── bin │ │ └── data │ │ │ └── .gitkeep │ ├── config.make │ ├── example_mesh.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── example_mesh Debug.xcscheme │ │ │ └── example_mesh Release.xcscheme │ ├── openFrameworks-Info.plist │ └── src │ │ ├── main.cpp │ │ ├── ofApp.cpp │ │ └── ofApp.h └── example_ofxGui │ ├── Makefile │ ├── Project.xcconfig │ ├── addons.make │ ├── bin │ └── data │ │ └── .gitkeep │ ├── config.make │ ├── example_ofxGui.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ ├── example_ofxGui Debug.xcscheme │ │ └── example_ofxGui Release.xcscheme │ ├── openFrameworks-Info.plist │ └── src │ ├── PingPong.h │ ├── main.cpp │ ├── ofApp.cpp │ └── ofApp.h ├── ofxaddons_thumbnail.png ├── src ├── PingPong.h ├── ofxReactionDiffusion.cpp └── ofxReactionDiffusion.h └── thumbs ├── bz.gif ├── fhn.gif ├── gs.gif ├── header.png └── mesh.gif /.gitignore: -------------------------------------------------------------------------------- 1 | *.app 2 | xcuserdata/ 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | #### ofxReactionDiffusion is openFrameworks addon for visualizing Reaction-Diffusion System using GPU. 3 | 4 | ## Installation 5 | Copy to `openFrameworks > addons`. 6 | 7 | ## Reaction Diffusion System 8 | > Reaction–diffusion systems are mathematical models which correspond to several physical phenomena: the most common is the change in space and time of the concentration of one or more chemical substances: local chemical reactions in which the substances are transformed into each other, and diffusion which causes the substances to spread out over a surface in space. 9 | > (from [Wikipedia](https://en.wikipedia.org/wiki/Reaction%E2%80%93diffusion_system)) 10 | 11 | ## Models 12 | Reaction-Diffusion System has a few mathematical models and ofxReactionDiffusion implements three models of them. 13 | 14 | ### - Gray-Scott 15 | 16 | 17 | ### - FitzHugh-Nagumo 18 | 19 | 20 | ### - Belousov-Zhabotinsky 21 | 22 | 23 | ## Usage 24 | Models are defined `ReactionDiffusionMode` . 25 | You can switch drawing model by `void setMode(ReactionDiffusionMode _mode)` . 26 | 27 | Since each mode has its own parameters, it is necessary to use the parameters properly according to the mode being used. 28 | #### - Gray-Scott 29 | ```c++ 30 | float feed; 31 | float kill; 32 | float Du; 33 | float Dv; 34 | ``` 35 | 36 | #### - FitzHugh-Nagumo 37 | ```c++ 38 | float a0; 39 | float a1; 40 | float epsilon; 41 | float delta; 42 | float k1; 43 | float k2; 44 | float k3; 45 | ``` 46 | 47 | #### - Belousov-Zhabotinsky 48 | ```c++ 49 | float alpha; 50 | float beta; 51 | float gamma; 52 | ``` 53 | 54 | ### Extension 55 | #### Examples > example_mesh 56 | Values, concentration of substances, are stored in FBO(texture) and they are represented as RGB in texture in ofxReactionDiffusion. You can get source texture by `getSourceTexture`. 57 | 58 | 59 | 60 | For example, reaction diffusion values can use for depth of VBOMesh. (See **Examples > example_mesh**) 61 | -------------------------------------------------------------------------------- /examples/example_mesh/Makefile: -------------------------------------------------------------------------------- 1 | # Attempt to load a config.make file. 2 | # If none is found, project defaults in config.project.make will be used. 3 | ifneq ($(wildcard config.make),) 4 | include config.make 5 | endif 6 | 7 | # make sure the the OF_ROOT location is defined 8 | ifndef OF_ROOT 9 | OF_ROOT=$(realpath ../../../..) 10 | endif 11 | 12 | # call the project makefile! 13 | include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk 14 | -------------------------------------------------------------------------------- /examples/example_mesh/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | //ICONS - NEW IN 0072 9 | ICON_NAME_DEBUG = icon-debug.icns 10 | ICON_NAME_RELEASE = icon.icns 11 | ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ 12 | 13 | //IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: 14 | //ICON_FILE_PATH = bin/data/ 15 | 16 | OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) 17 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 18 | -------------------------------------------------------------------------------- /examples/example_mesh/addons.make: -------------------------------------------------------------------------------- 1 | ofxReactionDiffusion 2 | -------------------------------------------------------------------------------- /examples/example_mesh/bin/data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matsune/ofxReactionDiffusion/63907476971c55bb2ad5f15716e91e26d2ecb6bb/examples/example_mesh/bin/data/.gitkeep -------------------------------------------------------------------------------- /examples/example_mesh/config.make: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # CONFIGURE PROJECT MAKEFILE (optional) 3 | # This file is where we make project specific configurations. 4 | ################################################################################ 5 | 6 | ################################################################################ 7 | # OF ROOT 8 | # The location of your root openFrameworks installation 9 | # (default) OF_ROOT = ../../../.. 10 | ################################################################################ 11 | # OF_ROOT = ../../../.. 12 | 13 | ################################################################################ 14 | # PROJECT ROOT 15 | # The location of the project - a starting place for searching for files 16 | # (default) PROJECT_ROOT = . (this directory) 17 | # 18 | ################################################################################ 19 | # PROJECT_ROOT = . 20 | 21 | ################################################################################ 22 | # PROJECT SPECIFIC CHECKS 23 | # This is a project defined section to create internal makefile flags to 24 | # conditionally enable or disable the addition of various features within 25 | # this makefile. For instance, if you want to make changes based on whether 26 | # GTK is installed, one might test that here and create a variable to check. 27 | ################################################################################ 28 | # None 29 | 30 | ################################################################################ 31 | # PROJECT EXTERNAL SOURCE PATHS 32 | # These are fully qualified paths that are not within the PROJECT_ROOT folder. 33 | # Like source folders in the PROJECT_ROOT, these paths are subject to 34 | # exlclusion via the PROJECT_EXLCUSIONS list. 35 | # 36 | # (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) 37 | # 38 | # Note: Leave a leading space when adding list items with the += operator 39 | ################################################################################ 40 | # PROJECT_EXTERNAL_SOURCE_PATHS = 41 | 42 | ################################################################################ 43 | # PROJECT EXCLUSIONS 44 | # These makefiles assume that all folders in your current project directory 45 | # and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations 46 | # to look for source code. The any folders or files that match any of the 47 | # items in the PROJECT_EXCLUSIONS list below will be ignored. 48 | # 49 | # Each item in the PROJECT_EXCLUSIONS list will be treated as a complete 50 | # string unless teh user adds a wildcard (%) operator to match subdirectories. 51 | # GNU make only allows one wildcard for matching. The second wildcard (%) is 52 | # treated literally. 53 | # 54 | # (default) PROJECT_EXCLUSIONS = (blank) 55 | # 56 | # Will automatically exclude the following: 57 | # 58 | # $(PROJECT_ROOT)/bin% 59 | # $(PROJECT_ROOT)/obj% 60 | # $(PROJECT_ROOT)/%.xcodeproj 61 | # 62 | # Note: Leave a leading space when adding list items with the += operator 63 | ################################################################################ 64 | # PROJECT_EXCLUSIONS = 65 | 66 | ################################################################################ 67 | # PROJECT LINKER FLAGS 68 | # These flags will be sent to the linker when compiling the executable. 69 | # 70 | # (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs 71 | # 72 | # Note: Leave a leading space when adding list items with the += operator 73 | ################################################################################ 74 | 75 | # Currently, shared libraries that are needed are copied to the 76 | # $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to 77 | # add a runtime path to search for those shared libraries, since they aren't 78 | # incorporated directly into the final executable application binary. 79 | # TODO: should this be a default setting? 80 | # PROJECT_LDFLAGS=-Wl,-rpath=./libs 81 | 82 | ################################################################################ 83 | # PROJECT DEFINES 84 | # Create a space-delimited list of DEFINES. The list will be converted into 85 | # CFLAGS with the "-D" flag later in the makefile. 86 | # 87 | # (default) PROJECT_DEFINES = (blank) 88 | # 89 | # Note: Leave a leading space when adding list items with the += operator 90 | ################################################################################ 91 | # PROJECT_DEFINES = 92 | 93 | ################################################################################ 94 | # PROJECT CFLAGS 95 | # This is a list of fully qualified CFLAGS required when compiling for this 96 | # project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS 97 | # defined in your platform specific core configuration files. These flags are 98 | # presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. 99 | # 100 | # (default) PROJECT_CFLAGS = (blank) 101 | # 102 | # Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in 103 | # your platform specific configuration file will be applied by default and 104 | # further flags here may not be needed. 105 | # 106 | # Note: Leave a leading space when adding list items with the += operator 107 | ################################################################################ 108 | # PROJECT_CFLAGS = 109 | 110 | ################################################################################ 111 | # PROJECT OPTIMIZATION CFLAGS 112 | # These are lists of CFLAGS that are target-specific. While any flags could 113 | # be conditionally added, they are usually limited to optimization flags. 114 | # These flags are added BEFORE the PROJECT_CFLAGS. 115 | # 116 | # PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. 117 | # 118 | # (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) 119 | # 120 | # PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. 121 | # 122 | # (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) 123 | # 124 | # Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the 125 | # PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration 126 | # file will be applied by default and further optimization flags here may not 127 | # be needed. 128 | # 129 | # Note: Leave a leading space when adding list items with the += operator 130 | ################################################################################ 131 | # PROJECT_OPTIMIZATION_CFLAGS_RELEASE = 132 | # PROJECT_OPTIMIZATION_CFLAGS_DEBUG = 133 | 134 | ################################################################################ 135 | # PROJECT COMPILERS 136 | # Custom compilers can be set for CC and CXX 137 | # (default) PROJECT_CXX = (blank) 138 | # (default) PROJECT_CC = (blank) 139 | # Note: Leave a leading space when adding list items with the += operator 140 | ################################################################################ 141 | # PROJECT_CXX = 142 | # PROJECT_CC = 143 | -------------------------------------------------------------------------------- /examples/example_mesh/example_mesh.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | archiveVersion 5 | 1 6 | classes 7 | 8 | objectVersion 9 | 46 10 | objects 11 | 12 | 2432509529536F6A883EFAF6 13 | 14 | explicitFileType 15 | sourcecode.c.h 16 | fileEncoding 17 | 30 18 | isa 19 | PBXFileReference 20 | name 21 | PingPong.h 22 | path 23 | ../../../../addons/ofxReactionDiffusion/src/PingPong.h 24 | sourceTree 25 | SOURCE_ROOT 26 | 27 | F4CAC834D4B9076DC504621D 28 | 29 | explicitFileType 30 | sourcecode.c.h 31 | fileEncoding 32 | 30 33 | isa 34 | PBXFileReference 35 | name 36 | ofxReactionDiffusion.h 37 | path 38 | ../../../../addons/ofxReactionDiffusion/src/ofxReactionDiffusion.h 39 | sourceTree 40 | SOURCE_ROOT 41 | 42 | 12BA66A1958C3B17CF449C43 43 | 44 | children 45 | 46 | 0F64C7E2A2802A2CE6079B69 47 | F4CAC834D4B9076DC504621D 48 | 2432509529536F6A883EFAF6 49 | 50 | isa 51 | PBXGroup 52 | name 53 | src 54 | sourceTree 55 | <group> 56 | 57 | 43508BF48D4E7088028AEEAA 58 | 59 | children 60 | 61 | 12BA66A1958C3B17CF449C43 62 | 63 | isa 64 | PBXGroup 65 | name 66 | ofxReactionDiffusion 67 | sourceTree 68 | <group> 69 | 70 | 8EFE04C2B8D70F4847663CD1 71 | 72 | fileRef 73 | 0F64C7E2A2802A2CE6079B69 74 | isa 75 | PBXBuildFile 76 | 77 | 0F64C7E2A2802A2CE6079B69 78 | 79 | explicitFileType 80 | sourcecode.cpp.cpp 81 | fileEncoding 82 | 30 83 | isa 84 | PBXFileReference 85 | name 86 | ofxReactionDiffusion.cpp 87 | path 88 | ../../../../addons/ofxReactionDiffusion/src/ofxReactionDiffusion.cpp 89 | sourceTree 90 | SOURCE_ROOT 91 | 92 | 6948EE371B920CB800B5AC1A 93 | 94 | children 95 | 96 | isa 97 | PBXGroup 98 | name 99 | local_addons 100 | sourceTree 101 | <group> 102 | 103 | BB4B014C10F69532006C3DED 104 | 105 | children 106 | 107 | 43508BF48D4E7088028AEEAA 108 | 109 | isa 110 | PBXGroup 111 | name 112 | addons 113 | sourceTree 114 | <group> 115 | 116 | E4328143138ABC890047C5CB 117 | 118 | isa 119 | PBXFileReference 120 | lastKnownFileType 121 | wrapper.pb-project 122 | name 123 | openFrameworksLib.xcodeproj 124 | path 125 | ../../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj 126 | sourceTree 127 | SOURCE_ROOT 128 | 129 | E4328144138ABC890047C5CB 130 | 131 | children 132 | 133 | E4328148138ABC890047C5CB 134 | 135 | isa 136 | PBXGroup 137 | name 138 | Products 139 | sourceTree 140 | <group> 141 | 142 | E4328147138ABC890047C5CB 143 | 144 | containerPortal 145 | E4328143138ABC890047C5CB 146 | isa 147 | PBXContainerItemProxy 148 | proxyType 149 | 2 150 | remoteGlobalIDString 151 | E4B27C1510CBEB8E00536013 152 | remoteInfo 153 | openFrameworks 154 | 155 | E4328148138ABC890047C5CB 156 | 157 | fileType 158 | archive.ar 159 | isa 160 | PBXReferenceProxy 161 | path 162 | openFrameworksDebug.a 163 | remoteRef 164 | E4328147138ABC890047C5CB 165 | sourceTree 166 | BUILT_PRODUCTS_DIR 167 | 168 | E4328149138ABC9F0047C5CB 169 | 170 | fileRef 171 | E4328148138ABC890047C5CB 172 | isa 173 | PBXBuildFile 174 | 175 | E4B69B4A0A3A1720003C02F2 176 | 177 | children 178 | 179 | E4B6FCAD0C3E899E008CF71C 180 | E4EB6923138AFD0F00A09F29 181 | E4B69E1C0A3A1BDC003C02F2 182 | E4EEC9E9138DF44700A80321 183 | BB4B014C10F69532006C3DED 184 | 6948EE371B920CB800B5AC1A 185 | E4B69B5B0A3A1756003C02F2 186 | 187 | isa 188 | PBXGroup 189 | sourceTree 190 | <group> 191 | 192 | E4B69B4C0A3A1720003C02F2 193 | 194 | attributes 195 | 196 | LastUpgradeCheck 197 | 0600 198 | 199 | buildConfigurationList 200 | E4B69B4D0A3A1720003C02F2 201 | compatibilityVersion 202 | Xcode 3.2 203 | developmentRegion 204 | English 205 | hasScannedForEncodings 206 | 0 207 | isa 208 | PBXProject 209 | knownRegions 210 | 211 | English 212 | Japanese 213 | French 214 | German 215 | 216 | mainGroup 217 | E4B69B4A0A3A1720003C02F2 218 | productRefGroup 219 | E4B69B4A0A3A1720003C02F2 220 | projectDirPath 221 | 222 | projectReferences 223 | 224 | 225 | ProductGroup 226 | E4328144138ABC890047C5CB 227 | ProjectRef 228 | E4328143138ABC890047C5CB 229 | 230 | 231 | projectRoot 232 | 233 | targets 234 | 235 | E4B69B5A0A3A1756003C02F2 236 | 237 | 238 | E4B69B4D0A3A1720003C02F2 239 | 240 | buildConfigurations 241 | 242 | E4B69B4E0A3A1720003C02F2 243 | E4B69B4F0A3A1720003C02F2 244 | 245 | defaultConfigurationIsVisible 246 | 0 247 | defaultConfigurationName 248 | Release 249 | isa 250 | XCConfigurationList 251 | 252 | E4B69B4E0A3A1720003C02F2 253 | 254 | baseConfigurationReference 255 | E4EB6923138AFD0F00A09F29 256 | buildSettings 257 | 258 | HEADER_SEARCH_PATHS 259 | 260 | $(OF_CORE_HEADERS) 261 | ../../../../addons/ofxReactionDiffusion/src 262 | 263 | CONFIGURATION_BUILD_DIR 264 | $(SRCROOT)/bin/ 265 | COPY_PHASE_STRIP 266 | NO 267 | DEAD_CODE_STRIPPING 268 | YES 269 | GCC_AUTO_VECTORIZATION 270 | YES 271 | GCC_ENABLE_SSE3_EXTENSIONS 272 | YES 273 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS 274 | YES 275 | GCC_INLINES_ARE_PRIVATE_EXTERN 276 | NO 277 | GCC_OPTIMIZATION_LEVEL 278 | 0 279 | GCC_SYMBOLS_PRIVATE_EXTERN 280 | NO 281 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS 282 | YES 283 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO 284 | NO 285 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL 286 | NO 287 | GCC_WARN_UNINITIALIZED_AUTOS 288 | NO 289 | GCC_WARN_UNUSED_VALUE 290 | NO 291 | GCC_WARN_UNUSED_VARIABLE 292 | NO 293 | MACOSX_DEPLOYMENT_TARGET 294 | 10.8 295 | ONLY_ACTIVE_ARCH 296 | YES 297 | OTHER_CPLUSPLUSFLAGS 298 | 299 | -D__MACOSX_CORE__ 300 | -mtune=native 301 | 302 | SDKROOT 303 | macosx 304 | 305 | isa 306 | XCBuildConfiguration 307 | name 308 | Debug 309 | 310 | E4B69B4F0A3A1720003C02F2 311 | 312 | baseConfigurationReference 313 | E4EB6923138AFD0F00A09F29 314 | buildSettings 315 | 316 | HEADER_SEARCH_PATHS 317 | 318 | $(OF_CORE_HEADERS) 319 | ../../../../addons/ofxReactionDiffusion/src 320 | 321 | CONFIGURATION_BUILD_DIR 322 | $(SRCROOT)/bin/ 323 | COPY_PHASE_STRIP 324 | YES 325 | DEAD_CODE_STRIPPING 326 | YES 327 | GCC_AUTO_VECTORIZATION 328 | YES 329 | GCC_ENABLE_SSE3_EXTENSIONS 330 | YES 331 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS 332 | YES 333 | GCC_INLINES_ARE_PRIVATE_EXTERN 334 | NO 335 | GCC_OPTIMIZATION_LEVEL 336 | 3 337 | GCC_SYMBOLS_PRIVATE_EXTERN 338 | NO 339 | GCC_UNROLL_LOOPS 340 | YES 341 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS 342 | YES 343 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO 344 | NO 345 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL 346 | NO 347 | GCC_WARN_UNINITIALIZED_AUTOS 348 | NO 349 | GCC_WARN_UNUSED_VALUE 350 | NO 351 | GCC_WARN_UNUSED_VARIABLE 352 | NO 353 | MACOSX_DEPLOYMENT_TARGET 354 | 10.8 355 | OTHER_CPLUSPLUSFLAGS 356 | 357 | -D__MACOSX_CORE__ 358 | -mtune=native 359 | 360 | SDKROOT 361 | macosx 362 | 363 | isa 364 | XCBuildConfiguration 365 | name 366 | Release 367 | 368 | E4B69B580A3A1756003C02F2 369 | 370 | buildActionMask 371 | 2147483647 372 | files 373 | 374 | E4B69E200A3A1BDC003C02F2 375 | E4B69E210A3A1BDC003C02F2 376 | 8EFE04C2B8D70F4847663CD1 377 | 378 | isa 379 | PBXSourcesBuildPhase 380 | runOnlyForDeploymentPostprocessing 381 | 0 382 | 383 | E4B69B590A3A1756003C02F2 384 | 385 | buildActionMask 386 | 2147483647 387 | files 388 | 389 | E4328149138ABC9F0047C5CB 390 | 391 | isa 392 | PBXFrameworksBuildPhase 393 | runOnlyForDeploymentPostprocessing 394 | 0 395 | 396 | E4B69B5A0A3A1756003C02F2 397 | 398 | buildConfigurationList 399 | E4B69B5F0A3A1757003C02F2 400 | buildPhases 401 | 402 | E4B69B580A3A1756003C02F2 403 | E4B69B590A3A1756003C02F2 404 | E4B6FFFD0C3F9AB9008CF71C 405 | E4C2427710CC5ABF004149E2 406 | 407 | buildRules 408 | 409 | dependencies 410 | 411 | E4EEB9AC138B136A00A80321 412 | 413 | isa 414 | PBXNativeTarget 415 | name 416 | example_mesh 417 | productName 418 | myOFApp 419 | productReference 420 | E4B69B5B0A3A1756003C02F2 421 | productType 422 | com.apple.product-type.application 423 | 424 | E4B69B5B0A3A1756003C02F2 425 | 426 | explicitFileType 427 | wrapper.application 428 | includeInIndex 429 | 0 430 | isa 431 | PBXFileReference 432 | path 433 | example_meshDebug.app 434 | sourceTree 435 | BUILT_PRODUCTS_DIR 436 | 437 | E4B69B5F0A3A1757003C02F2 438 | 439 | buildConfigurations 440 | 441 | E4B69B600A3A1757003C02F2 442 | E4B69B610A3A1757003C02F2 443 | 444 | defaultConfigurationIsVisible 445 | 0 446 | defaultConfigurationName 447 | Release 448 | isa 449 | XCConfigurationList 450 | 451 | E4B69B600A3A1757003C02F2 452 | 453 | baseConfigurationReference 454 | E4EB6923138AFD0F00A09F29 455 | buildSettings 456 | 457 | HEADER_SEARCH_PATHS 458 | 459 | $(OF_CORE_HEADERS) 460 | ../../../../addons/ofxReactionDiffusion/src 461 | 462 | COMBINE_HIDPI_IMAGES 463 | YES 464 | COPY_PHASE_STRIP 465 | NO 466 | FRAMEWORK_SEARCH_PATHS 467 | 468 | $(inherited) 469 | $(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1) 470 | 471 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 472 | "$(SRCROOT)/../../../../libs/glut/lib/osx" 473 | GCC_DYNAMIC_NO_PIC 474 | NO 475 | GCC_GENERATE_DEBUGGING_SYMBOLS 476 | YES 477 | GCC_MODEL_TUNING 478 | NONE 479 | ICON 480 | $(ICON_NAME_DEBUG) 481 | ICON_FILE 482 | $(ICON_FILE_PATH)$(ICON) 483 | INFOPLIST_FILE 484 | openFrameworks-Info.plist 485 | INSTALL_PATH 486 | /Applications 487 | LIBRARY_SEARCH_PATHS 488 | $(inherited) 489 | PRODUCT_NAME 490 | $(TARGET_NAME)Debug 491 | WRAPPER_EXTENSION 492 | app 493 | 494 | isa 495 | XCBuildConfiguration 496 | name 497 | Debug 498 | 499 | E4B69B610A3A1757003C02F2 500 | 501 | baseConfigurationReference 502 | E4EB6923138AFD0F00A09F29 503 | buildSettings 504 | 505 | HEADER_SEARCH_PATHS 506 | 507 | $(OF_CORE_HEADERS) 508 | ../../../../addons/ofxReactionDiffusion/src 509 | 510 | COMBINE_HIDPI_IMAGES 511 | YES 512 | COPY_PHASE_STRIP 513 | YES 514 | FRAMEWORK_SEARCH_PATHS 515 | 516 | $(inherited) 517 | $(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1) 518 | 519 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 520 | "$(SRCROOT)/../../../../libs/glut/lib/osx" 521 | GCC_GENERATE_DEBUGGING_SYMBOLS 522 | YES 523 | GCC_MODEL_TUNING 524 | NONE 525 | ICON 526 | $(ICON_NAME_RELEASE) 527 | ICON_FILE 528 | $(ICON_FILE_PATH)$(ICON) 529 | INFOPLIST_FILE 530 | openFrameworks-Info.plist 531 | INSTALL_PATH 532 | /Applications 533 | LIBRARY_SEARCH_PATHS 534 | $(inherited) 535 | PRODUCT_NAME 536 | $(TARGET_NAME) 537 | WRAPPER_EXTENSION 538 | app 539 | baseConfigurationReference 540 | E4EB6923138AFD0F00A09F29 541 | 542 | isa 543 | XCBuildConfiguration 544 | name 545 | Release 546 | 547 | E4B69E1C0A3A1BDC003C02F2 548 | 549 | children 550 | 551 | E4B69E1D0A3A1BDC003C02F2 552 | E4B69E1E0A3A1BDC003C02F2 553 | E4B69E1F0A3A1BDC003C02F2 554 | 555 | isa 556 | PBXGroup 557 | path 558 | src 559 | sourceTree 560 | SOURCE_ROOT 561 | 562 | E4B69E1D0A3A1BDC003C02F2 563 | 564 | fileEncoding 565 | 30 566 | isa 567 | PBXFileReference 568 | lastKnownFileType 569 | sourcecode.cpp.cpp 570 | name 571 | main.cpp 572 | path 573 | src/main.cpp 574 | sourceTree 575 | SOURCE_ROOT 576 | 577 | E4B69E1E0A3A1BDC003C02F2 578 | 579 | explicitFileType 580 | sourcecode.cpp.cpp 581 | fileEncoding 582 | 30 583 | isa 584 | PBXFileReference 585 | name 586 | ofApp.cpp 587 | path 588 | src/ofApp.cpp 589 | sourceTree 590 | SOURCE_ROOT 591 | 592 | E4B69E1F0A3A1BDC003C02F2 593 | 594 | fileEncoding 595 | 30 596 | isa 597 | PBXFileReference 598 | lastKnownFileType 599 | sourcecode.c.h 600 | name 601 | ofApp.h 602 | path 603 | src/ofApp.h 604 | sourceTree 605 | SOURCE_ROOT 606 | 607 | E4B69E200A3A1BDC003C02F2 608 | 609 | fileRef 610 | E4B69E1D0A3A1BDC003C02F2 611 | isa 612 | PBXBuildFile 613 | 614 | E4B69E210A3A1BDC003C02F2 615 | 616 | fileRef 617 | E4B69E1E0A3A1BDC003C02F2 618 | isa 619 | PBXBuildFile 620 | 621 | E4B6FCAD0C3E899E008CF71C 622 | 623 | fileEncoding 624 | 30 625 | isa 626 | PBXFileReference 627 | lastKnownFileType 628 | text.plist.xml 629 | path 630 | openFrameworks-Info.plist 631 | sourceTree 632 | <group> 633 | 634 | E4B6FFFD0C3F9AB9008CF71C 635 | 636 | buildActionMask 637 | 2147483647 638 | files 639 | 640 | inputPaths 641 | 642 | isa 643 | PBXShellScriptBuildPhase 644 | outputPaths 645 | 646 | runOnlyForDeploymentPostprocessing 647 | 0 648 | shellPath 649 | /bin/sh 650 | shellScript 651 | mkdir -p "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/" 652 | # Copy default icon file into App/Resources 653 | rsync -aved "$ICON_FILE" "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/" 654 | # Copy libfmod and change install directory for fmod to run 655 | rsync -aved ../../../../libs/fmodex/lib/osx/libfmodex.dylib "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/"; 656 | install_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME"; 657 | # Copy GLUT framework (must remove for AppStore submissions) 658 | rsync -aved ../../../../libs/glut/lib/osx/GLUT.framework "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/" 659 | 660 | 661 | E4C2427710CC5ABF004149E2 662 | 663 | buildActionMask 664 | 2147483647 665 | dstPath 666 | 667 | dstSubfolderSpec 668 | 10 669 | files 670 | 671 | isa 672 | PBXCopyFilesBuildPhase 673 | runOnlyForDeploymentPostprocessing 674 | 0 675 | 676 | E4EB691F138AFCF100A09F29 677 | 678 | fileEncoding 679 | 4 680 | isa 681 | PBXFileReference 682 | lastKnownFileType 683 | text.xcconfig 684 | name 685 | CoreOF.xcconfig 686 | path 687 | ../../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig 688 | sourceTree 689 | SOURCE_ROOT 690 | 691 | E4EB6923138AFD0F00A09F29 692 | 693 | fileEncoding 694 | 4 695 | isa 696 | PBXFileReference 697 | lastKnownFileType 698 | text.xcconfig 699 | path 700 | Project.xcconfig 701 | sourceTree 702 | <group> 703 | 704 | E4EEB9AB138B136A00A80321 705 | 706 | containerPortal 707 | E4328143138ABC890047C5CB 708 | isa 709 | PBXContainerItemProxy 710 | proxyType 711 | 1 712 | remoteGlobalIDString 713 | E4B27C1410CBEB8E00536013 714 | remoteInfo 715 | openFrameworks 716 | 717 | E4EEB9AC138B136A00A80321 718 | 719 | isa 720 | PBXTargetDependency 721 | name 722 | openFrameworks 723 | targetProxy 724 | E4EEB9AB138B136A00A80321 725 | 726 | E4EEC9E9138DF44700A80321 727 | 728 | children 729 | 730 | E4EB691F138AFCF100A09F29 731 | E4328143138ABC890047C5CB 732 | 733 | isa 734 | PBXGroup 735 | name 736 | openFrameworks 737 | sourceTree 738 | <group> 739 | 740 | 741 | rootObject 742 | E4B69B4C0A3A1720003C02F2 743 | 744 | 745 | -------------------------------------------------------------------------------- /examples/example_mesh/example_mesh.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/example_mesh/example_mesh.xcodeproj/xcshareddata/xcschemes/example_mesh Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /examples/example_mesh/example_mesh.xcodeproj/xcshareddata/xcschemes/example_mesh Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /examples/example_mesh/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | cc.openFrameworks.ofapp 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CFBundleIconFile 20 | ${ICON} 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/example_mesh/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofMain.h" 2 | #include "ofApp.h" 3 | 4 | //======================================================================== 5 | int main( ){ 6 | ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context 7 | 8 | // this kicks off the running of my app 9 | // can be OF_WINDOW or OF_FULLSCREEN 10 | // pass in width and height too: 11 | ofRunApp(new ofApp()); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /examples/example_mesh/src/ofApp.cpp: -------------------------------------------------------------------------------- 1 | #include "ofApp.h" 2 | 3 | //-------------------------------------------------------------- 4 | void ofApp::setup(){ 5 | ofBackground(0); 6 | ofSetVerticalSync(true); 7 | ofEnableDepthTest(); 8 | 9 | /* 10 | ofEasyCam 11 | */ 12 | cam.setupPerspective(true, 60, 10, 0, ofVec2f(0.0, 0.0)); 13 | cam.setDistance(250); 14 | 15 | /* 16 | ofxReactionDiffusion 17 | */ 18 | scale = 3.0; 19 | 20 | rd.allocate(ofGetWidth(), ofGetHeight(), scale); 21 | rd.setPasses(0.998265); 22 | rd.setGrayScottParams(0.0239133, 0.0501276, 0.178571, 0.212041); 23 | 24 | /// add Initial Sources 25 | rd.getSourceFbo().begin(); 26 | ofSetColor(0, 0, 200); 27 | ofDrawRectangle(100, 100, 100, 100); 28 | rd.getSourceFbo().end(); 29 | 30 | /* 31 | Mesh 32 | */ 33 | mesh.setMode(OF_PRIMITIVE_POINTS); 34 | 35 | for (int y = 0; y < ofGetHeight()/scale; y++) { 36 | for (int x = 0; x < ofGetWidth()/scale; x++) { 37 | mesh.addVertex(ofVec3f(0, 0, 0)); 38 | mesh.addTexCoord(ofVec2f(y, x)); 39 | mesh.addColor(ofFloatColor(1.0)); 40 | } 41 | } 42 | 43 | /// Shader 44 | string updatePosVert = STRINGIFY( 45 | uniform sampler2DRect sourceTex; 46 | uniform sampler2DRect colorTex; 47 | 48 | void main() { 49 | vec2 st = gl_MultiTexCoord0.st; 50 | 51 | vec3 pos = vec3(st.x, st.y, texture2DRect(sourceTex, st).b * 50.0); 52 | vec3 color = texture2DRect(colorTex, st).rgb; 53 | 54 | gl_FrontColor = vec4(color, 1.0); 55 | gl_PointSize = 1.0; 56 | gl_Position = gl_ModelViewProjectionMatrix * vec4(pos, 1.0); 57 | } 58 | ); 59 | updatePosShader.setupShaderFromSource(GL_VERTEX_SHADER, updatePosVert); 60 | updatePosShader.linkProgram(); 61 | 62 | } 63 | 64 | //-------------------------------------------------------------- 65 | void ofApp::update(){ 66 | rd.update(); 67 | } 68 | 69 | //-------------------------------------------------------------- 70 | void ofApp::draw(){ 71 | ofSetWindowTitle(ofToString(ofGetFrameRate())); 72 | 73 | cam.begin(); 74 | ofPushStyle(); 75 | 76 | ofTranslate(160, -80); 77 | ofRotateX(60); 78 | ofRotateZ(90); 79 | 80 | updatePosShader.begin(); 81 | updatePosShader.setUniformTexture("sourceTex", rd.getSourceTexture(), 0); 82 | updatePosShader.setUniformTexture("colorTex", rd.getColorTexture(), 1); 83 | mesh.draw(); 84 | updatePosShader.end(); 85 | 86 | ofPopStyle(); 87 | cam.end(); 88 | } 89 | 90 | //-------------------------------------------------------------- 91 | void ofApp::keyPressed(int key){ 92 | 93 | } 94 | 95 | //-------------------------------------------------------------- 96 | void ofApp::keyReleased(int key){ 97 | 98 | } 99 | 100 | //-------------------------------------------------------------- 101 | void ofApp::mouseMoved(int x, int y ){ 102 | 103 | } 104 | 105 | //-------------------------------------------------------------- 106 | void ofApp::mouseDragged(int x, int y, int button){ 107 | 108 | } 109 | 110 | //-------------------------------------------------------------- 111 | void ofApp::mousePressed(int x, int y, int button){ 112 | 113 | } 114 | 115 | //-------------------------------------------------------------- 116 | void ofApp::mouseReleased(int x, int y, int button){ 117 | 118 | } 119 | 120 | //-------------------------------------------------------------- 121 | void ofApp::mouseEntered(int x, int y){ 122 | 123 | } 124 | 125 | //-------------------------------------------------------------- 126 | void ofApp::mouseExited(int x, int y){ 127 | 128 | } 129 | 130 | //-------------------------------------------------------------- 131 | void ofApp::windowResized(int w, int h){ 132 | 133 | } 134 | 135 | //-------------------------------------------------------------- 136 | void ofApp::gotMessage(ofMessage msg){ 137 | 138 | } 139 | 140 | //-------------------------------------------------------------- 141 | void ofApp::dragEvent(ofDragInfo dragInfo){ 142 | 143 | } 144 | -------------------------------------------------------------------------------- /examples/example_mesh/src/ofApp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ofMain.h" 4 | #include "ofxReactionDiffusion.h" 5 | 6 | class ofApp : public ofBaseApp{ 7 | 8 | public: 9 | void setup(); 10 | void update(); 11 | void draw(); 12 | 13 | void keyPressed(int key); 14 | void keyReleased(int key); 15 | void mouseMoved(int x, int y ); 16 | void mouseDragged(int x, int y, int button); 17 | void mousePressed(int x, int y, int button); 18 | void mouseReleased(int x, int y, int button); 19 | void mouseEntered(int x, int y); 20 | void mouseExited(int x, int y); 21 | void windowResized(int w, int h); 22 | void dragEvent(ofDragInfo dragInfo); 23 | void gotMessage(ofMessage msg); 24 | 25 | float scale; 26 | 27 | ofxReactionDiffusion rd; 28 | ofVboMesh mesh; 29 | ofEasyCam cam; 30 | 31 | ofShader updatePosShader; 32 | }; 33 | -------------------------------------------------------------------------------- /examples/example_ofxGui/Makefile: -------------------------------------------------------------------------------- 1 | # Attempt to load a config.make file. 2 | # If none is found, project defaults in config.project.make will be used. 3 | ifneq ($(wildcard config.make),) 4 | include config.make 5 | endif 6 | 7 | # make sure the the OF_ROOT location is defined 8 | ifndef OF_ROOT 9 | OF_ROOT=$(realpath ../../../..) 10 | endif 11 | 12 | # call the project makefile! 13 | include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk 14 | -------------------------------------------------------------------------------- /examples/example_ofxGui/Project.xcconfig: -------------------------------------------------------------------------------- 1 | //THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. 2 | //THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED 3 | OF_PATH = ../../../.. 4 | 5 | //THIS HAS ALL THE HEADER AND LIBS FOR OF CORE 6 | #include "../../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" 7 | 8 | //ICONS - NEW IN 0072 9 | ICON_NAME_DEBUG = icon-debug.icns 10 | ICON_NAME_RELEASE = icon.icns 11 | ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ 12 | 13 | //IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: 14 | //ICON_FILE_PATH = bin/data/ 15 | 16 | OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) 17 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) 18 | -------------------------------------------------------------------------------- /examples/example_ofxGui/addons.make: -------------------------------------------------------------------------------- 1 | ofxGui 2 | ofxReactionDiffusion 3 | -------------------------------------------------------------------------------- /examples/example_ofxGui/bin/data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matsune/ofxReactionDiffusion/63907476971c55bb2ad5f15716e91e26d2ecb6bb/examples/example_ofxGui/bin/data/.gitkeep -------------------------------------------------------------------------------- /examples/example_ofxGui/config.make: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # CONFIGURE PROJECT MAKEFILE (optional) 3 | # This file is where we make project specific configurations. 4 | ################################################################################ 5 | 6 | ################################################################################ 7 | # OF ROOT 8 | # The location of your root openFrameworks installation 9 | # (default) OF_ROOT = ../../../.. 10 | ################################################################################ 11 | # OF_ROOT = ../../../.. 12 | 13 | ################################################################################ 14 | # PROJECT ROOT 15 | # The location of the project - a starting place for searching for files 16 | # (default) PROJECT_ROOT = . (this directory) 17 | # 18 | ################################################################################ 19 | # PROJECT_ROOT = . 20 | 21 | ################################################################################ 22 | # PROJECT SPECIFIC CHECKS 23 | # This is a project defined section to create internal makefile flags to 24 | # conditionally enable or disable the addition of various features within 25 | # this makefile. For instance, if you want to make changes based on whether 26 | # GTK is installed, one might test that here and create a variable to check. 27 | ################################################################################ 28 | # None 29 | 30 | ################################################################################ 31 | # PROJECT EXTERNAL SOURCE PATHS 32 | # These are fully qualified paths that are not within the PROJECT_ROOT folder. 33 | # Like source folders in the PROJECT_ROOT, these paths are subject to 34 | # exlclusion via the PROJECT_EXLCUSIONS list. 35 | # 36 | # (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) 37 | # 38 | # Note: Leave a leading space when adding list items with the += operator 39 | ################################################################################ 40 | # PROJECT_EXTERNAL_SOURCE_PATHS = 41 | 42 | ################################################################################ 43 | # PROJECT EXCLUSIONS 44 | # These makefiles assume that all folders in your current project directory 45 | # and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations 46 | # to look for source code. The any folders or files that match any of the 47 | # items in the PROJECT_EXCLUSIONS list below will be ignored. 48 | # 49 | # Each item in the PROJECT_EXCLUSIONS list will be treated as a complete 50 | # string unless teh user adds a wildcard (%) operator to match subdirectories. 51 | # GNU make only allows one wildcard for matching. The second wildcard (%) is 52 | # treated literally. 53 | # 54 | # (default) PROJECT_EXCLUSIONS = (blank) 55 | # 56 | # Will automatically exclude the following: 57 | # 58 | # $(PROJECT_ROOT)/bin% 59 | # $(PROJECT_ROOT)/obj% 60 | # $(PROJECT_ROOT)/%.xcodeproj 61 | # 62 | # Note: Leave a leading space when adding list items with the += operator 63 | ################################################################################ 64 | # PROJECT_EXCLUSIONS = 65 | 66 | ################################################################################ 67 | # PROJECT LINKER FLAGS 68 | # These flags will be sent to the linker when compiling the executable. 69 | # 70 | # (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs 71 | # 72 | # Note: Leave a leading space when adding list items with the += operator 73 | ################################################################################ 74 | 75 | # Currently, shared libraries that are needed are copied to the 76 | # $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to 77 | # add a runtime path to search for those shared libraries, since they aren't 78 | # incorporated directly into the final executable application binary. 79 | # TODO: should this be a default setting? 80 | # PROJECT_LDFLAGS=-Wl,-rpath=./libs 81 | 82 | ################################################################################ 83 | # PROJECT DEFINES 84 | # Create a space-delimited list of DEFINES. The list will be converted into 85 | # CFLAGS with the "-D" flag later in the makefile. 86 | # 87 | # (default) PROJECT_DEFINES = (blank) 88 | # 89 | # Note: Leave a leading space when adding list items with the += operator 90 | ################################################################################ 91 | # PROJECT_DEFINES = 92 | 93 | ################################################################################ 94 | # PROJECT CFLAGS 95 | # This is a list of fully qualified CFLAGS required when compiling for this 96 | # project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS 97 | # defined in your platform specific core configuration files. These flags are 98 | # presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. 99 | # 100 | # (default) PROJECT_CFLAGS = (blank) 101 | # 102 | # Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in 103 | # your platform specific configuration file will be applied by default and 104 | # further flags here may not be needed. 105 | # 106 | # Note: Leave a leading space when adding list items with the += operator 107 | ################################################################################ 108 | # PROJECT_CFLAGS = 109 | 110 | ################################################################################ 111 | # PROJECT OPTIMIZATION CFLAGS 112 | # These are lists of CFLAGS that are target-specific. While any flags could 113 | # be conditionally added, they are usually limited to optimization flags. 114 | # These flags are added BEFORE the PROJECT_CFLAGS. 115 | # 116 | # PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. 117 | # 118 | # (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) 119 | # 120 | # PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. 121 | # 122 | # (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) 123 | # 124 | # Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the 125 | # PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration 126 | # file will be applied by default and further optimization flags here may not 127 | # be needed. 128 | # 129 | # Note: Leave a leading space when adding list items with the += operator 130 | ################################################################################ 131 | # PROJECT_OPTIMIZATION_CFLAGS_RELEASE = 132 | # PROJECT_OPTIMIZATION_CFLAGS_DEBUG = 133 | 134 | ################################################################################ 135 | # PROJECT COMPILERS 136 | # Custom compilers can be set for CC and CXX 137 | # (default) PROJECT_CXX = (blank) 138 | # (default) PROJECT_CC = (blank) 139 | # Note: Leave a leading space when adding list items with the += operator 140 | ################################################################################ 141 | # PROJECT_CXX = 142 | # PROJECT_CC = 143 | -------------------------------------------------------------------------------- /examples/example_ofxGui/example_ofxGui.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 106B9A6182DF98E835C09B47 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA20A4B3FEF378FA209B9E4E /* ofxBaseGui.cpp */; }; 11 | 413B65A0F41D699F37AB4C06 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99B37C8367EB4811EEF8E78D /* ofxSliderGroup.cpp */; }; 12 | 81BE400C35825643551A3190 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73799D65360CD587DCAE90A0 /* ofxLabel.cpp */; }; 13 | 8EFE04C2B8D70F4847663CD1 /* ofxReactionDiffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F64C7E2A2802A2CE6079B69 /* ofxReactionDiffusion.cpp */; }; 14 | A2953313263AE1234930247E /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AEA7CD14AC4CC1AF68D59D19 /* ofxSlider.cpp */; }; 15 | A61B54CA66E926867C59D2C6 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE859610F3926950EBBC8B13 /* ofxButton.cpp */; }; 16 | B07D6C52C2FE371D2B91739E /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E118568A6BABFFADB75DB858 /* ofxToggle.cpp */; }; 17 | CE6F136678038366969711AB /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27CE0445D02D803853EC74E8 /* ofxPanel.cpp */; }; 18 | CFFFBA144E8160ECC1C97982 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BD6A6ADD1A79B85E833FBDF1 /* ofxGuiGroup.cpp */; }; 19 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; 20 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; 21 | E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXContainerItemProxy section */ 25 | E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { 26 | isa = PBXContainerItemProxy; 27 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 28 | proxyType = 2; 29 | remoteGlobalIDString = E4B27C1510CBEB8E00536013; 30 | remoteInfo = openFrameworks; 31 | }; 32 | E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { 33 | isa = PBXContainerItemProxy; 34 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 35 | proxyType = 1; 36 | remoteGlobalIDString = E4B27C1410CBEB8E00536013; 37 | remoteInfo = openFrameworks; 38 | }; 39 | /* End PBXContainerItemProxy section */ 40 | 41 | /* Begin PBXCopyFilesBuildPhase section */ 42 | E4C2427710CC5ABF004149E2 /* CopyFiles */ = { 43 | isa = PBXCopyFilesBuildPhase; 44 | buildActionMask = 2147483647; 45 | dstPath = ""; 46 | dstSubfolderSpec = 10; 47 | files = ( 48 | ); 49 | runOnlyForDeploymentPostprocessing = 0; 50 | }; 51 | /* End PBXCopyFilesBuildPhase section */ 52 | 53 | /* Begin PBXFileReference section */ 54 | 0F64C7E2A2802A2CE6079B69 /* ofxReactionDiffusion.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxReactionDiffusion.cpp; path = ../../../../addons/ofxReactionDiffusion/src/ofxReactionDiffusion.cpp; sourceTree = SOURCE_ROOT; }; 55 | 13308FAE1E0AD17D00F3477E /* PingPong.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PingPong.h; path = src/PingPong.h; sourceTree = ""; }; 56 | 27CE0445D02D803853EC74E8 /* ofxPanel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxPanel.cpp; path = ../../../../addons/ofxGui/src/ofxPanel.cpp; sourceTree = SOURCE_ROOT; }; 57 | 44C0961009D36089EBA9C36F /* ofxGuiGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxGuiGroup.h; path = ../../../../addons/ofxGui/src/ofxGuiGroup.h; sourceTree = SOURCE_ROOT; }; 58 | 481083C90D96C0AAA580E194 /* ofxButton.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxButton.h; path = ../../../../addons/ofxGui/src/ofxButton.h; sourceTree = SOURCE_ROOT; }; 59 | 4EBE44F173B46F539D0F4741 /* ofxPanel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxPanel.h; path = ../../../../addons/ofxGui/src/ofxPanel.h; sourceTree = SOURCE_ROOT; }; 60 | 607FCA3A979EBCF02F0B00FC /* ofxGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxGui.h; path = ../../../../addons/ofxGui/src/ofxGui.h; sourceTree = SOURCE_ROOT; }; 61 | 73799D65360CD587DCAE90A0 /* ofxLabel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxLabel.cpp; path = ../../../../addons/ofxGui/src/ofxLabel.cpp; sourceTree = SOURCE_ROOT; }; 62 | 78F524ADA8DDC5DF3F460FA5 /* ofxToggle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxToggle.h; path = ../../../../addons/ofxGui/src/ofxToggle.h; sourceTree = SOURCE_ROOT; }; 63 | 99B37C8367EB4811EEF8E78D /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxSliderGroup.cpp; path = ../../../../addons/ofxGui/src/ofxSliderGroup.cpp; sourceTree = SOURCE_ROOT; }; 64 | AE859610F3926950EBBC8B13 /* ofxButton.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxButton.cpp; path = ../../../../addons/ofxGui/src/ofxButton.cpp; sourceTree = SOURCE_ROOT; }; 65 | AEA7CD14AC4CC1AF68D59D19 /* ofxSlider.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxSlider.cpp; path = ../../../../addons/ofxGui/src/ofxSlider.cpp; sourceTree = SOURCE_ROOT; }; 66 | BA20A4B3FEF378FA209B9E4E /* ofxBaseGui.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxBaseGui.cpp; path = ../../../../addons/ofxGui/src/ofxBaseGui.cpp; sourceTree = SOURCE_ROOT; }; 67 | BD6A6ADD1A79B85E833FBDF1 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxGuiGroup.cpp; path = ../../../../addons/ofxGui/src/ofxGuiGroup.cpp; sourceTree = SOURCE_ROOT; }; 68 | CC050FCE6035B4BAFB0D11B1 /* ofxSliderGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSliderGroup.h; path = ../../../../addons/ofxGui/src/ofxSliderGroup.h; sourceTree = SOURCE_ROOT; }; 69 | D41FA502010DB4C51A4C1390 /* ofxSlider.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSlider.h; path = ../../../../addons/ofxGui/src/ofxSlider.h; sourceTree = SOURCE_ROOT; }; 70 | E118568A6BABFFADB75DB858 /* ofxToggle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxToggle.cpp; path = ../../../../addons/ofxGui/src/ofxToggle.cpp; sourceTree = SOURCE_ROOT; }; 71 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; 72 | E4B69B5B0A3A1756003C02F2 /* example_ofxGuiDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example_ofxGuiDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; 73 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; 74 | E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; 75 | E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; 76 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; 77 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; 78 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; 79 | EE3013E1AD254D862ADCA585 /* ofxBaseGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxBaseGui.h; path = ../../../../addons/ofxGui/src/ofxBaseGui.h; sourceTree = SOURCE_ROOT; }; 80 | F100E30570234E337922C10C /* ofxLabel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxLabel.h; path = ../../../../addons/ofxGui/src/ofxLabel.h; sourceTree = SOURCE_ROOT; }; 81 | F4CAC834D4B9076DC504621D /* ofxReactionDiffusion.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxReactionDiffusion.h; path = ../../../../addons/ofxReactionDiffusion/src/ofxReactionDiffusion.h; sourceTree = SOURCE_ROOT; }; 82 | /* End PBXFileReference section */ 83 | 84 | /* Begin PBXFrameworksBuildPhase section */ 85 | E4B69B590A3A1756003C02F2 /* Frameworks */ = { 86 | isa = PBXFrameworksBuildPhase; 87 | buildActionMask = 2147483647; 88 | files = ( 89 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | /* End PBXFrameworksBuildPhase section */ 94 | 95 | /* Begin PBXGroup section */ 96 | 12BA66A1958C3B17CF449C43 /* src */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | 13308FAE1E0AD17D00F3477E /* PingPong.h */, 100 | 0F64C7E2A2802A2CE6079B69 /* ofxReactionDiffusion.cpp */, 101 | F4CAC834D4B9076DC504621D /* ofxReactionDiffusion.h */, 102 | ); 103 | name = src; 104 | sourceTree = ""; 105 | }; 106 | 43508BF48D4E7088028AEEAA /* ofxReactionDiffusion */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 12BA66A1958C3B17CF449C43 /* src */, 110 | ); 111 | name = ofxReactionDiffusion; 112 | sourceTree = ""; 113 | }; 114 | 480A780D8D0308AE4A368801 /* ofxGui */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | A763ED608B35AE3310251DEE /* src */, 118 | ); 119 | name = ofxGui; 120 | sourceTree = ""; 121 | }; 122 | 6948EE371B920CB800B5AC1A /* local_addons */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | ); 126 | name = local_addons; 127 | sourceTree = ""; 128 | }; 129 | A763ED608B35AE3310251DEE /* src */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | BA20A4B3FEF378FA209B9E4E /* ofxBaseGui.cpp */, 133 | EE3013E1AD254D862ADCA585 /* ofxBaseGui.h */, 134 | AE859610F3926950EBBC8B13 /* ofxButton.cpp */, 135 | 481083C90D96C0AAA580E194 /* ofxButton.h */, 136 | 607FCA3A979EBCF02F0B00FC /* ofxGui.h */, 137 | BD6A6ADD1A79B85E833FBDF1 /* ofxGuiGroup.cpp */, 138 | 44C0961009D36089EBA9C36F /* ofxGuiGroup.h */, 139 | 73799D65360CD587DCAE90A0 /* ofxLabel.cpp */, 140 | F100E30570234E337922C10C /* ofxLabel.h */, 141 | 27CE0445D02D803853EC74E8 /* ofxPanel.cpp */, 142 | 4EBE44F173B46F539D0F4741 /* ofxPanel.h */, 143 | AEA7CD14AC4CC1AF68D59D19 /* ofxSlider.cpp */, 144 | D41FA502010DB4C51A4C1390 /* ofxSlider.h */, 145 | 99B37C8367EB4811EEF8E78D /* ofxSliderGroup.cpp */, 146 | CC050FCE6035B4BAFB0D11B1 /* ofxSliderGroup.h */, 147 | E118568A6BABFFADB75DB858 /* ofxToggle.cpp */, 148 | 78F524ADA8DDC5DF3F460FA5 /* ofxToggle.h */, 149 | ); 150 | name = src; 151 | sourceTree = ""; 152 | }; 153 | BB4B014C10F69532006C3DED /* addons */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 480A780D8D0308AE4A368801 /* ofxGui */, 157 | 43508BF48D4E7088028AEEAA /* ofxReactionDiffusion */, 158 | ); 159 | name = addons; 160 | sourceTree = ""; 161 | }; 162 | E4328144138ABC890047C5CB /* Products */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */, 166 | ); 167 | name = Products; 168 | sourceTree = ""; 169 | }; 170 | E4B69B4A0A3A1720003C02F2 = { 171 | isa = PBXGroup; 172 | children = ( 173 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, 174 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, 175 | E4B69E1C0A3A1BDC003C02F2 /* src */, 176 | E4EEC9E9138DF44700A80321 /* openFrameworks */, 177 | BB4B014C10F69532006C3DED /* addons */, 178 | 6948EE371B920CB800B5AC1A /* local_addons */, 179 | E4B69B5B0A3A1756003C02F2 /* example_ofxGuiDebug.app */, 180 | ); 181 | sourceTree = ""; 182 | }; 183 | E4B69E1C0A3A1BDC003C02F2 /* src */ = { 184 | isa = PBXGroup; 185 | children = ( 186 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, 187 | E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, 188 | E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, 189 | ); 190 | path = src; 191 | sourceTree = SOURCE_ROOT; 192 | }; 193 | E4EEC9E9138DF44700A80321 /* openFrameworks */ = { 194 | isa = PBXGroup; 195 | children = ( 196 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, 197 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, 198 | ); 199 | name = openFrameworks; 200 | sourceTree = ""; 201 | }; 202 | /* End PBXGroup section */ 203 | 204 | /* Begin PBXNativeTarget section */ 205 | E4B69B5A0A3A1756003C02F2 /* example_ofxGui */ = { 206 | isa = PBXNativeTarget; 207 | buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "example_ofxGui" */; 208 | buildPhases = ( 209 | E4B69B580A3A1756003C02F2 /* Sources */, 210 | E4B69B590A3A1756003C02F2 /* Frameworks */, 211 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, 212 | E4C2427710CC5ABF004149E2 /* CopyFiles */, 213 | ); 214 | buildRules = ( 215 | ); 216 | dependencies = ( 217 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, 218 | ); 219 | name = example_ofxGui; 220 | productName = myOFApp; 221 | productReference = E4B69B5B0A3A1756003C02F2 /* example_ofxGuiDebug.app */; 222 | productType = "com.apple.product-type.application"; 223 | }; 224 | /* End PBXNativeTarget section */ 225 | 226 | /* Begin PBXProject section */ 227 | E4B69B4C0A3A1720003C02F2 /* Project object */ = { 228 | isa = PBXProject; 229 | attributes = { 230 | LastUpgradeCheck = 0600; 231 | }; 232 | buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "example_ofxGui" */; 233 | compatibilityVersion = "Xcode 3.2"; 234 | developmentRegion = English; 235 | hasScannedForEncodings = 0; 236 | knownRegions = ( 237 | English, 238 | Japanese, 239 | French, 240 | German, 241 | ); 242 | mainGroup = E4B69B4A0A3A1720003C02F2; 243 | productRefGroup = E4B69B4A0A3A1720003C02F2; 244 | projectDirPath = ""; 245 | projectReferences = ( 246 | { 247 | ProductGroup = E4328144138ABC890047C5CB /* Products */; 248 | ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; 249 | }, 250 | ); 251 | projectRoot = ""; 252 | targets = ( 253 | E4B69B5A0A3A1756003C02F2 /* example_ofxGui */, 254 | ); 255 | }; 256 | /* End PBXProject section */ 257 | 258 | /* Begin PBXReferenceProxy section */ 259 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { 260 | isa = PBXReferenceProxy; 261 | fileType = archive.ar; 262 | path = openFrameworksDebug.a; 263 | remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; 264 | sourceTree = BUILT_PRODUCTS_DIR; 265 | }; 266 | /* End PBXReferenceProxy section */ 267 | 268 | /* Begin PBXShellScriptBuildPhase section */ 269 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { 270 | isa = PBXShellScriptBuildPhase; 271 | buildActionMask = 2147483647; 272 | files = ( 273 | ); 274 | inputPaths = ( 275 | ); 276 | outputPaths = ( 277 | ); 278 | runOnlyForDeploymentPostprocessing = 0; 279 | shellPath = /bin/sh; 280 | shellScript = "mkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy default icon file into App/Resources\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy libfmod and change install directory for fmod to run\nrsync -aved ../../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\";\ninstall_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\n# Copy GLUT framework (must remove for AppStore submissions)\nrsync -aved ../../../../libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\"\n"; 281 | }; 282 | /* End PBXShellScriptBuildPhase section */ 283 | 284 | /* Begin PBXSourcesBuildPhase section */ 285 | E4B69B580A3A1756003C02F2 /* Sources */ = { 286 | isa = PBXSourcesBuildPhase; 287 | buildActionMask = 2147483647; 288 | files = ( 289 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, 290 | E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, 291 | 106B9A6182DF98E835C09B47 /* ofxBaseGui.cpp in Sources */, 292 | A61B54CA66E926867C59D2C6 /* ofxButton.cpp in Sources */, 293 | CFFFBA144E8160ECC1C97982 /* ofxGuiGroup.cpp in Sources */, 294 | 81BE400C35825643551A3190 /* ofxLabel.cpp in Sources */, 295 | CE6F136678038366969711AB /* ofxPanel.cpp in Sources */, 296 | A2953313263AE1234930247E /* ofxSlider.cpp in Sources */, 297 | 413B65A0F41D699F37AB4C06 /* ofxSliderGroup.cpp in Sources */, 298 | B07D6C52C2FE371D2B91739E /* ofxToggle.cpp in Sources */, 299 | 8EFE04C2B8D70F4847663CD1 /* ofxReactionDiffusion.cpp in Sources */, 300 | ); 301 | runOnlyForDeploymentPostprocessing = 0; 302 | }; 303 | /* End PBXSourcesBuildPhase section */ 304 | 305 | /* Begin PBXTargetDependency section */ 306 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { 307 | isa = PBXTargetDependency; 308 | name = openFrameworks; 309 | targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; 310 | }; 311 | /* End PBXTargetDependency section */ 312 | 313 | /* Begin XCBuildConfiguration section */ 314 | E4B69B4E0A3A1720003C02F2 /* Debug */ = { 315 | isa = XCBuildConfiguration; 316 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 317 | buildSettings = { 318 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; 319 | COPY_PHASE_STRIP = NO; 320 | DEAD_CODE_STRIPPING = YES; 321 | GCC_AUTO_VECTORIZATION = YES; 322 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 323 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 324 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO; 325 | GCC_OPTIMIZATION_LEVEL = 0; 326 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 327 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; 328 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; 329 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; 330 | GCC_WARN_UNINITIALIZED_AUTOS = NO; 331 | GCC_WARN_UNUSED_VALUE = NO; 332 | GCC_WARN_UNUSED_VARIABLE = NO; 333 | HEADER_SEARCH_PATHS = ( 334 | "$(OF_CORE_HEADERS)", 335 | ../../../../addons/ofxGui/src, 336 | ../../../../addons/ofxReactionDiffusion/src, 337 | ); 338 | MACOSX_DEPLOYMENT_TARGET = 10.8; 339 | ONLY_ACTIVE_ARCH = YES; 340 | OTHER_CPLUSPLUSFLAGS = ( 341 | "-D__MACOSX_CORE__", 342 | "-mtune=native", 343 | ); 344 | SDKROOT = macosx; 345 | }; 346 | name = Debug; 347 | }; 348 | E4B69B4F0A3A1720003C02F2 /* Release */ = { 349 | isa = XCBuildConfiguration; 350 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 351 | buildSettings = { 352 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; 353 | COPY_PHASE_STRIP = YES; 354 | DEAD_CODE_STRIPPING = YES; 355 | GCC_AUTO_VECTORIZATION = YES; 356 | GCC_ENABLE_SSE3_EXTENSIONS = YES; 357 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; 358 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO; 359 | GCC_OPTIMIZATION_LEVEL = 3; 360 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 361 | GCC_UNROLL_LOOPS = YES; 362 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; 363 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; 364 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; 365 | GCC_WARN_UNINITIALIZED_AUTOS = NO; 366 | GCC_WARN_UNUSED_VALUE = NO; 367 | GCC_WARN_UNUSED_VARIABLE = NO; 368 | HEADER_SEARCH_PATHS = ( 369 | "$(OF_CORE_HEADERS)", 370 | ../../../../addons/ofxGui/src, 371 | ../../../../addons/ofxReactionDiffusion/src, 372 | ); 373 | MACOSX_DEPLOYMENT_TARGET = 10.8; 374 | OTHER_CPLUSPLUSFLAGS = ( 375 | "-D__MACOSX_CORE__", 376 | "-mtune=native", 377 | ); 378 | SDKROOT = macosx; 379 | }; 380 | name = Release; 381 | }; 382 | E4B69B600A3A1757003C02F2 /* Debug */ = { 383 | isa = XCBuildConfiguration; 384 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 385 | buildSettings = { 386 | COMBINE_HIDPI_IMAGES = YES; 387 | COPY_PHASE_STRIP = NO; 388 | FRAMEWORK_SEARCH_PATHS = ( 389 | "$(inherited)", 390 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 391 | ); 392 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../libs/glut/lib/osx\""; 393 | GCC_DYNAMIC_NO_PIC = NO; 394 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 395 | GCC_MODEL_TUNING = NONE; 396 | HEADER_SEARCH_PATHS = ( 397 | "$(OF_CORE_HEADERS)", 398 | ../../../../addons/ofxGui/src, 399 | ../../../../addons/ofxReactionDiffusion/src, 400 | ); 401 | ICON = "$(ICON_NAME_DEBUG)"; 402 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; 403 | INFOPLIST_FILE = "openFrameworks-Info.plist"; 404 | INSTALL_PATH = /Applications; 405 | LIBRARY_SEARCH_PATHS = "$(inherited)"; 406 | PRODUCT_NAME = "$(TARGET_NAME)Debug"; 407 | WRAPPER_EXTENSION = app; 408 | }; 409 | name = Debug; 410 | }; 411 | E4B69B610A3A1757003C02F2 /* Release */ = { 412 | isa = XCBuildConfiguration; 413 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; 414 | buildSettings = { 415 | COMBINE_HIDPI_IMAGES = YES; 416 | COPY_PHASE_STRIP = YES; 417 | FRAMEWORK_SEARCH_PATHS = ( 418 | "$(inherited)", 419 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", 420 | ); 421 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../libs/glut/lib/osx\""; 422 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 423 | GCC_MODEL_TUNING = NONE; 424 | HEADER_SEARCH_PATHS = ( 425 | "$(OF_CORE_HEADERS)", 426 | ../../../../addons/ofxGui/src, 427 | ../../../../addons/ofxReactionDiffusion/src, 428 | ); 429 | ICON = "$(ICON_NAME_RELEASE)"; 430 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; 431 | INFOPLIST_FILE = "openFrameworks-Info.plist"; 432 | INSTALL_PATH = /Applications; 433 | LIBRARY_SEARCH_PATHS = "$(inherited)"; 434 | PRODUCT_NAME = "$(TARGET_NAME)"; 435 | WRAPPER_EXTENSION = app; 436 | baseConfigurationReference = E4EB6923138AFD0F00A09F29; 437 | }; 438 | name = Release; 439 | }; 440 | /* End XCBuildConfiguration section */ 441 | 442 | /* Begin XCConfigurationList section */ 443 | E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "example_ofxGui" */ = { 444 | isa = XCConfigurationList; 445 | buildConfigurations = ( 446 | E4B69B4E0A3A1720003C02F2 /* Debug */, 447 | E4B69B4F0A3A1720003C02F2 /* Release */, 448 | ); 449 | defaultConfigurationIsVisible = 0; 450 | defaultConfigurationName = Release; 451 | }; 452 | E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "example_ofxGui" */ = { 453 | isa = XCConfigurationList; 454 | buildConfigurations = ( 455 | E4B69B600A3A1757003C02F2 /* Debug */, 456 | E4B69B610A3A1757003C02F2 /* Release */, 457 | ); 458 | defaultConfigurationIsVisible = 0; 459 | defaultConfigurationName = Release; 460 | }; 461 | /* End XCConfigurationList section */ 462 | }; 463 | rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; 464 | } 465 | -------------------------------------------------------------------------------- /examples/example_ofxGui/example_ofxGui.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/example_ofxGui/example_ofxGui.xcodeproj/xcshareddata/xcschemes/example_ofxGui Debug.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /examples/example_ofxGui/example_ofxGui.xcodeproj/xcshareddata/xcschemes/example_ofxGui Release.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 69 | 70 | 76 | 77 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /examples/example_ofxGui/openFrameworks-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | cc.openFrameworks.ofapp 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleVersion 18 | 1.0 19 | CFBundleIconFile 20 | ${ICON} 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/example_ofxGui/src/PingPong.h: -------------------------------------------------------------------------------- 1 | #ifndef PingPong_h 2 | #define PingPong_h 3 | 4 | struct PingPong { 5 | public: 6 | void allocate( int _width, int _height, int _internalformat = GL_RGBA, int _numColorBuffers = 1){ 7 | // Allocate 8 | ofFbo::Settings fboSettings; 9 | fboSettings.width = _width; 10 | fboSettings.height = _height; 11 | fboSettings.numColorbuffers = _numColorBuffers; 12 | fboSettings.useDepth = false; 13 | fboSettings.internalformat = _internalformat; // Gotta store the data as floats, they won't be clamped to 0..1 14 | fboSettings.wrapModeHorizontal = GL_CLAMP_TO_EDGE; 15 | fboSettings.wrapModeVertical = GL_CLAMP_TO_EDGE; 16 | fboSettings.minFilter = GL_NEAREST; // No interpolation, that would mess up data reads later! 17 | fboSettings.maxFilter = GL_NEAREST; 18 | for(int i = 0; i < 2; i++){ 19 | FBOs[i].allocate(fboSettings); 20 | } 21 | 22 | // Clean 23 | clear(); 24 | 25 | // Set everything to 0 26 | flag = 0; 27 | swap(); 28 | flag = 0; 29 | } 30 | 31 | void swap(){ 32 | src = &(FBOs[(flag)%2]); 33 | dst = &(FBOs[++(flag)%2]); 34 | } 35 | 36 | void clear(){ 37 | for(int i = 0; i < 2; i++){ 38 | FBOs[i].begin(); 39 | ofClear(0,255); 40 | FBOs[i].end(); 41 | } 42 | } 43 | 44 | ofFbo& operator[]( int n ){ return FBOs[n];} 45 | 46 | ofFbo *src; // Source -> Ping 47 | ofFbo *dst; // Destination -> Pong 48 | private: 49 | ofFbo FBOs[2]; // Real addresses of ping/pong FBO´s 50 | int flag; // Integer for making a quick swap 51 | }; 52 | 53 | #endif -------------------------------------------------------------------------------- /examples/example_ofxGui/src/main.cpp: -------------------------------------------------------------------------------- 1 | #include "ofMain.h" 2 | #include "ofApp.h" 3 | 4 | //======================================================================== 5 | int main( ){ 6 | ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context 7 | 8 | // this kicks off the running of my app 9 | // can be OF_WINDOW or OF_FULLSCREEN 10 | // pass in width and height too: 11 | ofRunApp(new ofApp()); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /examples/example_ofxGui/src/ofApp.cpp: -------------------------------------------------------------------------------- 1 | #include "ofApp.h" 2 | 3 | //-------------------------------------------------------------- 4 | void ofApp::setup(){ 5 | ofSetBackgroundColor(0); 6 | ofSetFrameRate(60); 7 | 8 | rd.allocate(ofGetWidth(), ofGetHeight()); 9 | 10 | gui.setup(); 11 | gui.setName("Parameters"); 12 | gui.add(mode.setup("Mode", 0, 0, 2)); 13 | gui.add(passes.setup("Passes", rd.getPasses(), 0.01, 2)); 14 | gui.add(clearButton.setup("Clear")); 15 | clearButton.addListener(this, &ofApp::clear); 16 | 17 | gui.add(gs.setup()); 18 | gs.setName("Gray Scott"); 19 | gs.add(feed.setup("Feed", rd.getFeed(), 0, 0.5)); 20 | gs.add(kill.setup("Kill", rd.getKill(), 0, 0.5)); 21 | gs.add(Du.setup("Du", rd.getDu(), 0, 0.5)); 22 | gs.add(Dv.setup("Dv", rd.getDv(), 0, 0.5)); 23 | 24 | gui.add(fhn.setup()); 25 | fhn.setName("Fitz-Hugh Nagumo"); 26 | fhn.add(a0.setup("a0", rd.getA0(), 0, 1.0)); 27 | fhn.add(a1.setup("a1", rd.getA1(), 0, 1.0)); 28 | fhn.add(epsilon.setup("Epsilon", rd.getEpsilon(), 0, 1.5)); 29 | fhn.add(delta.setup("Delta", rd.getDelta(), 0, 1.0)); 30 | fhn.add(k1.setup("K1", rd.getK1(), 0.001, 3.0)); 31 | fhn.add(k2.setup("K2", rd.getK2(), 0.001, 3.0)); 32 | fhn.add(k3.setup("K3", rd.getK3(), 0.001, 3.0)); 33 | 34 | gui.add(bz.setup()); 35 | bz.setName("Belousov Zhabotinsky"); 36 | bz.add(alpha.setup("Alpha", rd.getAlpha(), -5.0, 5.0)); 37 | bz.add(beta.setup("Beta", rd.getBeta(), -5.0, 5.0)); 38 | bz.add(gamma.setup("Gamma", rd.getGamma(), -5.0, 5.0)); 39 | 40 | colors.setup(); 41 | colors.setPosition(ofGetWidth() - colors.getWidth(), 0); 42 | colors.setName("Colors"); 43 | colors.add(color1.setup("Color 1", 0.0 , 0, 1.0)); 44 | colors.add(thresh1.setup("Thresh 1", 0.0 , 0, 1.0)); 45 | colors.add(color2.setup("Color 2", 0.25, 0, 1.0)); 46 | colors.add(thresh2.setup("Thresh 2", 0.2 , 0, 1.0)); 47 | colors.add(color3.setup("Color 3", 0.5 , 0, 1.0)); 48 | colors.add(thresh3.setup("Thresh 3", 0.4 , 0, 1.0)); 49 | colors.add(color4.setup("Color 4", 0.75, 0, 1.0)); 50 | colors.add(thresh4.setup("Thresh 4", 0.6 , 0, 1.0)); 51 | colors.add(color5.setup("Color 5", 1.0 , 0, 1.0)); 52 | colors.add(thresh5.setup("Thresh 5", 0.8 , 0, 1.0)); 53 | 54 | color1 = rd.getColor1(); 55 | color2 = rd.getColor2(); 56 | color3 = rd.getColor3(); 57 | color4 = rd.getColor4(); 58 | color5 = rd.getColor5(); 59 | } 60 | 61 | void ofApp::clear() { 62 | rd.clearAll(); 63 | } 64 | 65 | //-------------------------------------------------------------- 66 | void ofApp::update(){ 67 | rd.setPasses(passes); 68 | 69 | switch (mode) { 70 | case 0: 71 | rd.setMode(RD_MODE_GRAY_SCOTT); 72 | rd.setGrayScottParams(feed, kill, Du, Dv); 73 | break; 74 | case 1: 75 | rd.setMode(RD_MODE_FITZHUGH_NAGUMO); 76 | rd.setFhnParams(a0, a1, epsilon, delta, k1, k2, k3); 77 | break; 78 | case 2: 79 | rd.setMode(RD_MODE_BELOUSOV_ZHABOTINSKY); 80 | rd.setBzParams(alpha, beta, gamma); 81 | break; 82 | default: 83 | break; 84 | } 85 | 86 | rd.setColor1(color1); 87 | rd.setColor1Threshold(thresh1); 88 | rd.setColor2(color2); 89 | rd.setColor2Threshold(thresh2); 90 | rd.setColor3(color3); 91 | rd.setColor3Threshold(thresh3); 92 | rd.setColor4(color4); 93 | rd.setColor4Threshold(thresh4); 94 | rd.setColor5(color5); 95 | rd.setColor5Threshold(thresh5); 96 | 97 | rd.update(); 98 | } 99 | 100 | //-------------------------------------------------------------- 101 | void ofApp::draw(){ 102 | rd.draw(); 103 | 104 | gui.draw(); 105 | 106 | colors.draw(); 107 | } 108 | 109 | //-------------------------------------------------------------- 110 | void ofApp::keyPressed(int key){ 111 | 112 | } 113 | 114 | //-------------------------------------------------------------- 115 | void ofApp::keyReleased(int key){ 116 | 117 | } 118 | 119 | //-------------------------------------------------------------- 120 | void ofApp::mouseMoved(int x, int y ){ 121 | 122 | } 123 | 124 | //-------------------------------------------------------------- 125 | void ofApp::mouseDragged(int x, int y, int button){ 126 | if (button == 0) { 127 | rd.addSource(x, y, 5); 128 | } else if (button == 2) { 129 | rd.addObstacle(x, y, 5); 130 | } 131 | } 132 | 133 | //-------------------------------------------------------------- 134 | void ofApp::mousePressed(int x, int y, int button){ 135 | 136 | } 137 | 138 | //-------------------------------------------------------------- 139 | void ofApp::mouseReleased(int x, int y, int button){ 140 | 141 | } 142 | 143 | //-------------------------------------------------------------- 144 | void ofApp::mouseEntered(int x, int y){ 145 | 146 | } 147 | 148 | //-------------------------------------------------------------- 149 | void ofApp::mouseExited(int x, int y){ 150 | 151 | } 152 | 153 | //-------------------------------------------------------------- 154 | void ofApp::windowResized(int w, int h){ 155 | 156 | } 157 | 158 | //-------------------------------------------------------------- 159 | void ofApp::gotMessage(ofMessage msg){ 160 | 161 | } 162 | 163 | //-------------------------------------------------------------- 164 | void ofApp::dragEvent(ofDragInfo dragInfo){ 165 | 166 | } 167 | -------------------------------------------------------------------------------- /examples/example_ofxGui/src/ofApp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ofMain.h" 4 | #include "ofxGui.h" 5 | #include "ofxReactionDiffusion.h" 6 | 7 | class ofApp : public ofBaseApp{ 8 | 9 | public: 10 | void setup(); 11 | void update(); 12 | void draw(); 13 | 14 | void keyPressed(int key); 15 | void keyReleased(int key); 16 | void mouseMoved(int x, int y ); 17 | void mouseDragged(int x, int y, int button); 18 | void mousePressed(int x, int y, int button); 19 | void mouseReleased(int x, int y, int button); 20 | void mouseEntered(int x, int y); 21 | void mouseExited(int x, int y); 22 | void windowResized(int w, int h); 23 | void dragEvent(ofDragInfo dragInfo); 24 | void gotMessage(ofMessage msg); 25 | 26 | void clear(); 27 | 28 | ofxReactionDiffusion rd; 29 | 30 | 31 | ofxPanel gui; 32 | ofxIntSlider mode; 33 | ofxFloatSlider passes; 34 | ofxButton clearButton; 35 | 36 | ofxGuiGroup gs; 37 | ofxFloatSlider feed, kill, Du, Dv; 38 | 39 | ofxGuiGroup fhn; 40 | ofxFloatSlider a0, a1, epsilon, delta, k1, k2, k3; 41 | 42 | ofxGuiGroup bz; 43 | ofxFloatSlider alpha, beta, gamma; 44 | 45 | ofxGuiGroup worm; 46 | ofxFloatSlider constA, constB; 47 | 48 | ofxPanel colors; 49 | ofxFloatColorSlider color1, color2, color3, color4, color5; 50 | ofxFloatSlider thresh1, thresh2, thresh3, thresh4, thresh5; 51 | }; 52 | -------------------------------------------------------------------------------- /ofxaddons_thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matsune/ofxReactionDiffusion/63907476971c55bb2ad5f15716e91e26d2ecb6bb/ofxaddons_thumbnail.png -------------------------------------------------------------------------------- /src/PingPong.h: -------------------------------------------------------------------------------- 1 | #ifndef PingPong_h 2 | #define PingPong_h 3 | 4 | struct PingPong { 5 | public: 6 | void allocate( int _width, int _height, int _internalformat = GL_RGBA, int _numColorBuffers = 1){ 7 | // Allocate 8 | ofFbo::Settings fboSettings; 9 | fboSettings.width = _width; 10 | fboSettings.height = _height; 11 | fboSettings.numColorbuffers = _numColorBuffers; 12 | fboSettings.useDepth = false; 13 | fboSettings.internalformat = _internalformat; // Gotta store the data as floats, they won't be clamped to 0..1 14 | fboSettings.wrapModeHorizontal = GL_CLAMP_TO_EDGE; 15 | fboSettings.wrapModeVertical = GL_CLAMP_TO_EDGE; 16 | fboSettings.minFilter = GL_NEAREST; // No interpolation, that would mess up data reads later! 17 | fboSettings.maxFilter = GL_NEAREST; 18 | for(int i = 0; i < 2; i++){ 19 | FBOs[i].allocate(fboSettings); 20 | } 21 | 22 | // Clean 23 | clear(); 24 | 25 | // Set everything to 0 26 | flag = 0; 27 | swap(); 28 | flag = 0; 29 | } 30 | 31 | void swap(){ 32 | src = &(FBOs[(flag)%2]); 33 | dst = &(FBOs[++(flag)%2]); 34 | } 35 | 36 | void clear(){ 37 | for(int i = 0; i < 2; i++){ 38 | FBOs[i].begin(); 39 | ofClear(0,255); 40 | FBOs[i].end(); 41 | } 42 | } 43 | 44 | ofFbo& operator[]( int n ){ return FBOs[n];} 45 | 46 | ofFbo *src; // Source -> Ping 47 | ofFbo *dst; // Destination -> Pong 48 | private: 49 | ofFbo FBOs[2]; // Real addresses of ping/pong FBO´s 50 | int flag; // Integer for making a quick swap 51 | }; 52 | 53 | #endif -------------------------------------------------------------------------------- /src/ofxReactionDiffusion.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // ofxReactionDiffusion.cpp 3 | // 4 | // Created by Yuma Matsune on 2016/10/25. 5 | // 6 | // 7 | 8 | #include "ofxReactionDiffusion.h" 9 | 10 | ofxReactionDiffusion::ofxReactionDiffusion() { 11 | mode = RD_MODE_GRAY_SCOTT; 12 | 13 | passes = 1.0; 14 | 15 | feed = 0.037; 16 | kill = 0.06; 17 | Du = 0.21; 18 | Dv = 0.105; 19 | 20 | a0 = 0.459184; 21 | a1 = 0.780612; 22 | epsilon = 0.642857; 23 | delta = 3.0; 24 | k1 = 1.63776; 25 | k2 = 0.336735; 26 | k3 = 2.29592; 27 | 28 | alpha = 1.0; 29 | beta = 1.0; 30 | gamma = 1.0; 31 | 32 | color1.set( 0.0, 0.0, 0.0, 0.0); 33 | color2.set( 0.0, 0.403, 0.6836, 0.2); 34 | color3.set(0.7857, 0.0816, 0.7347, 0.4); 35 | color4.set( 1.0, 0.1632, 0.4948, 0.6); 36 | color5.set( 0.02, 0.78, 0.918, 0.8); 37 | 38 | string grayScott = STRINGIFY( 39 | float kernel[9]; 40 | vec2 offset[9]; 41 | 42 | uniform float passes; 43 | uniform float feed; 44 | uniform float kill; 45 | uniform float Du; 46 | uniform float Dv; 47 | uniform sampler2DRect tex0; 48 | 49 | void main(){ 50 | vec2 st = gl_TexCoord[0].st; 51 | 52 | offset[0] = vec2( 0.0, -1.0); 53 | offset[1] = vec2(-1.0, 0.0); 54 | offset[2] = vec2( 0.0, 0.0); 55 | offset[3] = vec2( 1.0, 0.0); 56 | offset[4] = vec2( 0.0, 1.0); 57 | 58 | offset[5] = vec2(-1.0, -1.0); 59 | offset[6] = vec2( 1.0, -1.0); 60 | offset[7] = vec2(-1.0, 1.0); 61 | offset[8] = vec2( 1.0, 1.0); 62 | 63 | kernel[0] = 1.0; 64 | kernel[1] = 1.0; 65 | kernel[2] = -6.82842712; 66 | kernel[3] = 1.0; 67 | kernel[4] = 1.0; 68 | 69 | kernel[5] = 0.707106781; 70 | kernel[6] = 0.707106781; 71 | kernel[7] = 0.707106781; 72 | kernel[8] = 0.707106781; 73 | 74 | vec2 lap = vec2(0.0, 0.0); 75 | for(int i=0; i<9; i++){ 76 | vec2 tmp = texture2DRect(tex0, st + offset[i]).rb; 77 | lap += tmp * kernel[i]; 78 | } 79 | 80 | vec2 uv = texture2DRect(tex0, st).rb; 81 | float du = Du*lap.r - uv.r*uv.g*uv.g + feed*(1.0 - uv.r); 82 | float dv = Dv*lap.g + uv.r*uv.g*uv.g - (feed+kill)*uv.g; 83 | vec2 dst = uv + passes*vec2(du, dv); 84 | 85 | gl_FragColor = vec4(dst.r, 0.0, dst.g, 1.0);; 86 | } 87 | ); 88 | gsShader.unload(); 89 | gsShader.setupShaderFromSource(GL_FRAGMENT_SHADER, grayScott); 90 | gsShader.linkProgram(); 91 | 92 | string fitzHughNagumo = STRINGIFY( 93 | float kernel[9]; 94 | vec2 offset[9]; 95 | 96 | uniform float passes; 97 | uniform float a0; 98 | uniform float a1; 99 | uniform float epsilon; 100 | uniform float delta; 101 | uniform float k1; 102 | uniform float k2; 103 | uniform float k3; 104 | uniform sampler2DRect tex0; 105 | 106 | void main(){ 107 | vec2 st = gl_TexCoord[0].st; 108 | 109 | offset[0] = vec2( 0.0, -1.0); 110 | offset[1] = vec2(-1.0, 0.0); 111 | offset[2] = vec2( 0.0, 0.0); 112 | offset[3] = vec2( 1.0, 0.0); 113 | offset[4] = vec2( 0.0, 1.0); 114 | 115 | offset[5] = vec2(-1.0, -1.0); 116 | offset[6] = vec2( 1.0, -1.0); 117 | offset[7] = vec2(-1.0, 1.0); 118 | offset[8] = vec2( 1.0, 1.0); 119 | 120 | kernel[0] = 1.0; 121 | kernel[1] = 1.0; 122 | kernel[2] = -6.82842712; 123 | kernel[3] = 1.0; 124 | kernel[4] = 1.0; 125 | 126 | kernel[5] = 0.707106781; 127 | kernel[6] = 0.707106781; 128 | kernel[7] = 0.707106781; 129 | kernel[8] = 0.707106781; 130 | 131 | vec2 lap = vec2(0.0, 0.0); 132 | for(int i=0; i<9; i++){ 133 | vec2 tmp = texture2DRect(tex0, st + offset[i]).rb; 134 | lap += tmp * kernel[i]; 135 | } 136 | 137 | float u = texture2DRect(tex0, st).r; 138 | float v = texture2DRect(tex0, st).b; 139 | 140 | float du = (k1 * u) - (k2 * pow(u, 2.0)) - pow(u, 3.0) - v + lap.x; 141 | float dv = epsilon * (k3 * u - a1 * v - a0) + delta * lap.y; 142 | u += du * passes * 0.1; 143 | v += dv * passes * 0.1; 144 | gl_FragColor = vec4(clamp(u, 0.0, 1.0), 0, clamp(v, 0.0, 1.0), 1.0); 145 | } 146 | ); 147 | fhnShader.unload(); 148 | fhnShader.setupShaderFromSource(GL_FRAGMENT_SHADER, fitzHughNagumo); 149 | fhnShader.linkProgram(); 150 | 151 | string belousovZhabotinsky = STRINGIFY( 152 | vec2 offset[9]; 153 | 154 | uniform float passes; 155 | uniform float alpha; 156 | uniform float beta; 157 | uniform float gamma; 158 | uniform sampler2DRect tex0; 159 | 160 | void main(){ 161 | vec2 st = gl_TexCoord[0].st; 162 | 163 | offset[0] = vec2( 0.0, -1.0); 164 | offset[1] = vec2(-1.0, 0.0); 165 | offset[2] = vec2( 0.0, 0.0); 166 | offset[3] = vec2( 1.0, 0.0); 167 | offset[4] = vec2( 0.0, 1.0); 168 | 169 | offset[5] = vec2(-1.0, -1.0); 170 | offset[6] = vec2( 1.0, -1.0); 171 | offset[7] = vec2(-1.0, 1.0); 172 | offset[8] = vec2( 1.0, 1.0); 173 | 174 | vec3 source = vec3(0); 175 | for(int i=0; i<9; i++){ 176 | source += texture2DRect(tex0, st + offset[i]).rgb; 177 | } 178 | source /= 9.0; 179 | 180 | float a = source.r + source.r * ((alpha * (source.g * gamma)) - source.b) * passes; 181 | float b = source.g + source.g * ((beta * source.b) - (alpha * source.r)) * passes; 182 | float c = source.b + source.b * ((gamma * source.r) - (beta * source.g)) * passes; 183 | 184 | source.r = a; 185 | source.g = b; 186 | source.b = c; 187 | 188 | gl_FragColor = vec4(source, 1.0); 189 | } 190 | ); 191 | bzShader.unload(); 192 | bzShader.setupShaderFromSource(GL_FRAGMENT_SHADER, belousovZhabotinsky); 193 | bzShader.linkProgram(); 194 | 195 | string coloringFragment = STRINGIFY( 196 | uniform vec4 color1; 197 | uniform vec4 color2; 198 | uniform vec4 color3; 199 | uniform vec4 color4; 200 | uniform vec4 color5; 201 | uniform sampler2DRect tex0; 202 | 203 | void main(){ 204 | vec2 st = gl_TexCoord[0].st; 205 | 206 | float value = texture2DRect(tex0, st).b; 207 | float a; 208 | vec3 col; 209 | 210 | if(value <= color1.a) 211 | col = color1.rgb; 212 | 213 | if(value > color1.a && value <= color2.a) { 214 | a = (value-color1.a)/(color2.a-color1.a); 215 | col = mix(color1.rgb, color2.rgb, a); 216 | } 217 | 218 | if(value > color2.a && value <= color3.a) { 219 | a = (value-color2.a)/(color3.a-color2.a); 220 | col = mix(color2.rgb, color3.rgb, a); 221 | } 222 | 223 | if(value > color3.a && value <= color4.a) { 224 | a = (value-color3.a)/(color4.a-color3.a); 225 | col = mix(color3.rgb, color4.rgb, a); 226 | } 227 | 228 | if(value > color4.a && value <= color5.a) { 229 | a = (value - color4.a)/(color5.a - color4.a); 230 | col = mix(color4.rgb, color5.rgb, a); 231 | } 232 | 233 | if(value > color5.a) 234 | col = color5.rgb; 235 | 236 | gl_FragColor = vec4(col,1.0); 237 | } 238 | ); 239 | coloringShader.unload(); 240 | coloringShader.setupShaderFromSource(GL_FRAGMENT_SHADER, coloringFragment); 241 | coloringShader.linkProgram(); 242 | } 243 | 244 | void ofxReactionDiffusion::allocate(int _width, int _height, float _scale) { 245 | width = _width; 246 | height = _height; 247 | scale = _scale; 248 | 249 | srcPingPong.allocate(_width, _height); 250 | obstaclePingPong.allocate(_width, _height); 251 | renderPingPong.allocate(_width, _height); 252 | 253 | clearAll(); 254 | } 255 | 256 | 257 | void ofxReactionDiffusion::update() { 258 | srcPingPong.dst->begin(); 259 | srcPingPong.src->draw(0, 0); 260 | obstaclePingPong.src->draw(0, 0); 261 | srcPingPong.dst->end(); 262 | 263 | srcPingPong.swap(); 264 | 265 | 266 | srcPingPong.dst->begin(); 267 | switch (mode) { 268 | case RD_MODE_GRAY_SCOTT: 269 | gsShader.begin(); 270 | gsShader.setUniform1f("screenWidth", ofGetWidth()); 271 | gsShader.setUniform1f("screenHeight", ofGetHeight()); 272 | gsShader.setUniform1f("passes", passes); 273 | gsShader.setUniform1f("feed", feed); 274 | gsShader.setUniform1f("kill", kill); 275 | gsShader.setUniform1f("Du", Du); 276 | gsShader.setUniform1f("Dv", Dv); 277 | srcPingPong.src->draw(0, 0); 278 | gsShader.end(); 279 | break; 280 | case RD_MODE_FITZHUGH_NAGUMO: 281 | fhnShader.begin(); 282 | fhnShader.setUniform1f("passes", passes); 283 | fhnShader.setUniform1f("a0", a0); 284 | fhnShader.setUniform1f("a1", a1); 285 | fhnShader.setUniform1f("epsilon", epsilon); 286 | fhnShader.setUniform1f("delta", delta); 287 | fhnShader.setUniform1f("k1", k1); 288 | fhnShader.setUniform1f("k2", k2); 289 | fhnShader.setUniform1f("k3", k3); 290 | srcPingPong.src->draw(0, 0); 291 | fhnShader.end(); 292 | break; 293 | case RD_MODE_BELOUSOV_ZHABOTINSKY: 294 | bzShader.begin(); 295 | bzShader.setUniform1f("passes", passes); 296 | bzShader.setUniform1f("alpha", alpha); 297 | bzShader.setUniform1f("beta", beta); 298 | bzShader.setUniform1f("gamma", gamma); 299 | srcPingPong.src->draw(0, 0); 300 | bzShader.end(); 301 | break; 302 | default: 303 | break; 304 | } 305 | srcPingPong.dst->end(); 306 | srcPingPong.swap(); 307 | 308 | renderPingPong.dst->begin(); 309 | coloringShader.begin(); 310 | coloringShader.setUniform4f("color1", color1.r, color1.g, color1.b, color1.a); 311 | coloringShader.setUniform4f("color2", color2.r, color2.g, color2.b, color2.a); 312 | coloringShader.setUniform4f("color3", color3.r, color3.g, color3.b, color3.a); 313 | coloringShader.setUniform4f("color4", color4.r, color4.g, color4.b, color4.a); 314 | coloringShader.setUniform4f("color5", color5.r, color5.g, color5.b, color5.a); 315 | srcPingPong.src->draw(0, 0); 316 | coloringShader.end(); 317 | renderPingPong.dst->end(); 318 | 319 | renderPingPong.swap(); 320 | } 321 | 322 | void ofxReactionDiffusion::draw(int _x, int _y, float _width, float _height) { 323 | if (_width < 0) _width = width; 324 | if (_height < 0) _height = height; 325 | 326 | renderPingPong.src->draw(_x, _y, _width/scale, _height/scale); 327 | } 328 | 329 | void ofxReactionDiffusion::addSource(int _x, int _y, float _radius) { 330 | srcPingPong.src->begin(); 331 | ofSetColor(100, 100, 120); 332 | ofDrawCircle(_x * scale, _y * scale, _radius * scale); 333 | srcPingPong.src->end(); 334 | } 335 | 336 | void ofxReactionDiffusion::addObstacle(int _x, int _y, float _radius) { 337 | obstaclePingPong.src->begin(); 338 | ofSetColor(255, 0, 0); 339 | ofDrawCircle(_x * scale, _y * scale, _radius * scale); 340 | obstaclePingPong.src->end(); 341 | } 342 | 343 | void ofxReactionDiffusion::clearSources() { 344 | srcPingPong.src->begin(); 345 | ofBackground(255, 0, 0); 346 | srcPingPong.src->end(); 347 | } 348 | 349 | void ofxReactionDiffusion::clearObstacles() { 350 | obstaclePingPong.src->begin(); 351 | ofClear(255, 0, 0); 352 | obstaclePingPong.src->end(); 353 | } 354 | 355 | void ofxReactionDiffusion::clearAll() { 356 | clearSources(); 357 | clearObstacles(); 358 | } 359 | -------------------------------------------------------------------------------- /src/ofxReactionDiffusion.h: -------------------------------------------------------------------------------- 1 | // 2 | // ofReactionDiffusion.h 3 | // 4 | // Created by Yuma Matsune on 2016/10/25. 5 | // 6 | // 7 | #pragma once 8 | 9 | #include "ofMain.h" 10 | #include "PingPong.h" 11 | 12 | #define STRINGIFY(A) #A 13 | 14 | typedef enum { 15 | RD_MODE_GRAY_SCOTT, 16 | RD_MODE_FITZHUGH_NAGUMO, 17 | RD_MODE_BELOUSOV_ZHABOTINSKY 18 | } ReactionDiffusionMode; 19 | 20 | class ofxReactionDiffusion { 21 | 22 | public: 23 | ofxReactionDiffusion(); 24 | void allocate(int _width, int _height, float _scale=1.0); 25 | void update(); 26 | void draw(int _x=0, int _y=0, float _width=-1, float _height=-1); 27 | 28 | ofTexture getSourceTexture() { 29 | return srcPingPong.src->getTexture(); 30 | } 31 | 32 | ofFbo getSourceFbo() { 33 | return *srcPingPong.src; 34 | } 35 | 36 | ofTexture getObstacleTexture() { 37 | return obstaclePingPong.src->getTexture(); 38 | } 39 | 40 | ofFbo getObstacleFbo() { 41 | return *obstaclePingPong.src; 42 | } 43 | 44 | ofTexture getColorTexture() { 45 | return renderPingPong.src->getTexture(); 46 | } 47 | 48 | ofFbo getColorFbo() { 49 | return *renderPingPong.src; 50 | } 51 | 52 | 53 | void setMode(ReactionDiffusionMode _mode) { mode = _mode;} 54 | 55 | void addSource(int _x, int _y, float _radius); 56 | void addObstacle(int _x, int _y, float _radius); 57 | void clearSources(); 58 | void clearObstacles(); 59 | void clearAll(); 60 | 61 | void setColor1(ofFloatColor _color) { 62 | color1.r = _color.r; 63 | color1.g = _color.g; 64 | color1.b = _color.b; 65 | } 66 | void setColor2(ofFloatColor _color) { 67 | color2.r = _color.r; 68 | color2.g = _color.g; 69 | color2.b = _color.b; 70 | } 71 | void setColor3(ofFloatColor _color) { 72 | color3.r = _color.r; 73 | color3.g = _color.g; 74 | color3.b = _color.b; 75 | } 76 | void setColor4(ofFloatColor _color) { 77 | color4.r = _color.r; 78 | color4.g = _color.g; 79 | color4.b = _color.b; 80 | } 81 | void setColor5(ofFloatColor _color) { 82 | color5.r = _color.r; 83 | color5.g = _color.g; 84 | color5.b = _color.b; 85 | } 86 | 87 | void setColor1Threshold(float _thresh) { color1.a = _thresh; } 88 | void setColor2Threshold(float _thresh) { color2.a = _thresh; } 89 | void setColor3Threshold(float _thresh) { color3.a = _thresh; } 90 | void setColor4Threshold(float _thresh) { color4.a = _thresh; } 91 | void setColor5Threshold(float _thresh) { color5.a = _thresh; } 92 | 93 | ofFloatColor getColor1() { return color1; } 94 | ofFloatColor getColor2() { return color2; } 95 | ofFloatColor getColor3() { return color3; } 96 | ofFloatColor getColor4() { return color4; } 97 | ofFloatColor getColor5() { return color5; } 98 | 99 | /* 100 | Common Paramters 101 | */ 102 | void setPasses(float _passes) { passes = _passes; } 103 | 104 | float getPasses() { return passes; } 105 | 106 | /* 107 | Gray-Scott 108 | */ 109 | void setFeed(float _feed) { feed = _feed; } 110 | void setKill(float _kill) { kill = _kill; } 111 | void setDu(float _Du) { Du = _Du; } 112 | void setDv(float _Dv) { Dv = _Dv; } 113 | 114 | float getFeed() { return feed; } 115 | float getKill() { return kill; } 116 | float getDu() { return Du; } 117 | float getDv() { return Dv; } 118 | 119 | void setGrayScottParams(float _feed, float _kill, float _Du, float _Dv) { 120 | setFeed(_feed); 121 | setKill(_kill); 122 | setDu(_Du); 123 | setDv(_Dv); 124 | } 125 | 126 | /* 127 | FitzHugh-Nagumo 128 | */ 129 | void setA0(float _a0) { a0 = _a0; } 130 | void setA1(float _a1) { a1 = _a1; } 131 | void setEpsilon(float _epsilon) { epsilon = _epsilon; } 132 | void setDelta(float _delta) { delta = _delta; } 133 | void setK1(float _k1) { k1 = _k1; } 134 | void setK2(float _k2) { k2 = _k2; } 135 | void setK3(float _k3) { k3 = _k3; } 136 | 137 | float getA0() { return a0; } 138 | float getA1() { return a1; } 139 | float getEpsilon() { return epsilon; } 140 | float getDelta() { return delta; } 141 | float getK1() { return k1; } 142 | float getK2() { return k2; } 143 | float getK3() { return k3; } 144 | 145 | void setFhnParams(float _a0, float _a1, float _epsilon, float _delta, float _k1, float _k2, float _k3) { 146 | setA0(_a0); 147 | setA1(_a1); 148 | setEpsilon(_epsilon); 149 | setDelta(_delta); 150 | setK1(_k1); 151 | setK2(_k2); 152 | setK3(_k3); 153 | } 154 | 155 | /* 156 | Belousov-Zhabotinsky 157 | */ 158 | void setAlpha(float _alpha) { alpha = _alpha; } 159 | void setBeta(float _beta) { alpha = _beta; } 160 | void setGamma(float _gamma) { gamma = _gamma; } 161 | 162 | float getAlpha() { return alpha; } 163 | float getBeta() { return beta; } 164 | float getGamma() { return gamma; } 165 | 166 | void setBzParams(float _alpha, float _beta, float _gamma) { 167 | setAlpha(_alpha); 168 | setBeta(_beta); 169 | setGamma(_gamma); 170 | } 171 | private: 172 | int width, height; 173 | float scale; 174 | ReactionDiffusionMode mode; 175 | 176 | PingPong srcPingPong; 177 | PingPong obstaclePingPong; 178 | PingPong renderPingPong; 179 | 180 | /// Gray-Scott 181 | ofShader gsShader; 182 | /// FitzHugh-Nagumo 183 | ofShader fhnShader; 184 | /// Belousov-Zhabotinsky 185 | ofShader bzShader; 186 | 187 | ofShader coloringShader; 188 | 189 | ofFloatColor color1; 190 | ofFloatColor color2; 191 | ofFloatColor color3; 192 | ofFloatColor color4; 193 | ofFloatColor color5; 194 | 195 | /* 196 | Common Paramters 197 | */ 198 | float passes; 199 | 200 | /* 201 | Gray-Scott 202 | */ 203 | float feed; 204 | float kill; 205 | float Du; 206 | float Dv; 207 | 208 | /* 209 | FitzHugh-Nagumo 210 | */ 211 | float a0; 212 | float a1; 213 | float epsilon; 214 | float delta; 215 | float k1; 216 | float k2; 217 | float k3; 218 | 219 | /* 220 | Belousov-Zhabotinsky 221 | */ 222 | float alpha; 223 | float beta; 224 | float gamma; 225 | }; 226 | -------------------------------------------------------------------------------- /thumbs/bz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matsune/ofxReactionDiffusion/63907476971c55bb2ad5f15716e91e26d2ecb6bb/thumbs/bz.gif -------------------------------------------------------------------------------- /thumbs/fhn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matsune/ofxReactionDiffusion/63907476971c55bb2ad5f15716e91e26d2ecb6bb/thumbs/fhn.gif -------------------------------------------------------------------------------- /thumbs/gs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matsune/ofxReactionDiffusion/63907476971c55bb2ad5f15716e91e26d2ecb6bb/thumbs/gs.gif -------------------------------------------------------------------------------- /thumbs/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matsune/ofxReactionDiffusion/63907476971c55bb2ad5f15716e91e26d2ecb6bb/thumbs/header.png -------------------------------------------------------------------------------- /thumbs/mesh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matsune/ofxReactionDiffusion/63907476971c55bb2ad5f15716e91e26d2ecb6bb/thumbs/mesh.gif --------------------------------------------------------------------------------