⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps_1_4.cpp

📁 使用stl技术,(还没看,是听说的)
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/*
-----------------------------------------------------------------------------
This source file is part of OGRE
    (Object-oriented Graphics Rendering Engine)
For the latest info, see http://www.stevestreeting.com/ogre/

Copyright © 2000-2004 The OGRE Team
Also see acknowledgements in Readme.html

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA, or go to
http://www.gnu.org/copyleft/gpl.html.
-----------------------------------------------------------------------------
*/

 
 //---------------------------------------------------------------------------
#include "ps_1_4.h"
#include "OgreGLATIFSInit.h"

//---------------------------------------------------------------------------

/* ********************* START OF PS_1_4 CLASS STATIC DATA ********************************* */


// library of built in symbol types

bool PS_1_4::LibInitialized = false;

PS_1_4::SymbolDef PS_1_4::PS_1_4_SymbolTypeLib[] = {
	// pixel shader versions supported
	{sid_PS_1_4, GL_NONE, ckp_PS_BASE, ckp_PS_1_4},
	{sid_PS_1_1, GL_NONE, ckp_PS_BASE, ckp_PS_1_1},
	{sid_PS_1_2, GL_NONE, ckp_PS_BASE, ckp_PS_1_2 + ckp_PS_1_1},
	{sid_PS_1_3, GL_NONE, ckp_PS_BASE, ckp_PS_1_3 + ckp_PS_1_2 + ckp_PS_1_1},

	// PS_BASE

	// constants
	{sid_C0, GL_CON_0_ATI, ckp_PS_BASE},
	{sid_C1, GL_CON_1_ATI, ckp_PS_BASE},
	{sid_C2, GL_CON_2_ATI, ckp_PS_BASE},
	{sid_C3, GL_CON_3_ATI, ckp_PS_BASE},
	{sid_C4, GL_CON_4_ATI, ckp_PS_BASE},
	{sid_C5, GL_CON_5_ATI, ckp_PS_BASE},
	{sid_C6, GL_CON_6_ATI, ckp_PS_BASE},
	{sid_C7, GL_CON_7_ATI, ckp_PS_BASE},

	// colour
	{sid_V0, GL_PRIMARY_COLOR_ARB,  ckp_PS_BASE},
	{sid_V1, GL_SECONDARY_INTERPOLATOR_ATI,  ckp_PS_BASE},

	// instruction ops
	{sid_ADD, GL_ADD_ATI, ckp_PS_BASE},
	{sid_SUB, GL_SUB_ATI, ckp_PS_BASE},
	{sid_MUL, GL_MUL_ATI, ckp_PS_BASE},
	{sid_MAD, GL_MAD_ATI, ckp_PS_BASE},
	{sid_LRP, GL_LERP_ATI, ckp_PS_BASE},
	{sid_MOV, GL_MOV_ATI, ckp_PS_BASE},
	{sid_CMP, GL_CND0_ATI, ckp_PS_BASE},
	{sid_CND, GL_CND_ATI, ckp_PS_BASE},
	{sid_DP3, GL_DOT3_ATI, ckp_PS_BASE},
	{sid_DP4, GL_DOT4_ATI, ckp_PS_BASE},

	{sid_DEF, GL_NONE, ckp_PS_BASE},

	// Masks
	{sid_R, GL_RED_BIT_ATI, ckp_PS_1_4},
	{sid_RA, GL_RED_BIT_ATI | ALPHA_BIT, ckp_PS_1_4},
	{sid_G, GL_GREEN_BIT_ATI, ckp_PS_1_4},
	{sid_GA, GL_GREEN_BIT_ATI | ALPHA_BIT, ckp_PS_1_4},
	{sid_B, GL_BLUE_BIT_ATI, ckp_PS_1_4},
	{sid_BA, GL_BLUE_BIT_ATI | ALPHA_BIT, ckp_PS_1_4},
	{sid_A, ALPHA_BIT, ckp_PS_BASE},
	{sid_RGBA, RGB_BITS | ALPHA_BIT, ckp_PS_BASE},
	{sid_RGB, RGB_BITS,  ckp_PS_BASE},
	{sid_RG, GL_RED_BIT_ATI | GL_GREEN_BIT_ATI, ckp_PS_1_4},
	{sid_RGA, GL_RED_BIT_ATI | GL_GREEN_BIT_ATI | ALPHA_BIT, ckp_PS_1_4},
	{sid_RB, GL_RED_BIT_ATI | GL_BLUE_BIT_ATI, ckp_PS_1_4},
	{sid_RBA, GL_RED_BIT_ATI | GL_BLUE_BIT_ATI | ALPHA_BIT, ckp_PS_1_4},
	{sid_GB, GL_GREEN_BIT_ATI | GL_BLUE_BIT_ATI, ckp_PS_1_4},
	{sid_GBA, GL_GREEN_BIT_ATI | GL_BLUE_BIT_ATI | ALPHA_BIT, ckp_PS_1_4},

	// Rep
	{sid_RRRR, GL_RED, ckp_PS_1_4},
	{sid_GGGG, GL_GREEN, ckp_PS_1_4},
	{sid_BBBB, GL_BLUE, ckp_PS_BASE},
	{sid_AAAA, GL_ALPHA, ckp_PS_BASE},


	// modifiers
	{sid_X2, GL_2X_BIT_ATI, ckp_PS_BASE}, {sid_X4, GL_4X_BIT_ATI, ckp_PS_BASE},
	{sid_D2, GL_HALF_BIT_ATI, ckp_PS_BASE}, {sid_SAT, GL_SATURATE_BIT_ATI, ckp_PS_BASE},

	// argument modifiers
	{sid_BIAS, GL_BIAS_BIT_ATI, ckp_PS_BASE}, {sid_INVERT, GL_COMP_BIT_ATI, ckp_PS_BASE},
	{sid_NEGATE, GL_NEGATE_BIT_ATI, ckp_PS_BASE}, {sid_BX2, GL_2X_BIT_ATI | GL_BIAS_BIT_ATI, ckp_PS_BASE},

	// seperator characters
	{sid_COMMA, GL_NONE, ckp_PS_BASE}, {sid_VALUE, GL_NONE, ckp_PS_BASE},

	// PS_1_4
	// temp R/W registers
	{sid_R0, GL_REG_0_ATI, ckp_PS_1_4}, {sid_R1, GL_REG_1_ATI, ckp_PS_1_4},	{sid_R2, GL_REG_2_ATI, ckp_PS_1_4},
	{sid_R3, GL_REG_3_ATI, ckp_PS_1_4},	{sid_R4, GL_REG_4_ATI, ckp_PS_1_4},	{sid_R5, GL_REG_5_ATI, ckp_PS_1_4},

	// textures
	{sid_T0, GL_TEXTURE0_ARB, ckp_PS_1_4}, {sid_T1, GL_TEXTURE1_ARB, ckp_PS_1_4}, {sid_T2, GL_TEXTURE2_ARB, ckp_PS_1_4},
	{sid_T3, GL_TEXTURE3_ARB, ckp_PS_1_4}, {sid_T4, GL_TEXTURE4_ARB, ckp_PS_1_4}, {sid_T5, GL_TEXTURE5_ARB, ckp_PS_1_4},
	{sid_DP2ADD, GL_DOT2_ADD_ATI, ckp_PS_1_4},

	// modifiers
	{sid_X8, GL_8X_BIT_ATI, ckp_PS_1_4}, {sid_D8, GL_EIGHTH_BIT_ATI, ckp_PS_1_4}, {sid_D4, GL_QUARTER_BIT_ATI, ckp_PS_1_4},

	// instructions
	{sid_TEXCRD, GL_NONE, ckp_PS_1_4}, {sid_TEXLD, GL_NONE, ckp_PS_1_4},

	// texture swizzlers

	{sid_STR, GL_SWIZZLE_STR_ATI - GL_SWIZZLE_STR_ATI, ckp_PS_1_4},
	{sid_STQ, GL_SWIZZLE_STQ_ATI - GL_SWIZZLE_STR_ATI, ckp_PS_1_4},
	{sid_STRDR, GL_SWIZZLE_STR_DR_ATI - GL_SWIZZLE_STR_ATI, ckp_PS_1_4},
	{sid_STQDQ, GL_SWIZZLE_STQ_DQ_ATI - GL_SWIZZLE_STR_ATI, ckp_PS_1_4}, 

	{sid_BEM, GL_NONE, ckp_PS_1_4},
	{sid_PHASE, GL_NONE, ckp_PS_1_4},

	// PS_1_1 
	// temp R/W registers
	// r0, r1 are mapped to r4, r5
	// t0 to t3 are mapped to r0 to r3
	{sid_1R0, GL_REG_4_ATI, ckp_PS_1_1}, {sid_1R1, GL_REG_5_ATI, ckp_PS_1_1},
	{sid_1T0, GL_REG_0_ATI, ckp_PS_1_1},
	{sid_1T1, GL_REG_1_ATI, ckp_PS_1_1}, {sid_1T2, GL_REG_2_ATI, ckp_PS_1_1}, {sid_1T3, GL_REG_3_ATI, ckp_PS_1_1},

	// instructions common to PS_1_1, PS_1_2, PS_1_3
	{sid_TEX, GL_NONE, ckp_PS_1_1},	{sid_TEXCOORD, GL_NONE, ckp_PS_1_1}, {sid_TEXM3X2PAD, GL_NONE, ckp_PS_1_1},
	{sid_TEXM3X2TEX, GL_NONE, ckp_PS_1_1}, {sid_TEXM3X3PAD, GL_NONE, ckp_PS_1_1}, {sid_TEXM3X3TEX, GL_NONE, ckp_PS_1_1},
	{sid_TEXM3X3SPEC, GL_NONE, ckp_PS_1_1}, {sid_TEXM3X3VSPEC, GL_NONE, ckp_PS_1_1}, {sid_TEXREG2AR, GL_NONE, ckp_PS_1_2},
	{sid_TEXREG2GB, GL_NONE, ckp_PS_1_2},

	// PS_1_2 & PS_1_3
	{sid_TEXREG2RGB, GL_NONE, ckp_PS_1_2}, {sid_TEXDP3, GL_NONE, ckp_PS_1_2}, {sid_TEXDP3TEX, GL_NONE, ckp_PS_1_2},
	

	// Common
	{sid_SKIP, GL_NONE, ckp_PS_BASE}, {sid_PLUS, GL_NONE, ckp_PS_BASE},

	// Non-Terminal Tokens
	{sid_PROGRAM, GL_NONE, ckp_PS_BASE},
	{sid_PROGRAMTYPE, GL_NONE, ckp_PS_BASE},
	{sid_DECLCONSTS, GL_NONE, ckp_PS_BASE},
	{sid_DEFCONST, GL_NONE, ckp_PS_BASE},
	{sid_CONSTANT, GL_NONE, ckp_PS_BASE},
	{sid_COLOR, GL_NONE, ckp_PS_BASE}, 
	{sid_TEXSWIZZLE, GL_NONE, ckp_PS_BASE},
	{sid_UNARYOP, GL_NONE, ckp_PS_BASE},
	{sid_NUMVAL, GL_NONE, ckp_PS_BASE},
	{sid_SEPERATOR, GL_NONE, ckp_PS_BASE},
	{sid_ALUOPS, GL_NONE, ckp_PS_BASE},
	{sid_TEXMASK, GL_NONE, ckp_PS_BASE},
	{sid_TEXOP_PS1_1_3, GL_NONE, ckp_PS_1_1}, 
	{sid_TEXOP_PS1_4, GL_NONE, ckp_PS_1_4},
	{sid_ALU_STATEMENT, GL_NONE, ckp_PS_BASE},
	{sid_DSTMODSAT, GL_NONE, ckp_PS_BASE},
	{sid_UNARYOP_ARGS, GL_NONE, ckp_PS_BASE},
	{sid_REG_PS1_4, GL_NONE, ckp_PS_1_4},
	{sid_TEX_PS1_4, GL_NONE, ckp_PS_1_4},
	{sid_REG_PS1_1_3, GL_NONE, ckp_PS_1_1},
	{sid_TEX_PS1_1_3, GL_NONE, ckp_PS_1_1},
	{sid_DSTINFO, GL_NONE, ckp_PS_BASE},
	{sid_SRCINFO, GL_NONE, ckp_PS_BASE},
	{sid_BINARYOP_ARGS, GL_NONE, ckp_PS_BASE},
	{sid_TERNARYOP_ARGS, GL_NONE, ckp_PS_BASE},
	{sid_TEMPREG, GL_NONE, ckp_PS_BASE},
	{sid_DSTMASK, GL_NONE, ckp_PS_BASE},
	{sid_PRESRCMOD, GL_NONE, ckp_PS_BASE},
	{sid_SRCNAME, GL_NONE, ckp_PS_BASE},
	{sid_SRCREP, GL_NONE, ckp_PS_BASE},
	{sid_POSTSRCMOD, GL_NONE, ckp_PS_BASE},
	{sid_DSTMOD, GL_NONE, ckp_PS_BASE},
	{sid_DSTSAT, GL_NONE, ckp_PS_BASE},
	{sid_BINARYOP, GL_NONE, ckp_PS_BASE},
	{sid_TERNARYOP, GL_NONE, ckp_PS_BASE},
	{sid_TEXOPS_PHASE1, GL_NONE, ckp_PS_BASE},
	{sid_COISSUE, GL_NONE, ckp_PS_BASE},
	{sid_PHASEMARKER, GL_NONE, ckp_PS_1_4},
	{sid_TEXOPS_PHASE2, GL_NONE, ckp_PS_1_4},
	{sid_TEXREG_PS1_4, GL_NONE, ckp_PS_1_4},
	{sid_TEXOPS_PS1_4, GL_NONE, ckp_PS_1_4},
	{sid_TEXOPS_PS1_1_3, GL_NONE, ckp_PS_1_1},
	{sid_TEXCISCOP_PS1_1_3, GL_NONE, ckp_PS_1_1},

};


