Beispiel #1
0
DirectFB::Util::FusionObjectWrapper<CoreSurfaceBuffer> &
SurfacePeer::getBuffer( int offset )
{
     D_DEBUG_AT( DirectFB_Graphics, "Graphics::SurfacePeer::%s( %p, offset %d ) <- surface %p\n", __FUNCTION__, this, offset, surface );

     u32 index;

     if (surface_config.caps & DSCAPS_STEREO) {
          D_ASSERT( buffer_num > 1 );

          index = ((flips + offset) % (buffer_num/2)) * 2;
     }
     else {
          D_ASSERT( buffer_num > 0 );

          index = (flips + offset) % buffer_num;
     }

     if (!buffer_objects[index]) {
          DFBResult          ret;
          CoreSurfaceBuffer *buffer;

          ret = ::CoreDFB_GetSurfaceBuffer( core_dfb, buffer_ids[index], &buffer );
          if (ret)
               D_DERROR( ret, "DirectFB/SurfacePeer: CoreDFB_GetSurfaceBuffer( 0x%x ) failed!\n", buffer_ids[index] );
          else {
               buffer_objects[index] = buffer;

               dfb_surface_buffer_unref( buffer );
          }
     }

     return buffer_objects[index];
}
Beispiel #2
0
void
page_flip_handler(int fd, unsigned int frame,
                  unsigned int sec, unsigned int usec, void *driver_data)
{
     MesaData          *mesa   = driver_data;
     CoreSurfaceBuffer *buffer = mesa->buffer;

     D_DEBUG_AT( Mesa_Layer, "%s()\n", __FUNCTION__ );

     dfb_surface_notify_display( buffer->surface, buffer );

     mesa->flip_pending = false;
     mesa->buffer       = NULL;

     dfb_surface_buffer_unref( buffer );
}