/******************************Module*Header*******************************\ * Module Name: mtk.h * * Defines and externals for m toolkit * * Copyright (c) 1997 Microsoft Corporation * \**************************************************************************/ #ifndef __mtk_h__ #define __mtk_h__ #include #include #include "tk.h" #ifdef __cplusplus extern "C" { #endif #include "mtkdebug.h" #include "trackbal.h" #define FAILURE 0 #define SUCCESS 1 // Maximum texture bitmap dimensions. #define TEX_WIDTH_MAX 1280 #define TEX_HEIGHT_MAX 1024 #define PI 3.14159265358979323846f // double version of PI #define PI_D 3.14159265358979323846264338327950288419716939937510 #define ONE_OVER_PI (1.0f / PI) #define ROOT_TWO 1.414213562373f #define GEN_STRING_SIZE 64 // texture quality level enum { TEXQUAL_DEFAULT = 0, TEXQUAL_HIGH }; typedef struct _point2d { GLfloat x; GLfloat y; } POINT2D; typedef struct _ipoint2d { int x; int y; } IPOINT2D; typedef struct _point3d { GLfloat x; GLfloat y; GLfloat z; } POINT3D; typedef struct _dpoint3d { GLdouble x; GLdouble y; GLdouble z; } DPOINT3D; typedef struct _ipoint3d { int x; int y; int z; } IPOINT3D; typedef struct _texpoint2d { GLfloat s; GLfloat t; } TEX_POINT2D; typedef struct _isize { int width; int height; } ISIZE; typedef struct _fsize { GLfloat width; GLfloat height; } FSIZE; typedef struct _glrect { float x, y; float width, height; } GLRECT; typedef struct _glirect { int x, y; int width, height; } GLIRECT; #ifndef GL_EXT_paletted_texture #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 typedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *data); typedef void (APIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, GLvoid *data); #endif // texture resource #define RT_RGB 99 #define RT_MYBMP 100 #define RT_A8 101 // texture resource types enum { TEX_UNKNOWN = 0, TEX_RGB, TEX_BMP, TEX_A8 }; typedef struct { int type; int name; } TEX_RES; typedef struct _MATRIX { GLfloat M[4][4]; } MATRIX; typedef struct strRGBA { GLfloat r; GLfloat g; GLfloat b; GLfloat a; } RGBA; typedef struct { BYTE r; BYTE g; BYTE b; } RGB8; typedef struct { BYTE r; BYTE g; BYTE b; BYTE a; } RGBA8; // Defines for pixel format (internal use) #define SS_DOUBLEBUF_BIT (1 << 0) #define SS_DEPTH16_BIT (1 << 1) #define SS_DEPTH32_BIT (1 << 2) #define SS_ALPHA_BIT (1 << 3) #define SS_BITMAP_BIT (1 << 4) #define SS_NO_SYSTEM_PALETTE_BIT (1 << 5) #define SS_GENERIC_UNACCELERATED_BIT (1 << 6) #define SS_HAS_DOUBLEBUF(x) ((x) & SS_DOUBLEBUF_BIT) #define SS_HAS_DEPTH16(x) ((x) & SS_DEPTH16_BIT) #define SS_HAS_DEPTH32(x) ((x) & SS_DEPTH32_BIT) #define SS_HAS_ALPHA(x) ((x) & SS_ALPHA_BIT) #define SS_HAS_BITMAP(x) ((x) & SS_BITMAP_BIT) typedef struct _MATERIAL { RGBA ka; RGBA kd; RGBA ks; GLfloat specExp; } MATERIAL; // texture file info //mf: !!!, uhhh not yet #if 1 typedef struct { int nOffset; // filename offset into pathname TCHAR szPathName[MAX_PATH]; // texture pathname } TEXFILE; #else typedef struct { int nOffset; // filename offset into pathname LPTSTR szPathName; } TEXFILE; #endif // Useful macros #define SS_MAX( a, b ) \ ( a > b ? a : b ) #define SS_MIN( a, b ) \ ( a < b ? a : b ) // macro to round up floating values #define SS_ROUND_UP( fval ) \ ( (((fval) - (FLOAT)(int)(fval)) > 0.0f) ? (int) ((fval)+1.0f) : (int) (fval) ) // macros to clamp a value within a range #define SS_CLAMP_TO_RANGE( a, lo, hi ) ( (a < lo) ? lo : ((a > hi) ? hi : a) ) #define SS_CLAMP_TO_RANGE2( a, lo, hi ) \ ( a = (a < lo) ? lo : ((a > hi) ? hi : a) ) // degree<->radian macros #define ONE_OVER_180 (1.0f / 180.0f) #define SS_DEG_TO_RAD( a ) ( (a*PI) * ONE_OVER_180 ) #define SS_RAD_TO_DEG( a ) ( (a*180.0f) * ONE_OVER_PI ) // window related extern void mtkQuit(); // Harsh way to kill the app //extern int mtk_Exec(); // like tkExec() // pixel forat extern BOOL SSU_SetupPixelFormat( HDC hdc, int flags, PIXELFORMATDESCRIPTOR *ppfd ); extern BOOL SSU_bNeedPalette( PIXELFORMATDESCRIPTOR *ppfd ); extern int SSU_PixelFormatDescriptorFromDc( HDC Dc, PIXELFORMATDESCRIPTOR *Pfd ); // material processing extern void ss_InitTeaMaterials(); extern void ss_InitTexMaterials(); extern void ss_InitMaterials(); extern void ss_SetMaterial( MATERIAL *pMat ); extern void ss_SetMaterialIndex( int index ); extern MATERIAL *ss_RandomTeaMaterial( BOOL bSet ); extern int ss_RandomTeaMaterialIndex( BOOL bSet ); extern MATERIAL *ss_RandomTexMaterial( BOOL bSet ); extern int ss_RandomTexMaterialIndex( BOOL bSet ); extern void ss_CreateMaterialGradient( MATERIAL *matInc, MATERIAL *startMat, MATERIAL *endMat, int transCount ); extern void ss_TransitionMaterial( MATERIAL *transMat, MATERIAL *transMatInc ); // color extern void ss_HsvToRgb(float h, float s, float v, RGBA *color ); // clear extern int mtk_RectWipeClear( int width, int height, int repCount ); extern int mtk_DigitalDissolveClear( int width, int height, int size ); // utility extern void ss_RandInit( void ); extern int ss_iRand( int max ); extern int ss_iRand2( int min, int max ); extern FLOAT ss_fRand( FLOAT min, FLOAT max ); extern BOOL mtk_ChangeDisplaySettings( int width, int height, int bitDepth ); extern void mtk_RestoreDisplaySettings(); extern void ss_QueryDisplaySettings( void ); extern void mtk_QueryGLVersion( void ); extern BOOL mtk_fOnWin95( void ); extern BOOL mtk_fOnNT35( void ); extern BOOL mtk_fOnGL11( void ); extern BOOL mtk_bAddSwapHintRect(); extern HBITMAP SSDIB_CreateCompatibleDIB(HDC hdc, HPALETTE hpal, ULONG ulWidth, ULONG ulHeight, PVOID *ppvBits); extern BOOL APIENTRY SSDIB_UpdateColorTable(HDC hdcMem, HDC hdc, HPALETTE hpal); // texture file processing extern BOOL mtk_VerifyTextureFilePath( TEXFILE *ptf ); extern BOOL mtk_VerifyTextureFileData( TEXFILE *ptf ); extern void mtk_InitAutoTexture( TEX_POINT2D *pTexRep ); // texture objects extern BOOL mtk_TextureObjectsEnabled( void ); // Paletted texture support extern BOOL mtk_PalettedTextureEnabled(void); extern BOOL mtk_QueryPalettedTextureEXT(void); // math functions extern POINT3D ss_ptZero; extern void ss_xformPoint(POINT3D *ptOut, POINT3D *ptIn, MATRIX *); extern void ss_xformNorm(POINT3D *ptOut, POINT3D *ptIn, MATRIX *); extern void ss_matrixIdent(MATRIX *); extern void ss_matrixRotate(MATRIX *m, double xTheta, double yTheta, double zTheta); extern void ss_matrixTranslate(MATRIX *, double xTrans, double yTrans, double zTrans); extern void ss_matrixMult( MATRIX *m1, MATRIX *m2, MATRIX *m3 ); extern void ss_calcNorm(POINT3D *norm, POINT3D *p1, POINT3D *p2, POINT3D *p3); extern void mtk_NormalizePoints(POINT3D *, ULONG); #ifdef __cplusplus } #endif #endif // __mtk_h__