123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- /******************************************************************************
- @File PVRTPFXParser.h
- @Title PVRTPFXParser
- @Version
- @Copyright Copyright (C) Imagination Technologies Limited.
- @Platform Windows + Linux
- @Description Declaration of PFX file parser
- ******************************************************************************/
- #ifndef _PVRTPFXPARSER_H_
- #define _PVRTPFXPARSER_H_
- /*****************************************************************************
- ** Includes
- ******************************************************************************/
- #include "PVRTString.h"
- #include "PVRTError.h"
- #include "PVRTTexture.h"
- #include "PVRTVector.h"
- /****************************************************************************
- ** Structures
- ****************************************************************************/
- /*!**************************************************************************
- @Struct SPVRTPFXParserHeader
- @Brief Struct for storing PFX file header data
- ****************************************************************************/
- struct SPVRTPFXParserHeader
- {
- char *pszVersion;
- char *pszDescription;
- char *pszCopyright;
- };
- /*!**************************************************************************
- @Struct SPVRTPFXParserTexture
- @Brief Struct for storing PFX data from the texture block
- ****************************************************************************/
- struct SPVRTPFXParserTexture
- {
- char *pszName;
- char *pszFile;
- 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;
- SPVRTPFXParserTexture()
- :
- pszName(NULL),
- pszFile(NULL)
- {
- }
- };
- /*!**************************************************************************
- @Struct SPVRTPFXParserShader
- @Brief Struct for storing PFX data from the shader block
- ****************************************************************************/
- struct SPVRTPFXParserShader
- {
- char *pszName;
- 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
- };
- /*!**************************************************************************
- @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
- };
- /*!**************************************************************************
- @Enum EDefaultDataInternalType
- @Brief Enum values for defining whether a variable is float, interger or bool
- ****************************************************************************/
- enum EDefaultDataInternalType
- {
- eFloating,
- eInteger,
- eBoolean
- };
- struct SSemanticDefaultDataTypeInfo
- {
- ESemanticDefaultDataType eType;
- const char *pszName;
- unsigned int nNumberDataItems;
- EDefaultDataInternalType eInternalType;
- };
- const static SSemanticDefaultDataTypeInfo 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 }
- };
- /*!**************************************************************************
- @Struct SPVRTSemanticDefaultData
- @Brief Stores a default value
- ****************************************************************************/
- struct SPVRTSemanticDefaultData
- {
- float pfData[16];
- int pnData[4];
- bool pbData[4];
- ESemanticDefaultDataType eType;
- };
- /*!**************************************************************************
- @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 */
- };
- /*!**************************************************************************
- @Struct SPVRTPFXParserEffectTexture
- @Brief Stores effect texture information
- ****************************************************************************/
- struct SPVRTPFXParserEffectTexture
- {
- unsigned int nNumber; /*!< Texture number to set */
- char *pszName; /*!< Name of the texture to set there */
- unsigned int u32Type; /*!< Identifying cube maps etc. */
- };
- /*!**************************************************************************
- @enum ERenderPassType
- @Brief Decribes the type of render required
- ****************************************************************************/
- enum ERenderPassType
- {
- eCubeMapRender,
- eSphMapRender,
- eCameraRender,
- ePostProcessRender
- };
- enum ERenderPassCamera
- {
- eFromNode,
- eFromExplicitPositon,
- eFromCenterOfCurrent
- };
- enum PixelType;
- /*!**************************************************************************
- @Struct SPVRTPFXRenderPass
- @Brief Stores render pass information
- ****************************************************************************/
- struct SPVRTPFXRenderPass
- {
- int i32TextureNumber; // Element no within parser texture array
- ERenderPassType eRenderPassType;
- ERenderPassCamera eCameraPosition;
- char* pszSemanticName;
- PixelType eFormat;
- PVRTVec3 vecPos;
- char *pszNodeName;
-
- SPVRTPFXRenderPass()
- :
- i32TextureNumber(0),
- pszSemanticName(NULL),
- vecPos(0,0,0),
- pszNodeName(NULL)
- {
- }
- ~SPVRTPFXRenderPass()
- {
- if(pszSemanticName) delete[] pszSemanticName;
- if(pszNodeName) delete[] pszNodeName;
- }
- };
- /*!**************************************************************************
- @Struct SPVRTPFXParserEffect
- @Brief Stores effect information
- ****************************************************************************/
- struct SPVRTPFXParserEffect
- {
- char *pszName;
- char *pszAnnotation;
- char *pszVertexShaderName;
- char *pszFragmentShaderName;
- SPVRTPFXParserSemantic *psUniform;
- unsigned int nNumUniforms, nMaxUniforms;
- SPVRTPFXParserSemantic *psAttribute;
- unsigned int nNumAttributes, nMaxAttributes;
- SPVRTPFXParserEffectTexture *psTextures;
- unsigned int nNumTextures, nMaxTextures;
- };
- class CPVRTPFXParserReadContext;
- /*!**************************************************************************
- @Class CPVRTPFXParser
- @Brief PFX parser
- ****************************************************************************/
- class CPVRTPFXParser
- {
- public:
- /*!***************************************************************************
- @Function CPVRTPFXParser
- @Description Sets initial values.
- *****************************************************************************/
- CPVRTPFXParser();
- /*!***************************************************************************
- @Function ~CPVRTPFXParser
- @Description Frees memory used.
- *****************************************************************************/
- ~CPVRTPFXParser();
- /*!***************************************************************************
- @Function ParseFromMemory
- @Input pszScript PFX script
- @Output pReturnError error string
- @Return EPVRTError PVR_SUCCESS for success parsing file
- PVR_FAIL if file doesn't exist or is invalid
- @Description Parses a PFX script from memory.
- *****************************************************************************/
- EPVRTError ParseFromMemory(const char * const pszScript, CPVRTString * const pReturnError);
- /*!***************************************************************************
- @Function ParseFromFile
- @Input pszFileName PFX file name
- @Output pReturnError error string
- @Return EPVRTError PVR_SUCCESS for success parsing file
- PVR_FAIL if file doesn't exist or is invalid
- @Description Reads the PFX file and calls the parser.
- *****************************************************************************/
- EPVRTError ParseFromFile(const char * const pszFileName, CPVRTString * const pReturnError);
- /*!***************************************************************************
- @Function SetViewportSize
- @Input uiWidth New viewport width
- @Input uiHeight New viewport height
- @Return bool True on success
- @Description 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);
- /*!***************************************************************************
- @Function DebugDump
- @Return string A string containing debug information for the user
- to handle
- @Description Debug output.
- *****************************************************************************/
- CPVRTString DebugDump() const;
- SPVRTPFXParserHeader m_sHeader;
- SPVRTPFXParserTexture *m_psTexture;
- unsigned int m_nNumTextures, m_nMaxTextures;
- SPVRTPFXParserShader *m_psFragmentShader;
- unsigned int m_nNumFragShaders, m_nMaxFragShaders;
- SPVRTPFXParserShader *m_psVertexShader;
- unsigned int m_nNumVertShaders, m_nMaxVertShaders;
- SPVRTPFXParserEffect *m_psEffect;
- unsigned int m_nNumEffects, m_nMaxEffects;
- SPVRTPFXRenderPass *m_psRenderPasses;
- unsigned int m_nNumRenderPasses, m_nMaxRenders;
- unsigned int m_uiViewportWidth, m_uiViewportHeight;
- private:
- CPVRTPFXParserReadContext *m_psContext;
- /*!***************************************************************************
- @Function Parse
- @Output pReturnError error string
- @Return bool true for success parsing file
- @Description Parses a loaded PFX file.
- *****************************************************************************/
- bool Parse( CPVRTString * const pReturnError);
- /*!***************************************************************************
- @Function ReduceWhitespace
- @Output line output text
- @Input line input text
- @Description Reduces all white space characters in the string to one
- blank space.
- *****************************************************************************/
- void ReduceWhitespace(char *line);
- /*!***************************************************************************
- @Function GetEndTag
- @Input pszTagName tag name
- @Input nStartLine start line
- @Output pnEndLine line end tag found
- @Return true if tag found
- @Description 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);
- /*!***************************************************************************
- @Function ReturnParameter
- @Output
- @Input
- @Description 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
-
- *****************************************************************************/
- CPVRTString FindParameter(char *aszSourceString, const CPVRTString ¶meterTag, const CPVRTString &delimiter);
- /*!***************************************************************************
- @Function ProcessKeywordParam
- @Input parameterString Parameter string to process
- @Return Returns true on success
- @Description Processes the node name or vector position parameters that
- can be assigned to render pass keywords (e.g. ENVMAPCUBE=(11.0, 22.0, 0.0))
-
- *****************************************************************************/
- bool ProcessKeywordParam(const CPVRTString ¶meterString);
- /*!***************************************************************************
- @Function ParseHeader
- @Input nStartLine start line number
- @Input nEndLine end line number
- @Output pReturnError error string
- @Return bool true if parse is successful
- @Description Parses the HEADER section of the PFX file.
- *****************************************************************************/
- bool ParseHeader(int nStartLine, int nEndLine, CPVRTString * const pReturnError);
- /*!***************************************************************************
- @Function ParseTextures
- @Input nStartLine start line number
- @Input nEndLine end line number
- @Output pReturnError error string
- @Return bool true if parse is successful
- @Description Parses the TEXTURE section of the PFX file.
- *****************************************************************************/
- bool ParseTextures(int nStartLine, int nEndLine, CPVRTString * const pReturnError);
- /*!***************************************************************************
- @Function ParseShader
- @Input nStartLine start line number
- @Input nEndLine end line number
- @Output pReturnError error string
- @Output shader shader data object
- @Input pszBlockName name of block in PFX file
- @Return bool true if parse is successful
- @Description Parses the VERTEXSHADER or FRAGMENTSHADER section of the
- PFX file.
- *****************************************************************************/
- bool ParseShader(int nStartLine, int nEndLine, CPVRTString *pReturnError, SPVRTPFXParserShader &shader, const char * const pszBlockName);
- /*!***************************************************************************
- @Function ParseSemantic
- @Output semantic semantic data object
- @Input nStartLine start line number
- @Output pReturnError error string
- @Return bool true if parse is successful
- @Description Parses a semantic.
- *****************************************************************************/
- bool ParseSemantic(SPVRTPFXParserSemantic &semantic, const int nStartLine, CPVRTString * const pReturnError);
- /*!***************************************************************************
- @Function ParseEffect
- @Output effect effect data object
- @Input nStartLine start line number
- @Input nEndLine end line number
- @Output pReturnError error string
- @Return bool true if parse is successful
- @Description Parses the EFFECT section of the PFX file.
- *****************************************************************************/
- bool ParseEffect(SPVRTPFXParserEffect &effect, const int nStartLine, const int nEndLine, CPVRTString * const pReturnError);
- };
- #endif /* _PVRTPFXPARSER_H_ */
- /*****************************************************************************
- End of file (PVRTPFXParser.h)
- *****************************************************************************/
|