2025-04-27 07:49:33 -04:00

273 lines
5.7 KiB
C

/*
** Copyright 1992, Silicon Graphics, Inc.
** All Rights Reserved.
**
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
** the contents of this file may not be disclosed to third parties, copied or
** duplicated in any form, in whole or in part, without the prior written
** permission of Silicon Graphics, Inc.
**
** RESTRICTED RIGHTS LEGEND:
** 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.
*/
#include <windows.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include "ctk.h"
#include "shell.h"
long verbose;
GLUnurbsObj *nurbObj;
GLUtriangulatorObj *tessObj;
GLUquadricObj *quadObj;
void Output(char *format, ...)
{
va_list args;
va_start(args, format);
if (verbose) {
vprintf(format, args);
fflush(stdout);
}
va_end(args);
}
void ProbeEnum(void)
{
if (glGetError() == GL_INVALID_ENUM) {
printf("covglu failed.\n\n");
tkQuit();
}
}
void ProbeError(void (*Func)(void))
{
(*Func)();
if (glGetError() != GL_NO_ERROR) {
printf("covglu failed.\n\n");
tkQuit();
}
}
void ZeroBuf(GLenum type, long size, void *buf)
{
long i;
switch (type) {
case GL_UNSIGNED_BYTE:
{
GLubyte *ptr = (GLubyte *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_BYTE:
{
GLbyte *ptr = (GLbyte *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_UNSIGNED_SHORT:
{
GLushort *ptr = (GLushort *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_SHORT:
{
GLshort *ptr = (GLshort *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_UNSIGNED_INT:
{
GLuint *ptr = (GLuint *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_INT:
{
GLint *ptr = (GLint *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_FLOAT:
{
GLfloat *ptr = (GLfloat *)buf;
for (i = 0; i < size; i++) {
*ptr++ = (GLfloat)0;
}
}
break;
}
}
void DoTests(void)
{
VerifyEnums();
ProbeError(CallScaleImage);
ProbeError(CallBuild1DMipmaps);
ProbeError(CallBuild2DMipmaps);
ProbeError(CallNewTess);
ProbeError(CallTessCallback);
ProbeError(CallBeginPolygon);
ProbeError(CallTessVertex);
ProbeError(CallNextContour);
ProbeError(CallEndPolygon);
ProbeError(CallDeleteTess);
ProbeError(CallNewQuadric);
ProbeError(CallQuadricCallback);
ProbeError(CallQuadricDrawStyle);
ProbeError(CallQuadricOrientation);
ProbeError(CallQuadricNormals);
ProbeError(CallQuadricTexture);
ProbeError(CallSphere);
ProbeError(CallCylinder);
ProbeError(CallDisk);
ProbeError(CallPartialDisk);
ProbeError(CallDeleteQuadric);
ProbeError(CallNewNurbsRenderer);
ProbeError(CallNurbsCallback);
ProbeError(CallGetNurbsProperty);
ProbeError(CallBeginSurface);
ProbeError(CallBeginCurve);
ProbeError(CallNurbsCurve);
ProbeError(CallEndCurve);
ProbeError(CallBeginTrim);
ProbeError(CallPwlCurve);
ProbeError(CallEndTrim);
ProbeError(CallNurbsSurface);
ProbeError(CallEndSurface);
ProbeError(CallNurbsProperty);
ProbeError(CallLoadSamplingMatrices);
ProbeError(CallDeleteNurbsRenderer);
ProbeError(CallOrtho2D);
ProbeError(CallPerspective);
ProbeError(CallLookAt);
ProbeError(CallProject);
ProbeError(CallUnProject);
ProbeError(CallPickMatrix);
ProbeError(CallErrorString);
printf("covglu passed.\n\n");
}
long Exec(TK_EventRec *ptr)
{
if (ptr->event == TK_EVENT_EXPOSE) {
DoTests();
return 0;
}
return 1;
}
static void phelp()
{
printf("Options:\n");
printf("\t-help Print this help screen.\n");
printf("\t-v Verbose mode ON.\n");
printf("\n");
}
static long Init(int argc, char **argv)
{
long i;
verbose = 0;
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-help") == 0) {
phelp();
return 1;
} else if (strcmp(argv[i], "-h") == 0) {
phelp();
return 1;
} else if (strcmp(argv[i], "-?") == 0) {
phelp();
return 1;
} else if (strcmp(argv[i], "-v") == 0) {
verbose = 1;
} else {
printf("%s (Bad option).\n", argv[i]);
phelp();
return 1;
}
}
return 0;
}
int main(int argc, char **argv)
{
TK_WindowRec wind;
printf("OpenGL GLU Coverage Test.\n");
printf("Version 1.0.15\n");
printf("\n");
if (Init(argc, argv)) {
tkQuit();
return 1;
}
strcpy(wind.name, "GLU Coverage Test");
wind.x = 0;
wind.y = 0;
wind.width = WINSIZE;
wind.height = WINSIZE;
wind.type = TK_WIND_REQUEST;
wind.eventMask = TK_EVENT_EXPOSE;
wind.render = TK_WIND_DIRECT;
wind.info = TK_WIND_SB |TK_WIND_RGB | TK_WIND_STENCIL | TK_WIND_Z |
TK_WIND_ACCUM;
if (tkNewWindow(&wind)) {
tkExec(Exec);
} else {
wind.info = TK_WIND_DB |TK_WIND_RGB | TK_WIND_STENCIL | TK_WIND_Z |
TK_WIND_ACCUM;
if (tkNewWindow(&wind)) {
tkExec(Exec);
} else {
printf("Visual requested not found.\n");
}
}
tkQuit();
return 0;
}