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.
330 lines
9.9 KiB
330 lines
9.9 KiB
/*
|
|
** 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);
|