本文整理汇总了C++中msa::OpenCL::kernel方法的典型用法代码示例。如果您正苦于以下问题:C++ OpenCL::kernel方法的具体用法?C++ OpenCL::kernel怎么用?C++ OpenCL::kernel使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类msa::OpenCL
的用法示例。
在下文中一共展示了OpenCL::kernel方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: update
//--------------------------------------------------------------
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);
}
示例2: update
//--------------------------------------------------------------
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);
}
示例3: setup
//--------------------------------------------------------------
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);
}
示例4: update
//--------------------------------------------------------------
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;
}
}
示例5: update
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());
}
}
//.........这里部分代码省略.........