// Rule Path Database for ps.1.x code based on extended Backus Naur Form notation

// <>	- non-terminal token
#define _rule_		{otRULE,		// ::=	- rule definition
#define _is_		},{otAND,
#define _and_		},{otAND,		//      - blank space is an implied "AND" meaning the token is required
#define _or_		},{otOR,		// |	- or
#define _optional_	},{otOPTIONAL,	// []	- optional
#define _repeat_	},{otREPEAT,	// {}	- repeat until fail
#define _end_		},{otEND},
// " "  - terminal token string

PS_1_4::TokenRule PS_1_4::PS_1_x_RulePath[] = {

	_rule_ sid_PROGRAM, "Program"

		_is_ sid_PROGRAMTYPE
		_optional_ sid_DECLCONSTS
		_optional_ sid_TEXOPS_PHASE1
		_optional_ sid_ALUOPS 
		_optional_ sid_PHASEMARKER
		_optional_ sid_TEXOPS_PHASE2
		_optional_ sid_ALUOPS
		_end_ 

	_rule_ sid_PROGRAMTYPE, "<ProgramType>"

		_is_ sid_PS_1_4, "ps.1.4"
		_or_ sid_PS_1_1, "ps.1.1"
		_or_ sid_PS_1_2, "ps.1.2"
		_or_ sid_PS_1_3, "ps.1.3"
		_end_

	_rule_ sid_PHASEMARKER, "<PhaseMarker>"

		_is_ sid_PHASE, "phase"
		_end_

	_rule_ sid_DECLCONSTS, "<DeclareConstants>"

		_repeat_ sid_DEFCONST
		_end_


	_rule_ sid_TEXOPS_PHASE1, "<TexOps_Phase1>"

		_is_ sid_TEXOPS_PS1_1_3
		_or_ sid_TEXOPS_PS1_4
		_end_

	_rule_ sid_TEXOPS_PHASE2, "<TexOps_Phase2>"

		_is_ sid_TEXOPS_PS1_4
		_end_

	_rule_ sid_NUMVAL, "<NumVal>"

		_is_ sid_VALUE, "Float Value"
		_end_

	_rule_ sid_TEXOPS_PS1_1_3, "<TexOps_PS1_1_3>"

		_repeat_ sid_TEXOP_PS1_1_3
		_end_

	_rule_ sid_TEXOPS_PS1_4, "<TexOps_PS1_4>"

		_repeat_ sid_TEXOP_PS1_4
		_end_

	_rule_ sid_TEXOP_PS1_1_3, "<TexOp_PS1_1_3>"

		_is_  sid_TEXCISCOP_PS1_1_3
		_and_ sid_TEX_PS1_1_3
		_and_ sid_SEPERATOR
		_and_ sid_TEX_PS1_1_3

		_or_  sid_TEXCOORD, "texcoord"
		_and_ sid_TEX_PS1_1_3

		_or_  sid_TEX, "tex"
		_and_ sid_TEX_PS1_1_3



		_end_

	_rule_ sid_TEXOP_PS1_4, "<TexOp_PS1_4>"

		_is_  sid_TEXCRD, "texcrd"
		_and_ sid_REG_PS1_4
		_optional_ sid_TEXMASK
		_and_ sid_SEPERATOR
		_and_ sid_TEXREG_PS1_4

		_or_  sid_TEXLD, "texld"
		_and_ sid_REG_PS1_4
		_optional_ sid_TEXMASK
		_and_ sid_SEPERATOR
		_and_ sid_TEXREG_PS1_4 
		_end_

	_rule_ sid_ALUOPS, "<ALUOps>"

		_repeat_ sid_ALU_STATEMENT
		_end_

	_rule_ sid_ALU_STATEMENT, "<ALUStatement>"

		_is_ sid_COISSUE
		_and_ sid_UNARYOP
		_optional_ sid_DSTMODSAT
		_and_ sid_UNARYOP_ARGS 

		_or_ sid_COISSUE
		_and_ sid_BINARYOP
		_optional_ sid_DSTMODSAT
		_and_ sid_BINARYOP_ARGS
		
		_or_ sid_COISSUE
		_and_ sid_TERNARYOP
		_optional_ sid_DSTMODSAT
		_and_ sid_TERNARYOP_ARGS 
		_end_


	_rule_ sid_TEXREG_PS1_4, "<TexReg_PS1_4>"

		_is_ sid_TEX_PS1_4  _optional_ sid_TEXSWIZZLE
		_or_ sid_REG_PS1_4  _optional_ sid_TEXSWIZZLE
		_end_

	_rule_ sid_UNARYOP_ARGS, "<UnaryOpArgs>"

		_is_  sid_DSTINFO
		_and_ sid_SRCINFO
		_end_

	_rule_ sid_BINARYOP_ARGS, "<BinaryOpArgs>"
	
		_is_  sid_DSTINFO
		_and_ sid_SRCINFO
		_and_ sid_SRCINFO
		_end_

	_rule_ sid_TERNARYOP_ARGS, "<TernaryOpArgs>"
		
		_is_  sid_DSTINFO
		_and_ sid_SRCINFO
		_and_ sid_SRCINFO
		_and_ sid_SRCINFO
		_end_
 
	_rule_ sid_DSTINFO, "<DstInfo>"

		_is_ sid_TEMPREG
		_optional_ sid_DSTMASK
		_end_

	_rule_ sid_SRCINFO, "<SrcInfo>"
	
		_is_ sid_SEPERATOR
		_optional_ sid_PRESRCMOD
		_and_ sid_SRCNAME
		_optional_ sid_POSTSRCMOD
		_optional_ sid_SRCREP
		_end_

	_rule_ sid_SRCNAME, "<SrcName>"
	
		_is_ sid_TEMPREG
		_or_ sid_CONSTANT
		_or_ sid_COLOR
		_end_

	_rule_ sid_DEFCONST, "<DefineConstant>"

		_is_ sid_DEF, "def"
		_and_ sid_CONSTANT
		_and_ sid_SEPERATOR
		_and_ sid_NUMVAL
		_and_ sid_SEPERATOR
		_and_ sid_NUMVAL
		_and_ sid_SEPERATOR
		_and_ sid_NUMVAL
		_and_ sid_SEPERATOR
		_and_ sid_NUMVAL
		_end_

	_rule_ sid_CONSTANT, "<Constant>"

		_is_ sid_C0, "c0"
		_or_ sid_C1, "c1"
		_or_ sid_C2, "c2"
		_or_ sid_C3, "c3"
		_or_ sid_C4, "c4"
		_or_ sid_C5, "c5"
		_or_ sid_C6, "c6"
		_or_ sid_C7, "c7"
		_end_


	_rule_ sid_TEXCISCOP_PS1_1_3, "<TexCISCOp_PS1_1_3>"

		_is_ sid_TEXDP3TEX,		"texdp3tex"
		_or_ sid_TEXDP3,		"texdp3"
		_or_ sid_TEXM3X2PAD,	"texm3x2pad"
		_or_ sid_TEXM3X2TEX,	"texm3x2tex"
		_or_ sid_TEXM3X3PAD,	"texm3x3pad"
		_or_ sid_TEXM3X3TEX,	"texm3x3tex"
		_or_ sid_TEXM3X3SPEC,	"texm3x3spec"
		_or_ sid_TEXM3X3VSPEC,	"texm3x3vspec"
		_or_ sid_TEXREG2RGB,	"texreg2rgb"
		_or_ sid_TEXREG2AR,		"texreg2ar"
		_or_ sid_TEXREG2GB,		"texreg2gb"
		_end_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -