00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __RE_OGLShader_h__
00020 #define __RE_OGLShader_h__
00021
00022 class RE_OGLRender;
00023 class RE_Texture3DMap;
00024 class RE_Texture3DMap;
00025 class RE_TextureCubeMap;
00026
00027 #include <UT/UT_HashTable.h>
00028 #include <UT/UT_IntArray.h>
00029 #include <UT/UT_PtrArray.h>
00030 #include <UT/UT_String.h>
00031
00032 #include "RE_Shader.h"
00033 #include "RE_API.h"
00034
00035 class re_TextureUnit;
00036
00037 class RE_API RE_OGLShader : public RE_Shader
00038 {
00039 public:
00040 RE_OGLShader();
00041 virtual ~RE_OGLShader();
00042
00043
00044
00045 void setRegisterProgram(bool register_program);
00046
00047
00048 virtual void applyShader() const;
00049 virtual void removeShader();
00050
00051
00052 virtual bool setPrograms(const char *english_shader_name,
00053 const char *vtxSrc, const char *fragSrc,
00054 UT_String *messages = NULL);
00055 virtual void clearPrograms();
00056
00057
00058
00059
00060
00061 virtual int bindTextureMap(const char *name, const char *tmap,
00062 const char *relativeTo);
00063
00064 virtual bool bindTextureMap(const char *name, int id, int tex_unit);
00065
00066
00067
00068 virtual bool bindVariableInt(const char *name, const int *val,
00069 int array_size=1);
00070 virtual bool bindVariableInt2(const char *name, const int *val,
00071 int array_size=1);
00072 virtual bool bindVariableInt3(const char *name, const int *val,
00073 int array_size=1);
00074 virtual bool bindVariableInt4(const char *name, const int *val,
00075 int array_size=1);
00076 virtual bool bindVariable1(const char *name, const float *val,
00077 int array_size=1);
00078 virtual bool bindVariable2(const char *name, const float *val,
00079 int array_size=1);
00080 virtual bool bindVariable3(const char *name, const float *val,
00081 int array_size=1);
00082 virtual bool bindVariable4(const char *name, const float *val,
00083 int array_size=1);
00084
00085 virtual bool bindMatrix2(const char *name, const float *val,
00086 int array_size=1);
00087 virtual bool bindMatrix3(const char *name, const float *val,
00088 int array_size=1);
00089 virtual bool bindMatrix4(const char *name, const float *val,
00090 int array_size=1);
00091
00092 virtual void loadShaderTexMaps(RE_Render *r);
00093 private:
00094 virtual bool loadShaderAttribNames();
00095 virtual bool loadShaderUniformNames();
00096
00097 UT_PtrArray<re_TextureUnit *> myTexUnits;
00098 bool myRegisterProgram;
00099 };
00100
00101 #endif