int main( int argc, char *argv[] ) { DFBResult ret; DFBSurfaceDescription desc; IDirectFB *dfb; IDirectFBSurface *surface; IWater *water; D_INFO( "Tests/Water: Starting up...\n" ); /* Initialize DirectFB including command line parsing. */ ret = DirectFBInit( &argc, &argv ); if (ret) { DirectFBError( "DirectFBInit() failed", ret ); return -1; } /* Parse the command line. */ if (!parse_command_line( argc, argv )) return -2; /* Create the super interface. */ ret = DirectFBCreate( &dfb ); if (ret) { DirectFBError( "DirectFBCreate() failed", ret ); return -3; } /* Fill surface description, flipping primary. */ desc.flags = DSDESC_CAPS; desc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING; /* Set width or height? */ if (m_width > 0) { desc.flags |= DSDESC_WIDTH; desc.width = m_width; } if (m_height > 0) { desc.flags |= DSDESC_HEIGHT; desc.height = m_height; } /* Set pixel format? */ if (m_format != DSPF_UNKNOWN) { desc.flags |= DSDESC_PIXELFORMAT; desc.pixelformat = m_format; } dfb->SetCooperativeLevel( dfb, DFSCL_FULLSCREEN ); /* Create a primary surface. */ ret = dfb->CreateSurface( dfb, &desc, &surface ); if (ret) { D_DERROR( ret, "IDirectFB::CreateSurface() failed!\n" ); dfb->Release( dfb ); return -4; } /* Get the extended rendering interface. */ ret = dfb->GetInterface( dfb, "IWater", NULL, dfb, (void**) &water ); if (ret) { DirectFBError( "IDirectFB::GetInterface( 'IWater' ) failed", ret ); surface->Release( surface ); dfb->Release( dfb ); return -5; } D_INFO( "Tests/Water: Got render interface, running tests...\n" ); RunTest( Test_Simple, water, surface ); RunTest( Test_RenderElement, water, surface ); RunTest( Test_RenderElements, water, surface ); RunTest( Test_RenderShape, water, surface ); RunTest( Test_RenderShapes, water, surface ); D_INFO( "Tests/Water: Dumping surface...\n" ); unlink( "dfbrender.pgm" ); unlink( "dfbrender.ppm" ); surface->Dump( surface, "dfbrender", NULL ); D_INFO( "Tests/Water: Shutting down...\n" ); /* Release the render interface. */ water->Release( water ); /* Release the surface. */ surface->Release( surface ); /* Release the super interface. */ dfb->Release( dfb ); return EXIT_SUCCESS; }