Freeciv
Register
Advertisement
This is a historic page, please remove the {{historic}} tag if you plan to revive it.

FGL = Freeciv Graphics Layer

Uses SDL, OpenGL, libpng and freetype2.

Fonts in OpenGL is a nightmare. Here are our options as I see them:

- port GLFT to C ([1])
- port GLTT to C ([2])
- use polyfonts ([3])

.ini format[]

FGL reads all information about how to display and format a particular GUI control (called a 'feature') from an .ini theme file. Each feature has its own section, named [feature_<name of feature>_<screenx>_<screeny>], for example [feature_mapview_1024_768] will give you info on the mapview in the 1024x768 screen resolution.

API[]

/* These are window depths, to suggest which should
 * be drawn over which others. */
#define DEPTH_MIN               0
#define DEPTH_MAX               100

enum fgl_attribute {
  FGL_FPS,              /* frames per second */
  FGL_FULLSCREEN,       /* fullscreen mode or not */
  FGL_SWAP_CONTROL,     /* vertical refresh synchronization */
  FGL_DEBUG_MODE,       /* output fgl debug data to terminal */
  FGL_EDIT_MODE         /* TODO */
};

enum fgl_pattern {
  FGL_PATTERN_NONE,
  FGL_PATTERN_DASHED
};

typedef unsigned long fgl_color;
typedef GLint fgl_sprite;

struct fgl_feature;
struct fgl_pixmap {
  int w, h;
  unsigned char *pixels;
};

/* Specify name of theme file */
bool fgl_init(const char *datapath, const char *themefile);

/* TODO. Change theme while playing */
/* void fgl_reinit(const char *theme); */

/* Free stuff and quit. Garbage collect our images. */
void fgl_quit(void);

/* Main loop */
void fgl_main(void);

/* TODO. Save current setup as a new theme */
/* void fgl_save(const char *theme); */

/* A screen may have any number of features. A feature
 * can be anything that is specified in the configuration
 * file. */
struct fgl_feature *fgl_add_feature(const char *name);
void fgl_remove_feature(const char *name);

/* Various configuration options and hints */
void fgl_set_attribute(enum fgl_attribute, int value);
int fgl_get_attribute(enum fgl_attribute);

/* Load an image into an image buffer. */
struct fgl_pixmap *fgl_new_pixmap(const char *filename);
void fgl_free_pixmap(struct fgl_pixmap *gfx);

/* Create a texture sprite out of an existing image pixmap.  The
 * sprite will be stored in video memory as one or more power of
 * two size textures, padded with fully transparent pixels as
 * necessary. */
fgl_sprite fgl_sprite(struct fgl_pixmap *gfx, int x, int y,
                      int width, int height);

/* Drawing primitives ... unsure about this part of the API still - Per */
void fgl_rectangle(int x1, int y1, int x2, int y2,
                   fgl_color color, int width, fgl_pattern pattern);
void fgl_line(int x1, int y1, int x2, int y2,
              fgl_color color, int width, enum fgl_pattern pattern);
void fgl_pixmap(fgl_point pos, struct fgl_pixmap *gfx);
void fgl_drawing_end_func(void); /* private */
Advertisement