本文整理汇总了C++中gl::Fbo::bindTexture方法的典型用法代码示例。如果您正苦于以下问题:C++ Fbo::bindTexture方法的具体用法?C++ Fbo::bindTexture怎么用?C++ Fbo::bindTexture使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gl::Fbo
的用法示例。
在下文中一共展示了Fbo::bindTexture方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: helix
void Simulacra::helix()
{
glDisable(GL_LIGHTING);
glDisable(GL_LIGHT0);
// render a simple scene into mFboScene
helixShader.bind();
gl::translate(0,0,0);
helixFBO.bindFramebuffer();
helixShader.uniform("time",Vec2f(sin(rotation),1-sin(rotation*0.71)));
gl::clear(ColorA(0,0,0,1));
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
gl::drawSolidRect(cinder::Rectf(0,0,getWindowWidth(),getWindowHeight()));
helixFBO.unbindFramebuffer();
helixShader.unbind();
//Revert back to screen
gl::color(cinder::ColorA(1,1,1,1));
applyHelixShader.bind();
finalFBO.bindTexture(0);
applyHelixShader.uniform("qt_Texture0",0);
helixFBO.bindTexture(1);
applyHelixShader.uniform("qt_Texture1",1);
gl::drawSolidRect(cinder::Rectf(0,getWindowHeight(),getWindowWidth(),0));
applyHelixShader.unbind();
helixFBO.unbindTexture();
finalFBO.unbindTexture();
gl::color(ColorA(1,1,1,1));
}
示例2: draw
void FBOBasicApp::draw()
{
// clear the window to gray
gl::clear( Color( 0.35f, 0.35f, 0.35f ) );
// setup our camera to render the cube
CameraPersp cam( getWindowWidth(), getWindowHeight(), 60.0f );
cam.setPerspective( 60, getWindowAspectRatio(), 1, 1000 );
cam.lookAt( Vec3f( 2.6f, 1.6f, -2.6f ), Vec3f::zero() );
gl::setMatrices( cam );
// set the viewport to match our window
gl::setViewport( getWindowBounds() );
// use the scene we rendered into the FBO as a texture
glEnable( GL_TEXTURE_2D );
mFbo.bindTexture();
// draw a cube textured with the FBO
gl::color( Color::white() );
gl::drawCube( Vec3f::zero(), Vec3f( 2.2f, 2.2f, 2.2f ) );
// show the FBO texture in the upper left corner
gl::setMatricesWindow( getWindowSize() );
gl::draw( mFbo.getTexture(0), Rectf( 0, 0, 96, 96 ) );
#if ! defined( CINDER_GLES ) // OpenGL ES can't do depth textures, otherwise draw the FBO's
gl::draw( mFbo.getDepthTexture(), Rectf( 96, 0, 96 + 96, 96 ) );
#endif
}
示例3: fbo
void KinectEcard::snapshot(){
gl::Fbo fbo( 640, 480, false );
// render stored depth FBO
fbo.bindFramebuffer();
gl::pushMatrices();
gl::clear( Color::black() );
gl::color( Color::white() );
gl::setMatricesWindowPersp( fbo.getSize() );
mDepthCompareShader.bind();
mDepthCompareShader.uniform( "tex0", 0 );
mDepthCompareShader.uniform( "tex1", 1 );
mDepthFbo.bindTexture(0);
mStoredDepthFbo.bindTexture(1);
gl::translate( 0, 480 );
gl::scale( 1, -1 );
gl::drawSolidRect( fbo.getBounds() );
mDepthCompareShader.unbind();
gl::popMatrices();
fbo.unbindFramebuffer();
// save stored depth fbo
fbo.blitTo( mStoredDepthFbo, fbo.getBounds(), mStoredDepthFbo.getBounds() );
// render substracted video fbo
fbo.bindFramebuffer();
gl::pushMatrices();
gl::clear( Color::black() );
gl::color( Color::white() );
gl::setMatricesWindowPersp( mSubstractedVideoFbo.getSize() );
gl::draw( mSubstractedVideoFbo.getTexture() );
gl::popMatrices();
fbo.unbindFramebuffer();
// save it
fbo.blitTo( mStoredVideoFbo, fbo.getBounds(), mStoredVideoFbo.getBounds() );
}
示例4: disableWireframe
void HiKinectApp::draw3D() {
gl::setMatrices( mCamUI.getCamera() );
if (mWireframe) gl::enableWireframe();
else gl::disableWireframe();
if (mLighting) {
glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
}
// GLfloat light_position[] = { mMousePos.x, mMousePos.y, -275.0f, 0.0f };
GLfloat light_position[] = { 0, 0, 1.0f, 0.0f };
glLightfv( GL_LIGHT0, GL_POSITION, light_position );
if( DIFFUSE ){
ci::ColorA color( CM_RGB, 1.0f, 1.0f, 1.0f, 1.0f );
glMaterialfv( GL_FRONT, GL_DIFFUSE, color );
} else {
glMaterialfv( GL_FRONT, GL_DIFFUSE, no_mat );
}
if( AMBIENT )
glMaterialfv( GL_FRONT, GL_AMBIENT, mat_ambient );
else
glMaterialfv( GL_FRONT, GL_AMBIENT, no_mat );
if( SPECULAR ){
glMaterialfv( GL_FRONT, GL_SPECULAR, mat_specular );
glMaterialfv( GL_FRONT, GL_SHININESS, mat_shininess );
} else {
glMaterialfv( GL_FRONT, GL_SPECULAR, no_mat );
glMaterialfv( GL_FRONT, GL_SHININESS, no_shininess );
}
if( EMISSIVE )
glMaterialfv( GL_FRONT, GL_EMISSION, mat_emission );
else
glMaterialfv( GL_FRONT, GL_EMISSION, no_mat );
if (mDepthTexture)
mDepthTexture.bind(0);
mFbo.bindTexture(1);
if (mColorTexture)
mColorTexture.bind(2);
mGridMesh.draw( lmap(mMousePos.x, 0.0f, (float)getWindowWidth(), 0.0f, 1.0f) );
if (mLighting) {
glDisable( GL_LIGHTING );
glDisable( GL_LIGHT0 );
}
gl::disableWireframe();
}
示例5: renderSubstractedVideo
void KinectEcard::renderSubstractedVideo(){
mSubstractedVideoFbo.bindFramebuffer();
gl::pushMatrices();
{
// clear FBO
gl::clear( Color::black() );
gl::color( Color::white() );
//
gl::setMatricesWindowPersp( mSubstractedVideoFbo.getSize() );
mSubstractShader.bind();
mSubstractShader.uniform( "tex0", 0 );
mSubstractShader.uniform( "tex1", 1 );
mSubstractShader.uniform( "tex2", 2 );
mSubstractShader.uniform( "tex3", 3 );
mVideoFbo.bindTexture(0);
mDepthFbo.bindTexture(1);
mStoredVideoFbo.bindTexture(2);
mStoredDepthFbo.bindTexture(3);
gl::drawSolidRect( mSubstractedVideoFbo.getBounds() );
mVideoFbo.unbindTexture();
mDepthFbo.unbindTexture();
mStoredVideoFbo.unbindTexture();
mStoredDepthFbo.unbindTexture();
mSubstractShader.unbind();
}
gl::popMatrices();
mSubstractedVideoFbo.unbindFramebuffer();
}
示例6: draw
void RepulsionApp::draw()
{
// clear out the window with black
gl::clear( ColorA( 0.1f, 0.1f, 0.1f, 0.0f ), true );
gl::setMatricesWindow( getWindowSize(), false );
gl::setViewport( getWindowBounds() );
gl::disableDepthRead();
gl::disableDepthWrite();
gl::enable( GL_TEXTURE_2D );
gl::enableAlphaBlending();
gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) );
// DRAW ROOM
mRoomFbo.bindTexture();
gl::drawSolidRect( getWindowBounds() );
gl::setMatrices( mSpringCam.getCam() );
// DRAW PANEL
drawInfoPanel();
gl::enable( GL_TEXTURE_2D );
gl::enableDepthRead();
gl::enableDepthWrite();
// DRAW PARTICLES
mPositionFbos[mThisFbo].bindTexture( 0 );
mVelocityFbos[mThisFbo].bindTexture( 1 );
mShader.bind();
mShader.uniform( "currentPosition", 0 );
mShader.uniform( "currentVelocity", 1 );
mShader.uniform( "eyePos", mSpringCam.getEye() );
mShader.uniform( "power", mRoom.getPower() );
gl::draw( mSphereVbo );
mShader.unbind();
if( mSaveFrames && mNumSavedFrames < 15000 ){
writeImage( *getHomeDirectory().c_str() + "RepulsionGPU/" + toString( mNumSavedFrames ) + ".png", copyWindowSurface() );
mNumSavedFrames ++;
}
mThisFbo = ( mThisFbo + 1 ) % 2;
mPrevFbo = ( mThisFbo + 1 ) % 2;
}
示例7: draw
void TerrainApp::draw()
{
float power = mRoom.getPower();
gl::clear( ColorA( 0.1f, 0.1f, 0.1f, 0.0f ), true );
gl::setMatricesWindow( getWindowSize(), false );
gl::setViewport( getWindowBounds() );
gl::disableDepthRead();
gl::disableDepthWrite();
gl::enableAlphaBlending();
gl::enable( GL_TEXTURE_2D );
gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) );
// DRAW ROOM FBO
mRoomFbo.bindTexture();
gl::drawSolidRect( getWindowBounds() );
gl::setMatrices( mSpringCam.getCam() );
gl::color( ColorA( power, power, power, power * 0.1f + 0.9f ) );
// DRAW INFO PANEL
drawInfoPanel();
gl::enable( GL_TEXTURE_2D );
gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) );
// DRAW WALLS
mRoom.drawWalls( mRoom.getPower(), mRoomBackWallTex, mRoomLeftWallTex, mRoomRightWallTex, mRoomCeilingTex, mRoomFloorTex, mRoomBlankTex );
gl::enableAlphaBlending();
gl::enableDepthRead();
gl::enableDepthWrite();
gl::enable( GL_TEXTURE_2D );
// DRAW TERRAIN
drawTerrain();
gl::disable( GL_TEXTURE_2D );
// DRAW SPHERE
drawSphere();
}
示例8: copyBlur
void Grove::copyBlur(gl::Fbo& source, gl::Fbo& target, Vec2f sampleOffset)
{
// bind the blur shader
mBlurShader.bind();
mBlurShader.uniform("tex0", 0); // use texture unit 0
mBlurShader.uniform("sampleOffset", sampleOffset);
// copy a horizontally blurred version of our scene into the first blur Fbo
gl::setViewport( target.getBounds() );
target.bindFramebuffer();
source.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow(target.getSize(), false);
gl::clear( Color::black() );
gl::drawSolidRect( target.getBounds() );
gl::popMatrices();
source.unbindTexture();
target.unbindFramebuffer();
// unbind the shader
mBlurShader.unbind();
}
示例9: draw
void ShadedSphereApp::draw()
{
gl::clear( ColorA( 0, 0, 0, 0 ), true );
gl::color( ColorA( 1, 1, 1, 1 ) );
gl::setMatricesWindow( getWindowSize(), false );
gl::setViewport( getWindowBounds() );
gl::disableDepthRead();
gl::disableDepthWrite();
gl::enableAlphaBlending();
gl::enable( GL_TEXTURE_2D );
// DRAW ROOM
mRoomFbo.bindTexture();
gl::drawSolidRect( getWindowBounds() );
gl::setMatrices( mSpringCam.getCam() );
gl::enableDepthRead();
gl::enableDepthWrite();
drawSphere();
}
示例10: drawGuts
void BubbleChamberApp::drawGuts(Area area)
{
float power = mRoom.getPower();
Color powerColor = Color( power, power, power );
drawIntoRoomFbo();
gl::setMatricesWindow( getWindowSize(), false );
//gl::setViewport( getWindowBounds() );
gl::setViewport( area );
gl::disableDepthRead();
gl::disableDepthWrite();
gl::enableAlphaBlending();
gl::enable( GL_TEXTURE_2D );
gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) );
// ROOM
mRoomFbo.bindTexture();
gl::drawSolidRect( getWindowBounds() );
//mActiveCam.setFixedPipeline();
// PANEL
drawInfoPanel();
gl::pushMatrices();
gl::setMatrices( mActiveCam.getCam() );
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // zero it out
glMultMatrixf(mActiveCam.mProjectionMatrix); // Apply the matrix to the loaded projection matrix
glMatrixMode(GL_MODELVIEW); // Return to our modelview matrix
gl::disable( GL_TEXTURE_2D );
gl::enableDepthWrite();
gl::enableDepthRead();
gl::enableAlphaBlending();
gl::color( ColorA( powerColor, 1.0f ) );
// PARTICLES
mController.drawParticles( power );
// DRAW GIBS
mController.drawGibs();
// BUBBLES
mController.drawBubbles( power );
gl::enable( GL_TEXTURE_2D );
gl::disableDepthWrite();
// DECALS
gl::color( powerColor );
mDecalTex.bind( 0 );
mController.drawDecals();
// SMOKES
Vec3f right, up;
mActiveCam.getCam().getBillboardVectors( &right, &up );
mSmokeTex.bind( 0 );
mController.drawSmokes( right, up );
gl::disable( GL_TEXTURE_2D );
gl::enableDepthWrite();
gl::color( powerColor );
// MOTHS
mController.drawMoths();
// GLOWCUBES
mGlowCubeShader.bind();
mGlowCubeShader.uniform( "eyePos", mActiveCam.getEye() );
mGlowCubeShader.uniform( "power", mRoom.getPower() );
mGlowCubeShader.uniform( "mvpMatrix", mActiveCam.mMvpMatrix );
mController.drawGlowCubes( &mGlowCubeShader );
mGlowCubeShader.unbind();
if( mSaveFrames ){
// writeImage( getHomeDirectory() + "BubbleChamber/" + toString( mNumSaveFrames ) + ".png", copyWindowSurface() );
mNumSaveFrames ++;
}
gl::popMatrices();
}
示例11: draw
void BloomingNeonApp::draw()
{
// clear our window
gl::clear( Color::black() );
// store our viewport, so we can restore it later
Area viewport = gl::getViewport();
// render scene into mFboScene using illumination texture
mTextureIllumination.enableAndBind();
mTextureSpecular.bind(1);
gl::setViewport( mFboScene.getBounds() );
mFboScene.bindFramebuffer();
gl::pushMatrices();
gl::setMatricesWindow(SCENE_SIZE, SCENE_SIZE, false);
gl::clear( Color::black() );
render();
gl::popMatrices();
mFboScene.unbindFramebuffer();
// bind the blur shader
mShaderBlur.bind();
mShaderBlur.uniform("tex0", 0); // use texture unit 0
// tell the shader to blur horizontally and the size of 1 pixel
mShaderBlur.uniform("sample_offset", Vec2f(1.0f/mFboBlur1.getWidth(), 0.0f));
mShaderBlur.uniform("attenuation", 2.5f);
// copy a horizontally blurred version of our scene into the first blur Fbo
gl::setViewport( mFboBlur1.getBounds() );
mFboBlur1.bindFramebuffer();
mFboScene.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow(BLUR_SIZE, BLUR_SIZE, false);
gl::clear( Color::black() );
gl::drawSolidRect( mFboBlur1.getBounds() );
gl::popMatrices();
mFboScene.unbindTexture();
mFboBlur1.unbindFramebuffer();
// tell the shader to blur vertically and the size of 1 pixel
mShaderBlur.uniform("sample_offset", Vec2f(0.0f, 1.0f/mFboBlur2.getHeight()));
mShaderBlur.uniform("attenuation", 2.5f);
// copy a vertically blurred version of our blurred scene into the second blur Fbo
gl::setViewport( mFboBlur2.getBounds() );
mFboBlur2.bindFramebuffer();
mFboBlur1.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow(BLUR_SIZE, BLUR_SIZE, false);
gl::clear( Color::black() );
gl::drawSolidRect( mFboBlur2.getBounds() );
gl::popMatrices();
mFboBlur1.unbindTexture();
mFboBlur2.unbindFramebuffer();
// unbind the shader
mShaderBlur.unbind();
// render scene into mFboScene using color texture
mTextureColor.enableAndBind();
mTextureSpecular.bind(1);
gl::setViewport( mFboScene.getBounds() );
mFboScene.bindFramebuffer();
gl::pushMatrices();
gl::setMatricesWindow(SCENE_SIZE, SCENE_SIZE, false);
gl::clear( Color::black() );
render();
gl::popMatrices();
mFboScene.unbindFramebuffer();
// restore the viewport
gl::setViewport( viewport );
// because the Fbo's have their origin in the LOWER-left corner,
// flip the Y-axis before drawing
gl::pushModelView();
gl::translate( Vec2f(0, 256) );
gl::scale( Vec3f(1, -1, 1) );
// draw the 3 Fbo's
gl::color( Color::white() );
gl::draw( mFboScene.getTexture(), Rectf(0, 0, 256, 256) );
drawStrokedRect( Rectf(0, 0, 256, 256) );
gl::draw( mFboBlur1.getTexture(), Rectf(260, 0, 260 + 256, 256) );
drawStrokedRect( Rectf(260, 0, 260 + 256, 256) );
gl::draw( mFboBlur2.getTexture(), Rectf(520, 0, 520 + 256, 256) );
drawStrokedRect( Rectf(520, 0, 520 + 256, 256) );
// draw our scene with the blurred version added as a blend
gl::color( Color::white() );
gl::draw( mFboScene.getTexture(), Rectf(780, 0, 780 + 256, 256) );
gl::enableAdditiveBlending();
gl::draw( mFboBlur2.getTexture(), Rectf(780, 0, 780 + 256, 256) );
gl::disableAlphaBlending();
drawStrokedRect( Rectf(780, 0, 780 + 256, 256) );
//.........这里部分代码省略.........
示例12: draw
void TextTestApp::draw()
{
// this pair of lines is the standard way to clear the screen in OpenGL
glClearColor( 0,0,0,1 );
glClear( GL_COLOR_BUFFER_BIT );
if (flipScreen==true){
gl::pushMatrices();
gl::scale( Vec3f(-1, 1, 1) );
gl::translate( Vec2f(-ci::app::getWindowWidth(), 0 ) );
gl::translate( Vec3f(-1, 1, 1) );
}
gl::enableAlphaBlending();
gl::enableAdditiveBlending();
mbackground.draw();
drawSkeleton();
// FONT NOW GETS RENDERED AFTER SCENE SO WE CAN OVERRIDE DRAW OPERATION IF REQUIRED
currentScene->draw();
myFont.draw();
// kill this all and refresh
gl::disableAlphaBlending();
gl::enableAdditiveBlending();
// store our viewport, so we can restore it later
Area viewport = gl::getViewport();
// render a simple scene into mFboScene
gl::setViewport( mFboScene.getBounds() );
mFboScene.bindFramebuffer();
gl::pushMatrices();
gl::setMatricesWindow( viewport.getWidth(), viewport.getHeight(), false );
gl::clear( ColorA( 0,0,0,1 ));
fgParticles.draw();
//gl::drawSolidCircle( Vec2f(50,50), 20 );
//gl::draw( mFboScene.getTexture() );//TODO - screenshot?
gl::popMatrices();
mFboScene.unbindFramebuffer();
// bind the blur shader
mShaderBlur.bind();
mShaderBlur.uniform("tex0", 0); // use texture unit 0
// tell the shader to blur horizontally and the size of 1 pixel
mShaderBlur.uniform("sampleOffset", Vec2f(1.0f/mFboBlur1.getWidth(), 0.0f));
// copy a horizontally blurred version of our scene into the first blur Fbo
gl::setViewport( mFboBlur1.getBounds() );
mFboBlur1.bindFramebuffer();
mFboScene.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow( viewport.getWidth(), viewport.getHeight(), false );
gl::clear( Color::black() );
gl::drawSolidRect( mFboBlur1.getBounds() );
gl::popMatrices();
mFboScene.unbindTexture();
mFboBlur1.unbindFramebuffer();
// tell the shader to blur vertically and the size of 1 pixel
mShaderBlur.uniform("sampleOffset", Vec2f(0.0f, 1.0f/mFboBlur2.getHeight()));
// copy a vertically blurred version of our blurred scene into the second blur Fbo
gl::setViewport( mFboBlur2.getBounds() );
mFboBlur2.bindFramebuffer();
mFboBlur1.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow( viewport.getWidth(), viewport.getHeight(), false );
gl::clear( Color::black() );
gl::drawSolidRect( mFboBlur2.getBounds() );
gl::popMatrices();
mFboBlur1.unbindTexture();
mFboBlur2.unbindFramebuffer();
// unbind the shader
mShaderBlur.unbind();
// restore the viewport
gl::setViewport( viewport );
// because the Fbo's have their origin in the LOWER-left corner,
// flip the Y-axis before drawing
gl::pushModelView();
gl::translate( Vec2f(0, 0 ) );// viewport.getHeight() ) );
gl::scale( Vec3f(1, 1, 1) );
// draw the 3 Fbo's
//gl::color( Color::white() );
//gl::draw( mFboScene.getTexture(), Rectf(0, 0, 256, 256) );
//gl::draw( mFboBlur1.getTexture(), Rectf(260, 0, 260 + 256, 256) );
//gl::draw( mFboBlur2.getTexture(), Rectf(520, 0, 520 + 256, 256) );
// draw our scene with the blurred version added as a blend
gl::color( Color::white() );
//.........这里部分代码省略.........
示例13: draw
void BubbleChamberApp::draw()
{
float power = mRoom.getPower();
Color powerColor = Color( power, power, power );
gl::clear( ColorA( 0.1f, 0.1f, 0.1f, 0.0f ), true );
gl::setMatricesWindow( getWindowSize(), false );
gl::setViewport( getWindowBounds() );
gl::disableDepthRead();
gl::disableDepthWrite();
gl::enableAlphaBlending();
gl::enable( GL_TEXTURE_2D );
gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) );
// ROOM
mRoomFbo.bindTexture();
gl::drawSolidRect( getWindowBounds() );
gl::setMatrices( mSpringCam.getCam() );
// PANEL
drawInfoPanel();
gl::disable( GL_TEXTURE_2D );
gl::enableDepthWrite();
gl::enableDepthRead();
gl::enableAlphaBlending();
gl::color( ColorA( powerColor, 1.0f ) );
// PARTICLES
mController.drawParticles( power );
// DRAW GIBS
mController.drawGibs();
// BUBBLES
mController.drawBubbles( power );
gl::enable( GL_TEXTURE_2D );
gl::disableDepthWrite();
// DECALS
gl::color( powerColor );
mDecalTex.bind( 0 );
mController.drawDecals();
// SMOKES
Vec3f right, up;
mSpringCam.getCam().getBillboardVectors( &right, &up );
mSmokeTex.bind( 0 );
mController.drawSmokes( right, up );
gl::disable( GL_TEXTURE_2D );
gl::enableDepthWrite();
gl::color( powerColor );
// MOTHS
mController.drawMoths();
// GLOWCUBES
mGlowCubeShader.bind();
mGlowCubeShader.uniform( "eyePos", mSpringCam.getEye() );
mGlowCubeShader.uniform( "power", mRoom.getPower() );
mGlowCubeShader.uniform( "mvpMatrix", mSpringCam.mMvpMatrix );
mController.drawGlowCubes( &mGlowCubeShader );
mGlowCubeShader.unbind();
if( mSaveFrames ){
writeImage( *getHomeDirectory().c_str() + "BubbleChamber/" + toString( mNumSaveFrames ) + ".png", copyWindowSurface() );
mNumSaveFrames ++;
}
}
示例14: blur
void Simulacra::blur()
{
// glEnable( GL_TEXTURE_2D );
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
Area viewport = gl::getViewport();
// render a simple scene into mFboScene
gl::setViewport( sceneFBO.getBounds() );
sceneFBO.bindFramebuffer();
// gl::pushMatrices();
// gl::setMatricesWindow(FBO_WIDTH, FBO_HEIGHT, false);
gl::clear( ColorA(0,0,0,0) );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
gl::pushMatrices();
gl::setMatrices(camera);
try{
//Draw points
synthMenu->drawTerrain();
synthMenu->drawSynths();
} catch(...) {
std::cout << "drawing error!" << std::endl;
}
gl::popMatrices();
sceneFBO.unbindFramebuffer();
// bind the blur shader
blurShader.bind();
blurShader.uniform("tex0", 0); // use texture unit 0
// tell the shader to blur horizontally and the size of 1 pixel
blurShader.uniform("sampleOffset", Vec2f(1.0f/blurFBO1.getWidth(), 0.0f));
//FIRST PASS
// copy a horizontally blurred version of our scene into the first blur Fbo
gl::setViewport( blurFBO1.getBounds() );
blurFBO1.bindFramebuffer();
sceneFBO.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow(FBO_WIDTH, FBO_HEIGHT, false);
gl::clear( ColorA(0,0,0,0) );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glColor4f(1,1,1,1);
gl::drawSolidRect( blurFBO1.getBounds() );
gl::popMatrices();
sceneFBO.unbindTexture();
blurFBO1.unbindFramebuffer();
// tell the shader to blur vertically and the size of 1 pixel
blurShader.uniform("sampleOffset", Vec2f(0.0f, 1.0f/blurFBO2.getHeight()));
// copy a vertically blurred version of our blurred scene into the second blur Fbo
gl::setViewport( blurFBO2.getBounds() );
blurFBO2.bindFramebuffer();
blurFBO1.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow(FBO_WIDTH, FBO_HEIGHT, false);
gl::clear( ColorA(0,0,0,0) );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glColor4f(1,1,1,1);
gl::drawSolidRect( blurFBO2.getBounds() );
gl::popMatrices();
blurFBO1.unbindTexture();
blurFBO2.unbindFramebuffer();
//SECOND PASS
// copy a horizontally blurred version of our scene into the first blur Fbo
blurShader.uniform("sampleOffset", Vec2f(1.0f/blurFBO1.getWidth(), 0.0f));
gl::setViewport( blurFBO1.getBounds() );
blurFBO1.bindFramebuffer();
blurFBO2.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow(FBO_WIDTH, FBO_HEIGHT, false);
gl::clear( ColorA(0,0,0,0) );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glColor4f(1,1,1,1);
gl::drawSolidRect( blurFBO1.getBounds() );
gl::popMatrices();
blurFBO2.unbindTexture();
blurFBO1.unbindFramebuffer();
// tell the shader to blur vertically and the size of 1 pixel
blurShader.uniform("sampleOffset", Vec2f(0.0f, 1.0f/blurFBO2.getHeight()));
// copy a vertically blurred version of our blurred scene into the second blur Fbo
gl::setViewport( blurFBO2.getBounds() );
blurFBO2.bindFramebuffer();
blurFBO1.bindTexture(0);
gl::pushMatrices();
gl::setMatricesWindow(FBO_WIDTH, FBO_HEIGHT, false);
gl::clear( ColorA(0,0,0,0) );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glColor4f(1,1,1,1);
gl::drawSolidRect( blurFBO2.getBounds() );
gl::popMatrices();
blurFBO1.unbindTexture();
blurFBO2.unbindFramebuffer();
if(section == 1)
{
//.........这里部分代码省略.........
示例15: draw
void FolApp::draw()
{
gl::clear( Color::black() );
if ( !mDepthTexture )
return;
// blur depth
mDepthFbo.bindFramebuffer();
gl::setMatricesWindow( mDepthFbo.getSize(), false );
gl::setViewport( mDepthFbo.getBounds() );
mBlurShader.bind();
mBlurShader.uniform( "kernelSize", (float)mBlurKernelTexture.getWidth() );
mBlurShader.uniform( "invKernelSize", 1.f / mBlurKernelTexture.getWidth() );
mBlurShader.uniform( "imageTex", 0 );
mBlurShader.uniform( "kernelTex", 1 );
mBlurShader.uniform( "blurAmount", mBlurAmount );
// pass 1
glDrawBuffer( GL_COLOR_ATTACHMENT0_EXT );
//gl::enable( GL_TEXTURE_2D );
mDepthTexture.bind( 0 );
mBlurKernelTexture.bind( 1 );
mBlurShader.uniform( "stepVector", Vec2f( 1. / mDepthTexture.getWidth(), 0. ) );
gl::drawSolidRect( mDepthFbo.getBounds() );
mDepthTexture.unbind();
// pass 2
glDrawBuffer( GL_COLOR_ATTACHMENT1_EXT );
mDepthFbo.bindTexture( 0 );
mBlurShader.uniform( "stepVector", Vec2f( 0., 1. / mDepthFbo.getHeight() ) );
gl::drawSolidRect( mDepthFbo.getBounds() );
mDepthFbo.unbindTexture();
mBlurKernelTexture.unbind();
mBlurShader.unbind();
mDepthFbo.unbindFramebuffer();
// wave output
mOutputFbo.bindFramebuffer();
gl::setMatricesWindow( mOutputFbo.getSize(), false );
gl::setViewport( mOutputFbo.getBounds() );
gl::clear( Color::black() );
gl::disableDepthRead();
gl::disableDepthWrite();
gl::enableAdditiveBlending();
gl::color( ColorA( 1, 1, 1, .0195 ) );
gl::pushMatrices();
gl::scale( Vec2f( getWindowWidth() / (float)VBO_X_SIZE,
getWindowHeight() / (float)VBO_Y_SIZE) );
mDepthFbo.getTexture( 1 ).bind();
mWaveShader.bind();
mWaveShader.uniform( "tex", 0 );
mWaveShader.uniform( "invSize", Vec2f( mStep / mDepthFbo.getWidth(),
mStep / mDepthFbo.getHeight() ) );
mWaveShader.uniform( "clip", mClip );
gl::draw( mVboMesh );
mWaveShader.unbind();
gl::popMatrices();
gl::disableAlphaBlending();
mOutputFbo.unbindFramebuffer();
// bloom
mBloomFbo.bindFramebuffer();
gl::setMatricesWindow( mBloomFbo.getSize(), false );
gl::setViewport( mBloomFbo.getBounds() );
gl::color( Color::white() );
mOutputFbo.getTexture().bind();
mBloomShader.bind();
for (int i = 0; i < 8; i++)
{
glDrawBuffer( GL_COLOR_ATTACHMENT0_EXT + i );
mBloomShader.uniform( "iteration", i );
gl::drawSolidRect( mBloomFbo.getBounds() );
mBloomFbo.bindTexture( 0, i );
}
mBloomShader.unbind();
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
mBloomFbo.unbindFramebuffer();
// output mixer
gl::setMatricesWindow( getWindowSize() );
gl::setViewport( getWindowBounds() );
//.........这里部分代码省略.........