|  | /*!**************************************************************************** | 
|  |  | 
|  | @file         PVRTPFXParser.h | 
|  | @copyright    Copyright (c) Imagination Technologies Limited. | 
|  | @brief        Declaration of PFX file parser | 
|  |  | 
|  | ******************************************************************************/ | 
|  |  | 
|  | #ifndef _PVRTPFXPARSER_H_ | 
|  | #define _PVRTPFXPARSER_H_ | 
|  |  | 
|  |  | 
|  | /***************************************************************************** | 
|  | ** Includes | 
|  | ******************************************************************************/ | 
|  |  | 
|  | #include "PVRTArray.h" | 
|  | #include "PVRTString.h" | 
|  | #include "PVRTError.h" | 
|  | #include "PVRTTexture.h" | 
|  | #include "PVRTVector.h" | 
|  | #include "PVRTSkipGraph.h" | 
|  | #include "PVRTStringHash.h" | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Helper Funcions | 
|  | ****************************************************************************/ | 
|  | void PVRTPFXCreateStringCopy(char** ppDst, const char* pSrc); | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Enumeration | 
|  | ****************************************************************************/ | 
|  | /*!************************************************************************** | 
|  | @enum	ESemanticDefaultDataType | 
|  | @brief  Enum values for the various variable types supported | 
|  | ****************************************************************************/ | 
|  | enum ESemanticDefaultDataType | 
|  | { | 
|  | eDataTypeMat2, | 
|  | eDataTypeMat3, | 
|  | eDataTypeMat4, | 
|  | eDataTypeVec2, | 
|  | eDataTypeVec3, | 
|  | eDataTypeVec4, | 
|  | eDataTypeIvec2, | 
|  | eDataTypeIvec3, | 
|  | eDataTypeIvec4, | 
|  | eDataTypeBvec2, | 
|  | eDataTypeBvec3, | 
|  | eDataTypeBvec4, | 
|  | eDataTypeFloat, | 
|  | eDataTypeInt, | 
|  | eDataTypeBool, | 
|  |  | 
|  | eNumDefaultDataTypes, | 
|  | eDataTypeNone, | 
|  |  | 
|  | // Conceptual data types | 
|  | eDataTypeRGB, | 
|  | eDataTypeRGBA | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @enum   EDefaultDataInternalType | 
|  | @brief  Enum values for defining whether a variable is float, interger or bool | 
|  | ****************************************************************************/ | 
|  | enum EDefaultDataInternalType | 
|  | { | 
|  | eFloating, | 
|  | eInteger, | 
|  | eBoolean | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @enum	EPVRTPFXPassType | 
|  | @brief  Decribes the type of render required | 
|  | ****************************************************************************/ | 
|  | enum EPVRTPFXPassType | 
|  | { | 
|  | eNULL_PASS, | 
|  | eCAMERA_PASS, | 
|  | ePOSTPROCESS_PASS, | 
|  | eENVMAPCUBE_PASS, | 
|  | eENVMAPSPH_PASS | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @enum	EPVRTPFXPassType | 
|  | @brief  Decribes the type of render required | 
|  | ****************************************************************************/ | 
|  | enum EPVRTPFXPassView | 
|  | { | 
|  | eVIEW_CURRENT,			// The scene's active camera is used | 
|  | eVIEW_POD_CAMERA,		// The specified camera is used | 
|  | eVIEW_NONE				// No specified view | 
|  | }; | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Structures | 
|  | ****************************************************************************/ | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTPFXParserHeader | 
|  | @brief  Struct for storing PFX file header data | 
|  | ****************************************************************************/ | 
|  | struct SPVRTPFXParserHeader | 
|  | { | 
|  | CPVRTString			Version; | 
|  | CPVRTString			Description; | 
|  | CPVRTString			Copyright; | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTPFXParserTexture | 
|  | @brief  Struct for storing PFX data from the texture block | 
|  | ****************************************************************************/ | 
|  | struct SPVRTPFXParserTexture | 
|  | { | 
|  | CPVRTStringHash		Name; | 
|  | CPVRTStringHash		FileName; | 
|  | bool				bRenderToTexture; | 
|  | unsigned int		nMin, nMag, nMIP; | 
|  | unsigned int		nWrapS, nWrapT, nWrapR;	// either GL_CLAMP or GL_REPEAT | 
|  | unsigned int		uiWidth, uiHeight; | 
|  | unsigned int		uiFlags; | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTPFXParserEffectTexture | 
|  | @brief  Stores effect texture information | 
|  | ****************************************************************************/ | 
|  | struct SPVRTPFXParserEffectTexture | 
|  | { | 
|  | CPVRTStringHash				Name;				// Name of texture. | 
|  | unsigned int				nNumber;			// Texture number to set | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTPFXParserShader | 
|  | @brief  Struct for storing PFX data from the shader block | 
|  | ****************************************************************************/ | 
|  | struct SPVRTPFXParserShader | 
|  | { | 
|  | CPVRTStringHash			Name; | 
|  | bool					bUseFileName; | 
|  | char*					pszGLSLfile; | 
|  | char*					pszGLSLBinaryFile; | 
|  | char*					pszGLSLcode; | 
|  | char*					pbGLSLBinary; | 
|  | unsigned int			nGLSLBinarySize; | 
|  | unsigned int			nFirstLineNumber;	// Line number in the text file where this code began; use to correct line-numbers in compiler errors | 
|  | unsigned int			nLastLineNumber;	// The final line number of the GLSL block. | 
|  |  | 
|  | SPVRTPFXParserShader(); | 
|  | ~SPVRTPFXParserShader(); | 
|  | SPVRTPFXParserShader(const SPVRTPFXParserShader& rhs); | 
|  | SPVRTPFXParserShader& operator=(const SPVRTPFXParserShader& rhs); | 
|  |  | 
|  | void Copy(const SPVRTPFXParserShader& rhs); | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTSemanticDefaultDataTypeInfo | 
|  | @brief  Struct for storing default data types | 
|  | ****************************************************************************/ | 
|  | struct SPVRTSemanticDefaultDataTypeInfo | 
|  | { | 
|  | ESemanticDefaultDataType	eType; | 
|  | const char					*pszName; | 
|  | unsigned int				nNumberDataItems; | 
|  | EDefaultDataInternalType	eInternalType; | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTSemanticDefaultData | 
|  | @brief  Stores a default value | 
|  | ****************************************************************************/ | 
|  | struct SPVRTSemanticDefaultData | 
|  | { | 
|  | float						pfData[16]; | 
|  | int							pnData[4]; | 
|  | bool						pbData[4]; | 
|  | ESemanticDefaultDataType	eType; | 
|  |  | 
|  | SPVRTSemanticDefaultData(); | 
|  | SPVRTSemanticDefaultData(const SPVRTSemanticDefaultData& rhs); | 
|  | SPVRTSemanticDefaultData& operator=(const SPVRTSemanticDefaultData& rhs); | 
|  |  | 
|  | void Copy(const SPVRTSemanticDefaultData& rhs); | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTPFXParserSemantic | 
|  | @brief  Stores semantic information | 
|  | ****************************************************************************/ | 
|  | struct SPVRTPFXParserSemantic | 
|  | { | 
|  | char						*pszName;				/*!< The variable name as used in the shader-language code */ | 
|  | char						*pszValue;				/*!< For example: LIGHTPOSITION */ | 
|  | unsigned int				nIdx;					/*!< Index; for example two semantics might be LIGHTPOSITION0 and LIGHTPOSITION1 */ | 
|  | SPVRTSemanticDefaultData	sDefaultValue;			/*!< Default value */ | 
|  |  | 
|  | SPVRTPFXParserSemantic(); | 
|  | ~SPVRTPFXParserSemantic(); | 
|  | SPVRTPFXParserSemantic(const SPVRTPFXParserSemantic& rhs); | 
|  | SPVRTPFXParserSemantic& operator=(const SPVRTPFXParserSemantic& rhs); | 
|  |  | 
|  | void Copy(const SPVRTPFXParserSemantic& rhs); | 
|  | }; | 
|  |  | 
|  |  | 
|  | struct SPVRTPFXParserEffect;	// Forward declaration | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTPFXRenderPass | 
|  | @brief  Stores render pass information | 
|  | ****************************************************************************/ | 
|  | struct SPVRTPFXRenderPass | 
|  | { | 
|  | EPVRTPFXPassType		eRenderPassType;			// Type of pass. | 
|  | EPVRTPFXPassView		eViewType;					// View type. | 
|  | PVRTuint32				uiFormatFlags;				// Surface Type. | 
|  | SPVRTPFXParserEffect*	pEffect;					// Matched pass. Needed but determined from effect block. | 
|  | SPVRTPFXParserTexture*	pTexture;					// The RTT target for this pass. | 
|  | CPVRTString				NodeName;					// POD Camera name. | 
|  | CPVRTString				SemanticName;				// Name of this pass. | 
|  |  | 
|  | SPVRTPFXRenderPass(); | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTTargetPair | 
|  | @brief  Stores a buffer type and name for a render target. | 
|  | ****************************************************************************/ | 
|  | struct SPVRTTargetPair | 
|  | { | 
|  | CPVRTString				BufferType; | 
|  | CPVRTString				TargetName; | 
|  | }; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @struct SPVRTPFXParserEffect | 
|  | @brief  Stores effect information | 
|  | ****************************************************************************/ | 
|  | struct SPVRTPFXParserEffect | 
|  | { | 
|  | CPVRTStringHash							Name; | 
|  | CPVRTString								Annotation; | 
|  |  | 
|  | CPVRTStringHash							VertexShaderName; | 
|  | CPVRTStringHash							FragmentShaderName; | 
|  |  | 
|  | CPVRTArray<SPVRTPFXParserSemantic>		Uniforms; | 
|  | CPVRTArray<SPVRTPFXParserSemantic>		Attributes; | 
|  | CPVRTArray<SPVRTPFXParserEffectTexture>	Textures; | 
|  | CPVRTArray<SPVRTTargetPair>				Targets; | 
|  |  | 
|  | SPVRTPFXParserEffect(); | 
|  | }; | 
|  |  | 
|  | /**************************************************************************** | 
|  | ** Constants | 
|  | ****************************************************************************/ | 
|  | const PVRTuint32 PVRPFXTEX_COLOUR = PVRTuint32(1<<30); | 
|  | const PVRTuint32 PVRPFXTEX_DEPTH  = PVRTuint32(1<<31); | 
|  |  | 
|  | const static SPVRTSemanticDefaultDataTypeInfo c_psSemanticDefaultDataTypeInfo[] = | 
|  | { | 
|  | { eDataTypeMat2,		"mat2",			4,		eFloating }, | 
|  | { eDataTypeMat3,		"mat3",			9,		eFloating }, | 
|  | { eDataTypeMat4,		"mat4",			16,		eFloating }, | 
|  | { eDataTypeVec2,		"vec2",			2,		eFloating }, | 
|  | { eDataTypeVec3,		"vec3",			3,		eFloating }, | 
|  | { eDataTypeVec4,		"vec4",			4,		eFloating }, | 
|  | { eDataTypeIvec2,		"ivec2",		2,		eInteger }, | 
|  | { eDataTypeIvec3,		"ivec3",		3,		eInteger }, | 
|  | { eDataTypeIvec4,		"ivec4",		4,		eInteger }, | 
|  | { eDataTypeBvec2,		"bvec2",		2,		eBoolean }, | 
|  | { eDataTypeBvec3,		"bvec3",		3,		eBoolean }, | 
|  | { eDataTypeBvec4,		"bvec4",		4,		eBoolean }, | 
|  | { eDataTypeFloat,		"float",		1,		eFloating }, | 
|  | { eDataTypeInt,			"int",			1,		eInteger }, | 
|  | { eDataTypeBool,		"bool",			1,		eBoolean }, | 
|  | }; | 
|  |  | 
|  |  | 
|  | class CPVRTPFXParserReadContext; | 
|  |  | 
|  | /*!************************************************************************** | 
|  | @class CPVRTPFXParser | 
|  | @brief PFX parser | 
|  | ****************************************************************************/ | 
|  | class CPVRTPFXParser | 
|  | { | 
|  | public: | 
|  | /*!*************************************************************************** | 
|  | @fn      			CPVRTPFXParser | 
|  | @brief     		Sets initial values. | 
|  | *****************************************************************************/ | 
|  | CPVRTPFXParser(); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			~CPVRTPFXParser | 
|  | @brief     		Frees memory used. | 
|  | *****************************************************************************/ | 
|  | ~CPVRTPFXParser(); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseFromMemory | 
|  | @param[in]				pszScript		PFX script | 
|  | @param[out]				pReturnError	error string | 
|  | @return				PVR_SUCCESS for success parsing file | 
|  | PVR_FAIL if file doesn't exist or is invalid | 
|  | @brief     		Parses a PFX script from memory. | 
|  | *****************************************************************************/ | 
|  | EPVRTError ParseFromMemory(const char * const pszScript, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseFromFile | 
|  | @param[in]				pszFileName		PFX file name | 
|  | @param[out]				pReturnError	error string | 
|  | @return				PVR_SUCCESS for success parsing file | 
|  | PVR_FAIL if file doesn't exist or is invalid | 
|  | @brief     		Reads the PFX file and calls the parser. | 
|  | *****************************************************************************/ | 
|  | EPVRTError ParseFromFile(const char * const pszFileName, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			SetViewportSize | 
|  | @param[in]				uiWidth				New viewport width | 
|  | @param[in]				uiHeight			New viewport height | 
|  | @return			bool				True on success | 
|  | @brief     		Allows the current viewport size to be set. This value | 
|  | is used for calculating relative texture resolutions | 
|  | *****************************************************************************/ | 
|  | bool SetViewportSize(unsigned int uiWidth, unsigned int uiHeight); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		FindTextureIndex | 
|  | @param[in]			TextureName		The name of the texture to find | 
|  | @param[in]			uiEffect		The effect block to look for the texture in | 
|  | @return			Index in to the effect.Texture array. | 
|  | @brief     	Returns the index in to the texture array within the effect | 
|  | block where the given texture resides. | 
|  | *****************************************************************************/ | 
|  | unsigned int FindTextureIndex(const CPVRTStringHash& TextureName, unsigned int uiEffect) const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			RetrieveRenderPassDependencies | 
|  | @param[out]			aRequiredRenderPasses	Dynamic array of required render passes | 
|  | @param[in]			aszActiveEffectStrings	Dynamic array containing names of active | 
|  | effects in the application | 
|  | @return				success of failure | 
|  | @brief     		    Takes an array of strings containing the names of active | 
|  | effects for this PFX in a given application and then outputs | 
|  | an array of the render passes the application needs to perform that is sorted | 
|  | into the order they need to be executed (where [0] is the first to be executed, | 
|  | and [n] is the last). | 
|  | In addition to determining the order of dependent passes | 
|  | (such as POSTPROCESS render passes), this function should check if | 
|  | CAMERA passes are referenced by active EFFECT blocks and use this information | 
|  | to strip redundant passes. | 
|  | *****************************************************************************/ | 
|  | bool RetrieveRenderPassDependencies(CPVRTArray<SPVRTPFXRenderPass*> &aRequiredRenderPasses, | 
|  | CPVRTArray<CPVRTStringHash> &aszActiveEffectStrings); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     	    Returns the number of render passes within this PFX. | 
|  | @return			The number of render passes required | 
|  | *****************************************************************************/ | 
|  | unsigned int GetNumberRenderPasses() const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     	    Returns the given render pass. | 
|  | @param[in]		uiIndex				The render pass index. | 
|  | @return			A given render pass. | 
|  | *****************************************************************************/ | 
|  | const SPVRTPFXRenderPass& GetRenderPass(unsigned int uiIndex) const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetNumberFragmentShaders | 
|  | @return			Number of fragment shaders. | 
|  | @brief     	    Returns the number of fragment shaders referenced in the PFX. | 
|  | *****************************************************************************/ | 
|  | unsigned int GetNumberFragmentShaders() const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetFragmentShader | 
|  | @param[in]		uiIndex		The index of this shader. | 
|  | @return			The PFX fragment shader. | 
|  | @brief     	    Returns a given fragment shader. | 
|  | *****************************************************************************/ | 
|  | SPVRTPFXParserShader& GetFragmentShader(unsigned int uiIndex); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetNumberVertexShaders | 
|  | @return			Number of vertex shaders. | 
|  | @brief     	    Returns the number of vertex shaders referenced in the PFX. | 
|  | *****************************************************************************/ | 
|  | unsigned int GetNumberVertexShaders() const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetVertexShader | 
|  | @param[in]		uiIndex		The index of this shader. | 
|  | @return			The PFX vertex shader. | 
|  | @brief     	    Returns a given vertex shader. | 
|  | *****************************************************************************/ | 
|  | SPVRTPFXParserShader& GetVertexShader(unsigned int uiIndex); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetNumberEffects | 
|  | @return			Number of effects. | 
|  | @brief     	    Returns the number of effects referenced in the PFX. | 
|  | *****************************************************************************/ | 
|  | unsigned int GetNumberEffects() const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetEffect | 
|  | @param[in]		uiIndex		The index of this effect. | 
|  | @return			The PFX effect. | 
|  | @brief     	    Returns a given effect. | 
|  | *****************************************************************************/ | 
|  | const SPVRTPFXParserEffect& GetEffect(unsigned int uiIndex) const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		FindEffectByName | 
|  | @param[in]		Name		Name of the effect. | 
|  | @return			int | 
|  | @brief     	    Returns the index of the given string. Returns -1 on failure. | 
|  | *****************************************************************************/ | 
|  | int FindEffectByName(const CPVRTStringHash& Name) const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		FindTextureByName | 
|  | @param[in]		Name		Name of the texture. | 
|  | @return			int | 
|  | @brief     	    Returns the index of the given texture. Returns -1 on failure. | 
|  | *****************************************************************************/ | 
|  | int FindTextureByName(const CPVRTStringHash& Name) const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetNumberTextures | 
|  | @return			Number of effects. | 
|  | @brief     	    Returns the number of textures referenced in the PFX. | 
|  | *****************************************************************************/ | 
|  | unsigned int GetNumberTextures() const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetTexture | 
|  | @param[in]		uiIndex		The index of this texture | 
|  | @return			The PFX texture. | 
|  | @brief     	    Returns a given texture. | 
|  | *****************************************************************************/ | 
|  | const SPVRTPFXParserTexture* GetTexture(unsigned int uiIndex) const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetPFXFileName | 
|  | @return			The filename for this PFX file | 
|  | @brief     	    eturns the PFX file name associated with this object. | 
|  | *****************************************************************************/ | 
|  | const CPVRTString& GetPFXFileName() const; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		GetPostProcessNames | 
|  | @return			An array of post process names | 
|  | @brief     	    Returns a list of prost process effect names. | 
|  | *****************************************************************************/ | 
|  | const CPVRTArray<CPVRTString>& GetPostProcessNames() const; | 
|  |  | 
|  | public: | 
|  | static const unsigned int							VIEWPORT_SIZE; | 
|  |  | 
|  | private: | 
|  | SPVRTPFXParserHeader								m_sHeader; | 
|  |  | 
|  | CPVRTArrayManagedPointers<SPVRTPFXParserTexture>	m_psTexture; | 
|  | CPVRTArray<SPVRTPFXParserShader>					m_psFragmentShader; | 
|  | CPVRTArray<SPVRTPFXParserShader>					m_psVertexShader; | 
|  | CPVRTArray<SPVRTPFXParserEffect>					m_psEffect; | 
|  | CPVRTArray<SPVRTPFXRenderPass>						m_RenderPasses; | 
|  |  | 
|  | CPVRTString											m_szFileName; | 
|  | CPVRTPFXParserReadContext*							m_psContext; | 
|  | CPVRTArray<CPVRTString>								m_aszPostProcessNames; | 
|  |  | 
|  | unsigned int										m_uiViewportWidth; | 
|  | unsigned int										m_uiViewportHeight; | 
|  | CPVRTSkipGraphRoot<SPVRTPFXRenderPass*>				m_renderPassSkipGraph; | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			Parse | 
|  | @param[out]			pReturnError	error string | 
|  | @return				true for success parsing file | 
|  | @brief     		    Parses a loaded PFX file. | 
|  | *****************************************************************************/ | 
|  | bool Parse(	CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ReduceWhitespace | 
|  | @param[out]			line		output text | 
|  | @brief     		    Reduces all white space characters in the string to one | 
|  | blank space. | 
|  | *****************************************************************************/ | 
|  | void ReduceWhitespace(char *line); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			GetEndTag | 
|  | @param[in]			pszTagName		tag name | 
|  | @param[in]			nStartLine		start line | 
|  | @param[out]			pnEndLine		line end tag found | 
|  | @return				true if tag found | 
|  | @brief     		    Searches for end tag pszTagName from line nStartLine. | 
|  | Returns true and outputs the line number of the end tag if | 
|  | found, otherwise returning false. | 
|  | *****************************************************************************/ | 
|  | bool GetEndTag(const char *pszTagName, int nStartLine, int *pnEndLine); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     		Finds the parameter after the specified delimiting character and | 
|  | returns the parameter as a string. An empty string is returned | 
|  | if a parameter cannot be found | 
|  | @param[out]		aszSourceString		The string to search | 
|  | @param[in]			parameterTag		The tag to find | 
|  | @param[in]			delimiter			Delimiters | 
|  | @return			Found parameter or empty string | 
|  | *****************************************************************************/ | 
|  | CPVRTString FindParameter(char *aszSourceString, const CPVRTString ¶meterTag, const CPVRTString &delimiter); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ReadStringToken | 
|  | @param[in]			pszSource			Parameter string to process | 
|  | @param[out]		output				Processed string | 
|  | @param[out]		ErrorStr			String containing errors | 
|  | @param[in]			iLine				The line to read | 
|  | @param[in]			pCaller				The caller's name or identifier | 
|  | @return			Returns true on success | 
|  | @brief     		Processes the null terminated char array as if it's a | 
|  | formatted string array. Quote marks are determined to be | 
|  | start and end of strings. If no quote marks are found the | 
|  | string is delimited by whitespace. | 
|  | *****************************************************************************/ | 
|  | bool ReadStringToken(char* pszSource, CPVRTString& output, CPVRTString &ErrorStr, int iLine, const char* pCaller); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseHeader | 
|  | @param[in]			nStartLine		start line number | 
|  | @param[in]			nEndLine		end line number | 
|  | @param[out]			pReturnError	error string | 
|  | @return				true if parse is successful | 
|  | @brief     		    Parses the HEADER section of the PFX file. | 
|  | *****************************************************************************/ | 
|  | bool ParseHeader(int nStartLine, int nEndLine, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     		    Parses the TEXTURES section of the PFX file. | 
|  | This style is deprecated but remains for backwards | 
|  | compatibility. ** DEPRECATED ** | 
|  | @param[in]			nStartLine		Start line number | 
|  | @param[in]			nEndLine		End line number | 
|  | @param[out]			pReturnError	Error string | 
|  | @return				true if parse is successful | 
|  | *****************************************************************************/ | 
|  | bool ParseTextures(int nStartLine, int nEndLine, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseTexture | 
|  | @param[in]			nStartLine		start line number | 
|  | @param[in]			nEndLine		end line number | 
|  | @param[out]			pReturnError	error string | 
|  | @return				true if parse is successful | 
|  | @brief     		    Parses the TEXTURE section of the PFX file. | 
|  | *****************************************************************************/ | 
|  | bool ParseTexture(int nStartLine, int nEndLine, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseTarget | 
|  | @param[in]			nStartLine		start line number | 
|  | @param[in]			nEndLine		end line number | 
|  | @param[out]			pReturnError	error string | 
|  | @return				true if parse is successful | 
|  | @brief     		    Parses the TARGET section of the PFX file. | 
|  | *****************************************************************************/ | 
|  | bool ParseTarget(int nStartLine, int nEndLine, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseGenericSurface | 
|  | @param[in]			nStartLine		start line number | 
|  | @param[in]			nEndLine		end line number | 
|  | @param[out]			Params			Structure containing PFXTexture parameters | 
|  | @param[out]			KnownCmds		An array of unknown commands for the caller | 
|  | to check. | 
|  | @param[in]			pCaller			The caller's description for error messages. | 
|  | @param[out]			pReturnError	error string | 
|  | @return				true if parse is successful | 
|  | @brief     		    Parses generic data from TARGET and TEXTURE blocks. Namely | 
|  | wrapping and filter commands. | 
|  | *****************************************************************************/ | 
|  | bool ParseGenericSurface(int nStartLine, int nEndLine, SPVRTPFXParserTexture& Params, CPVRTArray<CPVRTHash>& KnownCmds, | 
|  | const char* pCaller, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseShader | 
|  | @param[in]			nStartLine		start line number | 
|  | @param[in]			nEndLine		end line number | 
|  | @param[out]			pReturnError	error string | 
|  | @param[out]			shader			shader data object | 
|  | @param[in]			pszBlockName	name of block in PFX file | 
|  | @return				true if parse is successful | 
|  | @brief     		    Parses the VERTEXSHADER or FRAGMENTSHADER section of the | 
|  | PFX file. | 
|  | *****************************************************************************/ | 
|  | bool ParseShader(int nStartLine, int nEndLine, CPVRTString *pReturnError, SPVRTPFXParserShader &shader, const char * const pszBlockName); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseSemantic | 
|  | @param[out]			semantic		semantic data object | 
|  | @param[in]			nStartLine		start line number | 
|  | @param[out]			pReturnError	error string | 
|  | @return				true if parse is successful | 
|  | @brief     		    Parses a semantic. | 
|  | *****************************************************************************/ | 
|  | bool ParseSemantic(SPVRTPFXParserSemantic &semantic, const int nStartLine, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      			ParseEffect | 
|  | @param[out]			effect			effect data object | 
|  | @param[in]			nStartLine		start line number | 
|  | @param[in]			nEndLine		end line number | 
|  | @param[out]			pReturnError	error string | 
|  | @return				true if parse is successful | 
|  | @brief     		    Parses the EFFECT section of the PFX file. | 
|  | *****************************************************************************/ | 
|  | bool ParseEffect(SPVRTPFXParserEffect &effect, const int nStartLine, const int nEndLine, CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @fn      		    ParseTextureFlags | 
|  | @param[in]			c_pszRemainingLine		Pointer to the remaining string | 
|  | @param[out]			ppFlagsOut				Resultant flags set | 
|  | @param[in]			uiNumFlags				Number of flags to set | 
|  | @param[in]			c_ppszFlagNames			Flag names | 
|  | @param[in]			uiNumFlagNames			Number of flag names | 
|  | @param[in]			pReturnError			Return error to set | 
|  | @param[in]			iLineNum				The line number for error reporting | 
|  | @return			    true if successful | 
|  | @brief     	        Parses the texture flag sections. | 
|  | *****************************************************************************/ | 
|  | bool ParseTextureFlags(	const char* c_pszRemainingLine, unsigned int** ppFlagsOut, unsigned int uiNumFlags, const char** c_ppszFlagNames, unsigned int uiNumFlagNames, | 
|  | CPVRTString * const pReturnError, int iLineNum); | 
|  | /*!*************************************************************************** | 
|  | @brief     	Looks through all of the effects in the .pfx and determines | 
|  | the order of render passes that have been declared with | 
|  | the RENDER tag (found in [TEXTURES]. | 
|  | @param[out]	pReturnError | 
|  | @return		True if dependency tree is valid. False if there are errors | 
|  | in the dependency tree (e.g. recursion) | 
|  | *****************************************************************************/ | 
|  | bool DetermineRenderPassDependencies(CPVRTString * const pReturnError); | 
|  |  | 
|  | /*!*************************************************************************** | 
|  | @brief     	Recursively look through dependencies until leaf nodes are | 
|  | encountered. At this point, add a given leaf node to the | 
|  | aRequiredRenderPasses array and return. Repeat this process | 
|  | until all dependencies are added to the array. | 
|  | @param[in]		aRequiredRenderPasses | 
|  | @param[in]		renderPassNode | 
|  | *****************************************************************************/ | 
|  | void AddRenderPassNodeDependencies(	CPVRTArray<SPVRTPFXRenderPass*> &aRequiredRenderPasses, | 
|  | CPVRTSkipGraphNode<SPVRTPFXRenderPass*> &renderPassNode); | 
|  | }; | 
|  |  | 
|  |  | 
|  | #endif /* _PVRTPFXPARSER_H_ */ | 
|  |  | 
|  | /***************************************************************************** | 
|  | End of file (PVRTPFXParser.h) | 
|  | *****************************************************************************/ | 
|  |  |