| 383 | } |
| 384 | |
| 385 | void ViewportGL::PickTextureFrameBuffer::resize( const Vector2i& size ) |
| 386 | { |
| 387 | if ( size == Vector2i() || size == size_ ) |
| 388 | return; |
| 389 | del(); |
| 390 | size_ = size; |
| 391 | GL_EXEC( glGenFramebuffers( 1, &framebuffer_ ) ); |
| 392 | GL_EXEC( glBindFramebuffer( GL_FRAMEBUFFER, framebuffer_ ) ); |
| 393 | // create a color attachment texture |
| 394 | GL_EXEC( glGenTextures( 1, &colorTexture_ ) ); |
| 395 | GL_EXEC( glBindTexture( GL_TEXTURE_2D, colorTexture_ ) ); |
| 396 | GL_EXEC( glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA32UI, size_.x, size_.y, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, NULL ) ); |
| 397 | GL_EXEC( glBindTexture( GL_TEXTURE_2D, 0 ) ); |
| 398 | GL_EXEC( glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorTexture_, 0 ) ); |
| 399 | // create a renderbuffer object for depth |
| 400 | GL_EXEC( glGenRenderbuffers( 1, &renderbuffer_ ) ); |
| 401 | GL_EXEC( glBindRenderbuffer( GL_RENDERBUFFER, renderbuffer_ ) ); |
| 402 | GL_EXEC( glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, size_.x, size_.y ) ); // GL_DEPTH_COMPONENT32 is not supported by OpenGL ES 3.0 |
| 403 | GL_EXEC( glBindRenderbuffer( GL_RENDERBUFFER, 0 ) ); |
| 404 | GL_EXEC( glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer_ ) ); |
| 405 | assert( glCheckFramebufferStatus( GL_FRAMEBUFFER ) == GL_FRAMEBUFFER_COMPLETE ); |
| 406 | GL_EXEC( glBindFramebuffer( GL_FRAMEBUFFER, 0 ) ); |
| 407 | } |
| 408 | |
| 409 | void ViewportGL::PickTextureFrameBuffer::del() |
| 410 | { |