mirror of https://github.com/BOINC/boinc.git
Added basic functionality for passing graphics preferences between core and app
svn path=/trunk/boinc/; revision=100
This commit is contained in:
parent
9d6db62022
commit
a994fe0520
|
@ -394,3 +394,14 @@ Michael Gary June 07, 2002
|
|||
lib/
|
||||
parse.C
|
||||
|
||||
Eric Heien June 07, 2002
|
||||
- Added initial functionality for passing graphics preferences between core and app
|
||||
|
||||
client/
|
||||
Makefile.in
|
||||
app.C
|
||||
lib/
|
||||
gfx_interface.C
|
||||
gfx_interface.h
|
||||
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ OBJS = \
|
|||
speed_stats.o \
|
||||
time_stats.o \
|
||||
util.o \
|
||||
../lib/gfx_interface.o \
|
||||
../lib/parse.o \
|
||||
../lib/md5_file.o \
|
||||
../lib/md5.o
|
||||
|
|
16
client/app.C
16
client/app.C
|
@ -42,6 +42,7 @@
|
|||
#include "file_names.h"
|
||||
#include "log_flags.h"
|
||||
#include "parse.h"
|
||||
#include "gfx_interface.h"
|
||||
|
||||
#include "app.h"
|
||||
|
||||
|
@ -100,7 +101,16 @@ int ACTIVE_TASK::start(bool first_time) {
|
|||
FILE_REF file_ref;
|
||||
FILE_INFO* fip;
|
||||
int fd, retval;
|
||||
char prefs_path[256];
|
||||
FILE *prefs_fd;
|
||||
GFX_INTERFACE *gi = new GFX_INTERFACE;
|
||||
|
||||
gi->width = 640;
|
||||
gi->height = 480;
|
||||
gi->depth = 32;
|
||||
gi->fps = 5;
|
||||
gi->draw_offscreen = 1;
|
||||
gi->shared_mem_key = ftok(dirname, 'B'); // Generate a unique identifier
|
||||
|
||||
#ifdef unix
|
||||
pid = fork();
|
||||
|
@ -131,6 +141,12 @@ int ACTIVE_TASK::start(bool first_time) {
|
|||
}
|
||||
}
|
||||
|
||||
// Write out the app prefs
|
||||
sprintf( prefs_path, "%s/%s", dirname, "prefs.xml" );
|
||||
prefs_fd = fopen( prefs_path, "w" );
|
||||
gi->write_prefs(prefs_fd);
|
||||
fclose(prefs_fd);
|
||||
|
||||
// create symbolic links, and hook up descriptors, for input files
|
||||
//
|
||||
for (i=0; i<wup->input_files.size(); i++) {
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include "gfx_interface.h"
|
||||
#include "parse.h"
|
||||
|
||||
int GFX_INTERFACE::write_prefs(FILE *fout) {
|
||||
fprintf( fout,
|
||||
"<gfx_prefs>\n"
|
||||
" <gfx_width>%d</gfx_width>\n"
|
||||
" <gfx_height>%d</gfx_height>\n"
|
||||
" <gfx_depth>%d</gfx_depth>\n"
|
||||
" <gfx_fps>%f</gfx_fps>\n"
|
||||
" <gfx_shmem_key>%d</gfx_shmem_key>\n"
|
||||
"</gfx_prefs>",
|
||||
width, height, depth, fps, shared_mem_key
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int GFX_INTERFACE::parse(FILE* fin) {
|
||||
char buf[256];
|
||||
|
||||
fgets(buf, 256, fin);
|
||||
if (!match_tag(buf, "<gfx_prefs>")) {
|
||||
fprintf(stderr, "GFX_INTERFACE::parse(): bad first tag %s\n", buf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
while(fgets(buf,256,fin)) {
|
||||
if (match_tag(buf, "</gfx_prefs>")) return 0;
|
||||
else if (parse_int(buf, "<gfx_width>", width)) continue;
|
||||
else if (parse_int(buf, "<gfx_height>", height)) continue;
|
||||
else if (parse_int(buf, "<gfx_depth>", depth)) continue;
|
||||
else if (parse_double(buf, "<gfx_fps>", fps)) continue;
|
||||
else if (parse_int(buf, "<gfx_shmem_key>", shared_mem_key)) continue;
|
||||
else fprintf(stderr, "GFX_INTERFACE::parse(): unrecognized: %s\n", buf);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int GFX_INTERFACE::open_parse_prefs( void ) {
|
||||
FILE *prefs;
|
||||
int err;
|
||||
|
||||
prefs = fopen( "prefs.xml", "r" );
|
||||
if( prefs == NULL )
|
||||
return -1;
|
||||
|
||||
rewind( prefs );
|
||||
err = parse( prefs );
|
||||
fclose( prefs );
|
||||
|
||||
return err;
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
|
||||
#define DRAW_OFFSCREEN 0x01
|
||||
#define DRAW_ONSCREEN 0x02
|
||||
|
||||
// Status flags
|
||||
#define ERROR -1
|
||||
#define WAITING_FOR_APP 0
|
||||
#define APP_READY 1
|
||||
#define APP_REQUEST 2
|
||||
#define BUFFER_DIRTY 3
|
||||
#define BUFFER_CLEAN 4
|
||||
|
||||
#ifndef _GFX_INTERFACE
|
||||
#define _GFX_INTERFACE
|
||||
|
||||
struct GFX_INTERFACE {
|
||||
int width, height; // in pixels
|
||||
int depth; // in bits (8. 16, 24, etc)
|
||||
double fps; // max frames per second to draw (can be < 1)
|
||||
int draw_offscreen; // should we draw offscreen/onscreen/anything
|
||||
int shared_mem_key; // key for graphics shared memory region
|
||||
int offscreen_dirty; // is the offscreen buffer ready for blitting?
|
||||
|
||||
int status; // status of graphics rendering (see flags above)
|
||||
char *graphicsData;
|
||||
int shared_mem_allocated;
|
||||
|
||||
int write_prefs(FILE*);
|
||||
int parse(FILE*);
|
||||
int open_parse_prefs();
|
||||
};
|
||||
|
||||
#endif _GFX_INTERFACE
|
Loading…
Reference in New Issue