diff --git a/Graphics/gl2ps.cpp b/Graphics/gl2ps.cpp index 56018a27e5adf5b3be6fc1be3da2cb4348de8e3e..c08f7ee90855808fd9eecfa027657de32ddf969e 100644 --- a/Graphics/gl2ps.cpp +++ b/Graphics/gl2ps.cpp @@ -2,7 +2,7 @@ * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2002 Christophe Geuzaine * - * $Id: gl2ps.cpp,v 1.50 2002-09-06 19:19:49 geuzaine Exp $ + * $Id: gl2ps.cpp,v 1.51 2002-11-12 19:11:50 geuzaine Exp $ * * E-mail: geuz@geuz.org * URL: http://www.geuz.org/gl2ps/ @@ -37,7 +37,7 @@ GL2PScontext *gl2ps=NULL; /* Some 'system' utility routines */ -GLvoid gl2psMsg(GLint level, char *fmt, ...){ +void gl2psMsg(GLint level, char *fmt, ...){ va_list args; if(!(gl2ps->options & GL2PS_SILENT)){ @@ -54,8 +54,8 @@ GLvoid gl2psMsg(GLint level, char *fmt, ...){ if(level == GL2PS_ERROR) exit(1); } -GLvoid *gl2psMalloc(size_t size){ - GLvoid *ptr; +void *gl2psMalloc(size_t size){ + void *ptr; if(!size) return(NULL); ptr = malloc(size); @@ -63,21 +63,21 @@ GLvoid *gl2psMalloc(size_t size){ return(ptr); } -GLvoid *gl2psRealloc(GLvoid *ptr, size_t size){ +void *gl2psRealloc(void *ptr, size_t size){ if(!size) return(NULL); ptr = realloc(ptr, size); if(!ptr) gl2psMsg(GL2PS_ERROR, "Couldn't reallocate requested memory"); return(ptr); } -GLvoid gl2psFree(GLvoid *ptr){ +void gl2psFree(void *ptr){ if(!ptr) return; free(ptr); } /* The list handling routines */ -GLvoid gl2psListRealloc(GL2PSlist *list, GLint n){ +void gl2psListRealloc(GL2PSlist *list, GLint n){ if(n <= 0) return; if(!list->array){ list->nmax = ((n - 1) / list->incr + 1) * list->incr; @@ -106,12 +106,12 @@ GL2PSlist *gl2psListCreate(GLint n, GLint incr, GLint size){ return(list); } -GLvoid gl2psListDelete(GL2PSlist *list){ +void gl2psListDelete(GL2PSlist *list){ gl2psFree(list->array); gl2psFree(list); } -GLvoid gl2psListAdd(GL2PSlist *list, GLvoid *data){ +void gl2psListAdd(GL2PSlist *list, void *data){ list->n++; gl2psListRealloc(list, list->n); memcpy(&list->array[(list->n - 1) * list->size], data, list->size); @@ -121,27 +121,27 @@ GLint gl2psListNbr(GL2PSlist *list){ return(list->n); } -GLvoid *gl2psListPointer(GL2PSlist *list, GLint index){ +void *gl2psListPointer(GL2PSlist *list, GLint index){ if((index < 0) || (index >= list->n)) gl2psMsg(GL2PS_ERROR, "Wrong list index in gl2psListPointer"); return(&list->array[index * list->size]); } -GLvoid gl2psListSort(GL2PSlist *list, +void gl2psListSort(GL2PSlist *list, int (*fcmp)(const void *a, const void *b)){ qsort(list->array, list->n, list->size, fcmp); } -GLvoid gl2psListAction(GL2PSlist *list, - GLvoid (*action)(GLvoid *data, GLvoid *dummy)){ +void gl2psListAction(GL2PSlist *list, + void (*action)(void *data, void *dummy)){ GLint i, dummy; for(i=0 ; i<gl2psListNbr(list) ; i++) (*action)(gl2psListPointer(list, i), &dummy); } -GLvoid gl2psListActionInverse(GL2PSlist *list, - GLvoid (*action)(GLvoid *data, GLvoid *dummy)){ +void gl2psListActionInverse(GL2PSlist *list, + void (*action)(void *data, void *dummy)){ GLint i, dummy; for(i=gl2psListNbr(list) ; i>0 ; i--) @@ -161,7 +161,7 @@ GLfloat gl2psPsca(GLfloat *a, GLfloat *b){ return(a[0]*b[0] + a[1]*b[1] + a[2]*b[2]); } -GLvoid gl2psPvec(GLfloat *a, GLfloat *b, GLfloat *c){ +void gl2psPvec(GLfloat *a, GLfloat *b, GLfloat *c){ c[0] = a[1]*b[2] - a[2]*b[1]; c[1] = a[2]*b[0] - a[0]*b[2]; c[2] = a[0]*b[1] - a[1]*b[0]; @@ -171,7 +171,7 @@ GLfloat gl2psNorm(GLfloat *a){ return sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2]); } -GLvoid gl2psGetNormal(GLfloat *a, GLfloat *b, GLfloat *c){ +void gl2psGetNormal(GLfloat *a, GLfloat *b, GLfloat *c){ GLfloat norm; gl2psPvec(a, b, c); if(!GL2PS_ZERO(norm = gl2psNorm(c))){ @@ -183,7 +183,7 @@ GLvoid gl2psGetNormal(GLfloat *a, GLfloat *b, GLfloat *c){ gl2psMsg(GL2PS_WARNING, "Bad plane in BSP tree"); } -GLvoid gl2psGetPlane(GL2PSprimitive *prim, GL2PSplane plane){ +void gl2psGetPlane(GL2PSprimitive *prim, GL2PSplane plane){ GL2PSxyz v={0., 0., 0.}, w={0., 0., 0.}; switch(prim->type){ @@ -240,7 +240,7 @@ GLvoid gl2psGetPlane(GL2PSprimitive *prim, GL2PSplane plane){ } } -GLvoid gl2psCutEdge(GL2PSvertex *a, GL2PSvertex *b, GL2PSplane plane, +void gl2psCutEdge(GL2PSvertex *a, GL2PSvertex *b, GL2PSplane plane, GL2PSvertex *c){ GL2PSxyz v; GLfloat sect; @@ -260,7 +260,7 @@ GLvoid gl2psCutEdge(GL2PSvertex *a, GL2PSvertex *b, GL2PSplane plane, c->rgba[3] = (1.-sect) * a->rgba[3] + sect * b->rgba[3]; } -GLvoid gl2psCreateSplittedPrimitive(GL2PSprimitive *parent, GL2PSplane plane, +void gl2psCreateSplittedPrimitive(GL2PSprimitive *parent, GL2PSplane plane, GL2PSprimitive *child, GLshort numverts, GLshort *index0, GLshort *index1){ GLshort i; @@ -291,7 +291,7 @@ GLvoid gl2psCreateSplittedPrimitive(GL2PSprimitive *parent, GL2PSplane plane, } } -GLvoid gl2psAddIndex(GLshort *index0, GLshort *index1, GLshort *nb, +void gl2psAddIndex(GLshort *index0, GLshort *index1, GLshort *nb, GLshort i, GLshort j){ GLint k; @@ -396,7 +396,7 @@ GLint gl2psSplitPrimitive(GL2PSprimitive *prim, GL2PSplane plane, return type; } -GLvoid gl2psDivideQuad(GL2PSprimitive *quad, +void gl2psDivideQuad(GL2PSprimitive *quad, GL2PSprimitive **t1, GL2PSprimitive **t2){ *t1 = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); *t2 = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); @@ -474,7 +474,7 @@ GLint gl2psFindRoot(GL2PSlist *primitives, GL2PSprimitive **root){ } } -GLvoid gl2psFreePrimitive(GLvoid *a, GLvoid *b){ +void gl2psFreePrimitive(void *a, void *b){ GL2PSprimitive *q ; q = *(GL2PSprimitive**)a; @@ -487,7 +487,7 @@ GLvoid gl2psFreePrimitive(GLvoid *a, GLvoid *b){ gl2psFree(q); } -GLvoid gl2psAddPrimitiveInList(GL2PSprimitive *prim, GL2PSlist *list){ +void gl2psAddPrimitiveInList(GL2PSprimitive *prim, GL2PSlist *list){ GL2PSprimitive *t1, *t2; if(prim->type != GL2PS_QUADRANGLE){ @@ -502,7 +502,7 @@ GLvoid gl2psAddPrimitiveInList(GL2PSprimitive *prim, GL2PSlist *list){ } -GLvoid gl2psFreeBspTree(GL2PSbsptree *tree){ +void gl2psFreeBspTree(GL2PSbsptree *tree){ if(tree->back){ gl2psFreeBspTree(tree->back); gl2psFree(tree->back); @@ -527,7 +527,7 @@ GLboolean gl2psLess(GLfloat f1, GLfloat f2){ else return 0; } -GLvoid gl2psBuildBspTree(GL2PSbsptree *tree, GL2PSlist *primitives){ +void gl2psBuildBspTree(GL2PSbsptree *tree, GL2PSlist *primitives){ GL2PSprimitive *prim, *frontprim, *backprim; GL2PSlist *frontlist, *backlist; GLint i, index; @@ -586,9 +586,9 @@ GLvoid gl2psBuildBspTree(GL2PSbsptree *tree, GL2PSlist *primitives){ gl2psListDelete(primitives); } -GLvoid gl2psTraverseBspTree(GL2PSbsptree *tree, GL2PSxyz eye, GLfloat epsilon, +void gl2psTraverseBspTree(GL2PSbsptree *tree, GL2PSxyz eye, GLfloat epsilon, GLboolean (*compare)(GLfloat f1, GLfloat f2), - GLvoid (*action)(GLvoid *data, GLvoid *dummy)){ + void (*action)(void *data, void *dummy)){ GLfloat result; if(!tree) return; @@ -615,7 +615,7 @@ GLvoid gl2psTraverseBspTree(GL2PSbsptree *tree, GL2PSxyz eye, GLfloat epsilon, #define GL2PS_BOUNDARY_OFFSET 0 -GLvoid gl2psAddBoundaryInList(GL2PSprimitive *prim, GL2PSlist *list){ +void gl2psAddBoundaryInList(GL2PSprimitive *prim, GL2PSlist *list){ GL2PSprimitive *b; GLshort i; GL2PSxyz c; @@ -679,7 +679,7 @@ GLvoid gl2psAddBoundaryInList(GL2PSprimitive *prim, GL2PSlist *list){ } -GLvoid gl2psBuildPolygonBoundary(GL2PSbsptree *tree){ +void gl2psBuildPolygonBoundary(GL2PSbsptree *tree){ GLint i, n; GL2PSprimitive *prim; @@ -695,7 +695,7 @@ GLvoid gl2psBuildPolygonBoundary(GL2PSbsptree *tree){ /* The feedback buffer parser */ -GLvoid gl2psAddPolyPrimitive(GLshort type, GLshort numverts, +void gl2psAddPolyPrimitive(GLshort type, GLshort numverts, GL2PSvertex *verts, GLint offset, GLshort dash, GLfloat width, GLshort boundary){ @@ -800,7 +800,7 @@ GLint gl2psGetVertex(GL2PSvertex *v, GLfloat *p){ } } -GLint gl2psParseFeedbackBuffer(GLvoid){ +GLint gl2psParseFeedbackBuffer(void){ GLint i, used, count, v, vtot, offset=0; GLshort boundary, flag, dash=0; GLfloat lwidth=1., psize=1.; @@ -936,7 +936,7 @@ GLboolean gl2psVertsSameColor(const GL2PSprimitive *prim){ (gl2psPrintXXXHeader, gl2psPrintXXXPrimitive and gl2psPrintXXXFooter) for the new format. */ -GLvoid gl2psPrintPostScriptHeader(GLvoid){ +void gl2psPrintPostScriptHeader(void){ GLint viewport[4], index; GLfloat rgba[4]; time_t now; @@ -994,17 +994,22 @@ GLvoid gl2psPrintPostScriptHeader(GLvoid){ "%%%%BeginProlog\n" "/gl2psdict 64 dict def gl2psdict begin\n" "1 setlinecap 1 setlinejoin\n" + "/tryPS3shading %s def %% set to false to force subdivision\n" + "/rThreshold %g def %% red component subdivision threshold\n" + "/gThreshold %g def %% green component subdivision threshold\n" + "/bThreshold %g def %% blue component subdivision threshold\n" "/BD { bind def } bind def\n" "/C { setrgbcolor } BD\n" - "/G { 0.082 mul exch 0.6094 mul add exch 0.3086 mul add neg 1.0 add\n" - " setgray } BD\n" + "/G { 0.082 mul exch 0.6094 mul add exch 0.3086 mul add neg 1.0 add setgray } BD\n" "/W { setlinewidth } BD\n" "/FC { findfont exch scalefont setfont } BD\n" "/S { FC moveto show } BD\n" "/P { newpath 0.0 360.0 arc closepath fill } BD\n" "/L { newpath moveto lineto stroke } BD\n" "/SL { C moveto C lineto stroke } BD\n" - "/T { newpath moveto lineto lineto closepath fill } BD\n"); + "/T { newpath moveto lineto lineto closepath fill } BD\n", + (gl2ps->options & GL2PS_NO_PS3_SHADING) ? "false" : "true", + gl2ps->threshold[0], gl2ps->threshold[1], gl2ps->threshold[2]); /* Smooth-shaded triangle with PostScript level 3 shfill operator: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 STshfill */ @@ -1061,38 +1066,49 @@ GLvoid gl2psPrintPostScriptHeader(GLvoid){ /* stack : (V3) (V13) (V23) (V13) (V12) (V23) (V13) (V1) (V12) (V23) (V12) (V2) */ " STnoshfill STnoshfill STnoshfill STnoshfill } BD\n"); - /* Gourad shaded triangle using recursive subdivision until the difference + /* Gouraud shaded triangle using recursive subdivision until the difference between corner colors does not exceed the thresholds: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 STnoshfill */ fprintf(gl2ps->stream, "/STnoshfill {\n" - " 2 index 8 index sub abs %g gt { STsplit }\n" /* |r1-r2|>rth */ - " { 1 index 7 index sub abs %g gt { STsplit }\n" /* |g1-g2|>gth */ - " { dup 6 index sub abs %g gt { STsplit }\n" /* |b1-b2|>bth */ - " { 2 index 13 index sub abs %g gt { STsplit }\n" /* |r1-r3|>rht */ - " { 1 index 12 index sub abs %g gt { STsplit }\n" /* |g1-g3|>gth */ - " { dup 11 index sub abs %g gt { STsplit }\n" /* |b1-b3|>bth */ - " { 7 index 13 index sub abs %g gt { STsplit }\n" /* |r2-r3|>rht */ - " { 6 index 12 index sub abs %g gt { STsplit }\n" /* |g2-g3|>gth */ - " { 5 index 11 index sub abs %g gt { STsplit }\n" /* |b2-b3|>bth */ - " { Tm\n" /* all colors sufficiently similar */ - " } ifelse\n" - " } ifelse\n" - " } ifelse\n" - " } ifelse\n" - " } ifelse\n" - " } ifelse\n" - " } ifelse\n" - " } ifelse\n" - " } ifelse } BD\n", - gl2ps->threshold[0], gl2ps->threshold[1], gl2ps->threshold[2], - gl2ps->threshold[0], gl2ps->threshold[1], gl2ps->threshold[2], - gl2ps->threshold[0], gl2ps->threshold[1], gl2ps->threshold[2]); + " 2 index 8 index sub abs rThreshold gt\n" /* |r1-r2|>rth */ + " { STsplit }\n" + " { 1 index 7 index sub abs gThreshold gt\n" /* |g1-g2|>gth */ + " { STsplit }\n" + " { dup 6 index sub abs bThreshold gt\n" /* |b1-b2|>bth */ + " { STsplit }\n" + " { 2 index 13 index sub abs rThreshold gt\n" /* |r1-r3|>rht */ + " { STsplit }\n" + " { 1 index 12 index sub abs gThreshold gt\n" /* |g1-g3|>gth */ + " { STsplit }\n" + " { dup 11 index sub abs bThreshold gt\n" /* |b1-b3|>bth */ + " { STsplit }\n" + " { 7 index 13 index sub abs rThreshold gt\n" /* |r2-r3|>rht */ + " { STsplit }\n" + " { 6 index 12 index sub abs gThreshold gt\n" /* |g2-g3|>gth */ + " { STsplit }\n" + " { 5 index 11 index sub abs bThreshold gt\n" /* |b2-b3|>bth */ + " { STsplit }\n" + " { Tm }\n" /* all colors sufficiently similar */ + " ifelse }\n" + " ifelse }\n" + " ifelse }\n" + " ifelse }\n" + " ifelse }\n" + " ifelse }\n" + " ifelse }\n" + " ifelse }\n" + " ifelse } BD\n"); fprintf(gl2ps->stream, - (gl2ps->options & GL2PS_NO_PS3_SHADING) ? "/ST { STnoshfill } BD\n" : - "/shfill where { pop /ST { STshfill } BD } { /ST { STnoshfill } BD } ifelse\n"); + "tryPS3shading\n" + "{ /shfill where\n" + " { /ST { STshfill } BD }\n" + " { /ST { STnoshfill } BD }\n" + " ifelse }\n" + "{ /ST { STnoshfill } BD }\n" + "ifelse\n"); fprintf(gl2ps->stream, "end\n" @@ -1135,7 +1151,7 @@ GLvoid gl2psPrintPostScriptHeader(GLvoid){ } } -GLvoid gl2psPrintPostScriptColor(GL2PSrgba rgba){ +void gl2psPrintPostScriptColor(GL2PSrgba rgba){ if(!gl2psSameColor(gl2ps->lastrgba, rgba)){ gl2ps->lastrgba[0] = rgba[0]; gl2ps->lastrgba[1] = rgba[1]; @@ -1144,11 +1160,11 @@ GLvoid gl2psPrintPostScriptColor(GL2PSrgba rgba){ } } -GLvoid gl2psResetPostScriptColor(){ +void gl2psResetPostScriptColor(){ gl2ps->lastrgba[0] = gl2ps->lastrgba[1] = gl2ps->lastrgba[2] = -1.; } -GLvoid gl2psPrintPostScriptPrimitive(GLvoid *a, GLvoid *b){ +void gl2psPrintPostScriptPrimitive(void *a, void *b){ GL2PSprimitive *prim; prim = *(GL2PSprimitive**)a; @@ -1222,7 +1238,7 @@ GLvoid gl2psPrintPostScriptPrimitive(GLvoid *a, GLvoid *b){ } } -void gl2psPrintPostScriptFooter(GLvoid){ +void gl2psPrintPostScriptFooter(void){ fprintf(gl2ps->stream, "grestore\n" "showpage\n" @@ -1235,7 +1251,7 @@ void gl2psPrintPostScriptFooter(GLvoid){ /* The LaTeX routines. */ -GLvoid gl2psPrintTeXHeader(GLvoid){ +void gl2psPrintTeXHeader(void){ GLint viewport[4]; char name[256]; int i; @@ -1265,7 +1281,7 @@ GLvoid gl2psPrintTeXHeader(GLvoid){ viewport[2],viewport[3]); } -GLvoid gl2psPrintTeXPrimitive(GLvoid *a, GLvoid *b){ +void gl2psPrintTeXPrimitive(void *a, void *b){ GL2PSprimitive *prim; prim = *(GL2PSprimitive**)a; @@ -1280,7 +1296,7 @@ GLvoid gl2psPrintTeXPrimitive(GLvoid *a, GLvoid *b){ } } -void gl2psPrintTeXFooter(GLvoid){ +void gl2psPrintTeXFooter(void){ fprintf(gl2ps->stream, "\\end{picture}%s\n", (gl2ps->options & GL2PS_LANDSCAPE) ? "}" : ""); } @@ -1288,7 +1304,7 @@ void gl2psPrintTeXFooter(GLvoid){ /* The public routines */ -GL2PSDLL_API GLvoid gl2psBeginPage(char *title, char *producer, +GL2PSDLL_API void gl2psBeginPage(char *title, char *producer, GLint format, GLint sort, GLint options, GLint colormode, GLint colorsize, GL2PSrgba *colormap, GLint buffersize, @@ -1336,13 +1352,13 @@ GL2PSDLL_API GLvoid gl2psBeginPage(char *title, char *producer, glRenderMode(GL_FEEDBACK); } -GL2PSDLL_API GLint gl2psEndPage(GLvoid){ +GL2PSDLL_API GLint gl2psEndPage(void){ GL2PSbsptree *root; GL2PSxyz eye={0., 0., 100000.}; GLint shademodel, res; - void (*phead)(GLvoid) = 0; - void (*pprim)(GLvoid *a, GLvoid *b) = 0; - void (*pfoot)(GLvoid) = 0; + void (*phead)(void) = 0; + void (*pprim)(void *a, void *b) = 0; + void (*pfoot)(void) = 0; if(!gl2ps) gl2psMsg(GL2PS_ERROR, "Uninitialized gl2ps context"); @@ -1422,7 +1438,7 @@ GL2PSDLL_API GLint gl2psEndPage(GLvoid){ return res; } -GL2PSDLL_API GLvoid gl2psText(char *str, char *fontname, GLint fontsize){ +GL2PSDLL_API void gl2psText(char *str, char *fontname, GLint fontsize){ GLfloat pos[4]; GL2PSprimitive *prim; GLboolean valid; @@ -1458,7 +1474,7 @@ GL2PSDLL_API GLvoid gl2psText(char *str, char *fontname, GLint fontsize){ gl2psListAdd(gl2ps->primitives, &prim); } -GL2PSDLL_API GLvoid gl2psEnable(GLint mode){ +GL2PSDLL_API void gl2psEnable(GLint mode){ if(!gl2ps) return; switch(mode){ @@ -1479,7 +1495,7 @@ GL2PSDLL_API GLvoid gl2psEnable(GLint mode){ } } -GL2PSDLL_API GLvoid gl2psDisable(GLint mode){ +GL2PSDLL_API void gl2psDisable(GLint mode){ if(!gl2ps) return; switch(mode){ @@ -1498,21 +1514,21 @@ GL2PSDLL_API GLvoid gl2psDisable(GLint mode){ } } -GL2PSDLL_API GLvoid gl2psPointSize(GLfloat value){ +GL2PSDLL_API void gl2psPointSize(GLfloat value){ if(!gl2ps) return; glPassThrough(GL2PS_SET_POINT_SIZE); glPassThrough(value); } -GL2PSDLL_API GLvoid gl2psLineWidth(GLfloat value){ +GL2PSDLL_API void gl2psLineWidth(GLfloat value){ if(!gl2ps) return; glPassThrough(GL2PS_SET_LINE_WIDTH); glPassThrough(value); } -GL2PSDLL_API GLvoid gl2psNumShadeColors(GLint nr, GLint ng, GLint nb){ +GL2PSDLL_API void gl2psNumShadeColors(GLint nr, GLint ng, GLint nb){ if(!gl2ps) return; gl2ps->threshold[0] = nr ? 1./(GLfloat)nr : 1.; diff --git a/Graphics/gl2ps.h b/Graphics/gl2ps.h index fc1ec7c2e0dc600f426765c04b8eb0d26e1d6241..e6510f4cc949a1e3749f8259810655309769c3ed 100644 --- a/Graphics/gl2ps.h +++ b/Graphics/gl2ps.h @@ -2,7 +2,7 @@ * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2002 Christophe Geuzaine * - * $Id: gl2ps.h,v 1.28 2002-09-06 19:19:49 geuzaine Exp $ + * $Id: gl2ps.h,v 1.29 2002-11-12 19:11:50 geuzaine Exp $ * * E-mail: geuz@geuz.org * URL: http://www.geuz.org/gl2ps/ @@ -55,7 +55,7 @@ #endif /* __APPLE__ */ -#define GL2PS_VERSION 0.62 +#define GL2PS_VERSION 0.63 #define GL2PS_NONE 0 /* Output file format */ @@ -186,18 +186,18 @@ typedef struct { extern "C" { #endif -GL2PSDLL_API GLvoid gl2psBeginPage(char *title, char *producer, - GLint format, GLint sort, GLint options, - GLint colormode, GLint colorsize, - GL2PSrgba *colormap, GLint buffersize, - FILE *stream, char *filename); -GL2PSDLL_API GLint gl2psEndPage(GLvoid); -GL2PSDLL_API GLvoid gl2psText(char *str, char *fontname, GLint size); -GL2PSDLL_API GLvoid gl2psEnable(GLint mode); -GL2PSDLL_API GLvoid gl2psDisable(GLint mode); -GL2PSDLL_API GLvoid gl2psPointSize(GLfloat value); -GL2PSDLL_API GLvoid gl2psLineWidth(GLfloat value); -GL2PSDLL_API GLvoid gl2psNumShadeColors(GLint nr, GLint ng, GLint nb); +GL2PSDLL_API void gl2psBeginPage(char *title, char *producer, + GLint format, GLint sort, GLint options, + GLint colormode, GLint colorsize, + GL2PSrgba *colormap, GLint buffersize, + FILE *stream, char *filename); +GL2PSDLL_API GLint gl2psEndPage(void); +GL2PSDLL_API void gl2psText(char *str, char *fontname, GLint size); +GL2PSDLL_API void gl2psEnable(GLint mode); +GL2PSDLL_API void gl2psDisable(GLint mode); +GL2PSDLL_API void gl2psPointSize(GLfloat value); +GL2PSDLL_API void gl2psLineWidth(GLfloat value); +GL2PSDLL_API void gl2psNumShadeColors(GLint nr, GLint ng, GLint nb); #ifdef __cplusplus };