17b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!**************************************************************************** 27b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 37b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @file OGLES2/PVRTShader.h 47b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @ingroup API_OGLES2 57b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @copyright Copyright (c) Imagination Technologies Limited. 67b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief Shader handling for OpenGL ES 2.0 77b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 87b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens******************************************************************************/ 97b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#ifndef _PVRTSHADER_H_ 107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#define _PVRTSHADER_H_ 117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*! 137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @addtogroup API_OGLES2 147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @{ 157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*/ 167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#include "PVRTContext.h" 187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#include "../PVRTString.h" 197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#include "../PVRTError.h" 207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*************************************************************************** 227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief Loads a shader source code into memory and compiles it. 237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens It also pre-appends the array of defines that have been passed in 247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens to the source code before compilation. 257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] pszShaderCode shader source code 267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] Type type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER) 277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[out] pObject the resulting shader object 287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[out] pReturnError the error message if it failed 297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] aszDefineArray Array of defines to be pre-appended to shader string 307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] uiDefArraySize Size of the define array 317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @return PVR_SUCCESS on success and PVR_FAIL on failure (also fills the str string) 327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/ 337b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensEPVRTError PVRTShaderLoadSourceFromMemory( const char* pszShaderCode, 347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const GLenum Type, 357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens GLuint* const pObject, 367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString* const pReturnError, 377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char* const* aszDefineArray=0, GLuint uiDefArraySize=0); 387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*************************************************************************** 407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief Takes a shader binary from memory and passes it to the GL. 417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] ShaderData shader compiled binary data 427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] Size size of shader binary data in bytes 437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] Type type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER) 447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] Format shader binary format 457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[out] pObject the resulting shader object 467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[out] pReturnError the error message if it failed 477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @return PVR_SUCCESS on success and PVR_FAIL on failure (also fills the str string) 487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/ 497b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensEPVRTError PVRTShaderLoadBinaryFromMemory( const void* const ShaderData, 507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const size_t Size, 517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const GLenum Type, 527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const GLenum Format, 537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens GLuint* const pObject, 547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString* const pReturnError); 557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*************************************************************************** 577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief Loads a shader file into memory and passes it to the GL. 587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens It also passes defines that need to be pre-appended to the shader before compilation. 597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] pszBinFile binary shader filename 607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] pszSrcFile source shader filename 617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] Type type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER) 627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] Format shader binary format, or 0 for source shader 637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[out] pObject the resulting shader object 647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[out] pReturnError the error message if it failed 657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] pContext Context 667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] aszDefineArray Array of defines to be pre-appended to shader string 677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] uiDefArraySize Size of the define array 687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @return PVR_SUCCESS on success and PVR_FAIL on failure (also fills pReturnError) 697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/ 707b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensEPVRTError PVRTShaderLoadFromFile( const char* const pszBinFile, 717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char* const pszSrcFile, 727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const GLenum Type, 737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const GLenum Format, 747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens GLuint* const pObject, 757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString* const pReturnError, 767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const SPVRTContext* const pContext=0, 777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char* const* aszDefineArray=0, GLuint uiDefArraySize=0); 787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*************************************************************************** 807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @brief Links a shader program. 817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[out] pProgramObject the created program object 827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] VertexShader the vertex shader to link 837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] FragmentShader the fragment shader to link 847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] pszAttribs an array of attribute names 857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[in] i32NumAttribs the number of attributes to bind 867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @param[out] pReturnError the error message if it failed 877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @return PVR_SUCCESS on success, PVR_FAIL if failure 887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/ 897b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensEPVRTError PVRTCreateProgram( GLuint* const pProgramObject, 907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const GLuint VertexShader, 917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const GLuint FragmentShader, 927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char** const pszAttribs, 937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const int i32NumAttribs, 947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString* const pReturnError); 957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*! @} */ 977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif 997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/***************************************************************************** 1017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens End of file (PVRTShader.h) 1027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/ 1037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 104