void LayoutVerticalStripes::render(ofTexture texture, ColorChannel *colorChannel, Layer layer) { float complexity = layer.complexity; int nrows = (complexity * 128) + 1; int ncols = 1; int xSize = ofGetWidth() / nrows; int ySize = ofGetHeight() / ncols; for (int row=0; row<nrows; row++) { for (int col=0; col<ncols; col++) { ofColor selectedColor = colorChannel->selectColor(nrows * col + row + layoutFrame); shader.begin(texture.getWidth(), texture.getHeight(), layer.masterScreenAlpha, layer.alpha, layer.contrast, layer.luminance, selectedColor.r, selectedColor.g, selectedColor.b); int xOffset = row * xSize; int yOffset = col * ySize; texture.draw(xOffset, yOffset, xSize, ySize); shader.end(); } } }
void BulgeEffect::draw(ofTexture& tex, int x, int y) { applyBulgeShader.begin(); applyBulgeShader.setUniformTexture("bulge", blendBulge.getTextureReference(), 1); applyBulgeShader.setUniformTexture("tex", tex, 2); tex.draw(x, y); applyBulgeShader.end(); needToClear = true; }
void ofxMask::drawEffect(ofTexture& maskedImage) { shader.begin(); shader.setUniformTexture("mask", fbo, 1); shader.setUniform1i("tex", 0); ofEnableAlphaBlending(); maskedImage.draw(0, 0); shader.end(); }
void Clone::update(ofTexture& src, ofTexture& dst, ofTexture& mask) { maskedBlur(src, mask, srcBlur); maskedBlur(dst, mask, dstBlur); buffer.begin(); ofPushStyle(); ofEnableAlphaBlending(); dst.draw(0, 0); cloneShader.begin(); cloneShader.setUniformTexture("src", src, 1); cloneShader.setUniformTexture("srcBlur", srcBlur, 2); cloneShader.setUniformTexture("dstBlur", dstBlur, 3); dst.draw(0, 0); cloneShader.end(); ofDisableAlphaBlending(); ofPopStyle(); buffer.end(); }
void ftParticleFlow::setObstacle (ofTexture& _tex) { ofPushStyle(); ofEnableBlendMode(OF_BLENDMODE_DISABLED); obstacleBuffer.clear(); obstacleBuffer.begin(); _tex.draw(0,0,simulationWidth,simulationHeight); obstacleBuffer.end(); ofPopStyle(); }
void tricks::gl::effects::OutputFilter::draw(ofTexture &tex) { shader.begin(); shader.setUniformTexture("tex", tex, 0); shader.setUniform1f("brightness", brightness); shader.setUniform1f("contrast", contrast); shader.setUniform1f("saturation", saturation); tex.draw(0, 0, ofGetWidth(), ofGetHeight()); shader.end(); }
void MaskTool::draw(ofTexture & dstTex) { if (getEnabled()) { ofSetColor(255); dstTex.draw(0, 0); _frame.draw(0, 0); } }
void ofxImageTS::spaceTime(ofTexture texture, float depth, float density, float width, float height){ ofFbo buffer; buffer.begin(); ofSetRectMode(OF_RECTMODE_CENTER); for(float i = 0; i < depth; i += 1/density){ texture.draw(width/2,height/2,width/i,height/i); } buffer.end(); }
void ofxImageTS::divider(ofTexture texture,float divW, float divH, float width, float height){ ofFbo buffer; buffer.begin(); for(int i = 0; i < divW; i++) { for(int j = 0; j < divH; j++) { texture.draw((width/divW) * i,(height/divH) * j,width/divW,height/divH); } } buffer.end(); }
void TexLine(ofPoint& startpoint, ofPoint& endpoint, ofTexture& tex) { float dist = ofDist(startpoint.x, startpoint.y, endpoint.x, endpoint.y); float angle = atan2(endpoint.y-startpoint.y, endpoint.x-startpoint.x);; glPushMatrix(); glTranslatef(startpoint.x, startpoint.y, 0.0); glRotatef(angle*180.0/PI, 0, 0, 1.0); tex.draw(style::lineHeight/2, -style::lineHeight/2, dist - style::lineHeight, style::lineHeight); glPopMatrix(); }
void Clone::debugShader(ofTexture &tex, ofTexture &mask){ debugFbo.allocate(buffer.getWidth(), buffer.getHeight()); debugResultFbo.allocate(buffer.getWidth(), buffer.getHeight()); ofShader debugShader; debugShader.load("shader/maskBlurShader"); setStrength(16); debugFbo.begin(); // debugShader.begin(); // // //maskBlurShader.setUniformTexture("tex", tex, 1); // debugShader.setUniformTexture("tex0", tex, 1); // debugShader.setUniformTexture("mask", mask, 2); // debugShader.setUniform2f("direction", 0, 1); // debugShader.setUniform1i("k", strength); // mask.draw(0, 0); // // debugShader.end(); maskBlurShader.begin(); maskBlurShader.setUniformTexture("tex0", tex, 1); maskBlurShader.setUniformTexture("mask", mask, 2); //maskBlurShader.setUniform2f("direction", 0., 1./tex.getHeight()); maskBlurShader.setUniform2f("direction", 1./tex.getWidth(), 0.); maskBlurShader.setUniform1i("k", strength); tex.draw(0, 0); maskBlurShader.end(); debugFbo.end(); // debugResultFbo.begin(); // // maskBlurShader.setUniformTexture("tex0", debugFbo, 1); // maskBlurShader.setUniformTexture("mask", mask, 2); // maskBlurShader.setUniform2f("direction", 0., 1./tex.getHeight()); // maskBlurShader.setUniform1i("k", strength); // debugFbo.draw(0, 0); // // debugResultFbo.end(); }
void imageMeltingPoint::render( const ofTexture& _tex){ if( !_tex.isAllocated() ) return;// false; int radius = karmaSoundAnalyser::getInstance().getZeroCrossings()/400; _tex.draw(position); /*for(int x=position.x-radius; x<position.x+radius; x+=round(ofRandom(1,radius/10)) ){ if( x < 0 || x > _tex.getWidth() ) continue; for(int y=position.y-radius; y<position.y+radius; y+=round(ofRandom(1,radius/10))){ if( y < 0 || y > _tex.getHeight() ) continue; int offset = y*_tex.getWidth() + x; offset /= _tex.getNumChannels()*2; ofSetColor( (ofColor) _tex[offset] ); ofDrawCircle(x, y, 1); } }*/ }
void ofxParticle::draw(ofTexture &tex){ float w = tex.getWidth(); float h = tex.getHeight(); if(w > h){ h = h/w*size; w = size; } else{ w = w/h*size; h = size; } ofSetColor(color); ofPushMatrix(); ofTranslate(position); ofRotateX(rotation.x); ofRotateY(rotation.y); ofRotateZ(rotation.z); tex.draw(w*-0.5,h*-0.5,w,h); ofPopMatrix(); }
void MaskTool::update(ofTexture& srcTex) { if (getEnabled()) { ofSetColor(255, 255); if (_bBrushDown) { _frameStack[_curUndoFrame]->begin(); _brushImg.draw(ofGetMouseX() - 25, ofGetMouseY() - 25, 50, 50); _frameStack[_curUndoFrame]->end(); } _maskFrame.begin(); ofClear(0, 0, 0, 255); _maskFrame.end(); // combine all frames in _frameStack into _maskFrame for (int i = 0; i < _frameStack.size(); i++) { if (!_frameStack[i]->isCleared()) { _combineFrames(_maskFrame, _frameStack[i]->getTextureReference()); } } _frame.begin(); // Cleaning everthing with alpha mask on 0 in order to make it transparent for default ofClear(0, 0, 0, 0); _maskShader.begin(); _maskShader.setUniformTexture("maskTex", _maskFrame.getTextureReference(), 1); srcTex.draw(0,0); _maskShader.end(); _frame.end(); } }
void Clone::maskedBlur(ofTexture& tex, ofTexture& mask, ofFbo& result) { int k = strength; buffer.begin(); maskBlurShader.begin(); maskBlurShader.setUniformTexture("tex", tex, 1); maskBlurShader.setUniformTexture("mask", mask, 2); maskBlurShader.setUniform2f("direction", 1, 0); maskBlurShader.setUniform1i("k", k); tex.draw(0, 0); maskBlurShader.end(); buffer.end(); result.begin(); maskBlurShader.begin(); maskBlurShader.setUniformTexture("tex", buffer, 1); maskBlurShader.setUniformTexture("mask", mask, 2); maskBlurShader.setUniform2f("direction", 0, 1); maskBlurShader.setUniform1i("k", k); buffer.draw(0, 0); maskBlurShader.end(); result.end(); }
void Clone::maskedBlur(ofTexture& tex, ofTexture& mask, ofFbo& result) { int k = strength; buffer.begin(); maskBlurShader.begin(); maskBlurShader.setUniformTexture("tex0", tex, 1); maskBlurShader.setUniformTexture("mask", mask, 2); maskBlurShader.setUniform2f("direction", 1./(tex.getWidth()*2), 0.); maskBlurShader.setUniform1i("k", k); tex.draw(0, 0); maskBlurShader.end(); buffer.end(); result.begin(); maskBlurShader.begin(); maskBlurShader.setUniformTexture("tex0", buffer, 1); maskBlurShader.setUniformTexture("mask", mask, 2); maskBlurShader.setUniform2f("direction", 0., 1./(buffer.getHeight())); maskBlurShader.setUniform1i("k", k); buffer.draw(0, 0); maskBlurShader.end(); buffer.draw(0, 0); result.end(); }
void KinectMotion::update(ofTexture & depthTex, bool isUpsideDown) { if (isUpdateSlices) { isUpdateSlices = false; buildSlices(); } depthSmallFbo.begin(); ofPushMatrix(); if (isUpsideDown) { ofTranslate(0, depthSmallFbo.getHeight()); ofScale(1, -1); } else { ofTranslate(depthSmallFbo.getWidth(), 0); ofScale(-1, 1); } depthTex.draw(0, 0, depthSmallFbo.getWidth(), depthSmallFbo.getHeight()); ofPopMatrix(); depthSmallFbo.end(); if (depthSlices.size() == 0) return; if (ofGetFrameNum() % 10 == 0) { int nearest = ofClamp(nearestGrey + 30, 120, 255); if (depthSlices[0].maxThreshold == -1 || abs(nearest - depthSlices[0].maxThreshold) > 30) { for (int i = 0; i < depthSlices.size(); i++) { float thresholdSection = nearest / depthSlices.size(); // set the threshold of the depth slices - this limits the range e.g. 10 slices only tracking from 1m-4m - 30 cms per slice //int minThreshold = ofMap(255 - (i * thresholdSection + thresholdSection), 0, 255, sliceMinThreshold, sliceMaxThreshold); //int maxThreshold = ofMap(255 - (i * thresholdSection), 0, 255, sliceMinThreshold, sliceMaxThreshold); int minThreshold = nearest - (i * thresholdSection + thresholdSection); int maxThreshold = nearest - (i * thresholdSection); depthSlices[i].minThreshold = minThreshold; depthSlices[i].maxThreshold = maxThreshold; } } } for (int i = 0; i < depthSlices.size(); i++) { depthSlices[i].update(&depthSmallFbo.getTextureReference()); } // for (int i = 0; i < 600; i += 3) // { // //ofVec3f v = ofVec3f(1.0, 1.0, 0.0); // ofVec3f v = ofVec3f(ofRandomuf(), ofRandomuf(), ofRandomuf()); // //ofVec3f v = ofVec3f(ofRandom(255), ofRandom(255), ofRandom(255)); // // motionData[i] = v.x; // motionData[i+1] = v.y; // motionData[i+2] = v.z; // } // depthMotionFbo.begin(); // ofClear(1.0, 1.0, 1.0, 1.0); // depthMotionShader.begin(); // depthMotionShader.setUniform1fv("motionData", motionData, 600); // depthTex.draw(0, 0, depthInW * 0.5, depthInH * 0.5); // depthMotionShader.end(); // depthMotionFbo.end(); // frame differencing //depthMotionFbo.begin(); // ofClear(1.0, 1.0, 1.0, 1.0); //depthTex.draw(0, 0, depthMotionFbo.getWidth(), depthMotionFbo.getHeight()); // depthMotionFbo.end(); //depthMotionFbo.readToPixels(depthMotionPix); //absdiff(previousDepthMap, depthMotionPix, differenceImage); //differenceImage.update(); //copy(depthMotionPix, previousDepthMap); //differenceMean = mean(toCv(differenceImage)); }
// draw texture in fbo using dimensions of fbo, filling the fbo but distorting the texture void ftUtil::stretch(ofFbo& _dst, ofTexture& _tex) { _dst.begin(); _tex.draw(0, 0, _dst.getWidth(), _dst.getHeight()); _dst.end(); };
//-------------------------------------------------------------- void Sender::sendTexture(ofTexture& t, string name) { int width = t.getWidth(); int height = t.getHeight(); //lookup the sender int i = ofFind(senderNameList, name); //if the sender is not there if (i == senderNameList.size()) { char senderNameChars[256]; strcpy_s(senderNameChars, name.c_str()); SpoutSender* sender = new SpoutSender(); bool init = sender->CreateSender(senderNameChars, width, height); if (init) { ofLogNotice("ofxSpout2 Sender created"); //init the fbo ofFbo senderFbo; ofFbo::Settings s; s.width = width; s.height = height; s.internalformat = GL_RGBA; s.textureTarget = GL_TEXTURE_2D; s.useDepth = false; s.useStencil = false; s.minFilter = GL_LINEAR; s.maxFilter = GL_LINEAR; s.wrapModeHorizontal = GL_CLAMP_TO_EDGE; s.wrapModeVertical = GL_CLAMP_TO_EDGE; s.numSamples = 0; senderFbo.allocate(s); senderFboList.push_back(senderFbo); senderWidthList.push_back(width); senderHeightList.push_back(height); senderNameList.push_back(name); spoutSenderList.push_back(sender); } else { ofLogError("ofxSpout2 Sender creation failed"); } //we cannot create sender and immediatly send texture; so return return; } if (i >= 0 && i < senderNameList.size()) { if ((width != senderWidthList[i]) || (height != senderHeightList[i])) { // quick and dirty fix for spoutSender ignoring texture resolution changes senderFboList[i].destroy(); ofFbo senderFbo; ofFbo::Settings s; s.width = width; s.height = height; s.internalformat = GL_RGBA; s.textureTarget = GL_TEXTURE_2D; s.useDepth = false; s.useStencil = false; s.minFilter = GL_LINEAR; s.maxFilter = GL_LINEAR; s.wrapModeHorizontal = GL_CLAMP_TO_EDGE; s.wrapModeVertical = GL_CLAMP_TO_EDGE; s.numSamples = 0; senderFbo.allocate(s); senderFboList[i] = senderFbo; senderWidthList[i] = width; senderHeightList[i] = height; } ofPushMatrix(); ofPushStyle(); senderFboList[i].begin(); ofClear(0); ofSetColor(255); t.draw(0,0,width,height); senderFboList[i].end(); ofPopStyle(); ofPopMatrix(); glBindTexture(GL_TEXTURE_2D, 0); // spoutSenderList[i]->SendTexture(senderFboList[i].getTextureReference().getTextureData().textureID, GL_TEXTURE_2D, senderWidthList[i], senderHeightList[i], false); } }
//-------------------------------------------------------------- ofTexture ofApp::postProcess(ofTexture threeDSceneTex){ bumpFbo.begin(); bumpShader.begin(); bumpShader.setUniform1f("fogOsc", fogSlider->getValue()); bumpShader.setUniform1f("colorMix", colorMixSlider->getValue()); bumpShader.setUniform2f("res", 1.0/ofGetWidth(), 1.0/ofGetHeight()); bumpShader.setUniformTexture("u_image", threeDSceneTex, 0); bumpShader.setUniformTexture("bump2", threeDSceneTex, 1); bumpShader.setUniform1f("time", ofGetFrameNum()*0.1); // bumpShader.setUniform1f("fadeToBlack", fadeToBlackSlider->getValue()); // bumpShader.setUniform1f("fadeInColor", fadeInColorSlider->getValue()); bumpShader.setUniform1f("hueCycle", hueCycle); bumpShader.setUniform1f("colorSlider", colorslider->getValue()); threeDSceneTex.draw(0,0); bumpShader.end(); bumpFbo.end(); glowFbo.begin(); glowShader.begin(); glowShader.setUniformTexture("srcTex", bumpFbo.getTexture(), 0); glowShader.setUniform2f("step", 5.0/w, 5.0/h); glowShader.setUniform1f("time", ofGetFrameNum()*0.1); bumpFbo.draw(0,0); glowShader.end(); glowFbo.end(); //glowFbo.draw(0,0); for(int i = 0; i<1; i++){ ofTexture blurTex; if(i == 0){ blurTex = glowFbo.getTexture(); } else{ blurTex = blurVFbo2.getTexture(); } blurHFbo2.begin(); blurHShader2.begin(); blurHShader2.setUniformTexture("srcTex", blurTex, 0); blurHShader2.setUniform2f("res", 1.0,1.0); blurHShader2.setUniform2f("step", 1.0/w, 1.0/h); blurTex.draw(0,0); blurHShader2.end(); blurHFbo2.end(); blurVFbo2.begin(); blurVShader2.begin(); blurVShader2.setUniformTexture("srcTex", blurHFbo2.getTexture(), 0); blurVShader2.setUniform2f("res", 1.0,1.0); blurVShader2.setUniform2f("step", 1.0/w, 1.0/h); blurHFbo2.draw(0,0); blurVShader2.end(); blurVFbo2.end(); } for(int i = 0; i<1; i++){ ofTexture blurTex; if(i == 0){ blurTex = bumpFbo.getTexture(); } else{ blurTex = blurVFbo.getTexture(); } blurHFbo.begin(); blurHShader2.begin(); blurHShader2.setUniformTexture("srcTex", blurTex, 0); blurHShader2.setUniform2f("res", 1.0,1.0); blurHShader2.setUniform2f("step", 1.0/w, 1.0/h); blurTex.draw(0,0); blurHShader2.end(); blurHFbo.end(); blurVFbo.begin(); blurVShader2.begin(); blurVShader2.setUniformTexture("srcTex", blurHFbo.getTexture(), 0); blurVShader2.setUniform2f("res", 1.0,1.0); blurVShader2.setUniform2f("step", 1.0/w, 1.0/h); blurHFbo.draw(0,0); blurVShader2.end(); blurVFbo.end(); } compositeFbo.begin(); compositeShader.begin(); compositeShader.setUniformTexture("bumpTex", bumpFbo.getTexture(), 0); compositeShader.setUniformTexture("edgeTex", blurVFbo2.getTexture(), 1); compositeShader.setUniformTexture("blurTex", blurVFbo.getTexture(), 2); bumpFbo.draw(0,0); compositeShader.end(); compositeFbo.end(); //compositeFbo.draw(0,0); //bumpFbo.draw(0,0); fxaaFbo.begin(); fxaaShader.begin(); fxaaShader.setUniformTexture("tDiffuse", compositeFbo.getTexture(), 0); if(renderCubeMap){ fxaaShader.setUniform2f("resolution", 1.0/(cubeMapTileSize), 1.0/(cubeMapTileSize)); } else{ fxaaShader.setUniform2f("resolution", 1.0/(w), 1.0/(h)); } compositeFbo.draw(0,0); fxaaShader.end(); fxaaFbo.end(); return fxaaFbo.getTexture(); }
//-------------------------------------------------------------- void VisualRingBuffer::setTexture(ofTexture texture){ begin(); texture.draw(0, 0, width, height); end(); }