// Copyright 2003 Regents of the University of California // SETI_BOINC is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free // Software Foundation; either version 2, or (at your option) any later // version. // SETI_BOINC is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // more details. // You should have received a copy of the GNU General Public License along // with SETI_BOINC; see the file COPYING. If not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // In addition, as a special exception, the Regents of the University of // California give permission to link the code of this program with libraries // that provide specific optimized fast Fourier transform (FFT) functions and // distribute a linked executable. You must obey the GNU General Public // License in all respects for all of the code used other than the FFT library // itself. Any modification required to support these libraries must be // distributed in source code form. If you modify this file, you may extend // this exception to your version of the file, but you are not obligated to // do so. If you do not wish to do so, delete this exception statement from // your version. #include "boinc_api.h" #ifndef _WIN32 #ifdef BOINC_APP_GRAPHICS #include "graphics_api.h" #ifdef DYNAMIC_GRAPHICS #include "graphics_lib.h" #endif #endif #endif #include "gutil.h" #include "gdata.h" #include "graphics_data.h" #include "reduce.h" // the data for drawing a 3D graph // class GRAPH_BUFFER : public track_mem<GRAPHICS_BUFFER>,public GRAPHICS_BUFFER { public: REDUCED_ARRAY rarray; double grow_time; double hold_time; double start_time; void init(double grow, double hold); virtual void clear(); GRAPH_BUFFER() : track_mem<GRAPHICS_BUFFER>("GRAPHICS_BUFFER"),GRAPHICS_BUFFER(), rarray() { clear(); }; }; typedef enum { TEXT_STYLE_PILLARS, // panels delimited by cylinders TEXT_STYLE_PANELS, // rotating panels TEXT_STYLE_HEADSUP // 2D text in corners } TEXT_STYLE; // User's graphics-related per-project preferences for SETI@home // struct GRAPHICS_PREFS : public track_mem<GRAPHICS_PREFS> { TEXT_STYLE text_style; GRAPH_STYLE graph_style; double max_fps; // max frames per second double max_cpu; // max pct of CPU double hold_time, grow_time; // determine graph drawing timing double graph_alpha; double pitch_period; double pitch_range; // degrees double roll_period; double roll_range; int starfield_size; double starfield_speed; double start_hue, hue_change; // determine graph colors void parse_project_prefs(char*); void defaults(); GRAPHICS_PREFS() : track_mem<GRAPHICS_PREFS>("GRAPHICS_PREFS") { defaults(); }; }; class SAH_GRAPHICS_BASE: public track_mem<SAH_GRAPHICS_BASE>, public GRAPHICS_PREFS, public GDATA { public: double roll_angle; double roll_phase; double pitch_angle; double pitch_phase; STARFIELD starfield; TEXTURE_DESC seti_logo_texture; TEXTURE_DESC user_logo_texture; TEXTURE_DESC background_texture; APP_INIT_DATA app_init_data; GRAPHICS_DOUBLE_BUFFER dbuf; GRAPH_BUFFER buf1, buf2; double viewpoint_distance; int width, height; SAH_GRAPHICS_BASE(); void data_struct_init(); void graphics_thread_init(); void reread_prefs(); void setup_given_prefs(); void resize(int, int); void start_rotate(); void incr_rotate(double dt); void end_rotate(); void draw_pillars(); void render_logos(); void render_background(); void render_3d_graph(double time_of_day); GRAPH_BUFFER* get_generate_buffer(bool first); void generate_done(GRAPH_BUFFER*); }; extern void set_viewpoint(double); extern bool nographics();