本文整理汇总了C++中gl::FboRef类的典型用法代码示例。如果您正苦于以下问题:C++ FboRef类的具体用法?C++ FboRef怎么用?C++ FboRef使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了FboRef类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: apply
void SMAA::apply( gl::FboRef destination, gl::FboRef source )
{
gl::ScopedFramebuffer fbo( destination );
gl::ScopedViewport viewport( 0, 0, destination->getWidth(), destination->getHeight() );
gl::ScopedMatrices matrices;
gl::setMatricesWindow( destination->getSize() );
// Make sure our source is linearly interpolated.
GLenum minFilter = source->getFormat().getColorTextureFormat().getMinFilter();
GLenum magFilter = source->getFormat().getColorTextureFormat().getMagFilter();
bool filterChanged = ( minFilter != GL_LINEAR || magFilter != GL_LINEAR );
if( filterChanged ) {
source->getColorTexture()->setMinFilter( GL_LINEAR );
source->getColorTexture()->setMagFilter( GL_LINEAR );
}
// Perform SMAA anti-aliasing.
gl::clear( ColorA( 0, 0, 0, 0 ) );
draw( source->getColorTexture(), destination->getBounds() );
// Restore texture parameters.
if( filterChanged ) {
source->getColorTexture()->setMinFilter( minFilter );
source->getColorTexture()->setMagFilter( magFilter );
}
}
开发者ID:ChristophPacher,项目名称:Cinder,代码行数:26,代码来源:SMAA.cpp
示例2: apply
void FXAA::apply( const gl::FboRef &destination, const gl::FboRef &source )
{
gl::ScopedFramebuffer fbo( destination );
gl::ScopedViewport viewport( 0, 0, destination->getWidth(), destination->getHeight() );
gl::ScopedMatrices matrices;
gl::setMatricesWindow( destination->getSize(), false );
// Make sure our source is linearly interpolated.
GLenum minFilter = source->getFormat().getColorTextureFormat().getMinFilter();
GLenum magFilter = source->getFormat().getColorTextureFormat().getMagFilter();
source->getColorTexture()->setMinFilter( GL_LINEAR );
source->getColorTexture()->setMagFilter( GL_LINEAR );
// Perform FXAA anti-aliasing.
gl::clear( ColorA( 0, 0, 0, 0 ) );
draw( source->getColorTexture(), destination->getBounds() );
// Restore texture parameters.
source->getColorTexture()->setMinFilter( minFilter );
source->getColorTexture()->setMagFilter( magFilter );
}
开发者ID:Ahbee,项目名称:Cinder,代码行数:21,代码来源:FXAA.cpp
示例3: findMindMax
vec4 GpuParrallelReductionApp::findMindMax()
{
// init the programs, fbo and texture used for the parrallel reduction
static gl::FboRef sReductionFbo, sReadFbo;
static gl::Texture2dRef sReductionTexture0;
static gl::GlslProgRef sReductionProg, sCopyProg;
auto startingSize = mFbo->getSize() / 2;
if( !sReductionFbo || sReductionFbo->getSize() != startingSize ) {
sReductionTexture0 = gl::Texture2d::create( startingSize.x, startingSize.y, gl::Texture2d::Format().minFilter( GL_NEAREST_MIPMAP_NEAREST ).magFilter( GL_NEAREST ).mipmap().immutableStorage() );
sReductionFbo = gl::Fbo::create( startingSize.x, startingSize.y, gl::Fbo::Format()
.attachment( GL_COLOR_ATTACHMENT0, sReductionTexture0 )
.disableDepth() );
sReductionProg = gl::GlslProg::create( loadAsset( "minMax.vert" ), loadAsset( "minMax.frag" ) );
}
// start reduction profiling
static auto sTimer0 = gl::QueryTimeSwapped::create();
sTimer0->begin();
// attach the main level of the texture
gl::ScopedFramebuffer scopedFbo( sReductionFbo );
glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sReductionTexture0->getId(), 0 );
// start by blitting the main fbo into the reduction one
mFbo->blitTo( sReductionFbo, mFbo->getBounds(), sReductionFbo->getBounds(), GL_NEAREST );
// bind the reduction program and texture and disable blending
gl::ScopedMatrices scopedMatrices;
gl::ScopedGlslProg scopedGlsl( sReductionProg );
gl::ScopedBlend scopedBlend( false );
gl::ScopedTextureBind scopedTexBind0( sReductionTexture0, 0 );
sReductionProg->uniform( "uTex0", 0 );
// iterate trough each mipmap level
int numMipMaps = gl::Texture2d::requiredMipLevels( startingSize.x, startingSize.y, 0 );
for( int level = 1; level < numMipMaps; ++level ) {
// attach the current mipmap level to the framebuffer and limit texture sampling to the previous level
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, level - 1 );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level - 1 );
glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sReductionTexture0->getId(), level );
// get the current mipmap size and update uniforms
vec2 size = gl::Texture2d::calcMipLevelSize( level, sReductionFbo->getWidth(), sReductionFbo->getHeight() );
sReductionProg->uniform( "uInvSize", vec2( 1.0f ) / vec2( size ) );
// render a fullscreen quad
gl::ScopedViewport scopedViewport( ivec2( 0 ), size );
gl::setMatricesWindow( size.x, size.y );
gl::drawSolidRect( Rectf( vec2( 0.0f ), vec2( size ) ) );
}
// stop reduction profiling
sTimer0->end();
mReductionTime = sTimer0->getElapsedMilliseconds();
// start readback profiling
static auto sTimer1 = gl::QueryTimeSwapped::create();
sTimer1->begin();
// read back to the cpu and find the max value
vec4 max( 0.0f );
ivec2 readSize = gl::Texture2d::calcMipLevelSize( numMipMaps - 1, startingSize.x, startingSize.y );
Surface8u surface( readSize.x, readSize.y, true );
glGetTexImage( sReductionTexture0->getTarget(), numMipMaps - 1, GL_RGBA, GL_UNSIGNED_BYTE, surface.getData() );
auto it = surface.getIter();
while( it.line() ) { while( it.pixel() ) {
max = glm::max( max, vec4( it.r(), it.g(), it.b(), it.a() ) );
} }
// stop readback profiling
sTimer1->end();
mReadBackTime = sTimer1->getElapsedMilliseconds();
return max;
}
开发者ID:Craigson,项目名称:Cinder-Experiments,代码行数:74,代码来源:GpuParrallelReductionApp.cpp
示例4: renderSceneToFbo
// Render the color cube into the FBO
void FboBasicApp::renderSceneToFbo()
{
// this will restore the old framebuffer binding when we leave this function
// on non-OpenGL ES platforms, you can just call mFbo->unbindFramebuffer() at the end of the function
// but this will restore the "screen" FBO on OpenGL ES, and does the right thing on both platforms
gl::ScopedFramebuffer fbScp( mFbo );
// clear out the FBO with blue
gl::clear( Color( 0.25, 0.5f, 1.0f ) );
// setup the viewport to match the dimensions of the FBO
gl::ScopedViewport scpVp( ivec2( 0 ), mFbo->getSize() );
// setup our camera to render the torus scene
CameraPersp cam( mFbo->getWidth(), mFbo->getHeight(), 60.0f );
cam.setPerspective( 60, mFbo->getAspectRatio(), 1, 1000 );
cam.lookAt( vec3( 2.8f, 1.8f, -2.8f ), vec3( 0 ));
gl::setMatrices( cam );
// set the modelview matrix to reflect our current rotation
gl::setModelMatrix( mRotation );
// render the color cube
gl::ScopedGlslProg shaderScp( gl::getStockShader( gl::ShaderDef().color() ) );
gl::color( Color( 1.0f, 0.5f, 0.25f ) );
gl::drawColorCube( vec3( 0 ), vec3( 2.2f ) );
gl::color( Color::white() );
}
开发者ID:Gsarault44,项目名称:Cinder,代码行数:28,代码来源:FboBasicApp.cpp
示例5: update
void ciApp::update()
{
auto get_center_rect = [&](Area area) ->Rectf { return Rectf(area).getCenteredFit(getWindowBounds(), true); };
spout_receiver->receive(mTexture);
filter->update(mTexture);
vector_blur.update(filter->getTexture());
{
const gl::ScopedColor scpColor(Color::white());
const gl::ScopedFramebuffer scpFbo(mFbo);
gl::clear();
const gl::ScopedViewport scpView(ivec2(0), mFbo->getSize());
const gl::ScopedMatrices scpMatrces;
gl::setMatricesWindow(mFbo->getSize());
auto tex = filter->getTexture();
//auto tex = vector_blur.getTexture();
gl::draw(tex);
}
spout_sender->send(mTexture);
#if 0
// We copy the magnitude spectrum out from the Node on the main thread, once per update:
mMagSpectrum = mMonitorSpectralNode->getMagSpectrum();
#endif
}
开发者ID:shinabebel,项目名称:ci_blocks,代码行数:30,代码来源:ciApp.cpp
示例6: updateClone
void FaceOff::updateClone()
{
gl::ScopedMatrices mvp;
gl::setMatricesWindow(mRenderedOfflineFaceFbo->getSize());
gl::ScopedViewport viewport(0, 0, mRenderedOfflineFaceFbo->getWidth(), mRenderedOfflineFaceFbo->getHeight());
// TODO: merge these two passes w/ MRTs
{
gl::ScopedFramebuffer fbo(mRenderedOfflineFaceFbo);
gl::ScopedGlslProg glsl(gl::getStockShader(gl::ShaderDef().texture()));
gl::ScopedTextureBind t0(mOfflineFaceTex, 0);
gl::clear(ColorA::black(), false);
gl::draw(mFaceMesh);
}
if (!MOVIE_MODE)
{
{
gl::ScopedFramebuffer fbo(mFaceMaskFbo);
gl::clear(ColorA::black(), false);
gl::draw(mFaceMesh);
}
// TODO: add gl::ScopedMatrices in mClone.update()
mClone.update(mRenderedOfflineFaceFbo->getColorTexture(), mCapture.texture, mFaceMaskFbo->getColorTexture());
mHasNewRenderedFace = true;
}
}
开发者ID:OpenAVR,项目名称:FaceVFX,代码行数:28,代码来源:FaceVFXApp.cpp
示例7: renderSceneToFbo
// Render our scene into the FBO (a cube)
void FboMultipleRenderTargetsApp::renderSceneToFbo()
{
// setup our camera to render our scene
CameraPersp cam( mFbo->getWidth(), mFbo->getHeight(), 60 );
cam.setPerspective( 60, mFbo->getAspectRatio(), 1, 1000 );
cam.lookAt( vec3( 2.8f, 1.8f, -2.8f ), vec3( 0 ) );
// bind our framebuffer in a safe way:
gl::ScopedFramebuffer fboScope( mFbo );
// clear out both of the attachments of the FBO with black
gl::clear();
// setup the viewport to match the dimensions of the FBO, storing the previous state
gl::ScopedViewport viewportScope( ivec2( 0 ), mFbo->getSize() );
// store matrices before updating for CameraPersp
gl::ScopedMatrices matScope;
gl::setMatrices( cam );
// set the modelview matrix to reflect our current rotation
gl::multModelMatrix( mRotation );
// render the torus with our multiple-output shader
gl::ScopedGlslProg glslScope( mGlslMultipleOuts );
gl::drawCube( vec3( 0 ), vec3( 2.2f ) );
}
开发者ID:ARTisERR0R,项目名称:Cinder,代码行数:28,代码来源:FboMultipleRenderTargetsApp.cpp
示例8: normalize
void NormalGetterApp::normalize(gl::TextureRef _tex){
{
gl::ScopedMatrices push;
gl::ScopedFramebuffer fbo(mOutputFbo);
gl::clear();
ci::gl::setMatricesWindow( mOutputFbo->getSize() );
ci::gl::ScopedViewport view( ci::vec2(0), mOutputFbo->getSize() );
gl::ScopedGlslProg mGlsl(mNormalGlsl);
gl::ScopedTextureBind tex0(_tex);
mNormalGlsl->uniform("uSampler", 0);
mNormalGlsl->uniform("u_textureSize", vec2(_tex->getWidth(), _tex->getHeight()));
mNormalGlsl->uniform("bias", bias);
mNormalGlsl->uniform("invertR", float(invertR ? -1.0 : 1.0) );
mNormalGlsl->uniform("invertG", float(invertG ? -1.0 : 1.0));
gl::drawSolidRect(Rectf(vec2(0), _tex->getSize()));
}
if( pushFramesToBuffer){
mPreprocessedImages->pushFront(std::make_pair(mOutputFbo->getColorTexture()->createSource(), currentFrame));
if(currentFrame == mMovie->getNumFrames()){
pushFramesToBuffer = false;
mMovie->setLoop(true);
mMovie->seekToStart();
}
currentFrame++;
}
}
开发者ID:dmelancon,项目名称:NormalGetter,代码行数:26,代码来源:NormalGetterApp.cpp
示例9: 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( vec3( 2.6f, 1.6f, -2.6f ), vec3( 0 ) );
gl::setMatrices( cam );
// use the scene we rendered into the FBO as a texture
mFbo->bindTexture();
// draw a cube textured with the FBO
{
gl::ScopedGlslProg shaderScp( gl::getStockShader( gl::ShaderDef().texture() ) );
gl::drawCube( vec3( 0 ), vec3( 2.2f ) );
}
// show the FBO color texture in the upper left corner
gl::setMatricesWindow( toPixels( getWindowSize() ) );
gl::draw( mFbo->getColorTexture(), Rectf( 0, 0, 128, 128 ) );
// and draw the depth texture adjacent
gl::draw( mFbo->getDepthTexture(), Rectf( 128, 0, 256, 128 ) );
}
开发者ID:Gsarault44,项目名称:Cinder,代码行数:26,代码来源:FboBasicApp.cpp
示例10: setup
void ciApp::setup()
{
setWindowSize(1280, 720);
setFrameRate(60.f);
int maxVertUniformsVect;
glGetIntegerv(GL_MAX_VERTEX_UNIFORM_VECTORS, &maxVertUniformsVect);
mSize = 0;
mSizePrev = -1;
mSizeMax = 17;
mAmplifier = 1.f;
mExposure = 1.f;
mGamma = 2.2f;
printf("max uniform: %i, %i\n", maxVertUniformsVect, mSizeMax);
mParams = params::InterfaceGl::create(getWindow(), "App parameters", ivec2(250, 300));
mParams->setPosition(ivec2(20, 250));
mTexture = gl::Texture::create(loadImage(loadFile(data_path + "demo.png")));
mFbo = gl::Fbo::create(mTexture->getWidth(), mTexture->getHeight(), gl::Fbo::Format().colorTexture());
//mShader.setup("filterGaussianBlur");
filter = hb::GlslFilter::create(mTexture->getSize());
filter->setParams(mParams);
vector_blur.setup(getWindowSize());
vector_blur.setParams(mParams);
spout_receiver = hb::Receiver::create("Spout DX11 Sender");
//spout_receiver = hbSpoutReceiver::create("KidsLandSea");
spout_sender = hb::Sender::create("cinder_spout", mFbo->getWidth(), mFbo->getHeight());
#if 0
auto ctx = audio::Context::master();
// The InputDeviceNode is platform-specific, so you create it using a special method on the Context:
mInputDeviceNode = ctx->createInputDeviceNode();
// By providing an FFT size double that of the window size, we 'zero-pad' the analysis data, which gives
// an increase in resolution of the resulting spectrum data.
auto monitorFormat = audio::MonitorSpectralNode::Format().fftSize(2048).windowSize(1024);
mMonitorSpectralNode = ctx->makeNode(new audio::MonitorSpectralNode(monitorFormat));
mInputDeviceNode >> mMonitorSpectralNode;
// InputDeviceNode (and all InputNode subclasses) need to be enabled()'s to process audio. So does the Context:
mInputDeviceNode->enable();
ctx->enable();
#endif
}
开发者ID:shinabebel,项目名称:ci_blocks,代码行数:53,代码来源:ciApp.cpp
示例11: draw
void NormalGetterApp::draw()
{
gl::clear( Color( 0, 0, 0 ) );
if(mFbo && mOutputFbo){
normalize(mFbo->getColorTexture());
gl::draw(mOutputFbo->getColorTexture());
}
// if(mFbo) gl::draw(mFbo->getColorTexture());
mStatus->draw();
mParams->draw();
}
开发者ID:dmelancon,项目名称:NormalGetter,代码行数:13,代码来源:NormalGetterApp.cpp
示例12: render
void PostProcessingAAApp::render()
{
// Bind the Fbo. Automatically unbinds it at the end of this function.
gl::ScopedFramebuffer fbo( mFboScene );
// Clear the buffer.
gl::clear( ColorA( 0, 0, 0, 0 ) );
gl::color( Color::white() );
// Render our scene.
gl::pushViewport( 0, 0, mFboScene->getWidth(), mFboScene->getHeight() );
mPistons.draw( mCamera, float( mTime ) );
gl::popViewport();
}
开发者ID:SuguruSasaki,项目名称:Cinder-Emscripten,代码行数:14,代码来源:PostProcessingAAApp.cpp
示例13: drawBlurredContent
void MotionBlurVelocityBufferApp::drawBlurredContent()
{
gl::ScopedTextureBind colorTex( mGBuffer->getTexture2d( G_COLOR ), 0 );
gl::ScopedTextureBind velTex( mGBuffer->getTexture2d( G_VELOCITY ), 1 );
gl::ScopedTextureBind neigborTex( mVelocityDilationBuffer->getTexture2d( DILATE_NEIGHBOR_MAX ), 2 );
gl::ScopedGlslProg prog( mMotionBlurProg );
gl::ScopedBlendPremult blend;
mMotionBlurProg->uniform( "uColorMap", 0 );
mMotionBlurProg->uniform( "uVelocityMap", 1 );
mMotionBlurProg->uniform( "uNeighborMaxMap", 2 );
mMotionBlurProg->uniform( "uNoiseFactor", mBlurNoise );
mMotionBlurProg->uniform( "uSamples", mSampleCount );
gl::drawSolidRect( getWindowBounds() );
}
开发者ID:cinder,项目名称:Cinder,代码行数:16,代码来源:MotionBlurVelocityBufferApp.cpp
示例14: draw
void TextParticlesApp::draw()
{
gl::clear( Color( 0, 0, 0 ) );
gl::color( 1, 1, 1 );
gl::enableAlphaBlending();
{
gl::ScopedMatrices scpMtrx;
// SET matrices so that by default, we are looking at a rect the size of the window
lookAtTexture( mCam, getWindowSize() );
gl::translate( mTextSize * vec2( -0.5 ) );
gl::ScopedDepth scpDepth( true );
// gl::ScopedColor scpColor( 1, 0, 0 );
// gl::drawStrokedRect( Rectf( 0, 0, mTextSize.x, mTextSize.y ) );
gl::color( Color::white() );
if( mActive ){
gl::ScopedGlslProg render( mRenderProg );
gl::ScopedVao vao( mAttributes[mSourceIndex] );
gl::context()->setDefaultShaderVars();
gl::drawArrays( GL_POINTS, 0, mTextParticleCount );
}else{
if( mString.length() > 0 )
gl::draw( mTextFbo->getColorTexture() );
}
}
mParams->draw();
}
开发者ID:gregkepler,项目名称:Cinder-Samples,代码行数:34,代码来源:TextParticlesApp.cpp
示例15: updateFbos
void NormalGetterApp::updateFbos(){
if( mMovie && !makeMovie){
if(!mFbo) mFbo = gl::Fbo::create(movieSize.x, movieSize.y);
if( !mOutputFbo) mOutputFbo = gl::Fbo::create(movieSize.x, movieSize.y);
if(mFbo){
gl::ScopedMatrices push;
gl::ScopedFramebuffer fbo(mFbo);
ci::gl::clear(ci::Color(0,0,0));
ci::gl::setMatricesWindow( mFbo->getSize() );
ci::gl::ScopedViewport view( ci::vec2(0), mFbo->getSize() );
gl::draw(mMovie->getTexture());
}
}
}
开发者ID:dmelancon,项目名称:NormalGetter,代码行数:17,代码来源:NormalGetterApp.cpp
示例16: draw
void ciApp::draw()
{
auto viewport = getWindowBounds();
gl::clear();
{
auto rect = Rectf(fbo->getBounds()).getCenteredFit(viewport, false);
gl::draw(fbo->getColorTexture(), rect);
}
if (is_debug_visible)
{
params->draw();
const gl::ScopedColor scpColor(Color::white());
auto tex = getInfoTexture(getAverageFps(), time_step, elapsed_time, time_value);
ivec2 pos(20, getWindowHeight() - tex->getHeight() - 20);
gl::draw(tex, pos);
}
}
开发者ID:shinabebel,项目名称:ciApp-Template,代码行数:20,代码来源:ciApp.cpp
示例17: draw
void FboMultipleRenderTargetsApp::draw()
{
gl::clear( Color::gray( 0.35f ) );
gl::setMatricesWindow( getWindowSize() );
// draw the two textures we've created side-by-side
auto tex0 = mFbo->getTexture2d( GL_COLOR_ATTACHMENT0 );
auto tex1 = mFbo->getTexture2d( GL_COLOR_ATTACHMENT1 );
gl::draw( tex0, tex0->getBounds() );
gl::draw( tex1, tex1->getBounds() + vec2( tex1->getWidth(), 0 ) );
}
开发者ID:ARTisERR0R,项目名称:Cinder,代码行数:12,代码来源:FboMultipleRenderTargetsApp.cpp
示例18: draw
void GpuParrallelReductionApp::draw()
{
gl::clear( Color( 0, 0, 0 ) );
gl::setMatricesWindow( getWindowSize() );
gl::draw( mFbo->getColorTexture() );
auto max = findMindMax();
gl::drawStringCentered( "Current Max value: " + toString( max ), getWindowCenter() - vec2( 0, 10 ) );
gl::drawStringCentered( "Reduction time " + to_string( mReductionTime ) + " ms", getWindowCenter() + vec2( 0, 12 ) );
gl::drawStringCentered( "Read back time " + to_string( mReadBackTime ) + " ms", getWindowCenter() + vec2( 0, 25 ) );
}
开发者ID:Craigson,项目名称:Cinder-Experiments,代码行数:12,代码来源:GpuParrallelReductionApp.cpp
示例19: dilateVelocity
void MotionBlurVelocityBufferApp::dilateVelocity()
{
gl::ScopedFramebuffer fbo( mVelocityDilationBuffer );
gl::ScopedViewport viewport( ivec2( 0, 0 ), mVelocityDilationBuffer->getSize() );
gl::ScopedMatrices matrices;
gl::setMatricesWindowPersp( mVelocityDilationBuffer->getSize() );
{ // downsample velocity into tilemax
gl::ScopedTextureBind tex( mGBuffer->getTexture2d( G_VELOCITY ), 0 );
gl::ScopedGlslProg prog( mTileProg );
gl::drawBuffer( DILATE_TILE_MAX );
mTileProg->uniform( "uVelocityMap", 0 );
mTileProg->uniform( "uTileSize", mTileSize );
gl::drawSolidRect( mVelocityDilationBuffer->getBounds() );
}
{ // build max neighbors from tilemax
gl::ScopedTextureBind tex( mVelocityDilationBuffer->getTexture2d( DILATE_TILE_MAX ), 0 );
gl::ScopedGlslProg prog( mNeighborProg );
gl::drawBuffer( DILATE_NEIGHBOR_MAX );
mNeighborProg->uniform( "uTileMap", 0 );
gl::drawSolidRect( mVelocityDilationBuffer->getBounds() );
}
}
开发者ID:cinder,项目名称:Cinder,代码行数:27,代码来源:MotionBlurVelocityBufferApp.cpp
示例20: setup
void ShadowMappingBasic::setup()
{
mLightPos = vec3( 0.0f, 5.0f, 1.0f );
gl::Texture2d::Format depthFormat;
#if defined( CINDER_GL_ES )
depthFormat.setInternalFormat( GL_DEPTH_COMPONENT16 );
#else
depthFormat.setInternalFormat( GL_DEPTH_COMPONENT32F );
depthFormat.setCompareMode( GL_COMPARE_REF_TO_TEXTURE );
#endif
depthFormat.setMagFilter( GL_LINEAR );
depthFormat.setMinFilter( GL_LINEAR );
depthFormat.setWrap( GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE );
depthFormat.setCompareFunc( GL_LEQUAL );
mShadowMapTex = gl::Texture2d::create( FBO_WIDTH, FBO_HEIGHT, depthFormat );
mCam.setPerspective( 40.0f, getWindowAspectRatio(), 0.5f, 500.0f );
gl::Fbo::Format fboFormat;
fboFormat.attachment( GL_DEPTH_ATTACHMENT, mShadowMapTex );
mFbo = gl::Fbo::create( FBO_WIDTH, FBO_HEIGHT, fboFormat );
// Set up camera from the light's viewpoint
mLightCam.setPerspective( 100.0f, mFbo->getAspectRatio(), 0.5f, 10.0f );
mLightCam.lookAt( mLightPos, vec3( 0.0f ) );
try {
#if defined( CINDER_GL_ES )
mGlsl = gl::GlslProg::create( loadAsset( "shadow_shader_es2.vert" ), loadAsset( "shadow_shader_es2.frag" ) );
#else
mGlsl = gl::GlslProg::create( loadAsset( "shadow_shader.vert" ), loadAsset( "shadow_shader.frag" ) );
#endif
}
catch ( Exception &exc ) {
CI_LOG_EXCEPTION( "glsl load failed", exc );
std::terminate();
}
auto teapot = geom::Teapot().subdivisions( 8 );
mTeapotBatch = gl::Batch::create( teapot, gl::getStockShader( gl::ShaderDef() ) );
mTeapotShadowedBatch = gl::Batch::create( teapot, mGlsl );
auto floor = geom::Cube().size( 10.0f, 0.5f, 10.0f );
mFloorBatch = gl::Batch::create( floor, gl::getStockShader( gl::ShaderDef() ) );
mFloorShadowedBatch = gl::Batch::create( floor, mGlsl );
gl::enableDepthRead();
gl::enableDepthWrite();
}
开发者ID:ARTisERR0R,项目名称:Cinder,代码行数:52,代码来源:ShadowMappingBasicApp.cpp
注:本文中的gl::FboRef类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论