Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Source/RaveInfo.c
/****************************************************************************** |
** ** |
** Module: RAVEInfo.c ** |
** ** |
** Purpose: Outputs RAVE gestalt information. ** |
** ** |
** Author: Robert Dierkes ** |
** ** |
** Copyright (C) 1998-99 Apple Computer, Inc. All rights reserved. ** |
** ** |
*****************************************************************************/ |
#include <ConditionalMacros.h> |
#include <RAVE.h> |
#include <QD3DAcceleration.h> |
#include <stdio.h> |
#include "RaveInfo.h" |
/****************************************************************************** |
** ** |
** Macros ** |
** ** |
*****************************************************************************/ |
#define kMaxGestalts 100 |
#define TITLE_WIDTH 36 |
#if defined(TARGET_OS_MAC) && (TARGET_OS_MAC) |
/* Write standard output to SIOUX console */ |
#define PRINT_1(_a) printf(_a) |
#define PRINT_2(_a, _b) printf(_a, _b) |
#define PRINT_3(_a, _b, _c) printf(_a, _b, _c) |
#define PRINT_4(_a, _b, _c, _d) printf(_a, _b, _c, _d) |
#define PRINT_5(_a, _b, _c, _d, _e) printf(_a, _b, _c, _d, _e) |
#define kCharMark 'Ã' |
#else |
/* Write standard output to file */ |
#define PRINT_1(_a) fprintf(fp, _a);fflush(fp); |
#define PRINT_2(_a, _b) fprintf(fp, _a, _b);fflush(fp); |
#define PRINT_3(_a, _b, _c) fprintf(fp, _a, _b, _c);fflush(fp); |
#define PRINT_4(_a, _b, _c, _d) fprintf(fp, _a, _b, _c, _d);fflush(fp); |
#define PRINT_5(_a, _b, _c, _d, _e) fprintf(fp, _a, _b, _c, _d, _e);fflush(fp); |
#define kCharMark '+' |
#define FILE_NAME "RAVEInfo.out" |
#endif /* TARGET_OS_WIN32 */ |
#define QA_ENGINE_GESTALT(_engine,_mask,_response) \ |
{ errs[g] = QAEngineGestalt(_engine, _mask, _response); \ |
g++; \ |
} |
#define PRINT_1_VALUE(_fmt, _title, _value) \ |
{ if (errs[g] == kQANoErr) { \ |
PRINT_4(_fmt, TITLE_WIDTH, _title, _value); \ |
} else { \ |
PRINT_4("%-*s%s", TITLE_WIDTH, _title, "<Gestalt unsupported>\n");\ |
} \ |
g++; \ |
} |
#define PRINT_2_VALUE(_fmt, _title, _value) \ |
{ if (errs[g] == kQANoErr) { \ |
PRINT_5(_fmt, TITLE_WIDTH, _title, _value, _value); \ |
} else { \ |
PRINT_4("%-*s%s", TITLE_WIDTH, _title, "<Gestalt unsupported>\n");\ |
} \ |
g++; \ |
} |
#define PRINT_OPTION(_opt, _mask, _maskLast) \ |
PRINT_4("%*s%c "#_maskLast"\n", \ |
TITLE_WIDTH, "", \ |
(_opt & _mask ## _maskLast) ? kCharMark : ' '); |
#define PRINT_PIXEL_1_TYPE(_value, _maskLast) \ |
PRINT_4("%*s%c "# _maskLast"\n", \ |
TITLE_WIDTH, "", \ |
(_value & (1 << (kQAPixel_ ## _maskLast))) ? kCharMark : ' '); |
#define PRINT_PIXEL_TYPES(_fmt, _title, _value) \ |
{ if (errs[g] == kQANoErr) { \ |
PRINT_4(_fmt, TITLE_WIDTH, _title, _value); \ |
PRINT_PIXEL_1_TYPE(_value, Alpha1); \ |
PRINT_PIXEL_1_TYPE(_value, RGB16); \ |
PRINT_PIXEL_1_TYPE(_value, ARGB16); \ |
PRINT_PIXEL_1_TYPE(_value, RGB32); \ |
PRINT_PIXEL_1_TYPE(_value, ARGB32); \ |
PRINT_PIXEL_1_TYPE(_value, CL4); \ |
PRINT_PIXEL_1_TYPE(_value, CL8); \ |
PRINT_PIXEL_1_TYPE(_value, RGB16_565); \ |
PRINT_PIXEL_1_TYPE(_value, RGB24); \ |
PRINT_PIXEL_1_TYPE(_value, RGB8_332); \ |
PRINT_PIXEL_1_TYPE(_value, ARGB16_4444); \ |
PRINT_PIXEL_1_TYPE(_value, ACL16_88); \ |
PRINT_PIXEL_1_TYPE(_value, I8); \ |
PRINT_PIXEL_1_TYPE(_value, AI16_88); \ |
PRINT_PIXEL_1_TYPE(_value, YUVS); \ |
PRINT_PIXEL_1_TYPE(_value, YUVU); \ |
PRINT_PIXEL_1_TYPE(_value, YVYU422); \ |
PRINT_PIXEL_1_TYPE(_value, UYVY422); \ |
} else { \ |
PRINT_4("%-*s%s", TITLE_WIDTH, _title, "<Gestalt unsupported>\n");\ |
} \ |
g++; \ |
} |
/****************************************************************************** |
** ** |
** RAVEGestaltInfo() ** |
** ** |
*****************************************************************************/ |
void RAVEGestaltInfo(void) |
{ |
TQAEngine *engine = NULL; |
TQAError errs[kMaxGestalts]; |
unsigned long count, g; |
unsigned long optionalFeatures; |
unsigned long fastFeatures; |
long vendorID; |
long engineID; |
long nameLength; |
char name[200]; |
long revision; |
unsigned long textureMemory; |
unsigned long fastTextureMemory; |
/* 1.6 -> */ |
unsigned long dcPixelTypesAllowed; |
unsigned long dcPixelTypesPreferred; |
unsigned long txPixelTypesAllowed; |
unsigned long txPixelTypesPreferred; |
unsigned long bmPixelTypesAllowed; |
unsigned long bmPixelTypesPreferred; |
unsigned long optionalFeatures2; |
unsigned long multiTextureMax; |
#if defined(TARGET_OS_WIN32) && (TARGET_OS_WIN32) |
FILE *fp; |
fp = fopen(FILE_NAME, "w"); |
if (fp == NULL) { |
return; |
} |
#endif /* TARGET_OS_WIN32 */ |
#if defined(TARGET_OS_MAC) && (TARGET_OS_MAC) |
PRINT_4("\n%-*s%s", TITLE_WIDTH, "RAVE Gestalt Information", "Power Macintosh"); |
#elif defined(TARGET_OS_WIN32) && (TARGET_OS_WIN32) |
PRINT_4("\n%-*s%s", TITLE_WIDTH, "RAVE Gestalt Information", "Win32"); |
#else |
PRINT_4("\n%-*s%s", TITLE_WIDTH, "RAVE Gestalt Information", "<Unknown Platform>"); |
#endif |
PRINT_1("\n--------------------------------------------------------------\n\n"); |
QAEngineEnable (kQAVendor_Apple, kQAEngine_AppleHW); |
count = 0; |
engine = QADeviceGetFirstEngine(NULL); |
while (engine) { |
g = 0; |
QA_ENGINE_GESTALT(engine, kQAGestalt_ASCIINameLength, &nameLength); |
if ((nameLength < 200) && (nameLength > 0)) { |
QA_ENGINE_GESTALT(engine, kQAGestalt_ASCIIName, name); |
PRINT_5("Engine %u:%-*s\"%s\"\n", count+1, TITLE_WIDTH-9, "", name); |
} else { |
PRINT_5("Engine %u:%-*s\"%s\"\n", count+1, TITLE_WIDTH-9, "", "<Unknown>"); |
} |
count++; |
engine = QADeviceGetNextEngine(NULL, engine); |
} |
PRINT_1("\n--------------------------------------------------------------\n"); |
/* Cycle through all available engines getting gestalt information */ |
engine = QADeviceGetFirstEngine(NULL); |
while (engine) { |
/* Get gestalt responses */ |
for (g = kMaxGestalts; --g;) { |
errs[g] = kQANoErr; |
} |
g = 0; |
QA_ENGINE_GESTALT(engine, kQAGestalt_ASCIINameLength, &nameLength); |
if ((nameLength < 200) && (nameLength > 0)) { |
QA_ENGINE_GESTALT(engine, kQAGestalt_ASCIIName, name); |
} else { |
name[0] = 0; |
g++; |
} |
QA_ENGINE_GESTALT(engine, kQAGestalt_VendorID, &vendorID); |
QA_ENGINE_GESTALT(engine, kQAGestalt_EngineID, &engineID); |
QA_ENGINE_GESTALT(engine, kQAGestalt_Revision, &revision); |
QA_ENGINE_GESTALT(engine, kQAGestalt_TextureMemory, &textureMemory); |
QA_ENGINE_GESTALT(engine, kQAGestalt_FastTextureMemory, &fastTextureMemory); |
/*1.6*/ QA_ENGINE_GESTALT(engine, kQAGestalt_MultiTextureMax, &multiTextureMax); |
/*1.6*/ QA_ENGINE_GESTALT(engine, kQAGestalt_DrawContextPixelTypesAllowed, &dcPixelTypesAllowed); |
/*1.6*/ QA_ENGINE_GESTALT(engine, kQAGestalt_DrawContextPixelTypesPreferred, &dcPixelTypesPreferred); |
/*1.6*/ QA_ENGINE_GESTALT(engine, kQAGestalt_TexturePixelTypesAllowed, &txPixelTypesAllowed); |
/*1.6*/ QA_ENGINE_GESTALT(engine, kQAGestalt_TexturePixelTypesPreferred, &txPixelTypesPreferred); |
/*1.6*/ QA_ENGINE_GESTALT(engine, kQAGestalt_BitmapPixelTypesAllowed, &bmPixelTypesAllowed); |
/*1.6*/ QA_ENGINE_GESTALT(engine, kQAGestalt_BitmapPixelTypesPreferred, &bmPixelTypesPreferred); |
QA_ENGINE_GESTALT(engine, kQAGestalt_OptionalFeatures, &optionalFeatures); |
/*1.6*/ QA_ENGINE_GESTALT(engine, kQAGestalt_OptionalFeatures2, &optionalFeatures2); |
QA_ENGINE_GESTALT(engine, kQAGestalt_FastFeatures, &fastFeatures); |
/* Print responses (must be in same order as above) */ |
g = 1; /* Don't print ASCIINameLength */ |
PRINT_1("\n"); |
PRINT_1_VALUE("%-*s\"%s\"\n", "Engine Name:", name); |
PRINT_2_VALUE("%-*s%08u\t0x%08X\n", "Vendor ID:", vendorID); |
PRINT_2_VALUE("%-*s%08u\t0x%08X\n", "Engine ID:", engineID); |
PRINT_2_VALUE("%-*s%08u\t0x%08X\n", "Revision:", revision); |
PRINT_2_VALUE("%-*s%08u\t0x%08X\n", "Texture Memory:", textureMemory); |
PRINT_2_VALUE("%-*s%08u\t0x%08X\n", "Fast Texture Memory:", fastTextureMemory); |
/*1.6*/ PRINT_2_VALUE("%-*s%08u\t0x%08X\n", "Multi Texture Maximum:",multiTextureMax); |
/*1.6*/ PRINT_PIXEL_TYPES("%-*s0x%08X\n", "Draw Context Pixel Types Allowed:", dcPixelTypesAllowed); |
/*1.6*/ PRINT_PIXEL_TYPES("%-*s0x%08X\n", "Draw Context Pixel Types Preferred:", dcPixelTypesPreferred); |
/*1.6*/ PRINT_PIXEL_TYPES("%-*s0x%08X\n", "Texture Pixel Types Allowed:", txPixelTypesAllowed); |
/*1.6*/ PRINT_PIXEL_TYPES("%-*s0x%08X\n", "Texture Pixel Types Preferred:", txPixelTypesPreferred); |
/*1.6*/ PRINT_PIXEL_TYPES("%-*s0x%08X\n", "Bitmap Pixel Types Allowed:", bmPixelTypesAllowed); |
/*1.6*/ PRINT_PIXEL_TYPES("%-*s0x%08X\n", "Bitmap Pixel Types Preferred:", bmPixelTypesPreferred); |
PRINT_1_VALUE("%-*s0x%08X\n", "Optional Features:", optionalFeatures); |
if (errs[g-1] == kQANoErr) { |
PRINT_OPTION(optionalFeatures, kQAOptional_, DeepZ); |
PRINT_OPTION(optionalFeatures, kQAOptional_, Texture); |
PRINT_OPTION(optionalFeatures, kQAOptional_, TextureHQ); |
PRINT_OPTION(optionalFeatures, kQAOptional_, TextureColor); |
PRINT_OPTION(optionalFeatures, kQAOptional_, Blend); |
PRINT_OPTION(optionalFeatures, kQAOptional_, BlendAlpha); |
PRINT_OPTION(optionalFeatures, kQAOptional_, Antialias); |
PRINT_OPTION(optionalFeatures, kQAOptional_, ZSorted); |
PRINT_OPTION(optionalFeatures, kQAOptional_, PerspectiveZ); |
PRINT_OPTION(optionalFeatures, kQAOptional_, OpenGL); |
PRINT_OPTION(optionalFeatures, kQAOptional_, NoClear); |
PRINT_OPTION(optionalFeatures, kQAOptional_, CSG); |
PRINT_OPTION(optionalFeatures, kQAOptional_, BoundToDevice); |
PRINT_OPTION(optionalFeatures, kQAOptional_, CL4); |
PRINT_OPTION(optionalFeatures, kQAOptional_, CL8); |
PRINT_OPTION(optionalFeatures, kQAOptional_, BufferComposite); |
PRINT_OPTION(optionalFeatures, kQAOptional_, NoDither); |
/* 1.6 ->*/ |
PRINT_OPTION(optionalFeatures, kQAOptional_, FogAlpha); |
PRINT_OPTION(optionalFeatures, kQAOptional_, FogDepth); |
PRINT_OPTION(optionalFeatures, kQAOptional_, MultiTextures); |
PRINT_OPTION(optionalFeatures, kQAOptional_, MipmapBias); |
PRINT_OPTION(optionalFeatures, kQAOptional_, ChannelMask); |
PRINT_OPTION(optionalFeatures, kQAOptional_, ZBufferMask); |
PRINT_OPTION(optionalFeatures, kQAOptional_, AlphaTest); |
PRINT_OPTION(optionalFeatures, kQAOptional_, AccessTexture); |
PRINT_OPTION(optionalFeatures, kQAOptional_, AccessBitmap); |
PRINT_OPTION(optionalFeatures, kQAOptional_, AccessDrawBuffer); |
PRINT_OPTION(optionalFeatures, kQAOptional_, AccessZBuffer); |
PRINT_OPTION(optionalFeatures, kQAOptional_, ClearDrawBuffer); |
PRINT_OPTION(optionalFeatures, kQAOptional_, ClearZBuffer); |
PRINT_OPTION(optionalFeatures, kQAOptional_, OffscreenDrawContexts); |
} |
/*1.6*/ PRINT_1_VALUE("%-*s0x%08X\n", "Optional Features 2:", optionalFeatures2); |
if (errs[g-1] == kQANoErr) { |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, TextureDrawContexts); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, BitmapDrawContexts); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, Busy); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, SwapBuffers); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, Chromakey); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, NonRelocatable); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, NoCopy); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, PriorityBits); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, FlipOrigin); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, BitmapScale); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, DrawContextScale); |
PRINT_OPTION(optionalFeatures2, kQAOptional2_, DrawContextNonRelocatable); |
} |
PRINT_1_VALUE("%-*s0x%08X\n", "Fast Features:", fastFeatures); |
if (errs[g-1] == kQANoErr) { |
PRINT_OPTION(fastFeatures, kQAFast_, Line); |
PRINT_OPTION(fastFeatures, kQAFast_, Gouraud); |
PRINT_OPTION(fastFeatures, kQAFast_, Texture); |
PRINT_OPTION(fastFeatures, kQAFast_, TextureHQ); |
PRINT_OPTION(fastFeatures, kQAFast_, Blend); |
PRINT_OPTION(fastFeatures, kQAFast_, Antialiasing); |
PRINT_OPTION(fastFeatures, kQAFast_, ZSorted); |
PRINT_OPTION(fastFeatures, kQAFast_, CL4); |
PRINT_OPTION(fastFeatures, kQAFast_, CL8); |
/*1.6*/ PRINT_OPTION(fastFeatures, kQAFast_, FogAlpha); |
/*1.6*/ PRINT_OPTION(fastFeatures, kQAFast_, FogDepth); |
/*1.6*/ PRINT_OPTION(fastFeatures, kQAFast_, MultiTextures); |
/*1.6*/ PRINT_OPTION(fastFeatures, kQAFast_, BitmapScale); |
/*1.6*/ PRINT_OPTION(fastFeatures, kQAFast_, DrawContextScale); |
} |
PRINT_1("\n--------------------------------------------------------------\n"); |
engine = QADeviceGetNextEngine(NULL, engine); |
} |
#if defined(TARGET_OS_WIN32) && (TARGET_OS_WIN32) |
fclose(fp); |
#endif /* TARGET_OS_WIN32 */ |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14