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();
}
示例#2
0
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" );
}
示例#3
0
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
}
示例#5
0
void Window::makeCurrent( const bool cache ) const
{
    if( cache && isCurrent( ))
        return;

    aglSetCurrentContext( _impl->aglContext );
    WindowIF::makeCurrent();

    if( _impl->aglContext )
    {
        EQ_GL_ERROR( "After aglSetCurrentContext" );
    }
}
示例#6
0
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 );
    }
}