//-------------------------------------------------------------- void testApp::update(){ mousePos.x = ofGetMouseX(); mousePos.y = ofGetMouseY(); dimensions.x = ofGetWidth(); dimensions.y = ofGetHeight(); opencl.kernel("updateParticle")->setArg(2, mousePos); opencl.kernel("updateParticle")->setArg(3, dimensions); opencl.kernel("updateParticle")->run1D(NUM_PARTICLES); }
//-------------------------------------------------------------- void ofApp::update(){ mousePos.x = ofGetMouseX(); mousePos.y = ofGetMouseY(); dimensions.x = ofGetWidth(); dimensions.y = ofGetHeight(); opencl.kernel("updateParticle")->setArg(2, mousePos);//.getPtr(), sizeof(float2)); opencl.kernel("updateParticle")->setArg(3, dimensions);//.getPtr(), sizeof(float2) ); glFlush(); opencl.kernel("updateParticle")->run1D(NUM_PARTICLES); }
//-------------------------------------------------------------- void testApp::setup(){ ofBackground(0, 0, 0); ofSetLogLevel(OF_LOG_VERBOSE); ofSetVerticalSync(false); opencl.setupFromOpenGL(); // create vbo glGenBuffersARB(1, &vbo); glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbo); glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(float2) * NUM_PARTICLES, 0, GL_DYNAMIC_COPY_ARB); glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); // init host and CL buffers particles.initBuffer(NUM_PARTICLES); particlePos.initFromGLObject(vbo, NUM_PARTICLES); // init data for(int i=0; i<NUM_PARTICLES; i++) { Particle &p = particles[i]; p.vel.set(0, 0); p.mass = ofRandom(0.5, 1); particlePos[i].set(ofRandomWidth(), ofRandomHeight()); } particles.writeToDevice(); particlePos.writeToDevice(); opencl.loadProgramFromFile("MSAOpenCL/Particle.cl"); opencl.loadKernel("updateParticle"); opencl.kernel("updateParticle")->setArg(0, particles.getCLMem()); opencl.kernel("updateParticle")->setArg(1, particlePos.getCLMem()); opencl.kernel("updateParticle")->setArg(2, mousePos); opencl.kernel("updateParticle")->setArg(3, dimensions); glPointSize(1); }
//-------------------------------------------------------------- void testApp::update(){ // grab new frame videoGrabber.update(); // if there is a new frame.... if(videoGrabber.isFrameNew()) { // RGB textures don't seem to work well. so need to copy the vidgrabber data into a RGBA texture int pixelIndex = 0; for(int i=0; i<vidWidth; i++) { for(int j=0; j<vidHeight; j++) { int indexRGB = pixelIndex * 3; int indexRGBA = pixelIndex * 4; pixels[indexRGBA ] = videoGrabber.getPixels()[indexRGB ]; pixels[indexRGBA+1] = videoGrabber.getPixels()[indexRGB+1]; pixels[indexRGBA+2] = videoGrabber.getPixels()[indexRGB+2]; pixels[indexRGBA+3] = 255; pixelIndex++; } } // write the new pixel data into the OpenCL Image (and thus the OpenGL texture) clImage[activeImageIndex].write(pixels); if(doBlur) { msa::OpenCLKernel *kernel = openCL.kernel("msa_boxblur"); for(int i=0; i<blurAmount; i++) { cl_int offset = i * i / 2 + 1; kernel->setArg(0, clImage[activeImageIndex].getCLMem()); kernel->setArg(1, clImage[1-activeImageIndex].getCLMem()); kernel->setArg(2, offset); kernel->run2D(vidWidth, vidHeight); activeImageIndex = 1 - activeImageIndex; } } if(doFlipX) { msa::OpenCLKernel *kernel = openCL.kernel("msa_flipx"); kernel->setArg(0, clImage[activeImageIndex].getCLMem()); kernel->setArg(1, clImage[1-activeImageIndex].getCLMem()); kernel->run2D(vidWidth, vidHeight); activeImageIndex = 1 - activeImageIndex; } if(doFlipY) { msa::OpenCLKernel *kernel = openCL.kernel("msa_flipy"); kernel->setArg(0, clImage[activeImageIndex].getCLMem()); kernel->setArg(1, clImage[1-activeImageIndex].getCLMem()); kernel->run2D(vidWidth, vidHeight); activeImageIndex = 1 - activeImageIndex; } if(doGreyscale) { msa::OpenCLKernel *kernel = openCL.kernel("msa_greyscale"); kernel->setArg(0, clImage[activeImageIndex].getCLMem()); kernel->setArg(1, clImage[1-activeImageIndex].getCLMem()); kernel->run2D(vidWidth, vidHeight); activeImageIndex = 1 - activeImageIndex; } if(doInvert) { msa::OpenCLKernel *kernel = openCL.kernel("msa_invert"); kernel->setArg(0, clImage[activeImageIndex].getCLMem()); kernel->setArg(1, clImage[1-activeImageIndex].getCLMem()); kernel->run2D(vidWidth, vidHeight); activeImageIndex = 1 - activeImageIndex; } if(doThreshold) { msa::OpenCLKernel *kernel = openCL.kernel("msa_threshold"); kernel->setArg(0, clImage[activeImageIndex].getCLMem()); kernel->setArg(1, clImage[1-activeImageIndex].getCLMem()); kernel->setArg(2, threshLevel); kernel->run2D(vidWidth, vidHeight); activeImageIndex = 1 - activeImageIndex; } // calculate capture fps static float lastTime = 0; float nowTime = ofGetElapsedTimef(); float timeDiff = nowTime - lastTime; if(timeDiff > 0 ) captureFPS = 0.9f * captureFPS + 0.1f / timeDiff; lastTime = nowTime; } }
void ofxKinectTracking::update(){ bool newFrame; #ifndef NORMAL_CAMERA kinect->update(); newFrame = kinect->isFrameNew(); #else videoGrabber.update(); newFrame = videoGrabber.isFrameNew(); if(newFrame){ int pixelIndex = 0; for(int i=0; i<640; i++) { for(int j=0; j<480; j++) { int indexRGB = pixelIndex * 3; int indexL = pixelIndex; pixels[indexL] = videoGrabber.getPixels()[indexRGB+1 ]; pixelIndex++; } } // write the new pixel data into the OpenCL Image (and thus the OpenGL texture) clImage[0].write(pixels); } #endif if(newFrame){ cl_int2 spawnCoord = {int(ofRandom(0, 640)), int(ofRandom(0, 480))}; if(ofRandom(0, 1) < 0.500){ spawnCoord[0] = -1; spawnCoord[0] = -1; } MSA::OpenCLKernel *preKernel = openCL.kernel("preUpdate"); MSA::OpenCLKernel *updateKernel = openCL.kernel("update"); MSA::OpenCLKernel *postKernel = openCL.kernel("postUpdate"); //Prepare timetaking double totalTimeTmp; uint64_t mbeg, mend; openCL.finish(); mbeg = mach_absolute_time(); //Run pre update kernel preKernel->setArg(0, clImage[0].getCLMem()); preKernel->setArg(1, clAntsBuffer.getCLMem()); preKernel->run2D(640, 480); //Calculate time openCL.finish(); mend = mach_absolute_time(); killingTime.push_back(machcore(mend, mbeg)); totalTimeTmp = machcore(mend, mbeg); mbeg = mach_absolute_time(); //Run update kernel size_t shared_size = (1 * 64) * sizeof(int); updateKernel->setArg(0, clAntsBuffer.getCLMem()); updateKernel->setArg(1, clSharedBuffer.getCLMem()); updateKernel->setArg(2, spawnCoord); clSetKernelArg(updateKernel->getCLKernel(), 3, shared_size, NULL); for(int i=0;i<NUM_ITERATIONS;i++){ updateKernel->run2D(640, 480); } //Calculate time openCL.finish(); mend = mach_absolute_time(); spawningTime.push_back(machcore(mend, mbeg)); totalTimeTmp += machcore(mend, mbeg); mbeg = mach_absolute_time(); //Run post update kernel postKernel->setArg(0, clImage[0].getCLMem()); postKernel->setArg(1, clImage[1].getCLMem()); postKernel->setArg(2, clAntsBuffer.getCLMem()); postKernel->setArg(3, clSharedBuffer.getCLMem()); postKernel->setArg(4, spawnCoord); postKernel->run2D(640, 480); //Calculate time openCL.finish(); mend = mach_absolute_time(); updateTime.push_back(machcore(mend, mbeg)); totalTimeTmp += machcore(mend, mbeg); totalTime.push_back(totalTimeTmp); if(totalTime.size() > (640*2)/3){ totalTime.erase(totalTime.begin()); killingTime.erase(killingTime.begin()); spawningTime.erase(spawningTime.begin()); updateTime.erase(updateTime.begin()); } } }