Files
glide/glide2x/cvg/glide/tests/h3dtst01.c
sezero 661f489f88 tests: conio.h or linutil.h includes are not needed
kbhit() and getch() are called from tlib
2018-08-23 14:33:50 +03:00

198 lines
4.7 KiB
C

/*
** THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
** PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
** TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
** INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
** DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
** THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
** EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
** FULL TEXT OF THE NON-WARRANTY PROVISIONS.
**
** USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
** RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
** AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
** SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
** THE UNITED STATES.
**
** COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
**
*/
#ifdef _WIN32
#include <windows.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <time.h>
#include <glide.h>
#include "tlib.h"
#define H3D_RED 0x000000ff
#define H3D_GREEN 0x0000ff00
#define H3D_YELLOW 0x0000ffff
#define H3D_BLACK 0x00000000
GrHwConfiguration hwconfig;
static char version[80];
static int scrWidth, scrHeight, boxwidth, boxheight, origin;
void init(void) {
GrState state;
grGlideGetState(&state);
grColorCombine( GR_COMBINE_FUNCTION_LOCAL, GR_COMBINE_FACTOR_NONE,
GR_COMBINE_LOCAL_CONSTANT, GR_COMBINE_OTHER_NONE, FXFALSE );
grColorMask(FXTRUE,0); // make sure color buf is on
grDepthBufferFunction( GR_CMP_ALWAYS );
grBufferClear( 0x00, 0, GR_ZDEPTHVALUE_FARTHEST );
grGlideSetState(&state);
}
void drawBoxes(int w, int h, unsigned long c1, unsigned long c2) {
GrVertex p1,p2,p3,p4;
p1.x = 1.f;
p1.y = 1.f;
p2.x = (float)w;
p2.y = 1.f;
p3.x = 1.f;
p3.y = (float)h;
p4.x = (float)w;
p4.y = (float)h;
grConstantColorValue( c1 );
grDrawLine(&p1,&p2);
grDrawLine(&p1,&p3);
grDrawLine(&p3,&p4);
grDrawLine(&p2,&p4);
grDrawLine(&p1,&p4);
grDrawLine(&p2,&p3);
p1.y += origin;
p2.y += origin;
p3.y += origin;
p4.y += origin;
grConstantColorValue( c2 );
grDrawLine(&p1,&p2);
grDrawLine(&p1,&p3);
grDrawLine(&p3,&p4);
grDrawLine(&p2,&p4);
grDrawLine(&p1,&p4);
grDrawLine(&p2,&p3);
}
int main( int argc, char **argv) {
int keepworking = 1;
GrScreenResolution_t resolution;
int redraw = 1;
int redrawPattern = 0;
int patternon = 1;
#ifdef H3D
resolution = GR_RESOLUTION_640x240_AUTOFLIPPED;
#else
resolution = GR_RESOLUTION_640x480;
#endif
/* Initialize Glide */
grGlideInit();
grGlideGetVersion( version );
grSstQueryHardware( &hwconfig );
grSstSelect( 0 );
if ( grSstWinOpen( 0, resolution, GR_REFRESH_60Hz, GR_COLORFORMAT_ABGR, GR_ORIGIN_UPPER_LEFT, 2,1 ) ) {
grColorCombine( GR_COMBINE_FUNCTION_LOCAL,
GR_COMBINE_FACTOR_NONE,
GR_COMBINE_LOCAL_CONSTANT,
GR_COMBINE_OTHER_NONE,
FXFALSE );
} else {
keepworking = 0;
}
grRenderBuffer( GR_BUFFER_BACKBUFFER );
scrWidth = grSstScreenWidth();
scrHeight = grSstScreenHeight();
origin = (int)scrHeight-240; // top of right eye buffer
boxheight = (int)240;
boxwidth = (int)scrWidth;
while( keepworking) {
while( tlKbHit() ) {
switch( tlGetCH() ) {
case '=' :
case '+' :
// move origin of 2nd page causes both box heights to resize
if (origin < (scrHeight-1.f))
{
origin++;
boxheight--;
redraw = 1;
}
break;
case '_':
case '-' :
if (origin > ((scrHeight/2)-1.f))
{
origin--;
boxheight++;
redraw = 1;
}
break;
case '.' :
// move origin of 2nd page causes both box heights to resize
if (origin < (scrHeight-1.f))
{
origin++;
boxheight--;
}
break;
case ',' :
if (origin > ((scrHeight/2)-1.f))
{
origin--;
boxheight++;
}
break;
case 'p':
patternon ^= 1;
redrawPattern = 1;
break;
case 'q':
keepworking = 0;
break;
case ' ':
redraw = 1;
default:
break;
}
}
if (redraw) {
grColorMask(FXTRUE,0);
grBufferClear( 0, 0, 0 );
drawBoxes(boxwidth,boxheight,H3D_RED,H3D_YELLOW);
redraw = 0;
grBufferSwap( 1 );
} else if (redrawPattern) {
#ifdef H3D
grHints(GR_HINT_H3DENABLE,patternon); // set the pattern on or off
#endif
redrawPattern = 0;
}
}
grGlideShutdown();
exit(0);
}