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