| /*!**************************************************************************** | |
| @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) | |
| *****************************************************************************/ | |