Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

394 lines
9.2 KiB

/*
** 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;
GLint visualID = -99;
void Output(char *format, ...)
{
va_list args;
va_start(args, format);
if (verbose) {
vprintf(format, args);
fflush(stdout);
}
va_end(args);
}
void FailAndDie(void)
{
Output("\n");
printf("covgl failed.\n\n");
tkQuit();
}
void ProbeEnum(void)
{
if (glGetError() == GL_INVALID_ENUM) {
FailAndDie();
}
}
void ProbeError(void (*Func)(void))
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
(*Func)();
if (glGetError() != GL_NO_ERROR) {
FailAndDie();
}
glFlush();
glPopAttrib();
}
void ZeroBuf(long type, long size, void *buf)
{
long i;
switch (type) {
case GL_UNSIGNED_BYTE:
{
unsigned char *ptr = (unsigned char *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_BYTE:
{
char *ptr = (char *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_UNSIGNED_SHORT:
{
unsigned short *ptr = (unsigned short *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_SHORT:
{
short *ptr = (short *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_UNSIGNED_INT:
{
unsigned long *ptr = (unsigned long *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_INT:
{
long *ptr = (long *)buf;
for (i = 0; i < size; i++) {
*ptr++ = 0;
}
}
break;
case GL_FLOAT:
{
float *ptr = (float *)buf;
for (i = 0; i < size; i++) {
*ptr++ = (GLfloat)0;
}
}
break;
}
}
static void DoTests(void)
{
VerifyEnums();
ProbeError(CallGet);
ProbeError(CallGetClipPlane);
ProbeError(CallGetError);
ProbeError(CallGetLight);
ProbeError(CallGetMap);
ProbeError(CallGetMaterial);
ProbeError(CallGetPixelMap);
ProbeError(CallGetPolygonStipple);
ProbeError(CallGetString);
ProbeError(CallGetTexEnv);
ProbeError(CallGetTexGen);
ProbeError(CallGetTexImage);
ProbeError(CallGetTexLevelParameter);
ProbeError(CallGetTexParameter);
ProbeError(CallPushPopAttrib);
ProbeError(CallEnableIsEnableDisable);
ProbeError(CallHint);
ProbeError(CallViewport);
ProbeError(CallOrtho);
ProbeError(CallFrustum);
ProbeError(CallScissor);
ProbeError(CallClipPlane);
ProbeError(CallAccum);
ProbeError(CallSelectBuffer);
ProbeError(CallFeedbackBuffer);
/*
** XXX
**
ProbeError(CallPassThrough);
*/
ProbeError(CallInitNames);
ProbeError(CallPushName);
ProbeError(CallLoadName);
ProbeError(CallPopName);
ProbeError(CallLoadIdentity);
ProbeError(CallMatrixMode);
ProbeError(CallPushMatrix);
ProbeError(CallLoadMatrix);
ProbeError(CallMultMatrix);
ProbeError(CallRotate);
ProbeError(CallScale);
ProbeError(CallTranslate);
ProbeError(CallPopMatrix);
ProbeError(CallClear);
ProbeError(CallClearAccum);
ProbeError(CallClearColor);
ProbeError(CallClearDepth);
ProbeError(CallClearIndex);
ProbeError(CallClearStencil);
ProbeError(CallColorMask);
ProbeError(CallColor);
ProbeError(CallIndexMask);
ProbeError(CallIndex);
ProbeError(CallVertex);
ProbeError(CallNormal);
ProbeError(CallAlphaFunc);
ProbeError(CallBlendFunc);
ProbeError(CallDepthFunc);
ProbeError(CallDepthMask);
ProbeError(CallDepthRange);
ProbeError(CallLogicOp);
ProbeError(CallStencilFunc);
ProbeError(CallStencilMask);
ProbeError(CallStencilOp);
ProbeError(CallRenderMode);
ProbeError(CallReadBuffer);
ProbeError(CallDrawBuffer);
ProbeError(CallRasterPos);
/*
* Put CallPixelStore at end of this function - otherwise modes it sets
* can cause access violations for subsequent tests such as CallTexImage1D.
*/
#if 0
ProbeError(CallPixelStore);
#endif
ProbeError(CallPixelTransfer);
ProbeError(CallPixelZoom);
ProbeError(CallReadDrawPixels);
ProbeError(CallCopyPixels);
ProbeError(CallPixelMap);
ProbeError(CallFog);
ProbeError(CallLightModel);
ProbeError(CallLight);
ProbeError(CallMaterial);
ProbeError(CallColorMaterial);
ProbeError(CallTexCoord);
ProbeError(CallTexEnv);
ProbeError(CallTexGen);
ProbeError(CallTexParameter);
ProbeError(CallTexImage1D);
ProbeError(CallTexImage2D);
ProbeError(CallShadeModel);
ProbeError(CallPointSize);
ProbeError(CallLineStipple);
ProbeError(CallLineWidth);
ProbeError(CallRect);
ProbeError(CallPolygonMode);
ProbeError(CallPolygonStipple);
ProbeError(CallCullFace);
ProbeError(CallEdgeFlag);
ProbeError(CallFrontFace);
ProbeError(CallBitmap);
ProbeError(CallBeginEnd);
ProbeError(CallMap1);
ProbeError(CallMap2);
ProbeError(CallEvalCoord);
ProbeError(CallEvalPoint1);
ProbeError(CallEvalPoint2);
ProbeError(CallMapGrid1);
ProbeError(CallMapGrid2);
ProbeError(CallEvalMesh1);
ProbeError(CallEvalMesh2);
ProbeError(CallGenLists);
ProbeError(CallNewEndList);
ProbeError(CallIsList);
ProbeError(CallCallList);
ProbeError(CallListBase);
ProbeError(CallCallLists);
ProbeError(CallDeleteLists);
ProbeError(CallFlush);
ProbeError(CallFinish);
#if 1
ProbeError(CallPixelStore);
#endif
printf("covgl passed.\n\n");
}
static long Exec(TK_EventRec *ptr)
{
if (ptr->event == TK_EVENT_EXPOSE) {
DoTests();
return 0;
}
return 1;
}
static long Init(int argc, char **argv)
{
long i;
verbose = 0;
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-h") == 0) {
printf("Options:\n");
printf("\t-h Print this help screen.\n");
printf("\t-a [Default] Run tests on all pixel formats. \n");
printf("\t-s Run tests on all display pixel formats. \n");
printf("\t-b Run tests on all bitmap pixel formats. \n");
printf("\t-v Verbose mode ON.\n");
printf("\n");
return 1;
} else if (strcmp(argv[i], "-v") == 0) {
verbose = 1;
} else if (strcmp(argv[i], "-a") == 0) { // all display & bitmap fmt
visualID = -99;
} else if (strcmp(argv[i], "-s") == 0) { // all display formats
visualID = -98;
} else if (strcmp(argv[i], "-b") == 0) { // all bitmap formats
visualID = -97;
} else {
printf("%s (Bad option).\n", argv[i]);
return 1;
}
}
return 0;
}
int main(int argc, char **argv)
{
TK_WindowRec wind;
TK_VisualIDsRec list;
int i;
BOOL bTestAll = FALSE;
printf("Open GL Coverage Test.\n");
printf("Version 1.0.14\n");
printf("\n");
if (Init(argc, argv)) {
tkQuit();
return 1;
}
strcpy(wind.name, "Open GL Coverage Test");
wind.x = CW_USEDEFAULT;
wind.y = CW_USEDEFAULT;
wind.width = WINSIZE;
wind.height = WINSIZE;
wind.eventMask = TK_EVENT_EXPOSE;
switch (visualID) {
case -99: // test all display and bitmap pixel formats
bTestAll = TRUE;
// fall through
case -98: // test all display pixel formats
tkGet(TK_VISUALIDS, (void *)&list);
for (i = 0; i < list.count; i++) {
wind.type = TK_WIND_VISUAL;
wind.info = (GLint)list.IDs[i];
wind.render = TK_WIND_DIRECT;
if (tkNewWindow(&wind)) {
printf("Display ID %d \n", list.IDs[i]);
tkExec(Exec);
tkCloseWindow();
} else {
printf("Display ID %d not found.\n\n", list.IDs[i]);
}
}
if (!bTestAll)
break;
// fall through
case -97: // test all bitmap pixel formats
tkGet(TK_VISUALIDS, (void *)&list);
for (i = 0; i < list.count; i++) {
wind.type = TK_WIND_VISUAL;
wind.info = -(GLint)list.IDs[i];
wind.render = TK_WIND_DIRECT;
if (tkNewWindow(&wind)) {
printf("Bitmap ID %d \n", -list.IDs[i]);
tkExec(Exec);
tkCloseWindow();
} else {
printf("Bitmap ID %d not found.\n\n", -list.IDs[i]);
}
}
break;
default:
break;
}
tkQuit();
return 0;
}