├── addons.make
├── bin
└── data
│ ├── .gitkeep
│ └── shaders
│ ├── render.vert
│ ├── posUpdate.frag
│ ├── render.geom
│ └── velUpdate.frag
├── .gitignore
├── GPU_Flocking.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
├── xcshareddata
│ └── xcschemes
│ │ ├── GPU_Flocking Debug.xcscheme
│ │ └── GPU_Flocking Release.xcscheme
└── project.pbxproj
├── src
├── main.cpp
├── testApp.h
├── pingPongBuffer.h
└── testApp.cpp
├── Makefile
├── readme.md
├── Project.xcconfig
├── openFrameworks-Info.plist
└── config.make
/addons.make:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/bin/data/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.app
2 | xcuserdata
3 | .DS_Store
--------------------------------------------------------------------------------
/GPU_Flocking.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/main.cpp:
--------------------------------------------------------------------------------
1 | #include "ofMain.h"
2 | #include "testApp.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 testApp());
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/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=../../..
10 | endif
11 |
12 | # call the project makefile!
13 | include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk
14 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # GPU Flocking in openFrameworks
2 | * A very direct port of [Daniel Shiffman's](http://shiffman.net/) Nature of Code Flocking onto the GPU
3 | * Based in part on the excellent openFrameworks GPU particle example
4 |
5 | ## Setup
6 | * Clone or download openFrameworks
7 | * Clone this app into apps/myApps/GPU_Flocking
8 | * Run!
9 |
10 | ## Notes
11 | * You may get errors with the geometry shader if you have an older GPU. It's basically just a bonus anyways.
--------------------------------------------------------------------------------
/bin/data/shaders/render.vert:
--------------------------------------------------------------------------------
1 | #version 120
2 | #extension GL_EXT_gpu_shader4 : enable
3 | #extension GL_ARB_texture_rectangle : enable
4 |
5 | uniform sampler2DRect posTex;
6 | uniform vec2 screen;
7 | uniform vec2 screenPos;
8 |
9 | void main() {
10 | // use the texture coordinates as an index into the position texture
11 | vec2 verPos = gl_MultiTexCoord0.xy;
12 |
13 | // read position data from texture
14 | vec4 pixPos = texture2DRect( posTex, verPos );
15 |
16 |
17 | pixPos.x += -0.5;
18 | pixPos.y += -0.5;
19 |
20 | pixPos.x *= screen.x;
21 | pixPos.y *= screen.y;
22 |
23 | gl_Position = pixPos;
24 | gl_FrontColor = gl_Color;
25 | }
--------------------------------------------------------------------------------
/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)
17 | HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS)
18 |
--------------------------------------------------------------------------------
/openFrameworks-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | English
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | com.yourcompany.openFrameworks
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundlePackageType
14 | APPL
15 | CFBundleSignature
16 | ????
17 | CFBundleVersion
18 | 1.0
19 | CFBundleIconFile
20 | ${ICON}
21 |
22 |
23 |
--------------------------------------------------------------------------------
/bin/data/shaders/posUpdate.frag:
--------------------------------------------------------------------------------
1 | #version 120
2 | #extension GL_ARB_texture_rectangle : enable
3 |
4 | uniform sampler2DRect prevPosData; // recive the previus position texture
5 | uniform sampler2DRect velData; // recive the velocity texture
6 |
7 | void main(void){
8 | vec2 st = gl_TexCoord[0].st; // gets the position of the pixel that it´s dealing with...
9 |
10 | vec2 pos = texture2DRect( prevPosData, st ).xy; // ... in order to look at a particulary place on it
11 | vec2 vel = texture2DRect( velData, st ).xy; // Fetch both the pos and vel.
12 |
13 | pos += vel;
14 |
15 | // wrap
16 | if ( pos.x < 0.0)
17 | pos.x = 1.0;
18 |
19 | if ( pos.x > 1.0)
20 | pos.x = 0.0;
21 |
22 | if (pos.y < 0.0)
23 | pos.y = 1.0;
24 |
25 | if ( pos.y > 1.0)
26 | pos.y = 0.0;
27 |
28 | gl_FragColor.rgba = vec4(pos.x,pos.y,1.0,1.0); // And finaly it store it on the position FBO
29 | }
--------------------------------------------------------------------------------
/bin/data/shaders/render.geom:
--------------------------------------------------------------------------------
1 | #version 120
2 | #extension GL_EXT_geometry_shader4 : enable
3 | #extension GL_EXT_gpu_shader4 : enable
4 |
5 | uniform float pointSize;
6 | uniform float screenSize;
7 |
8 | const float PI = 3.1415926;
9 |
10 | void main(void){
11 |
12 | float circleRes = 12.0;
13 | float size = pointSize / screenSize;
14 |
15 | for ( float a = 0; a < circleRes; a++ ){
16 | // Angle between each side in radians
17 | float ang = (PI * 2.0 / circleRes) * a;
18 |
19 | vec4 offset = vec4(cos(ang) * size, -sin(ang) * size, 0.0, 0.0);
20 | gl_Position = gl_PositionIn[0] + offset;
21 | gl_FrontColor = gl_FrontColorIn[0];
22 | EmitVertex();
23 |
24 | ang = (PI * 2.0 / circleRes) * (a + 1);
25 | offset = vec4(cos(ang) * size, -sin(ang) * size, 0.0, 0.0);
26 | gl_Position = gl_PositionIn[0] + offset;
27 | gl_FrontColor = gl_FrontColorIn[0];
28 | EmitVertex();
29 |
30 | gl_Position = gl_PositionIn[0];
31 | gl_FrontColor = gl_FrontColorIn[0];
32 | EmitVertex();
33 | }
34 |
35 | EndPrimitive();
36 |
37 | }
--------------------------------------------------------------------------------
/src/testApp.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "ofMain.h"
4 | #include "pingPongBuffer.h"
5 |
6 | class testApp : 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 windowResized(int w, int h);
20 | void dragEvent(ofDragInfo dragInfo);
21 | void gotMessage(ofMessage msg);
22 |
23 | // shaders
24 | ofShader velocity;
25 | ofShader position;
26 | ofShader render;
27 |
28 | // fbo you're rendering to
29 | ofFbo renderFBO;
30 |
31 | // ping-pong buffers for position and velocity
32 | pingPongBuffer posPingPong;
33 | pingPongBuffer velPingPong;
34 |
35 | // parameters for flocking
36 | float maxVelocity;
37 | float maxForce;
38 | float desiredSeparation;
39 | float neighborDistance;
40 |
41 | // size of circles
42 | float particleSize;
43 |
44 | // mesh for position + color store
45 | ofMesh mesh;
46 | };
47 |
--------------------------------------------------------------------------------
/src/pingPongBuffer.h:
--------------------------------------------------------------------------------
1 | // Ping-pong buffer from openFrameworks shader particle example
2 |
3 | #pragma once
4 |
5 | struct pingPongBuffer {
6 | public:
7 | void allocate( int _width, int _height, int _internalformat = GL_RGBA, float _dissipation = 1.0f){
8 | // Allocate
9 | for(int i = 0; i < 2; i++){
10 | FBOs[i].allocate(_width,_height, _internalformat );
11 | FBOs[i].getTextureReference().setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
12 | }
13 |
14 | // Clean
15 | clear();
16 |
17 | // Set everything to 0
18 | flag = 0;
19 | swap();
20 | flag = 0;
21 | }
22 |
23 | void swap(){
24 | src = &(FBOs[(flag)%2]);
25 | dst = &(FBOs[++(flag)%2]);
26 | }
27 |
28 | void clear(){
29 | for(int i = 0; i < 2; i++){
30 | FBOs[i].begin();
31 | ofClear(0,255);
32 | FBOs[i].end();
33 | }
34 | }
35 |
36 | ofFbo& operator[]( int n ){ return FBOs[n];}
37 |
38 | ofFbo *src; // Source -> Ping
39 | ofFbo *dst; // Destination -> Pong
40 | private:
41 | ofFbo FBOs[2]; // Real addresses of ping/pong FBO´s
42 | int flag; // Integer for making a quick swap
43 | };
44 |
--------------------------------------------------------------------------------
/GPU_Flocking.xcodeproj/xcshareddata/xcschemes/GPU_Flocking 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 |
--------------------------------------------------------------------------------
/GPU_Flocking.xcodeproj/xcshareddata/xcschemes/GPU_Flocking 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 |
--------------------------------------------------------------------------------
/bin/data/shaders/velUpdate.frag:
--------------------------------------------------------------------------------
1 | #version 120
2 | #extension GL_ARB_texture_rectangle : enable
3 | #define KERNEL_SIZE 9
4 |
5 | uniform sampler2DRect backbuffer; // recive the previus velocity texture
6 | uniform sampler2DRect posData; // recive the position texture
7 |
8 | uniform int posWidth;
9 | uniform int posHeight;
10 |
11 | // flocking parameters
12 | uniform float maxspeed;
13 | uniform float maxforce;
14 | uniform float desiredSeparation;
15 | uniform float neighborDistance;
16 |
17 | // vector utils
18 | vec2 limit(vec2 v,float m){
19 | float lengthSquared = v.x*v.x + v.y*v.y;
20 | if( lengthSquared > m*m && lengthSquared > 0.0 ) {
21 | float ls = sqrt(lengthSquared);
22 | float ratio = m/ls;
23 | v *= ratio;
24 | }
25 | return v;
26 | }
27 |
28 | // Separation
29 | // Method checks for nearby boids and steers away
30 | vec2 separate(vec2 p,vec2 vel){
31 | vec2 steer = vec2(0.0,0.0);
32 | float count = 0.0;
33 |
34 | // For every boid in the system, check if it's too close
35 |
36 | for ( int x =0; x < posWidth; x ++){
37 | for (int y=0; y < posHeight; y++) {
38 | vec2 pos = texture2DRect( posData, vec2(x,y)).xy;
39 |
40 | float d = distance( p, pos );
41 |
42 | // If the distance is greater than 0 and less than an arbitrary amount (0 when you are yourself)
43 | if ((d > 0.0) && (d < desiredSeparation)) {
44 | // Calculate vector pointing away from neighbor
45 | vec2 diff = p;
46 | diff -= pos;
47 | diff = normalize(diff);
48 | diff /= d; // Weight by distance
49 | steer += diff;
50 | count += 1.0; // Keep track of how many
51 | }
52 | }
53 | }
54 | // Average -- divide by how many
55 | if (count > 0.0) {
56 | steer /= count;
57 | }
58 |
59 | // As long as the vector is greater than 0
60 | if (length(steer) > 0.0) {
61 | // Implement Reynolds: Steering = Desired - Velocity
62 | steer = normalize(steer);
63 | steer *= (maxspeed);
64 | steer /= vel;
65 | steer = limit(steer, maxforce);
66 | }
67 | return steer;
68 | }
69 |
70 | // Alignment
71 | // For every nearby boid in the system, calculate the average velocity
72 | vec2 align(vec2 p,vec2 vel){
73 |
74 | vec2 sum = vec2(0.0,0.0);
75 | float count = 0.0;
76 | for ( int x =0; x < posWidth; x ++){
77 | for (int y=0; y < posHeight; y++) {
78 | vec2 pos = texture2DRect( posData, vec2(x,y)).xy;
79 | vec2 otherVel = texture2DRect( backbuffer, vec2(x,y) ).xy;
80 |
81 | float d = distance( p, pos );
82 |
83 | if ((d > 0) && (d < neighborDistance)) {
84 | sum.x += otherVel.x;
85 | sum.y += otherVel.y;
86 | count = count + 1.0;
87 | }
88 | }
89 | }
90 | if (count > 0.0) {
91 | sum /= (count);
92 | sum = normalize(sum);
93 | sum *= (maxspeed);
94 |
95 | vec2 steer = sum - vel;
96 | steer = limit(steer, maxforce);
97 | return steer;
98 | } else {
99 | return vec2(0.0,0.0);
100 | }
101 | }
102 |
103 | vec2 seek(vec2 p,vec2 vel,vec2 target) {
104 | vec2 desired = target; // A vector pointing from the location to the target
105 | desired -= p;
106 |
107 | // Normalize desired and scale to maximum speed
108 | desired = normalize(desired);
109 | desired *= (maxspeed);
110 |
111 | // Steering = Desired minus Velocity
112 | vec2 steer = desired;
113 | steer -= vel;
114 | steer = limit(steer, maxforce); // Limit to maximum steering force
115 | return steer;
116 | }
117 |
118 | vec2 seekForce(vec2 p,vec2 vel,vec2 target) {
119 | vec2 desired = target; // A vector pointing from the location to the target
120 | desired -= p;
121 |
122 | // Normalize desired and scale to maximum speed
123 | desired = normalize(desired);
124 |
125 | // Steering = Desired minus Velocity
126 | vec2 steer = desired;
127 | steer -= vel;
128 | return steer;
129 | }
130 |
131 | // Cohesion
132 | // For the average location (i.e. center) of all nearby boids, calculate steering vector towards that location
133 | vec2 cohesion(vec2 p,vec2 vel) {
134 |
135 | vec2 sum = vec2(0.0,0.0);
136 | float count = 0.0;
137 | for ( int x =0; x < posWidth; x ++){
138 | for (int y=0; y < posHeight; y++) {
139 | vec2 pos = texture2DRect( posData, vec2(x,y)).xy;
140 | vec2 otherVel = texture2DRect( backbuffer, vec2(x,y) ).xy;
141 |
142 | float d = distance( p, pos );
143 |
144 | if ((d > 0.0) && (d < neighborDistance)) {
145 | sum += pos;
146 | count = count + 1.0;
147 | }
148 | }
149 | }
150 | if (count > 0.0) {
151 | sum /= count;
152 | return seek(p, vel, sum); // Steer towards the location
153 | } else {
154 | return vec2(0.0,0.0);
155 | }
156 | }
157 |
158 | vec2 applyForce(vec2 vel,vec2 force) {
159 | // We could add mass here if we want A = F / M
160 | return vel + force;
161 | }
162 |
163 |
164 | vec2 flock(vec2 p, vec2 v) {
165 | vec2 sep = separate(p,v); // Separation
166 | vec2 ali = align(p,v); // Alignment
167 | vec2 coh = cohesion(p,v); // Cohesion
168 | // Arbitrarily weight these forces
169 | sep *= 1.5;
170 | ali *= 1.0;
171 | coh *= 1.0;
172 |
173 | // Add the force vectors to acceleration
174 | v = applyForce(v,sep);
175 | v = applyForce(v,ali);
176 | v = applyForce(v,coh);
177 | return v;
178 | }
179 |
180 | void main(void){
181 | vec2 st = gl_TexCoord[0].st; // gets the position of the pixel that it´s dealing with...
182 |
183 | vec2 pos = texture2DRect( posData, st).xy; // ... for gettinh the position data
184 | vec2 vel = texture2DRect( backbuffer, st ).xy; // and the velocity
185 |
186 | // Calculates what´s going to be the next position without updating it.
187 | // Just to see if it collide with the borders of the FBO texture
188 | //
189 | vel = flock(pos, vel);
190 |
191 | gl_FragColor = vec4(vel.x,vel.y,0.0,1.0); // Then save the vel data into the velocity FBO
192 | }
193 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/src/testApp.cpp:
--------------------------------------------------------------------------------
1 | #include "testApp.h"
2 |
3 | int numParticles = 5000;
4 | int textureRes = 0;
5 | bool bTrails = true;
6 |
7 | //--------------------------------------------------------------
8 | void testApp::setup(){
9 | ofBackground(0);
10 |
11 | // set defaults
12 |
13 | maxVelocity = .1;
14 | maxForce = .1;
15 | particleSize = 1.0;
16 | desiredSeparation = 50.0 / ofGetWidth();
17 | neighborDistance = 10.0 / ofGetHeight();
18 |
19 |
20 | // load shaders
21 | // BASED ON THE EXCELLENT OF GPU PARTICLE EXAMPLE
22 | // shader for updating the texture that store the particles position on RG channels
23 | position.load("","shaders/posUpdate.frag");
24 |
25 | // shader for updating the texture that store the particles velocity on RG channels
26 | velocity.load("","shaders/velUpdate.frag");
27 |
28 | // takes input from ping pong buffers and outputs as adjustable circles
29 | render.setGeometryInputType(GL_POINTS);
30 | render.setGeometryOutputType(GL_TRIANGLES);
31 | render.setGeometryOutputCount(36);
32 | render.load("shaders/render.vert","","shaders/render.geom");
33 |
34 | // load ping-pong buffers
35 | // Seting the textures where the information ( position and velocity ) will be
36 | textureRes = (int)sqrt((float)numParticles);
37 | numParticles = textureRes * textureRes;
38 |
39 | // Make arrays of float pixels with position information
40 |
41 | float * pos = new float[numParticles*3];
42 | for (int x = 0; x < textureRes; x++){
43 | for (int y = 0; y < textureRes; y++){
44 | int i = textureRes * y + x;
45 |
46 | pos[i*3 + 0] = ofRandom(0.0, ofGetWidth())/ (float) ofGetWidth();
47 | pos[i*3 + 1] = ofRandom(0.0, ofGetHeight()) / (float) ofGetHeight();
48 | pos[i*3 + 2] = 0.0;
49 | }
50 | }
51 |
52 | posPingPong.allocate(textureRes, textureRes,GL_RGB32F);
53 | posPingPong.src->getTextureReference().loadData(pos, textureRes, textureRes, GL_RGB);
54 | posPingPong.dst->getTextureReference().loadData(pos, textureRes, textureRes, GL_RGB);
55 |
56 | delete [] pos; // Delete the array
57 |
58 |
59 | // 2. Making arrays of float pixels with velocity information and the load it to a texture
60 | float * vel = new float[numParticles*3];
61 | for (int i = 0; i < numParticles; i++){
62 | vel[i*3 + 0] = ofRandom(-.01,.01);
63 | vel[i*3 + 1] = ofRandom(-.01,.01);
64 | vel[i*3 + 2] = 1.0;
65 | }
66 | // Load this information in to the FBO�s texture
67 | velPingPong.allocate(textureRes, textureRes,GL_RGB32F);
68 | velPingPong.src->getTextureReference().loadData(vel, textureRes, textureRes, GL_RGB);
69 | velPingPong.dst->getTextureReference().loadData(vel, textureRes, textureRes, GL_RGB);
70 | delete [] vel; // Delete the array
71 |
72 | // Allocate the final
73 | renderFBO.allocate(ofGetWidth(),ofGetHeight(), GL_RGBA);//32F);
74 | renderFBO.begin();
75 | ofClear(0, 0, 0, 0);
76 | renderFBO.end();
77 |
78 | mesh.setMode(OF_PRIMITIVE_POINTS);
79 | ofFloatColor color = ofColor();
80 | color.setSaturation(1.0);
81 | color.setBrightness(1.0);
82 | color.setHue(ofRandom(0.0, 1.0));
83 |
84 | for(int x = 0; x < textureRes; x++){
85 | for(int y = 0; y < textureRes; y++){
86 | mesh.addVertex(ofVec3f(x,y));
87 | mesh.addTexCoord(ofVec2f(x, y));
88 |
89 | mesh.addColor(color);
90 | }
91 | }
92 | }
93 |
94 | //--------------------------------------------------------------
95 | void testApp::update(){
96 | ofSetWindowTitle(ofToString(ofGetFrameRate()));
97 | velPingPong.dst->begin();
98 | ofClear(0);
99 | velocity.begin();
100 | velocity.setUniform1i("posWidth", velPingPong.src->getWidth());
101 | velocity.setUniform1i("posHeight", velPingPong.src->getWidth());
102 | velocity.setUniformTexture("backbuffer", velPingPong.src->getTextureReference(), 0); // passing the previus velocity information
103 | velocity.setUniformTexture("posData", posPingPong.src->getTextureReference(), 1); // passing the position information
104 |
105 | velocity.setUniform1f("maxspeed", maxVelocity / 100.0f);
106 | velocity.setUniform1f("maxforce", maxForce / 100.0f);
107 |
108 | // play with these to change your patterns
109 | velocity.setUniform1f("desiredSeparation", desiredSeparation);
110 | velocity.setUniform1f("neighborDistance", neighborDistance);
111 |
112 | // draw the source velocity texture to be updated
113 | velPingPong.src->draw(0, 0);
114 |
115 | velocity.end();
116 | velPingPong.dst->end();
117 |
118 | velPingPong.swap();
119 |
120 |
121 | // Position PingPong
122 | //
123 | // With the velocity calculated updates the position
124 | //
125 | posPingPong.dst->begin();
126 | ofClear(0);
127 | position.begin();
128 | position.setUniform1i("posWidth", velPingPong.src->getWidth());
129 | position.setUniform1i("posHeight", velPingPong.src->getWidth());
130 | position.setUniformTexture("prevPosData", posPingPong.src->getTextureReference(), 0); // Previus position
131 | position.setUniformTexture("velData", velPingPong.src->getTextureReference(), 1); // Velocity
132 |
133 | // draw the source position texture to be updated
134 | posPingPong.src->draw(0, 0);
135 |
136 | position.end();
137 | posPingPong.dst->end();
138 |
139 | posPingPong.swap();
140 |
141 | // Rendering
142 |
143 | renderFBO.begin();
144 |
145 | ofPushMatrix();
146 |
147 | if ( !bTrails ){
148 | ofClear(0, 0, 0, 0);
149 | } else {
150 | ofSetColor(0,0,0,5);
151 | ofRect(0,0,renderFBO.getWidth(), renderFBO.getHeight());
152 | ofSetColor(255);
153 | }
154 | render.begin();
155 | render.setUniformTexture("posTex", posPingPong.dst->getTextureReference(), 0);
156 | render.setUniform2f("screen", (float)2.0, (float)2.0);
157 | render.setUniform1f("pointSize", (float)particleSize);
158 | render.setUniform1f("screenSize", (float)ofGetWidth());
159 |
160 | ofPushStyle();
161 | ofSetColor(255);
162 |
163 | mesh.draw();
164 |
165 | ofPopStyle();
166 |
167 | render.end();
168 | ofPopMatrix();
169 | renderFBO.end();
170 | }
171 |
172 | //--------------------------------------------------------------
173 | void testApp::draw(){
174 | renderFBO.draw(0,0);
175 |
176 | string toPrint = "Flockin' on the GPU\nMove mouse to set max force and velocity";
177 | toPrint += "\nMax Force = "+ofToString(maxForce);
178 | toPrint += "\nMax Velocity: "+ofToString(maxVelocity);
179 | toPrint += "\n\nPress +/- to change particle size";
180 | toPrint += "\nParticle Size: "+ofToString(particleSize);
181 | toPrint += "\nPress ' ' to draw trails: "+ofToString(bTrails);
182 |
183 | ofDrawBitmapString(toPrint, 20, 20);
184 | }
185 |
186 | //--------------------------------------------------------------
187 | void testApp::keyPressed(int key){
188 | if ( key == '='){
189 | particleSize += .1;
190 | } else if ( key == '-'){
191 | particleSize -= .1;
192 | particleSize = fmax(0.0, particleSize);
193 | } else if ( key == ' '){
194 | bTrails = !bTrails;
195 | }
196 | }
197 |
198 | //--------------------------------------------------------------
199 | void testApp::keyReleased(int key){}
200 |
201 | //--------------------------------------------------------------
202 | void testApp::mouseMoved(int x, int y ){
203 | maxVelocity = (float) x/ofGetWidth();
204 | maxForce = (float) y / ofGetHeight();
205 | }
206 |
207 | //--------------------------------------------------------------
208 | void testApp::mouseDragged(int x, int y, int button){}
209 |
210 | //--------------------------------------------------------------
211 | void testApp::mousePressed(int x, int y, int button){}
212 |
213 | //--------------------------------------------------------------
214 | void testApp::mouseReleased(int x, int y, int button){}
215 |
216 | //--------------------------------------------------------------
217 | void testApp::windowResized(int w, int h){}
218 |
219 | //--------------------------------------------------------------
220 | void testApp::gotMessage(ofMessage msg){}
221 |
222 | //--------------------------------------------------------------
223 | void testApp::dragEvent(ofDragInfo dragInfo){}
224 |
--------------------------------------------------------------------------------
/GPU_Flocking.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; };
11 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; };
12 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; };
13 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; };
14 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; };
15 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9740E8CC7DD009D7055 /* Carbon.framework */; };
16 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; };
17 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; };
18 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; };
19 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; };
20 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; };
21 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; };
22 | E4B69E210A3A1BDC003C02F2 /* testApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */; };
23 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; };
24 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; };
25 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; };
26 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; };
27 | E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */; };
28 | E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E715D3B6510020DFD4 /* QTKit.framework */; };
29 | E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7F985F515E0DE99003869B5 /* Accelerate.framework */; };
30 | /* End PBXBuildFile section */
31 |
32 | /* Begin PBXContainerItemProxy section */
33 | E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = {
34 | isa = PBXContainerItemProxy;
35 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
36 | proxyType = 2;
37 | remoteGlobalIDString = E4B27C1510CBEB8E00536013;
38 | remoteInfo = openFrameworks;
39 | };
40 | E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = {
41 | isa = PBXContainerItemProxy;
42 | containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
43 | proxyType = 1;
44 | remoteGlobalIDString = E4B27C1410CBEB8E00536013;
45 | remoteInfo = openFrameworks;
46 | };
47 | /* End PBXContainerItemProxy section */
48 |
49 | /* Begin PBXCopyFilesBuildPhase section */
50 | E4C2427710CC5ABF004149E2 /* CopyFiles */ = {
51 | isa = PBXCopyFilesBuildPhase;
52 | buildActionMask = 2147483647;
53 | dstPath = "";
54 | dstSubfolderSpec = 10;
55 | files = (
56 | BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */,
57 | );
58 | runOnlyForDeploymentPostprocessing = 0;
59 | };
60 | /* End PBXCopyFilesBuildPhase section */
61 |
62 | /* Begin PBXFileReference section */
63 | 013C027F18C6797A00129384 /* posUpdate.frag */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; name = posUpdate.frag; path = bin/data/shaders/posUpdate.frag; sourceTree = ""; };
64 | 013C028118C6797A00129384 /* render.geom */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; name = render.geom; path = bin/data/shaders/render.geom; sourceTree = ""; };
65 | 013C028218C6797A00129384 /* render.vert */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; name = render.vert; path = bin/data/shaders/render.vert; sourceTree = ""; };
66 | 013C028318C6797A00129384 /* velUpdate.frag */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; name = velUpdate.frag; path = bin/data/shaders/velUpdate.frag; sourceTree = ""; };
67 | 013C028418C67A8B00129384 /* pingPongBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pingPongBuffer.h; sourceTree = ""; };
68 | BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; };
69 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; };
70 | E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; };
71 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; };
72 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; };
73 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; };
74 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; };
75 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; };
76 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; };
77 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; };
78 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; };
79 | E4B69B5B0A3A1756003C02F2 /* GPU_FlockingDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GPU_FlockingDebug.app; sourceTree = BUILT_PRODUCTS_DIR; };
80 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; };
81 | E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = testApp.cpp; path = src/testApp.cpp; sourceTree = SOURCE_ROOT; };
82 | E4B69E1F0A3A1BDC003C02F2 /* testApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = testApp.h; path = src/testApp.h; sourceTree = SOURCE_ROOT; };
83 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; };
84 | E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
85 | E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
86 | E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; };
87 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; };
88 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; };
89 | E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; };
90 | E7E077E715D3B6510020DFD4 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; };
91 | E7F985F515E0DE99003869B5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = ""; };
92 | /* End PBXFileReference section */
93 |
94 | /* Begin PBXFrameworksBuildPhase section */
95 | E4B69B590A3A1756003C02F2 /* Frameworks */ = {
96 | isa = PBXFrameworksBuildPhase;
97 | buildActionMask = 2147483647;
98 | files = (
99 | E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */,
100 | E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */,
101 | E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */,
102 | E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */,
103 | E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */,
104 | E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */,
105 | E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */,
106 | E45BE97E0E8CC7DD009D7055 /* Carbon.framework in Frameworks */,
107 | E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */,
108 | E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */,
109 | E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */,
110 | E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */,
111 | E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */,
112 | E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */,
113 | E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */,
114 | E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */,
115 | E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */,
116 | );
117 | runOnlyForDeploymentPostprocessing = 0;
118 | };
119 | /* End PBXFrameworksBuildPhase section */
120 |
121 | /* Begin PBXGroup section */
122 | 013C027E18C6796E00129384 /* shaders */ = {
123 | isa = PBXGroup;
124 | children = (
125 | 013C027F18C6797A00129384 /* posUpdate.frag */,
126 | 013C028118C6797A00129384 /* render.geom */,
127 | 013C028218C6797A00129384 /* render.vert */,
128 | 013C028318C6797A00129384 /* velUpdate.frag */,
129 | );
130 | name = shaders;
131 | sourceTree = "";
132 | };
133 | BB4B014C10F69532006C3DED /* addons */ = {
134 | isa = PBXGroup;
135 | children = (
136 | );
137 | name = addons;
138 | sourceTree = "";
139 | };
140 | BBAB23C913894ECA00AA2426 /* system frameworks */ = {
141 | isa = PBXGroup;
142 | children = (
143 | E7F985F515E0DE99003869B5 /* Accelerate.framework */,
144 | E4C2424410CC5A17004149E2 /* AppKit.framework */,
145 | E4C2424510CC5A17004149E2 /* Cocoa.framework */,
146 | E4C2424610CC5A17004149E2 /* IOKit.framework */,
147 | E45BE9710E8CC7DD009D7055 /* AGL.framework */,
148 | E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */,
149 | E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */,
150 | E45BE9740E8CC7DD009D7055 /* Carbon.framework */,
151 | E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */,
152 | E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */,
153 | E45BE9770E8CC7DD009D7055 /* CoreServices.framework */,
154 | E45BE9790E8CC7DD009D7055 /* OpenGL.framework */,
155 | E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */,
156 | E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */,
157 | E7E077E715D3B6510020DFD4 /* QTKit.framework */,
158 | );
159 | name = "system frameworks";
160 | sourceTree = "";
161 | };
162 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = {
163 | isa = PBXGroup;
164 | children = (
165 | BBAB23BE13894E4700AA2426 /* GLUT.framework */,
166 | );
167 | name = "3rd party frameworks";
168 | sourceTree = "";
169 | };
170 | E4328144138ABC890047C5CB /* Products */ = {
171 | isa = PBXGroup;
172 | children = (
173 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */,
174 | );
175 | name = Products;
176 | sourceTree = "";
177 | };
178 | E45BE5980E8CC70C009D7055 /* frameworks */ = {
179 | isa = PBXGroup;
180 | children = (
181 | BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */,
182 | BBAB23C913894ECA00AA2426 /* system frameworks */,
183 | );
184 | name = frameworks;
185 | sourceTree = "";
186 | };
187 | E4B69B4A0A3A1720003C02F2 = {
188 | isa = PBXGroup;
189 | children = (
190 | 013C027E18C6796E00129384 /* shaders */,
191 | E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */,
192 | E4EB6923138AFD0F00A09F29 /* Project.xcconfig */,
193 | E4B69E1C0A3A1BDC003C02F2 /* src */,
194 | E4EEC9E9138DF44700A80321 /* openFrameworks */,
195 | BB4B014C10F69532006C3DED /* addons */,
196 | E45BE5980E8CC70C009D7055 /* frameworks */,
197 | E4B69B5B0A3A1756003C02F2 /* GPU_FlockingDebug.app */,
198 | );
199 | sourceTree = "";
200 | };
201 | E4B69E1C0A3A1BDC003C02F2 /* src */ = {
202 | isa = PBXGroup;
203 | children = (
204 | E4B69E1D0A3A1BDC003C02F2 /* main.cpp */,
205 | E4B69E1E0A3A1BDC003C02F2 /* testApp.cpp */,
206 | E4B69E1F0A3A1BDC003C02F2 /* testApp.h */,
207 | 013C028418C67A8B00129384 /* pingPongBuffer.h */,
208 | );
209 | path = src;
210 | sourceTree = SOURCE_ROOT;
211 | };
212 | E4EEC9E9138DF44700A80321 /* openFrameworks */ = {
213 | isa = PBXGroup;
214 | children = (
215 | E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */,
216 | E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */,
217 | );
218 | name = openFrameworks;
219 | sourceTree = "";
220 | };
221 | /* End PBXGroup section */
222 |
223 | /* Begin PBXNativeTarget section */
224 | E4B69B5A0A3A1756003C02F2 /* GPU_Flocking */ = {
225 | isa = PBXNativeTarget;
226 | buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "GPU_Flocking" */;
227 | buildPhases = (
228 | E4B69B580A3A1756003C02F2 /* Sources */,
229 | E4B69B590A3A1756003C02F2 /* Frameworks */,
230 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */,
231 | E4C2427710CC5ABF004149E2 /* CopyFiles */,
232 | );
233 | buildRules = (
234 | );
235 | dependencies = (
236 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */,
237 | );
238 | name = GPU_Flocking;
239 | productName = myOFApp;
240 | productReference = E4B69B5B0A3A1756003C02F2 /* GPU_FlockingDebug.app */;
241 | productType = "com.apple.product-type.application";
242 | };
243 | /* End PBXNativeTarget section */
244 |
245 | /* Begin PBXProject section */
246 | E4B69B4C0A3A1720003C02F2 /* Project object */ = {
247 | isa = PBXProject;
248 | attributes = {
249 | LastUpgradeCheck = 0460;
250 | };
251 | buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "GPU_Flocking" */;
252 | compatibilityVersion = "Xcode 3.2";
253 | developmentRegion = English;
254 | hasScannedForEncodings = 0;
255 | knownRegions = (
256 | English,
257 | Japanese,
258 | French,
259 | German,
260 | );
261 | mainGroup = E4B69B4A0A3A1720003C02F2;
262 | productRefGroup = E4B69B4A0A3A1720003C02F2;
263 | projectDirPath = "";
264 | projectReferences = (
265 | {
266 | ProductGroup = E4328144138ABC890047C5CB /* Products */;
267 | ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
268 | },
269 | );
270 | projectRoot = "";
271 | targets = (
272 | E4B69B5A0A3A1756003C02F2 /* GPU_Flocking */,
273 | );
274 | };
275 | /* End PBXProject section */
276 |
277 | /* Begin PBXReferenceProxy section */
278 | E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = {
279 | isa = PBXReferenceProxy;
280 | fileType = archive.ar;
281 | path = openFrameworksDebug.a;
282 | remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */;
283 | sourceTree = BUILT_PRODUCTS_DIR;
284 | };
285 | /* End PBXReferenceProxy section */
286 |
287 | /* Begin PBXShellScriptBuildPhase section */
288 | E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = {
289 | isa = PBXShellScriptBuildPhase;
290 | buildActionMask = 2147483647;
291 | files = (
292 | );
293 | inputPaths = (
294 | );
295 | outputPaths = (
296 | );
297 | runOnlyForDeploymentPostprocessing = 0;
298 | shellPath = /bin/sh;
299 | shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\ncp -f \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n";
300 | };
301 | /* End PBXShellScriptBuildPhase section */
302 |
303 | /* Begin PBXSourcesBuildPhase section */
304 | E4B69B580A3A1756003C02F2 /* Sources */ = {
305 | isa = PBXSourcesBuildPhase;
306 | buildActionMask = 2147483647;
307 | files = (
308 | E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */,
309 | E4B69E210A3A1BDC003C02F2 /* testApp.cpp in Sources */,
310 | );
311 | runOnlyForDeploymentPostprocessing = 0;
312 | };
313 | /* End PBXSourcesBuildPhase section */
314 |
315 | /* Begin PBXTargetDependency section */
316 | E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = {
317 | isa = PBXTargetDependency;
318 | name = openFrameworks;
319 | targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */;
320 | };
321 | /* End PBXTargetDependency section */
322 |
323 | /* Begin XCBuildConfiguration section */
324 | E4B69B4E0A3A1720003C02F2 /* Debug */ = {
325 | isa = XCBuildConfiguration;
326 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
327 | buildSettings = {
328 | ARCHS = "$(NATIVE_ARCH)";
329 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
330 | COPY_PHASE_STRIP = NO;
331 | DEAD_CODE_STRIPPING = YES;
332 | GCC_AUTO_VECTORIZATION = YES;
333 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
334 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
335 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
336 | GCC_OPTIMIZATION_LEVEL = 0;
337 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
338 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
339 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
340 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
341 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
342 | GCC_WARN_UNUSED_VALUE = NO;
343 | GCC_WARN_UNUSED_VARIABLE = NO;
344 | MACOSX_DEPLOYMENT_TARGET = 10.6;
345 | OTHER_CPLUSPLUSFLAGS = (
346 | "-D__MACOSX_CORE__",
347 | "-lpthread",
348 | "-mtune=native",
349 | );
350 | SDKROOT = macosx;
351 | };
352 | name = Debug;
353 | };
354 | E4B69B4F0A3A1720003C02F2 /* Release */ = {
355 | isa = XCBuildConfiguration;
356 | baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
357 | buildSettings = {
358 | ARCHS = "$(NATIVE_ARCH)";
359 | CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
360 | COPY_PHASE_STRIP = YES;
361 | DEAD_CODE_STRIPPING = YES;
362 | GCC_AUTO_VECTORIZATION = YES;
363 | GCC_ENABLE_SSE3_EXTENSIONS = YES;
364 | GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
365 | GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
366 | GCC_OPTIMIZATION_LEVEL = 3;
367 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
368 | GCC_UNROLL_LOOPS = YES;
369 | GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
370 | GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
371 | GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
372 | GCC_WARN_UNINITIALIZED_AUTOS = NO;
373 | GCC_WARN_UNUSED_VALUE = NO;
374 | GCC_WARN_UNUSED_VARIABLE = NO;
375 | MACOSX_DEPLOYMENT_TARGET = 10.6;
376 | OTHER_CPLUSPLUSFLAGS = (
377 | "-D__MACOSX_CORE__",
378 | "-lpthread",
379 | "-mtune=native",
380 | );
381 | SDKROOT = macosx;
382 | };
383 | name = Release;
384 | };
385 | E4B69B600A3A1757003C02F2 /* Debug */ = {
386 | isa = XCBuildConfiguration;
387 | buildSettings = {
388 | COMBINE_HIDPI_IMAGES = YES;
389 | COPY_PHASE_STRIP = NO;
390 | FRAMEWORK_SEARCH_PATHS = (
391 | "$(inherited)",
392 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
393 | );
394 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\"";
395 | GCC_DYNAMIC_NO_PIC = NO;
396 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
397 | GCC_MODEL_TUNING = NONE;
398 | ICON = "$(ICON_NAME_DEBUG)";
399 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)";
400 | INFOPLIST_FILE = "openFrameworks-Info.plist";
401 | INSTALL_PATH = "$(HOME)/Applications";
402 | LIBRARY_SEARCH_PATHS = (
403 | "$(inherited)",
404 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
405 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
406 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
407 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
408 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)",
409 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)",
410 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
411 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
412 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
413 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
414 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
415 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
416 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
417 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)",
418 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)",
419 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
420 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
421 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
422 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
423 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
424 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
425 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
426 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
427 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
428 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)",
429 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)",
430 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)",
431 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)",
432 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)",
433 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)",
434 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)",
435 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)",
436 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)",
437 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)",
438 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)",
439 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)",
440 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)",
441 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)",
442 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)",
443 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)",
444 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)",
445 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)",
446 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)",
447 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)",
448 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)",
449 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)",
450 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)",
451 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)",
452 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)",
453 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)",
454 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)",
455 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)",
456 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)",
457 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)",
458 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)",
459 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)",
460 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)",
461 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)",
462 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)",
463 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)",
464 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)",
465 | );
466 | PRODUCT_NAME = "$(TARGET_NAME)Debug";
467 | WRAPPER_EXTENSION = app;
468 | };
469 | name = Debug;
470 | };
471 | E4B69B610A3A1757003C02F2 /* Release */ = {
472 | isa = XCBuildConfiguration;
473 | buildSettings = {
474 | COMBINE_HIDPI_IMAGES = YES;
475 | COPY_PHASE_STRIP = YES;
476 | FRAMEWORK_SEARCH_PATHS = (
477 | "$(inherited)",
478 | "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
479 | );
480 | FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\"";
481 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
482 | GCC_MODEL_TUNING = NONE;
483 | ICON = "$(ICON_NAME_RELEASE)";
484 | ICON_FILE = "$(ICON_FILE_PATH)$(ICON)";
485 | INFOPLIST_FILE = "openFrameworks-Info.plist";
486 | INSTALL_PATH = "$(HOME)/Applications";
487 | LIBRARY_SEARCH_PATHS = (
488 | "$(inherited)",
489 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
490 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
491 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
492 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)",
493 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)",
494 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)",
495 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
496 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
497 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
498 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
499 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
500 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
501 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
502 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)",
503 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)",
504 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
505 | "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
506 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)",
507 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)",
508 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)",
509 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)",
510 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)",
511 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)",
512 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)",
513 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)",
514 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)",
515 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)",
516 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)",
517 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)",
518 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)",
519 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)",
520 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)",
521 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)",
522 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)",
523 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)",
524 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)",
525 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)",
526 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)",
527 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)",
528 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)",
529 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)",
530 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)",
531 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)",
532 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)",
533 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)",
534 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)",
535 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)",
536 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)",
537 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)",
538 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)",
539 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)",
540 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)",
541 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)",
542 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)",
543 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)",
544 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)",
545 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)",
546 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)",
547 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)",
548 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)",
549 | "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)",
550 | );
551 | PRODUCT_NAME = "$(TARGET_NAME)";
552 | WRAPPER_EXTENSION = app;
553 | };
554 | name = Release;
555 | };
556 | /* End XCBuildConfiguration section */
557 |
558 | /* Begin XCConfigurationList section */
559 | E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "GPU_Flocking" */ = {
560 | isa = XCConfigurationList;
561 | buildConfigurations = (
562 | E4B69B4E0A3A1720003C02F2 /* Debug */,
563 | E4B69B4F0A3A1720003C02F2 /* Release */,
564 | );
565 | defaultConfigurationIsVisible = 0;
566 | defaultConfigurationName = Release;
567 | };
568 | E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "GPU_Flocking" */ = {
569 | isa = XCConfigurationList;
570 | buildConfigurations = (
571 | E4B69B600A3A1757003C02F2 /* Debug */,
572 | E4B69B610A3A1757003C02F2 /* Release */,
573 | );
574 | defaultConfigurationIsVisible = 0;
575 | defaultConfigurationName = Release;
576 | };
577 | /* End XCConfigurationList section */
578 | };
579 | rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */;
580 | }
581 |
--------------------------------------------------------------------------------