void CompressorReadDrawPixels::finishDownload( const GLEWContext* glewContext, const eq_uint64_t inDims[4], const eq_uint64_t flags, eq_uint64_t outDims[4], void** out ) { _copy4( outDims, inDims ); #ifdef EQ_ASYNC_PBO if( (flags&EQ_COMPRESSOR_USE_FRAMEBUFFER) && _pbo && _pbo->isInitialized( )) { const eq_uint64_t size = inDims[1] * inDims[3] * _depth; _resizeBuffer( size ); const void* ptr = _pbo->mapRead(); if( ptr ) memcpy( _buffer.getData(), ptr, size ); else { LBERROR << "Can't map PBO: " << _pbo->getError()<< std::endl; EQ_GL_ERROR( "PixelBufferObject::mapRead()" ); } _pbo->unmap(); } #else // async RB through texture if( flags & EQ_COMPRESSOR_USE_FRAMEBUFFER ) { LBASSERT( _asyncTexture ); _asyncTexture->setGLEWContext( glewContext ); _asyncTexture->download( _buffer.getData( )); } #endif *out = _buffer.getData(); }
void Texture::copyFromFrameBuffer( const GLuint internalFormat, const fabric::PixelViewport& pvp ) { EQ_GL_ERROR( "before Texture::copyFromFrameBuffer" ); LB_TS_THREAD( _thread ); _generate(); _setInternalFormat( internalFormat ); _grow( pvp.w, pvp.h ); if( _impl->defined ) glBindTexture( _impl->target, _impl->name ); else resize( _impl->width, _impl->height ); glCopyTexSubImage2D( _impl->target, 0, 0, 0, pvp.x, pvp.y, pvp.w, pvp.h ); EQ_GL_ERROR( "after Texture::copyFromFrameBuffer" ); }
void Window::makeCurrent() const { EQASSERT( _xDisplay ); glXMakeCurrent( _xDisplay, _xDrawable, _glXContext ); WindowIF::makeCurrent(); if( _glXContext ) { EQ_GL_ERROR( "After glXMakeCurrent" ); } }
void AccumBufferObject::load( const GLfloat value ) { EQ_GL_ERROR( "before AccumBufferObject::load" ); _texture->copyFromFrameBuffer( _texture->getInternalFormat(), _pvp ); const PixelViewport pvp( 0, 0, getWidth(), getHeight( )); _setup( pvp ); _drawQuadWithTexture( _texture, pvp, value ); _reset(); EQ_GL_ERROR( "after AccumBufferObject::load" ); #if 0 static a_int32_t i; std::ostringstream os; os << "abo" << ++i; getColorTextures()[0]->writeRGB( os.str( )); os << "tex"; _texture->writeRGB( os.str( )); #endif }
void Window::makeCurrent( const bool cache ) const { if( cache && isCurrent( )) return; aglSetCurrentContext( _impl->aglContext ); WindowIF::makeCurrent(); if( _impl->aglContext ) { EQ_GL_ERROR( "After aglSetCurrentContext" ); } }
void Window::makeCurrent( const bool cache ) const { LBASSERT( _impl->xDisplay ); if( cache && isCurrent( )) return; glXMakeCurrent( _impl->xDisplay, _impl->xDrawable, _impl->glXContext ); WindowIF::makeCurrent(); if( _impl->glXContext ) { EQ_GL_ERROR( "After glXMakeCurrent" ); } }
Error FrameBufferObject::_checkStatus() { _valid = false; const GLenum status = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT ); switch( status ) { case GL_FRAMEBUFFER_COMPLETE_EXT: _valid = true; return Error( ERROR_NONE ); case 0: // error?! EQ_GL_ERROR( "glCheckFramebufferStatusEXT" ); return Error( ERROR_FRAMEBUFFER_STATUS ); case GL_FRAMEBUFFER_UNSUPPORTED_EXT: return Error( ERROR_FRAMEBUFFER_UNSUPPORTED ); case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: return Error( ERROR_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT ); case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: return Error( ERROR_FRAMEBUFFER_INCOMPLETE_ATTACHMENT ); case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: return Error( ERROR_FRAMEBUFFER_INCOMPLETE_DIMENSIONS ); case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: return Error( ERROR_FRAMEBUFFER_INCOMPLETE_FORMATS ); case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: return Error( ERROR_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER ); case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: return Error( ERROR_FRAMEBUFFER_INCOMPLETE_READ_BUFFER ); default: LBWARN << "Unhandled frame buffer status 0x" << std::hex << status << std::dec << std::endl; return Error( ERROR_FRAMEBUFFER_STATUS ); } }