|
|
/*
** Copyright 1995-2095, 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. */
/******************************************************************************
Locale ******************************************************************************/
#define __GLS_C_LOCALE_DECLARE \
const GLubyte *const __locale = glsCSTR(setlocale(LC_NUMERIC, GLS_NONE)); \ GLboolean __saveLocale = (GLboolean)(__locale[0] != 'C' || __locale[1])
#define __GLS_C_LOCALE_BEGIN \
if ( \ __saveLocale && \ __glsString_assign(&__GLS_CONTEXT->savedLocale, __locale) \ ) { \ setlocale(LC_NUMERIC, "C"); \ } else { \ __saveLocale = GL_FALSE; \ }
#define __GLS_C_LOCALE_END \
if (__saveLocale) setlocale( \ LC_NUMERIC, (const char *)__GLS_CONTEXT->savedLocale.head \ )
/******************************************************************************
__GLSglrc ******************************************************************************/
typedef struct { GLvoid *base; size_t byteCount; } __GLSglrcBuf;
typedef struct __GLSglrc __GLSglrc;
struct __GLSglrc { GLuint layer; GLuint readLayer; GLuint shareGLRC; __GLSglrcBuf feedbackBuf; __GLSglrcBuf selectBuf; #if __GL_EXT_vertex_array
__GLSglrcBuf colorBuf; __GLSglrcBuf edgeFlagBuf; __GLSglrcBuf indexBuf; __GLSglrcBuf normalBuf; __GLSglrcBuf texCoordBuf; __GLSglrcBuf vertexBuf; #endif /* __GL_EXT_vertex_array */
};
extern void __glsGLRC_final(__GLSglrc *inoutGLRC); extern void __glsGLRC_init(__GLSglrc *outGLRC);
/******************************************************************************
__GLSlayer ******************************************************************************/
typedef struct __GLSlayer __GLSlayer;
struct __GLSlayer { GLfloat invisibleAspect; GLSenum displayFormat; GLint doubleBuffer; GLint invisible; GLint invisibleHeightPixels; GLint level; GLint stereo; GLint transparent; GLint indexBits; GLint redBits; GLint greenBits; GLint blueBits; GLint alphaBits; GLint depthBits; GLint stencilBits; GLint accumRedBits; GLint accumGreenBits; GLint accumBlueBits; GLint accumAlphaBits; GLint auxBuffers; #if __GL_SGIS_multisample
GLint sampleBuffers; GLint samples; #endif /* __GL_SGIS_multisample */
};
extern void __glsLayer_init(__GLSlayer *outLayer);
/******************************************************************************
__GLSheader ******************************************************************************/
typedef struct __GLSheader __GLSheader;
struct __GLSheader { GLfloat aspect; GLfloat borderWidth; GLfloat contrastRatio; GLfloat heightMM; GLfloat borderColor[4]; GLfloat gamma[4]; GLfloat origin[2]; GLfloat pageColor[4]; GLfloat pageSize[2]; GLfloat redPoint[2]; GLfloat greenPoint[2]; GLfloat bluePoint[2]; GLfloat whitePoint[2]; GLint frameCount; GLint glrcCount; __GLSglrc *glrcs; GLint heightPixels; GLint layerCount; GLint tileable; __GLSlayer *layers; GLint createTime[6]; GLint modifyTime[6]; __GLSstring extensions; __GLSstring author; __GLSstring description; __GLSstring notes; __GLSstring title; __GLSstring tools; __GLSstring version; };
extern void __glsHeader_final(__GLSheader *inoutHeader); extern GLboolean __glsHeader_init(__GLSheader *outHeader); extern GLboolean __glsHeader_reset(__GLSheader *inoutHeader);
/******************************************************************************
__GLScontext ******************************************************************************/
#if !__GLS_PLATFORM_WIN32
// DrewB
typedef void (*__GLSdecodeBinFunc)(GLubyte *inoutPtr); typedef void (*__GLSdecodeTextFunc)(__GLSreader *inoutReader); #else
typedef void (*__GLSdecodeBinFunc)(struct __GLScontext *ctx, GLubyte *inoutPtr); typedef void (*__GLSdecodeTextFunc)(struct __GLScontext *ctx, __GLSreader *inoutReader); #endif
typedef struct __GLScontextStream __GLScontextStream; typedef struct __GLSlistString __GLSlistString;
typedef struct { GLint count; GLulong vals[__GLS_MAX_OUT_ARGS]; } __GLSoutArgs;
typedef struct __GLScontext { __GLS_LIST_ELEM; GLSenum abortMode; GLSenum blockType; GLint callNesting; GLint captureEntryCount; GLScaptureFunc captureEntryFunc; GLScaptureFunc captureExitFunc; GLubyte captureFlags[__GLS_OPCODE_COUNT]; GLint captureNesting; GLSfunc commandFuncs[__GLS_OPCODE_COUNT]; GLboolean contextCall; __GLSdict *contextStreamDict; __GLS_ITERLIST(__GLScontextStream) contextStreamList; GLboolean current; GLuint currentGLRC; GLvoid *dataPointer; FILE *defaultReadChannel; FILE *defaultWriteChannel; GLboolean deleted; GLSfunc dispatchAPI[__GLS_OPCODE_COUNT]; GLSfunc dispatchCall[__GLS_OPCODE_COUNT]; __GLSdecodeBinFunc dispatchDecode_bin[__GLS_OPCODE_COUNT]; __GLSheader header; GLuint name; __GLSoutArgs outArgs; GLboolean pixelSetupGen; GLSreadFunc readFunc; __GLS_ITERLIST(__GLSlistString) readPrefixList; __GLSstring returnString; __GLSstring savedLocale; __GLSversion streamVersion; GLSwriteFunc unreadFunc; struct __GLSwriter *writer; struct __GLSwriter *writers[__GLS_MAX_CAPTURE_NESTING]; GLSwriteFunc writeFunc; __GLSlistString *writePrefix; #if __GLS_PLATFORM_WIN32
// DrewB
GLboolean captureExecOverride; GLSfunc captureExec[__GLS_OPCODE_COUNT]; #endif
} __GLScontext;
typedef __GLS_LIST(__GLScontext) __GLScontextList;
extern GLvoid* __glsContext_allocFeedbackBuf( __GLScontext *inoutContext, size_t inByteCount );
extern GLvoid* __glsContext_allocSelectBuf( __GLScontext *inoutContext, size_t inByteCount );
#if __GL_EXT_vertex_array
extern GLvoid* __glsContext_allocVertexArrayBuf( __GLScontext *inoutContext, GLSopcode inOpcode, size_t inByteCount ); #endif /* __GL_EXT_vertex_array */
extern __GLScontext* __glsContext_create(GLuint inName); extern __GLScontext* __glsContext_destroy(__GLScontext *inContext); extern void __glsContext_updateDispatchDecode_bin(__GLScontext *inoutContext); extern void __glsContext_updateDispatchTables(__GLScontext *inoutContext);
/******************************************************************************
__GLScontextStream ******************************************************************************/
typedef struct __GLScontextStreamBlock __GLScontextStreamBlock;
struct __GLScontextStream { __GLS_LIST_ELEM; __GLS_LIST(__GLScontextStreamBlock) blockList; GLint callCount; __GLSstring name; GLboolean deleted; };
typedef __GLS_LIST_ITER(__GLScontextStreamBlock) __GLScontextStreamBlockIter;
extern __GLScontextStream* __glsContextStream_create(const GLubyte *inName);
extern __GLScontextStream* __glsContextStream_destroy( __GLScontextStream *inStream );
extern __GLScontextStreamBlock* __glsContextStream_appendBlock( __GLScontextStream *inoutStream, size_t inBufSize );
extern void __glsContextStream_call(__GLScontextStream *inoutStream);
extern __GLScontextStreamBlock* __glsContextStream_firstBlock( __GLScontextStream *inoutStream );
extern size_t __glsContextStream_getByteCount(__GLScontextStream *inoutStream); extern GLuint __glsContextStream_getCRC32(__GLScontextStream *inoutStream);
extern __GLScontextStreamBlock* __glsContextStream_lastBlock( __GLScontextStream *inoutStream );
extern void __glsContextStream_truncate( __GLScontextStream *inoutStream, __GLScontextStreamBlock *inBlock, size_t inOffset );
#define __GLS_FULL_CONTEXT_STREAM_BLOCK 0.9f
struct __GLScontextStreamBlock { __GLS_LIST_ELEM; GLubyte *buf; GLubyte *bufTail; GLubyte *writeTail; };
extern __GLScontextStreamBlock* __glsContextStreamBlock_create( size_t inBufSize );
extern __GLScontextStreamBlock* __glsContextStreamBlock_destroy( __GLScontextStreamBlock *inBlock );
extern GLboolean __glsContextStreamBlock_addJump( __GLScontextStreamBlock *inoutBlock, GLubyte *inDest );
extern GLboolean __glsContextStreamBlock_addPad( __GLScontextStreamBlock *inoutBlock );
extern GLboolean __glsContextStreamBlock_hasJump( __GLScontextStreamBlock *inBlock );
extern GLboolean __glsContextStreamBlock_removeJump( __GLScontextStreamBlock *inoutBlock );
/******************************************************************************
__GLSlistString ******************************************************************************/
struct __GLSlistString { __GLS_LIST_ELEM; __GLSstring val; };
extern GLboolean __glsListString_prefix( const __GLSlistString *inString, const GLubyte *inName, __GLSstring *outPath );
extern __GLSlistString* __glsListString_create(const GLubyte *inVal); extern __GLSlistString* __glsListString_destroy(__GLSlistString *inString);
|