| /*!**************************************************************************** |
| |
| @file OGLES2/PVRTPFXParserAPI.h |
| @ingroup API_OGLES2 |
| @copyright Copyright (c) Imagination Technologies Limited. |
| @brief Declaration of PFX file parser |
| |
| ******************************************************************************/ |
| |
| #ifndef _PVRTPFXPARSERAPI_H_ |
| #define _PVRTPFXPARSERAPI_H_ |
| |
| /*! |
| @addtogroup API_OGLES2 |
| @{ |
| */ |
| |
| // Everything been documented in OGL/PVRTPFXParserAPI.h. This would cause documentation duplication in the |
| // current version of Doxygen. |
| #ifndef NO_DOXYGEN |
| |
| #include "../PVRTError.h" |
| |
| /**************************************************************************** |
| ** Structures |
| ****************************************************************************/ |
| |
| /*!************************************************************************** |
| @struct SPVRTPFXUniformSemantic |
| @brief Struct to convert a semantic string to a number. |
| @details The application supplies an array of these so PVRTPFX can translate semantic strings to numbers |
| ****************************************************************************/ |
| struct SPVRTPFXUniformSemantic |
| { |
| const char *p; /*!< String containing semantic */ |
| unsigned int n; /*!< Application-defined semantic value */ |
| }; |
| |
| /*!************************************************************************** |
| @struct SPVRTPFXUniform |
| @brief A struct containing GL uniform data. |
| @details PVRTPFX returns an array of these to indicate GL locations & semantics to the application |
| ***************************************************************************/ |
| struct SPVRTPFXUniform |
| { |
| unsigned int nLocation; /*!< GL location of the Uniform */ |
| unsigned int nSemantic; /*!< Application-defined semantic value */ |
| unsigned int nIdx; /*!< Index; for example two semantics might be LIGHTPOSITION0 and LIGHTPOSITION1 */ |
| CPVRTString sValueName; /*!< The name of the variable referenced in shader code */ |
| }; |
| |
| /*!************************************************************************** |
| @struct SPVRTPFXTexture |
| @brief A texture data array. |
| @details An array of these is gained from PVRTPFX so the application can fill in the texture handles |
| ***************************************************************************/ |
| struct SPVRTPFXTexture |
| { |
| CPVRTStringHash Name; /*!< texture name */ |
| GLuint ui; /*!< Loaded texture handle */ |
| GLuint unit; /*!< The bound texture unit */ |
| unsigned int flags; /*!< Texture type i.e 2D, Cubemap */ |
| }; |
| |
| /*!************************************************************************** |
| @class PVRTPFXEffectDelegate |
| @brief Receives callbacks for effects. |
| ***************************************************************************/ |
| class PVRTPFXEffectDelegate |
| { |
| public: |
| virtual EPVRTError PVRTPFXOnLoadTexture(const CPVRTStringHash& TextureName, GLuint& uiHandle, unsigned int& uiFlags) = 0; /*!< Returns error if texture could not be loaded */ |
| virtual ~PVRTPFXEffectDelegate() { } /*!< Destructor */ |
| }; |
| |
| /*!************************************************************************** |
| @class CPVRTPFXEffect |
| @brief PFX effect |
| ****************************************************************************/ |
| class CPVRTPFXEffect |
| { |
| public: |
| /*!*************************************************************************** |
| @brief Sets the context to NULL and initialises the member variables to zero. |
| *****************************************************************************/ |
| CPVRTPFXEffect(); |
| |
| /*!*************************************************************************** |
| @brief Sets the context and initialises the member variables to zero. |
| *****************************************************************************/ |
| CPVRTPFXEffect(SPVRTContext &sContext); |
| |
| /*!*************************************************************************** |
| @brief Calls Destroy(). |
| *****************************************************************************/ |
| ~CPVRTPFXEffect(); |
| |
| /*!*************************************************************************** |
| @brief Loads the specified effect from the CPVRTPFXParser object. |
| Compiles and links the shaders. Initialises texture data. |
| @param[in] src PFX Parser Object |
| @param[in] pszEffect Effect name |
| @param[in] pszFileName Effect file name |
| @param[in] pDelegate A delegate which will receive callbacks |
| @param[out] uiUnknownUniforms Number of unknown uniforms found |
| @param[out] pReturnError Error string |
| @return PVR_SUCCESS if load succeeded |
| *****************************************************************************/ |
| EPVRTError Load(CPVRTPFXParser &src, const char * const pszEffect, const char * const pszFileName, |
| PVRTPFXEffectDelegate* pDelegate, unsigned int& uiUnknownUniforms, CPVRTString *pReturnError); |
| |
| /*!*************************************************************************** |
| @brief Deletes the gl program object and texture data. |
| *****************************************************************************/ |
| void Destroy(); |
| |
| /*!*************************************************************************** |
| @brief Selects the gl program object and binds the textures. |
| If the render target texture for the current render pass is required |
| in this effect (and therefore cannot be sampled), |
| load the replacement texture instead. |
| @param[in] i32RenderTextureId The ID of the render target of the current task |
| @param[in] ui32ReplacementTexture The ID of the texture that should be used instead |
| @return EPVRTError PVR_SUCCESS if activate succeeded |
| *****************************************************************************/ |
| EPVRTError Activate(const int i32RenderTextureId=-1, const unsigned int ui32ReplacementTexture=0); |
| |
| /*!*************************************************************************** |
| @brief Gets the texture data array. |
| @return SPVRTPFXTexture* pointer to the texture data array |
| *****************************************************************************/ |
| const CPVRTArray<SPVRTPFXTexture>& GetTextureArray() const; |
| |
| /*!*************************************************************************** |
| @brief Returns a list of known semantics. |
| @return const CPVRTArray<SPVRTPFXUniform>& |
| *****************************************************************************/ |
| const CPVRTArray<SPVRTPFXUniform>& GetUniformArray() const; |
| |
| /*!*************************************************************************** |
| @brief Gets the array of registered semantics which will be used to |
| match PFX code. |
| @return const CPVRTArray<SPVRTPFXUniformSemantic>& |
| *****************************************************************************/ |
| const CPVRTArray<SPVRTPFXUniformSemantic>& GetSemanticArray() const; |
| |
| /*!*************************************************************************** |
| @brief Sets the textrue and applys the filtering. |
| @param[in] nIdx texture number |
| @param[in] ui opengl texture handle |
| @param[in] u32flags texture flags |
| *****************************************************************************/ |
| void SetTexture(const unsigned int nIdx, const GLuint ui, const unsigned int u32flags=0); |
| |
| /*!*************************************************************************** |
| @brief Sets the dafault value for the uniform semantic. |
| @param[in] pszName name of uniform |
| @param[in] psDefaultValue pointer to default value |
| *****************************************************************************/ |
| void SetDefaultUniformValue(const char *const pszName, const SPVRTSemanticDefaultData *psDefaultValue); |
| |
| /*!*************************************************************************** |
| @brief Registers a user-provided uniform semantic. |
| @param[in] psUniforms Array of semantics to register |
| @param[in] uiNumUniforms Number provided |
| @param[out] pReturnError Human-readable error if any |
| @return PVR_SUCCESS on success |
| *****************************************************************************/ |
| EPVRTError RegisterUniformSemantic(const SPVRTPFXUniformSemantic* const psUniforms, unsigned int uiNumUniforms, CPVRTString* pReturnError); |
| |
| /*!*************************************************************************** |
| @brief Removes a given semantic ID from the 'known' semantic list and |
| re-parses the effect to update the uniform table. |
| @param[in] uiSemanticID |
| @param[out] pReturnError |
| @return PVR_SUCCESS on success |
| *****************************************************************************/ |
| EPVRTError RemoveUniformSemantic(unsigned int uiSemanticID, CPVRTString* pReturnError); |
| |
| /*!*************************************************************************** |
| @brief Sets the context for this effect. |
| @param[in] pContext context pointer |
| *****************************************************************************/ |
| void SetContext(SPVRTContext * const pContext); |
| |
| /*!*************************************************************************** |
| @brief Returns the OGL program handle. |
| @return unsigned int |
| *****************************************************************************/ |
| unsigned int GetProgramHandle() const; |
| |
| /*!*************************************************************************** |
| @brief Gets the active effect index within the PFX file. |
| @return unsigned int |
| *****************************************************************************/ |
| unsigned int GetEffectIndex() const; |
| |
| private: |
| /*!*************************************************************************** |
| @brief Loads all of the GLSL shaders for an effect. |
| @param[in] pszFileName |
| @param[out] pReturnError |
| @return EPVRTError |
| *****************************************************************************/ |
| EPVRTError LoadShadersForEffect(CPVRTPFXParser &src, const char * const pszFileName, CPVRTString *pReturnError); |
| |
| /*!*************************************************************************** |
| @brief Loads all of the textures for this effect. |
| @param[out] pReturnError |
| @return EPVRTError |
| *****************************************************************************/ |
| EPVRTError LoadTexturesForEffect(PVRTPFXEffectDelegate* pDelegate, CPVRTString *pReturnError); |
| |
| /*!*************************************************************************** |
| @brief Builds the uniform table from a list of known semantics. |
| @param[out] uiUnknownSemantics |
| @param[out] pReturnError |
| @return EPVRTError |
| *****************************************************************************/ |
| EPVRTError RebuildUniformTable(unsigned int& uiUnknownSemantics, CPVRTString* pReturnError); |
| |
| protected: |
| bool m_bLoaded; |
| SPVRTContext* m_psContext; |
| CPVRTPFXParser* m_pParser; |
| unsigned int m_nEffect; |
| |
| GLuint m_uiProgram; // Loaded program |
| |
| CPVRTArray<SPVRTPFXTexture> m_Textures; // Array of loaded textures |
| CPVRTArray<SPVRTPFXUniform> m_Uniforms; // Array of found uniforms |
| |
| CPVRTArray<SPVRTPFXUniformSemantic> m_Semantics; // An array of registered semantics. |
| }; |
| |
| /**************************************************************************** |
| ** Auxiliary functions |
| ****************************************************************************/ |
| |
| /*!************************************************************************** |
| @brief 'Equivalent to' operator |
| @param[in] lhs First SPVRTPFXUniformSemantic |
| @param[in] rhs Second SPVRTPFXUniformSemantic |
| @return True if the numbers in the two SPVRTPFXUniformSemantics are equivalent. |
| ****************************************************************************/ |
| inline bool operator==(const SPVRTPFXUniformSemantic& lhs, const SPVRTPFXUniformSemantic& rhs) |
| { |
| return (lhs.n == rhs.n); |
| } |
| |
| #endif |
| |
| /*! @} */ |
| |
| #endif /* _PVRTPFXPARSERAPI_H_ */ |
| |
| /***************************************************************************** |
| End of file (PVRTPFXParserAPI.h) |
| *****************************************************************************/ |
| |