/*!****************************************************************************
@file OGLES2/PVRTShader.h
@ingroup API_OGLES2
@copyright Copyright (c) Imagination Technologies Limited.
@brief Shader handling for OpenGL ES 2.0
******************************************************************************/
#ifndef _PVRTSHADER_H_
#define _PVRTSHADER_H_
/*!
@addtogroup API_OGLES2
@{
*/
#include "PVRTContext.h"
#include "../PVRTString.h"
#include "../PVRTError.h"
/*!***************************************************************************
@brief Loads a shader source code into memory and compiles it.
It also pre-appends the array of defines that have been passed in
to the source code before compilation.
@param[in] pszShaderCode shader source code
@param[in] Type type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER)
@param[out] pObject the resulting shader object
@param[out] pReturnError the error message if it failed
@param[in] aszDefineArray Array of defines to be pre-appended to shader string
@param[in] uiDefArraySize Size of the define array
@return PVR_SUCCESS on success and PVR_FAIL on failure (also fills the str string)
*****************************************************************************/
EPVRTError PVRTShaderLoadSourceFromMemory( const char* pszShaderCode,
const GLenum Type,
GLuint* const pObject,
CPVRTString* const pReturnError,
const char* const* aszDefineArray=0, GLuint uiDefArraySize=0);
/*!***************************************************************************
@brief Takes a shader binary from memory and passes it to the GL.
@param[in] ShaderData shader compiled binary data
@param[in] Size size of shader binary data in bytes
@param[in] Type type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER)
@param[in] Format shader binary format
@param[out] pObject the resulting shader object
@param[out] pReturnError the error message if it failed
@return PVR_SUCCESS on success and PVR_FAIL on failure (also fills the str string)
*****************************************************************************/
EPVRTError PVRTShaderLoadBinaryFromMemory( const void* const ShaderData,
const size_t Size,
const GLenum Type,
const GLenum Format,
GLuint* const pObject,
CPVRTString* const pReturnError);
/*!***************************************************************************
@brief Loads a shader file into memory and passes it to the GL.
It also passes defines that need to be pre-appended to the shader before compilation.
@param[in] pszBinFile binary shader filename
@param[in] pszSrcFile source shader filename
@param[in] Type type of shader (GL_VERTEX_SHADER or GL_FRAGMENT_SHADER)
@param[in] Format shader binary format, or 0 for source shader
@param[out] pObject the resulting shader object
@param[out] pReturnError the error message if it failed
@param[in] pContext Context
@param[in] aszDefineArray Array of defines to be pre-appended to shader string
@param[in] uiDefArraySize Size of the define array
@return PVR_SUCCESS on success and PVR_FAIL on failure (also fills pReturnError)
*****************************************************************************/
EPVRTError PVRTShaderLoadFromFile( const char* const pszBinFile,
const char* const pszSrcFile,
const GLenum Type,
const GLenum Format,
GLuint* const pObject,
CPVRTString* const pReturnError,
const SPVRTContext* const pContext=0,
const char* const* aszDefineArray=0, GLuint uiDefArraySize=0);
/*!***************************************************************************
@brief Links a shader program.
@param[out] pProgramObject the created program object
@param[in] VertexShader the vertex shader to link
@param[in] FragmentShader the fragment shader to link
@param[in] pszAttribs an array of attribute names
@param[in] i32NumAttribs the number of attributes to bind
@param[out] pReturnError the error message if it failed
@return PVR_SUCCESS on success, PVR_FAIL if failure
*****************************************************************************/
EPVRTError PVRTCreateProgram( GLuint* const pProgramObject,
const GLuint VertexShader,
const GLuint FragmentShader,
const char** const pszAttribs,
const int i32NumAttribs,
CPVRTString* const pReturnError);
/*! @} */
#endif
/*****************************************************************************
End of file (PVRTShader.h)
*****************************************************************************/