comparison scanpath.mm @ 4:79c7cf39a0a0

Fixed new mesh crash - static array bounds. Made home made mutex for wavetable access. Less clicks?
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Mon, 10 Dec 2012 13:00:03 +0000
parents d346ddc50f70
children 085d80989ba7
comparison
equal deleted inserted replaced
3:d346ddc50f70 4:79c7cf39a0a0
27 restLength = 1.0; // ? 27 restLength = 1.0; // ?
28 28
29 scanMode = DISPLACEMENT; 29 scanMode = DISPLACEMENT;
30 initWavetables(); 30 initWavetables();
31 framesPerSample = 60.0/SAMPLE_RATE; 31 framesPerSample = 60.0/SAMPLE_RATE;
32 32 updateAccessing = false;
33 audioAccessing = false;
34
33 } 35 }
34 void ScanPath::init(){ 36 void ScanPath::init(){
35 framesPerSample = ofGetFrameRate()/SAMPLE_RATE; 37 framesPerSample = ofGetFrameRate()/SAMPLE_RATE;
36 38
37 } 39 }
38 //---------------------------------------------------------------- 40 //----------------------------------------------------------------
39 ScanPath::~ScanPath(){ 41 ScanPath::~ScanPath(){
40 42
41 //VECTORISE
42 43
43 delete [] wavetableNew; 44 delete [] wavetableNew;
44 delete [] wavetableOld; 45 delete [] wavetableOld;
45 delete [] wavetableUpdate; 46 delete [] wavetableUpdate;
46 cout << "destructed scanpath\n"; 47 cout << "destructed scanpath\n";
47 } 48 }
48 49
49 void ScanPath::clear(){ 50 void ScanPath::clear(){
50 //VECTORISE 51
51 for(vector<Element>::iterator elitr = pathElements.begin(); elitr < pathElements.end(); elitr++){ 52 for(vector<Element>::iterator elitr = pathElements.begin(); elitr < pathElements.end(); elitr++){
52 (*elitr).eLump->removeFromScanPath(); 53 (*elitr).eLump->removeFromScanPath();
53 (*elitr).eSpring->removeFromScanPath(); 54 (*elitr).eSpring->removeFromScanPath();
54 } 55 }
55 pathElements.clear(); 56 pathElements.clear();
160 double * temp; 161 double * temp;
161 162
162 // TODO THRED MUTEX HERE!?? 163 // TODO THRED MUTEX HERE!??
163 // this is called from graphics thread 164 // this is called from graphics thread
164 // reset the interp between frames 165 // reset the interp between frames
165 166
166 /*
167 int i = 0; 167 int i = 0;
168 while(audioAccessing){ 168 while(audioAccessing){
169 i++; 169 i++;
170 } 170 }
171 cout << "buffers swapped while update!" << i << "times\n"; 171 if(i > 0){
172 cout << "Update wavetables had to wait for audio access " << i << " times\n";
173 // hardly ever happens
174 }
172 updateAccessing = true; 175 updateAccessing = true;
173 176
174 */ 177
175 switch(scanMode){ 178 switch(scanMode){
176 case DISPLACEMENT: 179 case DISPLACEMENT:
177 // now fill with new values 180 // now fill with new values
178 for(int i = 0; i < numElements; i++){ 181 for(int i = 0; i < numElements; i++){
179 // double check 182 // double check
204 } 207 }
205 } 208 }
206 break; 209 break;
207 default: 210 default:
208 break; 211 break;
209 212
210 213 }
211 } 214
212
213
214
215
216 temp = wavetableOld; 215 temp = wavetableOld;
217 wavetableOld = wavetableNew; 216 wavetableOld = wavetableNew;
218 wavetableNew = wavetableUpdate; 217 wavetableNew = wavetableUpdate;
219 wavetableUpdate = temp; 218 wavetableUpdate = temp;
220 219
245 244
246 double frac = alongPath - double(n0); 245 double frac = alongPath - double(n0);
247 246
248 // TODO THRED MUTEX HERE!?? 247 // TODO THRED MUTEX HERE!??
249 // this is called from audio thread 248 // this is called from audio thread
250 /* 249
251 int i = 0; 250 int i = 0;
252 while(updateAccessing){ 251 while(updateAccessing){
253 i++; 252 i++;
254 } 253 }
255 audioAccessing = true; 254 audioAccessing = true;
256 cout << "update is accessing while audio is" << i << "times\n"; 255 if(i>0) cout << "Audio thread had to wait for wavetable update " << i << " times\n";
257 256
258 */
259 257
260 double oldsample = (1 - frac) * wavetableOld[n0] + frac * wavetableOld[n1]; 258 double oldsample = (1 - frac) * wavetableOld[n0] + frac * wavetableOld[n1];
261 259
262 double newsample = (1 - frac) * wavetableNew[n0] + frac * wavetableNew[n1]; 260 double newsample = (1 - frac) * wavetableNew[n0] + frac * wavetableNew[n1];
263 261