Game Engine: alpha blending and sorting
[blender.git] / source / gameengine / Rasterizer / RAS_Polygon.cpp
1 /**
2  * $Id$
3  * ***** BEGIN GPL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software Foundation,
17  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18  *
19  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
20  * All rights reserved.
21  *
22  * The Original Code is: all of this file.
23  *
24  * Contributor(s): none yet.
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #ifdef HAVE_CONFIG_H
30 #include <config.h>
31 #endif
32
33 #ifdef WIN32
34
35 #pragma warning (disable:4786)
36 #endif
37
38 #include "RAS_Polygon.h"
39
40 RAS_Polygon::RAS_Polygon(RAS_MaterialBucket* bucket,
41                                 bool visible,
42                                 int numverts,
43                                 int vtxarrayindex) 
44                 :m_bucket(bucket),
45                 m_vertexindexbase(numverts),
46                 m_numverts(numverts),
47                 m_edgecode(65535)
48 {
49         m_vertexindexbase.m_vtxarray = vtxarrayindex ;//m_bucket->FindVertexArray(numverts);
50         m_polyFlags.Visible = visible;
51 }
52
53
54
55 int RAS_Polygon::VertexCount()
56 {
57         return m_numverts;
58 }
59
60
61
62 void RAS_Polygon::SetVertex(int i,
63                                                 unsigned int vertexindex ) //const MT_Point3& xyz,const MT_Point2& uv,const unsigned int rgbacolor,const MT_Vector3& normal)
64 {
65         m_vertexindexbase.SetIndex(i,vertexindex); //m_bucket->FindOrAddVertex(m_vertexindexbase.m_vtxarray,
66         //xyz,uv,rgbacolor,normal));
67 }
68
69
70
71 const KX_VertexIndex& RAS_Polygon::GetIndexBase()
72 {
73         return m_vertexindexbase;
74 }
75
76
77
78 void RAS_Polygon::SetVisibleWireframeEdges(int edgecode)
79 {
80         m_edgecode = edgecode;
81 }
82
83
84
85 // each bit is for a visible edge, starting with bit 1 for the first edge, bit 2 for second etc.
86 int RAS_Polygon::GetEdgeCode()
87 {
88         return m_edgecode;
89 }
90
91
92         
93 bool RAS_Polygon::IsVisible()
94 {
95         return m_polyFlags.Visible;
96 }
97
98
99
100 bool RAS_Polygon::IsCollider()
101 {
102         return m_polyFlags.Collider;
103 }
104
105
106
107 void RAS_Polygon::SetCollider(bool col)
108 {
109         m_polyFlags.Collider = col;
110 }
111
112
113
114 KX_VertexIndex& RAS_Polygon::GetVertexIndexBase()
115 {
116         return m_vertexindexbase;
117 }
118
119
120
121 RAS_MaterialBucket*     RAS_Polygon::GetMaterial()
122 {
123         return m_bucket;
124 }