/* display_list.h
*
* By Byron C. Darrah
* 4/28/94, Thursday
*
* This module is for actually drawing a prepared list of polygons into a
* window on a screen.
*
* Here is a brief description of the exported display_list functions:
*
* o void disp_init(int *argc, char *argv[], int color);
*
* Initializes a display: Creates a window, allocates display memory, etc.
* ie: Does whatever is necessary to get ready to start displaying
* lists of polygons. If color is zero, monochrome operation will
* be enabled. Otherwise, color mode is used.
*
* o void disp_end(void);
*
* Destroys the display, frees resources, etc. This is called when no more
* rendering is to be performed.
*
* o void disp_polygons(polygon_node_t *pnodes);
*
* Draws polygons. pnodes is a list of polygons. The polygons are
* displayed from first to last, until a polygon key value of 0.0 is
* encountered. This allows render1 to use the painter's algorithm of
* hidden line removal. ie: Before disp_polygons is called, the polygon
* list is sorted so that farther-away polygons are closer to the head of
* the list.
*
* o void disp_sync(void);
*
* Pauses execution until graphics processing requests have completed.
*
* o void disp_freeze(void);
*
* Pauses the display, so that it may be examined at length by the user.
* At the moment, this is for debugging purposes, and is not guranteed to
* ever return.
*
* o void disp_setsize(unsigned short width, unsigned short height);
*
* Change the scale of the image. This involves updating some global
* variables and reallocating some image memory. This does not
* automatically change the window size, but does change how display
* operations behave.
*
* o void disp_getsize(unsigned short *width, unsigned short *height);
*
* Queries the size of the output window, and returns it's dimentions
* in the output parameters width and height.
*/
#include "render1.h"
#ifdef DISPLAY_LIST_MODULE
#define DISP_EXTERN
#else
#define DISP_EXTERN extern
#endif
/* Define the display size. (This is non-adjustable at runtime, for now) */
DISP_EXTERN unsigned short Gfx_Width;
DISP_EXTERN unsigned short Gfx_Height;
/* Define the "origin" offset: ie: we want (0,0) to translate to (52, 40),
* which is the middle of the display.
*/
DISP_EXTERN unsigned short Gfx_X_Origin;
DISP_EXTERN unsigned short Gfx_Y_Origin;
/* The display_list module will set "recommended" scaling factors */
DISP_EXTERN float disp_x_scale;
DISP_EXTERN float disp_y_scale;
/* Here is the structure for the nodes of the aggregate polygon list */
typedef struct aggregate_pgn_struct
{
struct aggregate_pgn_struct *next;
struct aggregate_pgn_struct *prev;
polygon_t *polygon;
float k; /* Sort-key for the aggregate list */
} polygon_node_t;
/* These four functions are exported to the renderer. */
void disp_init(int *argc, char *argv[], int color);
void disp_end(void);
void disp_polygons(polygon_node_t *pnodes);
void disp_sync(void);
int disp_freeze(unsigned long interval);
void disp_bell(void);
void disp_setsize(unsigned short width, unsigned short height);
void disp_getsize(unsigned short *width, unsigned short *height);
syntax highlighted by Code2HTML, v. 0.9.1