windows-nt/Source/XPSP1/NT/multimedia/opengl/gls/lib/opcode.c
2020-09-26 16:20:57 +08:00

108 lines
3.6 KiB
C

/*
** 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.
*/
#include "glslib.h"
GLSopcode __glsMapOpcode(GLSopcode inOpcode) {
GLint i;
const GLint page = __GLS_OPCODE_PAGE(inOpcode);
if (page < __GLS_OPCODE_PAGE_MAPPED0) return inOpcode;
#if __GLS_MAPPED_OPCODE_PAGE_COUNT
for (i = 0 ; i < __GLS_MAPPED_OPCODE_PAGE_COUNT ; ++i) {
if (page == __glsOpPageMap[i]) return (
__GLS_OPCODE(
__GLS_OPCODE_PAGE_MAPPED0 + i,
__GLS_OPCODE_OFFSET(inOpcode)
)
);
}
#endif /* __GLS_MAPPED_OPCODE_PAGE_COUNT */
return GLS_NONE;
}
GLSenum __glsOpcodeAPI(GLSopcode inOpcode) {
switch (__GLS_OPCODE_PAGE(inOpcode)) {
case __GLS_OPCODE_PAGE_GLS0:
case __GLS_OPCODE_PAGE_GLS1:
case __GLS_OPCODE_PAGE_GLS2:
return (
__glsOpcodeString[__glsMapOpcode(inOpcode)] ?
GLS_API_GLS :
GLS_NONE
);
case __GLS_OPCODE_PAGE_GL0:
case __GLS_OPCODE_PAGE_GL1:
case __GLS_OPCODE_PAGE_GL2:
case __GLS_OPCODE_PAGE_GL3:
case __GLS_OPCODE_PAGE_GL4:
case __GLS_OPCODE_PAGE_GL5:
case __GLS_OPCODE_PAGE_GL6:
case __GLS_OPCODE_PAGE_GL7:
case __GLS_OPCODE_PAGE_GL8:
case __GLS_OPCODE_PAGE_GL9:
case __GLS_OPCODE_PAGE_GL10:
case __GLS_OPCODE_PAGE_GL11:
case __GLS_OPCODE_PAGE_GL12:
case __GLS_OPCODE_PAGE_GL13:
case __GLS_OPCODE_PAGE_GL14:
case __GLS_OPCODE_PAGE_GL15:
case __GLS_OPCODE_PAGE_GL16:
case __GLS_OPCODE_PAGE_GL17:
case __GLS_OPCODE_PAGE_GL18:
case __GLS_OPCODE_PAGE_GL19:
// DrewB - 1.1
case __GLS_OPCODE_PAGE_GL20:
case __GLS_OPCODE_PAGE_GL_SGI0:
case __GLS_OPCODE_PAGE_GL_SGI1:
case __GLS_OPCODE_PAGE_GL_SGI2:
case __GLS_OPCODE_PAGE_GL_SGI3:
case __GLS_OPCODE_PAGE_GL_SGI4:
// DrewB - ColorSubTable
case __GLS_OPCODE_PAGE_GL_MSFT0:
return (
__glsOpcodeString[__glsMapOpcode(inOpcode)] ?
GLS_API_GL :
GLS_NONE
);
}
return GLS_NONE;
}
GLSopcode __glsUnmapOpcode(GLSopcode inOpcode) {
GLint i;
const GLint page = __GLS_OPCODE_PAGE(inOpcode);
if (page < __GLS_OPCODE_PAGE_MAPPED0) return inOpcode;
#if __GLS_MAPPED_OPCODE_PAGE_COUNT
for (i = 0 ; i < __GLS_MAPPED_OPCODE_PAGE_COUNT ; ++i) {
if (page == __GLS_OPCODE_PAGE_MAPPED0 + i) return (
__GLS_OPCODE(__glsOpPageMap[i], __GLS_OPCODE_OFFSET(inOpcode))
);
}
#endif /* __GLS_MAPPED_OPCODE_PAGE_COUNT */
return GLS_NONE;
}
GLboolean __glsValidateOpcode(GLSopcode inOpcode) {
if (!__glsOpcodeAPI(inOpcode)) {
__GLS_RAISE_ERROR(GLS_UNSUPPORTED_COMMAND);
return GL_FALSE;
}
return GL_TRUE;
}