<title>The BOINC graphics API</title> <body bgcolor=ffffff> <h2>The BOINC graphics API</h2> <p> Applications can optionally generate graphics, which are displayed either in an application window, or in full-screen mode (screensaver). <p> If an application is able to generate graphics, it should call <pre> void boinc_init_opengl(); </pre> at the start and <pre> void boinc_finish_opengl(); </pre> at the end. It must also supply a function <pre> bool app_render(int xs, ys, double time_of_day); </pre> which will be called periodically. This should make openGL calls to generate the current graphic. <tt>xs</tt> and <tt>ys</tt> are the X and Y sizes of the window, and <tt>time_of_day</tt> is the relative time. The function should return true if it actually drew anything. It can refer to the user name, CPU time etc. obtained from <tt>boinc_init()</tt>. <p> <b>Give example here</b> <p> Applications that don't do graphics must also supply a dummy <tt>app_render</tt> to link with the API. <tt>boinc_draw_gl</tt> is called to draw graphics <hr> <h3>Implementation</h3> <p> The graphics API uses a file <b>graphics.xml</b> that is created and occasionally modified by the core client or screensaver. This file has the format <pre> <graphics_info> <do_graphics/> <xsize>500</xsize> <ysize>400</ysize> <full_screen/> </graphics_info> </pre> <p> The graphics API implementation uses a 60 Hz timer. Every 0.5 sec, it sees if graphics.xml has been modified, and if so parses it. Every 1/60 sec, it sees if it's time for a new frame, and if so calls <tt>app_render()</tt>.