void cFrameBufferFBO::Bind() { if ( mFrameBuffer ) { cGlobalBatchRenderer::instance()->Draw(); BindFrameBuffer(); BindRenderBuffer(); SetBufferView(); } }
void CTexture::Bind (void) { #if DBG if (int (m_info.handle) <= 0) return; #endif if (m_info.bRenderBuffer) BindRenderBuffer (); else ogl.BindTexture (m_info.handle); }
bool cFrameBufferFBO::Create( const Uint32& Width, const Uint32& Height, bool DepthBuffer ) { if ( !IsSupported() ) return false; if ( NULL == mWindow ) { mWindow = cEngine::instance()->GetCurrentWindow(); } mWidth = Width; mHeight = Height; mHasDepthBuffer = DepthBuffer; GLuint frameBuffer = 0; glGenFramebuffersEXT( 1, &frameBuffer ); mFrameBuffer = static_cast<Int32>( frameBuffer ); if ( !mFrameBuffer) return false; BindFrameBuffer(); if ( DepthBuffer ) { GLuint depth = 0; glGenRenderbuffersEXT( 1, &depth ); mDepthBuffer = static_cast<unsigned int>(depth); if ( !mDepthBuffer ) return false; BindRenderBuffer(); glRenderbufferStorageEXT( GL_RENDERBUFFER, GL_DEPTH_COMPONENT, Width, Height ); glFramebufferRenderbufferEXT( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mDepthBuffer ); } if ( NULL == mTexture ) { Uint32 TexId = cTextureFactory::instance()->CreateEmptyTexture( Width, Height, 4, eeColorA(0,0,0,0) ); if ( cTextureFactory::instance()->TextureIdExists( TexId ) ) { mTexture = cTextureFactory::instance()->GetTexture( TexId ); } else { return false; } } glFramebufferTexture2DEXT( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mTexture->Handle(), 0 ); if ( glCheckFramebufferStatusEXT( GL_FRAMEBUFFER ) != GL_FRAMEBUFFER_COMPLETE ) { glBindFramebufferEXT( GL_FRAMEBUFFER, mLastFB ); return false; } glBindFramebufferEXT( GL_FRAMEBUFFER, mLastFB ); return true; }