2003-08-19 06:44:58 +00:00
|
|
|
<?
|
|
|
|
require_once("docutil.php");
|
|
|
|
page_head("The BOINC graphics API");
|
|
|
|
echo"
|
2002-04-30 22:22:54 +00:00
|
|
|
<p>
|
2003-11-02 23:08:06 +00:00
|
|
|
BOINC applications can optionally generate graphics.
|
|
|
|
Graphics are displayed either in an application window
|
|
|
|
or in a full-screen window (when acting as a screensaver).
|
|
|
|
Applications that do graphics must call
|
2002-07-31 05:59:43 +00:00
|
|
|
<pre>
|
2003-11-02 23:08:06 +00:00
|
|
|
void boinc_init_graphics();
|
2002-07-31 05:59:43 +00:00
|
|
|
</pre>
|
|
|
|
at the start and
|
2002-07-30 18:06:39 +00:00
|
|
|
<pre>
|
2002-07-31 05:59:43 +00:00
|
|
|
void boinc_finish_opengl();
|
2002-07-30 18:06:39 +00:00
|
|
|
</pre>
|
2003-11-02 23:08:06 +00:00
|
|
|
prior to exiting.
|
|
|
|
<p>
|
|
|
|
The main application thread is called the <b>worker thread</b>.
|
|
|
|
<code>boinc_init_graphics()</code> creates a second thread,
|
|
|
|
called the <b>graphics thread</b>.
|
|
|
|
The two threads communicate through application-defined
|
|
|
|
shared memory structures.
|
|
|
|
Typically these structures contain information about the computation,
|
|
|
|
which is used to generate graphics.
|
|
|
|
<img vspace=10 src=graphics.png>
|
|
|
|
<br>
|
|
|
|
The worker must initialize the shared data structure
|
|
|
|
before calling <code>boinc_init_graphics()</code>.
|
|
|
|
<p>
|
|
|
|
Graphical applications must supply the following functions:
|
2002-07-30 18:06:39 +00:00
|
|
|
<pre>
|
2003-11-02 23:08:06 +00:00
|
|
|
bool app_graphics_render(int xs, ys, double time_of_day);
|
2002-07-30 18:06:39 +00:00
|
|
|
</pre>
|
2003-11-02 23:08:06 +00:00
|
|
|
This will be called periodically in the graphics thread.
|
|
|
|
It should generate the current graphic.
|
|
|
|
<code>xs</code> and <code>ys</code> are the X and Y sizes of the window,
|
2003-10-15 17:14:58 +00:00
|
|
|
and <tt>time_of_day</tt> is the relative time in seconds.
|
2002-07-31 05:59:43 +00:00
|
|
|
The function should return true if it actually drew anything.
|
|
|
|
It can refer to the user name, CPU time etc. obtained from
|
2003-11-02 23:08:06 +00:00
|
|
|
<code>boinc_get_init_data()</code>.
|
2002-07-31 05:59:43 +00:00
|
|
|
Applications that don't do graphics must also supply a
|
2003-11-02 23:08:06 +00:00
|
|
|
dummy <code>app_graphics_render()</code> to link with the API.
|
|
|
|
<pre>
|
|
|
|
void app_graphics_init();
|
|
|
|
</pre>
|
|
|
|
This is called in the graphics thread when a window is created.
|
|
|
|
It must make any calls needed to initialize graphics in the window.
|
|
|
|
<pre>
|
|
|
|
void app_graphics_resize(int x, int y);
|
|
|
|
</pre>
|
|
|
|
Called when the window size changes.
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
void app_graphics_reread_prefs();
|
|
|
|
</pre>
|
|
|
|
This is called, in the graphics thread, whenever
|
|
|
|
the user's project preferences change.
|
|
|
|
It can call
|
|
|
|
<pre>
|
|
|
|
boinc_parse_init_data_file();
|
|
|
|
boinc_get_init_data(APP_INIT_DATA&);
|
|
|
|
</pre>
|
|
|
|
to get the new preferences.
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
|
|
|
<h3>Limiting frame rate</h3>
|
2003-10-15 17:14:58 +00:00
|
|
|
<p>
|
|
|
|
The following global variables control frame rate:
|
|
|
|
<p>
|
|
|
|
<b>boinc_max_fps</b> is an upper bound on the number of frames per second
|
|
|
|
(default 30).
|
|
|
|
<p>
|
|
|
|
<b>boinc_max_gfx_cpu_frac</b> is an upper bound on the fraction
|
|
|
|
of CPU time used for graphics (default 0.5).
|
2003-11-02 23:08:06 +00:00
|
|
|
|
2003-08-19 06:44:58 +00:00
|
|
|
";
|
|
|
|
page_tail();
|
|
|
|
?>
|