diff options
author | Erwin Coumans <blender@erwincoumans.com> | 2006-01-08 12:37:15 +0300 |
---|---|---|
committer | Erwin Coumans <blender@erwincoumans.com> | 2006-01-08 12:37:15 +0300 |
commit | c94455c14d28221f6e05f33ba42e23a5d3245a28 (patch) | |
tree | 733dfaccbbcd71cf66e2d33b1868f64f78189eeb /source/gameengine/Ketsji/BL_Shader.h | |
parent | 88a8508b347dda050557e72dfad105023e5095aa (diff) |
more linux game engine work. hopefully works now!
Diffstat (limited to 'source/gameengine/Ketsji/BL_Shader.h')
-rw-r--r-- | source/gameengine/Ketsji/BL_Shader.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h new file mode 100644 index 00000000000..19e0cb8e9b3 --- /dev/null +++ b/source/gameengine/Ketsji/BL_Shader.h @@ -0,0 +1,117 @@ +#ifndef __BL_SHADER_H__ +#define __BL_SHADER_H__ + +#include "PyObjectPlus.h" +#include "BL_Material.h" + +// ----------------------------------- +// user state management +typedef struct uSampler +{ + unsigned int type; + int pass; + int unit; + int loc; + unsigned int glTexture; +}uSampler; + +#define SAMP_2D 1 +#define SAMP_CUBE 2 + + +// ----------------------------------- +typedef struct uBlending +{ + unsigned int pass; + int src; // GL_ blend func values + int dest; + float const_color[4]; +}uBlending; +// ----------------------------------- + +// ---------------- +class BL_Shader : public PyObjectPlus +{ + Py_Header; +private: + unsigned int mShader, + mVert, + mFrag; + int mPass; + bool mOk; + bool mUse; + uSampler mSampler[MAXTEX]; + uBlending mBlending; + char* vertProg; + char* fragProg; + bool LinkProgram(); + void printInfo(unsigned int pr); + +public: + BL_Shader(int n, PyTypeObject *T=&Type); + virtual ~BL_Shader(); + + char* GetVertPtr(); + char* GetFragPtr(); + void SetVertPtr( char *vert ); + void SetFragPtr( char *frag ); + + // --- + int getNumPass() {return mPass;} + bool use() {return mUse;} + + // --- + // access + const uSampler* getSampler(int i); + const uBlending* getBlending( int pass ); + const bool Ok()const; + + unsigned int GetProg(); + unsigned int GetVertexShader(); + unsigned int GetFragmentShader(); + + void InitializeSampler( + int type, + int unit, + int pass, + unsigned int texture + ); + + // ----------------------------------- + // python interface + virtual PyObject* _getattr(const STR_String& attr); + + KX_PYMETHOD_DOC( BL_Shader, setSource ); + KX_PYMETHOD_DOC( BL_Shader, delSource ); + KX_PYMETHOD_DOC( BL_Shader, getVertexProg ); + KX_PYMETHOD_DOC( BL_Shader, getFragmentProg ); + KX_PYMETHOD_DOC( BL_Shader, setNumberOfPasses ); + + // ----------------------------------- + KX_PYMETHOD_DOC( BL_Shader, isValid); + KX_PYMETHOD_DOC( BL_Shader, validate); + KX_PYMETHOD_DOC( BL_Shader, setUniform4f ); + KX_PYMETHOD_DOC( BL_Shader, setUniform3f ); + KX_PYMETHOD_DOC( BL_Shader, setUniform2f ); + KX_PYMETHOD_DOC( BL_Shader, setUniform1f ); + KX_PYMETHOD_DOC( BL_Shader, setUniform4i ); + KX_PYMETHOD_DOC( BL_Shader, setUniform3i ); + KX_PYMETHOD_DOC( BL_Shader, setUniform2i ); + KX_PYMETHOD_DOC( BL_Shader, setUniform1i ); + + KX_PYMETHOD_DOC( BL_Shader, setUniformfv ); + KX_PYMETHOD_DOC( BL_Shader, setUniformiv ); + + KX_PYMETHOD_DOC( BL_Shader, setUniformMatrix4 ); + KX_PYMETHOD_DOC( BL_Shader, setUniformMatrix3 ); + + // these come from within the material buttons + // sampler2d/samplerCube work + KX_PYMETHOD_DOC( BL_Shader, setSampler); + // user blending funcs + KX_PYMETHOD_DOC( BL_Shader, setBlending ); +}; + + + +#endif//__BL_SHADER_H__ |