Merged 15170:15635 from trunk (no conflicts or even merges)
[blender.git] / source / gameengine / Rasterizer / RAS_IPolygonMaterial.cpp
index 7e1017b5c393851f7eebda7f8b2b9af1113a0dbc..cb10ba6bf379b9a1eddd2db5b91c41722d339b64 100644 (file)
@@ -1,14 +1,11 @@
 /**
  * $Id$
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  */
 
 #include "RAS_IPolygonMaterial.h"
+#include "RAS_IRasterizer.h"
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname,
-                                                                        bool ba,
                                                                         const STR_String& matname,
                                                                         int tile,
                                                                         int tilexrep,
                                                                         int tileyrep,
                                                                         int mode,
-                                                                        int transparant,
+                                                                        bool transparant,
+                                                                        bool zsort,
                                                                         int lightlayer,
                                                                         bool bIsTriangle,
                                                                         void* clientobject=NULL) :
@@ -51,8 +52,12 @@ RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname,
                m_tileyrep(tileyrep),
                m_drawingmode (mode),
                m_transparant(transparant),
+               m_zsort(zsort),
                m_lightlayer(lightlayer),
-               m_bIsTriangle(bIsTriangle)
+               m_bIsTriangle(bIsTriangle),
+               m_polymatid(m_newpolymatid++),
+               m_flag(0),
+               m_multimode(0)
 {
        m_shininess = 35.0;
        m_specular = MT_Vector3(0.5,0.5,0.5);
@@ -63,63 +68,100 @@ RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname,
 
 bool RAS_IPolyMaterial::Equals(const RAS_IPolyMaterial& lhs) const
 {
-       return (
-                       this->m_texturename     ==              lhs.m_texturename &&
-                       this->m_tile            ==              lhs.m_tile &&
-                       this->m_tilexrep        ==              lhs.m_tilexrep &&
-                       this->m_tileyrep        ==              lhs.m_tileyrep &&
-                       this->m_transparant     ==              lhs.m_transparant &&
-                       this->m_drawingmode     ==              lhs.m_drawingmode &&
-                       this->m_bIsTriangle     ==              lhs.m_bIsTriangle &&
-                       this->m_lightlayer  ==          lhs.m_lightlayer &&
-                       this->m_materialname ==         lhs.m_materialname
-       );
+       if(m_flag &RAS_BLENDERMAT)
+       {
+               return (
+                       this->m_multimode                       ==              lhs.m_multimode &&
+                       this->m_flag                            ==              lhs.m_flag              &&
+                       this->m_drawingmode                     ==              lhs.m_drawingmode &&
+                       this->m_lightlayer                      ==              lhs.m_lightlayer &&
+                       this->m_texturename.hash()      ==              lhs.m_texturename.hash() &&
+                       this->m_materialname.hash() ==          lhs.m_materialname.hash()
+               );
+       }
+       else
+       {
+               return (
+                               this->m_tile            ==              lhs.m_tile &&
+                               this->m_tilexrep        ==              lhs.m_tilexrep &&
+                               this->m_tileyrep        ==              lhs.m_tileyrep &&
+                               this->m_transparant     ==              lhs.m_transparant &&
+                               this->m_zsort           ==              lhs.m_zsort &&
+                               this->m_drawingmode     ==              lhs.m_drawingmode &&
+                               this->m_bIsTriangle     ==              lhs.m_bIsTriangle &&
+                               this->m_lightlayer      ==              lhs.m_lightlayer &&
+                               this->m_texturename.hash()      ==              lhs.m_texturename.hash() &&
+                               this->m_materialname.hash() ==          lhs.m_materialname.hash()
+               );
+       }
 }
 
+bool RAS_IPolyMaterial::Less(const RAS_IPolyMaterial& rhs) const
+{
+       if (Equals(rhs))
+               return false;
+               
+       return m_polymatid < rhs.m_polymatid;
+}
 
-
-int RAS_IPolyMaterial::GetLightLayer()
+int RAS_IPolyMaterial::GetLightLayer() const
 {
        return m_lightlayer;
 }
 
-
-
-bool RAS_IPolyMaterial::IsTransparant()
+bool RAS_IPolyMaterial::IsTransparant() const
 {
-       return (m_transparant != 0);
+       return m_transparant;
 }
 
+bool RAS_IPolyMaterial::IsZSort() const
+{
+       return m_zsort;
+}
 
-
-bool RAS_IPolyMaterial::UsesTriangles()
+bool RAS_IPolyMaterial::UsesTriangles() const
 {
        return m_bIsTriangle;
 }
 
-
-
 unsigned int RAS_IPolyMaterial::hash() const
 {
        return m_texturename.hash();
 }
 
-
-
-int RAS_IPolyMaterial::GetDrawingMode()
+int RAS_IPolyMaterial::GetDrawingMode() const
 {
        return m_drawingmode;
 }
 
-
-
 const STR_String& RAS_IPolyMaterial::GetMaterialName() const
 { 
        return m_materialname;
 }
 
-
 const STR_String& RAS_IPolyMaterial::GetTextureName() const
 {
        return m_texturename;
 }
+
+const unsigned int     RAS_IPolyMaterial::GetFlag() const
+{
+       return m_flag;
+}
+
+bool RAS_IPolyMaterial::UsesLighting(RAS_IRasterizer *rasty) const
+{
+       bool dolights = false;
+
+       if(m_flag & RAS_BLENDERMAT)
+               dolights = (m_flag &RAS_MULTILIGHT)!=0;
+       else if(rasty->GetDrawingMode() < RAS_IRasterizer::KX_SOLID);
+       else if(rasty->GetDrawingMode() == RAS_IRasterizer::KX_SHADOW);
+       else
+               dolights = (m_drawingmode & 16)!=0;
+       
+       return dolights;
+}
+
+unsigned int RAS_IPolyMaterial::m_newpolymatid = 0;
+