roo_e/thirdparty/grx249/test/polytest.c
2022-05-16 17:59:47 -05:00

148 lines
3.3 KiB
C

/**
** polytest.c ---- test polygon rendering
**
** Copyright (c) 1995 Csaba Biegl, 820 Stirrup Dr, Nashville, TN 37221
** [e-mail: csaba@vuse.vanderbilt.edu]
**
** This is a test/demo file of the GRX graphics library.
** You can use GRX test/demo files as you want.
**
** The GRX graphics library is free software; you can redistribute it
** and/or modify it under some conditions; see the "copying.grx" file
** for details.
**
** This library 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.
**
**/
#include <string.h>
#include <stdio.h>
#include "test.h"
static GrColor *EGA;
#define black EGA[0]
#define red EGA[12]
#define blue EGA[1]
#define white EGA[15]
static void testpoly(int n,int points[][2],int convex)
{
GrClearScreen(black);
GrPolygon(n,points,white);
GrFilledPolygon(n,points,(red | GrXOR));
GrKeyRead();
if(convex || (n <= 3)) {
GrClearScreen(black);
GrFilledPolygon(n,points,white);
GrFilledConvexPolygon(n,points,(red | GrXOR));
GrKeyRead();
}
}
static void speedtest(void)
{
int pts[4][2];
int ww = GrSizeX() / 10;
int hh = GrSizeY() / 10;
int sx = (GrSizeX() - 2*ww) / 32;
int sy = (GrSizeY() - 2*hh) / 32;
int ii,jj;
GrColor color;
long t1,t2,t3;
char msg[81];
GrClearScreen(black);
t1 = GrMsecTime();
pts[0][1] = 0;
pts[1][1] = hh;
pts[2][1] = 2*hh;
pts[3][1] = hh;
color = 0;
for(ii = 0; ii < 32; ii++) {
pts[0][0] = ww;
pts[1][0] = 2*ww;
pts[2][0] = ww;
pts[3][0] = 0;
for(jj = 0; jj < 32; jj++) {
GrFilledPolygon(4,pts, EGA[color] | GrXOR);
color = (color + 1) & 15;
pts[0][0] += sx;
pts[1][0] += sx;
pts[2][0] += sx;
pts[3][0] += sx;
}
pts[0][1] += sy;
pts[1][1] += sy;
pts[2][1] += sy;
pts[3][1] += sy;
}
t2 = GrMsecTime();
pts[0][1] = 0;
pts[1][1] = hh;
pts[2][1] = 2*hh;
pts[3][1] = hh;
color = 0;
for(ii = 0; ii < 32; ii++) {
pts[0][0] = ww;
pts[1][0] = 2*ww;
pts[2][0] = ww;
pts[3][0] = 0;
for(jj = 0; jj < 32; jj++) {
GrFilledConvexPolygon(4,pts, EGA[color] | GrXOR);
color = (color + 1) & 15;
pts[0][0] += sx;
pts[1][0] += sx;
pts[2][0] += sx;
pts[3][0] += sx;
}
pts[0][1] += sy;
pts[1][1] += sy;
pts[2][1] += sy;
pts[3][1] += sy;
}
t3 = GrMsecTime();
GrTextXY(0, 0, "Times to scan 1024 polygons", white, black);
sprintf(msg, " with 'GrFilledPolygon': %.2f (s)",
(double)(t2 - t1) / (double)1000);
GrTextXY(0, 18, msg, white, black);
sprintf(msg, " with 'GrFilledConvexPolygon': %.2f (s)",
(double)(t3 - t2) / (double)1000);
GrTextXY(0, 36, msg, white, black);
}
TESTFUNC(ptest)
{
char buff[300];
int pts[300][2];
int ii,collect;
int convex;
FILE *fp;
fp = fopen("polytest.dat","r");
if(fp == NULL) return;
EGA = GrAllocEgaColors();
ii = collect = convex = 0;
while(fgets(buff,299,fp) != NULL) {
if(!collect) {
if(strncmp(buff,"begin",5) == 0) {
convex = (buff[5] == 'c');
collect = 1;
ii = 0;
}
continue;
}
if(strncmp(buff,"end",3) == 0) {
testpoly(ii,pts,convex);
collect = 0;
continue;
}
if(sscanf(buff,"%d %d",&pts[ii][0],&pts[ii][1]) == 2) ii++;
}
fclose(fp);
speedtest();
GrKeyRead();
}