add missing files after merging
[blender.git] / source / gameengine / Ketsji / KX_PolygonMaterial.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 /** \file KX_PolygonMaterial.h
31  *  \ingroup ketsji
32  */
33
34 #ifndef __KX_POLYGONMATERIAL_H__
35 #define __KX_POLYGONMATERIAL_H__
36
37 #include "PyObjectPlus.h"
38
39 #include "RAS_MaterialBucket.h"
40 #include "RAS_IRasterizer.h"
41 #include "DNA_ID.h"
42
43 #ifdef WITH_CXX_GUARDEDALLOC
44 #include "MEM_guardedalloc.h"
45 #endif
46
47 struct MTFace;
48 struct Material;
49 struct MTex;
50 struct Image;
51
52 /**
53  *  Material class.
54  *
55  *  This holds the shader, textures and python methods for setting the render state before
56  *  rendering.
57  */
58 class KX_PolygonMaterial : public PyObjectPlus, public RAS_IPolyMaterial
59 {
60         Py_Header;
61 private:
62         /** Blender texture face structure. */
63         MTFace*                 m_tface;
64         unsigned int*   m_mcol;
65         Material*               m_material;
66
67 #ifdef WITH_PYTHON
68         PyObject*               m_pymaterial;
69 #endif
70
71         mutable int             m_pass;
72 public:
73
74         KX_PolygonMaterial();
75         void Initialize(const STR_String &texname,
76                 Material* ma,
77                 int materialindex,
78                 int tile,
79                 int tilexrep,
80                 int tileyrep,
81                 int mode,
82                 int transp,
83                 bool alpha,
84                 bool zsort,
85                 int lightlayer,
86                 struct MTFace* tface,
87                 unsigned int* mcol);
88
89         virtual ~KX_PolygonMaterial();
90         
91         /**
92          * Returns the caching information for this material,
93          * This can be used to speed up the rasterizing process.
94          * @return The caching information.
95          */
96         virtual TCachingInfo GetCachingInfo(void) const
97         {
98                 return (void*) this;
99         }
100
101         /**
102          * Activates the material in the (OpenGL) rasterizer.
103          * On entry, the cachingInfo contains info about the last activated material.
104          * On exit, the cachingInfo should contain updated info about this material.
105          * @param rasty                 The rasterizer in which the material should be active.
106          * @param cachingInfo   The information about the material used to speed up rasterizing.
107          */
108         void DefaultActivate(RAS_IRasterizer* rasty, TCachingInfo& cachingInfo) const;
109         virtual bool Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingInfo) const;
110
111         Material *GetBlenderMaterial() const
112         {
113                 return m_material;
114         }
115
116         Image *GetBlenderImage() const;
117
118         /**
119          * Returns the Blender texture face structure that is used for this material.
120          * @return The material's texture face.
121          */
122         MTFace* GetMTFace(void) const
123         {
124                 return m_tface;
125         }
126
127         unsigned int* GetMCol(void) const
128         {
129                 return m_mcol;
130         }
131         virtual void GetMaterialRGBAColor(unsigned char *rgba) const;
132
133 #ifdef WITH_PYTHON
134         KX_PYMETHOD_DOC(KX_PolygonMaterial, updateTexture);
135         KX_PYMETHOD_DOC(KX_PolygonMaterial, setTexture);
136         KX_PYMETHOD_DOC(KX_PolygonMaterial, activate);
137         
138         KX_PYMETHOD_DOC(KX_PolygonMaterial, setCustomMaterial);
139         KX_PYMETHOD_DOC(KX_PolygonMaterial, loadProgram);
140
141         virtual PyObject* py_repr(void) { return PyUnicode_FromString(m_material ? ((ID *)m_material)->name+2 : ""); }
142         
143         static PyObject*        pyattr_get_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
144         static PyObject*        pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
145         
146         static PyObject*        pyattr_get_tface(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
147         static PyObject*        pyattr_get_gl_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
148         
149         static PyObject*        pyattr_get_diffuse(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);    
150         static int                      pyattr_set_diffuse(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
151         static PyObject*        pyattr_get_specular(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);   
152         static int                      pyattr_set_specular(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
153 #endif
154
155 };
156
157 #endif // __KX_POLYGONMATERIAL_H__
158