00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_IVIDEO_MATERIAL_H__
00020 #define __CS_IVIDEO_MATERIAL_H__
00021
00029 #include "csutil/scf.h"
00030 #include "csutil/strset.h"
00031 #include "csutil/strhash.h"
00032
00033 #include "ivideo/rndbuf.h"
00034 #include "ivideo/rendermesh.h"
00035 #include "ivideo/shader/shader.h"
00036
00038 #define CS_DEFMAT_DIFFUSE 0.7f
00039
00040 #define CS_DEFMAT_AMBIENT 0.0f
00041
00042 #define CS_DEFMAT_REFLECTION 0.0f
00043
00045 #define CS_MATERIAL_VARNAME_DIFFUSE "mat diffuse"
00046
00047 #define CS_MATERIAL_VARNAME_AMBIENT "mat ambient"
00048
00049 #define CS_MATERIAL_VARNAME_REFLECTION "mat reflection"
00050
00051 #define CS_MATERIAL_VARNAME_FLATCOLOR "mat flatcolor"
00052
00053 #define CS_MATERIAL_TEXTURE_DIFFUSE "tex diffuse"
00054
00056 #define CS_MATERIAL_TEXTURE_LAYER1 "tex layer1"
00057
00058 #define CS_MATERIAL_TEXTURE_LAYER2 "tex layer2"
00059
00060 #define CS_MATERIAL_TEXTURE_LAYER3 "tex layer3"
00061
00062 #define CS_MATERIAL_TEXTURE_LAYER4 "tex layer4"
00063
00064 struct iEffectDefinition;
00065 struct iTextureHandle;
00066 struct csRGBpixel;
00067 struct csRGBcolor;
00068
00073 struct csTextureLayer
00074 {
00076 csRef<iTextureHandle> txt_handle;
00078 uint mode;
00080 float uscale, vscale;
00082 float ushift, vshift;
00083 };
00084
00085 SCF_VERSION (iMaterial, 0, 0, 6);
00086
00094 struct iMaterial : public iShaderBranch
00095 {
00099 virtual void SetShader (csStringID type, iShaderWrapper* shader) = 0;
00100
00104 virtual iShaderWrapper* GetShader (csStringID type) = 0;
00105
00106 #ifndef CS_USE_NEW_RENDERER
00107
00110 virtual void SetEffect (iEffectDefinition *ed) = 0;
00111
00115 virtual iEffectDefinition *GetEffect () = 0;
00116 #endif
00117
00121 virtual iTextureHandle *GetTexture () = 0;
00122
00126 virtual iTextureHandle* GetTexture (csStringID name) = 0;
00127
00128 #ifndef CS_USE_NEW_RENDERER
00129
00133 virtual int GetTextureLayerCount () = 0;
00134
00138 virtual csTextureLayer* GetTextureLayer (int idx) = 0;
00139 #endif
00140
00145 virtual void GetFlatColor (csRGBpixel &oColor,
00146 bool useTextureMean = true) = 0;
00150 virtual void SetFlatColor (const csRGBcolor& col) = 0;
00151
00155 virtual void GetReflection (
00156 float &oDiffuse, float &oAmbient, float &oReflection) = 0;
00160 virtual void SetReflection (float oDiffuse, float oAmbient,
00161 float oReflection) = 0;
00162 };
00163
00164 SCF_VERSION (iMaterialHandle, 0, 0, 2);
00165
00170 struct iMaterialHandle : public iBase
00171 {
00175 virtual iShaderWrapper* GetShader (csStringID type) = 0;
00176
00180 virtual iTextureHandle *GetTexture () = 0;
00181
00186 virtual void GetFlatColor (csRGBpixel &oColor) = 0;
00187
00191 virtual void GetReflection (float &oDiffuse, float &oAmbient,
00192 float &oReflection) = 0;
00193
00200 virtual void Prepare () = 0;
00201 };
00202
00205 #endif // __CS_IVIDEO_MATERIAL_H__