Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2005-01-16 09:02:06 +0300
committerKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2005-01-16 09:02:06 +0300
commit3b91ea4309f47d937799382d988a6348e3bb2d7f (patch)
treed45b8087e755ae6b9781845d21898603c038f2a7 /source/gameengine/Rasterizer
parent5fcf39d2a5db1d536e9fbfa52edb2bcdc40d8e29 (diff)
Unified KX_BlenderPolyMaterial & GPC_PolygonMaterial into KX_PolygonMaterial.
Make game engine materials use Zoffs in Materials. Added Python material hooks.
Diffstat (limited to 'source/gameengine/Rasterizer')
-rw-r--r--source/gameengine/Rasterizer/RAS_BucketManager.cpp5
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp3
-rw-r--r--source/gameengine/Rasterizer/RAS_IPolygonMaterial.h8
-rw-r--r--source/gameengine/Rasterizer/RAS_IRasterizer.h6
-rw-r--r--source/gameengine/Rasterizer/RAS_MaterialBucket.cpp16
-rw-r--r--source/gameengine/Rasterizer/RAS_MaterialBucket.h7
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp25
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h3
8 files changed, 50 insertions, 23 deletions
diff --git a/source/gameengine/Rasterizer/RAS_BucketManager.cpp b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
index fd2f3a55f1d..4ce072dd7cc 100644
--- a/source/gameengine/Rasterizer/RAS_BucketManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
@@ -112,11 +112,12 @@ void RAS_BucketManager::RenderAlphaBuckets(
// it is needed for compatibility.
rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_DISABLED);
+ int drawingmode;
std::multiset< alphamesh, backtofront>::iterator msit = alphameshset.begin();
for (; msit != alphameshset.end(); ++msit)
{
- (*msit).m_bucket->RenderMeshSlot(cameratrans, rasty, rendertools, *(*msit).m_ms,
- (*msit).m_bucket->ActivateMaterial(cameratrans, rasty, rendertools));
+ while ((*msit).m_bucket->ActivateMaterial(cameratrans, rasty, rendertools, drawingmode))
+ (*msit).m_bucket->RenderMeshSlot(cameratrans, rasty, rendertools, *(*msit).m_ms, drawingmode);
}
rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_ENABLED);
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
index babecdd585a..330f964de7b 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
@@ -36,7 +36,6 @@
#endif
RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname,
- bool ba,
const STR_String& matname,
int tile,
int tilexrep,
@@ -77,7 +76,7 @@ bool RAS_IPolyMaterial::Equals(const RAS_IPolyMaterial& lhs) const
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_lightlayer == lhs.m_lightlayer &&
this->m_texturename.hash() == lhs.m_texturename.hash() &&
this->m_materialname.hash() == lhs.m_materialname.hash()
);
diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
index 648a8b63464..b039b51dd8b 100644
--- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
+++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
@@ -83,7 +83,6 @@ public:
};
RAS_IPolyMaterial(const STR_String& texname,
- bool ba,
const STR_String& matname,
int tile,
int tilexrep,
@@ -110,9 +109,12 @@ public:
* @param rasty The rasterizer in which the material should be active.
* @param cachingInfo The information about the material used to speed up rasterizing.
*/
- virtual void Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingInfo) const {}
+ virtual bool Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingInfo) const
+ {
+ return false;
+ }
- bool Equals(const RAS_IPolyMaterial& lhs) const;
+ virtual bool Equals(const RAS_IPolyMaterial& lhs) const;
bool Less(const RAS_IPolyMaterial& rhs) const;
int GetLightLayer() const;
bool IsTransparant() const;
diff --git a/source/gameengine/Rasterizer/RAS_IRasterizer.h b/source/gameengine/Rasterizer/RAS_IRasterizer.h
index bd7f10e32a7..48991566fa5 100644
--- a/source/gameengine/Rasterizer/RAS_IRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_IRasterizer.h
@@ -116,7 +116,7 @@ public:
* to be rendered with.
* The material will be cached.
*/
- virtual void SetMaterial(const RAS_IPolyMaterial& mat)=0;
+ virtual bool SetMaterial(const RAS_IPolyMaterial& mat)=0;
/**
* Init initialises the renderer.
*/
@@ -328,6 +328,10 @@ public:
float difY,
float difZ,
float diffuse)=0;
+ /**
+ * Sets a polygon offset. z depth will be: z1 = mult*z0 + add
+ */
+ virtual void SetPolygonOffset(float mult, float add) = 0;
};
diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
index f2dc7535010..a9934df1d02 100644
--- a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
+++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
@@ -169,12 +169,13 @@ RAS_MaterialBucket::T_MeshSlotList::iterator RAS_MaterialBucket::msEnd()
return m_meshSlots.end();
}
-int RAS_MaterialBucket::ActivateMaterial(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
- RAS_IRenderTools *rendertools)
+bool RAS_MaterialBucket::ActivateMaterial(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
+ RAS_IRenderTools *rendertools, int &drawmode)
{
rendertools->SetViewMat(cameratrans);
- rasty->SetMaterial(*m_material);
+ if (!rasty->SetMaterial(*m_material))
+ return false;
bool dolights = m_material->GetDrawingMode()&16;
@@ -187,8 +188,10 @@ int RAS_MaterialBucket::ActivateMaterial(const MT_Transform& cameratrans, RAS_IR
bool bUseLights = rendertools->ProcessLighting(m_material->GetLightLayer());
}
- return (rasty->GetDrawingMode() < RAS_IRasterizer::KX_SOLID ?
+ drawmode = (rasty->GetDrawingMode() < RAS_IRasterizer::KX_SOLID ?
1: (m_material->UsesTriangles() ? 0 : 2));
+
+ return true;
}
void RAS_MaterialBucket::RenderMeshSlot(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
@@ -272,12 +275,13 @@ void RAS_MaterialBucket::Render(const MT_Transform& cameratrans,
rendertools->SetClientObject((*m_meshSlots.begin()).m_clientObj);
}
- int drawmode = ActivateMaterial(cameratrans, rasty, rendertools);
+ int drawmode;
for (T_MeshSlotList::const_iterator it = m_meshSlots.begin();
! (it == m_meshSlots.end()); ++it)
{
- RenderMeshSlot(cameratrans, rasty, rendertools, *it, drawmode);
+ while (ActivateMaterial(cameratrans, rasty, rendertools, drawmode))
+ RenderMeshSlot(cameratrans, rasty, rendertools, *it, drawmode);
}
}
diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.h b/source/gameengine/Rasterizer/RAS_MaterialBucket.h
index 83cb06b3c2b..52f835a4575 100644
--- a/source/gameengine/Rasterizer/RAS_MaterialBucket.h
+++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.h
@@ -56,7 +56,10 @@ struct KX_VertexIndex {
public:
KX_VertexIndex(int size);
void SetIndex(short loc,unsigned int index);
+
+ // The vertex array
short m_vtxarray;
+ // An index into the vertex array for up to 4 verticies
unsigned short m_indexarray[4];
short m_size;
};
@@ -124,8 +127,8 @@ public:
void RenderMeshSlot(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
RAS_IRenderTools* rendertools, const KX_MeshSlot &ms, int drawmode);
- int ActivateMaterial(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
- RAS_IRenderTools *rendertools);
+ bool ActivateMaterial(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
+ RAS_IRenderTools *rendertools, int &drawmode);
unsigned int NumMeshSlots();
T_MeshSlotList::iterator msBegin();
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
index 78666b6936d..95688580fa3 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
@@ -42,8 +42,10 @@
#endif // WIN32
#ifdef __APPLE__
#include <OpenGL/gl.h>
+#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
+#include <GL/glu.h>
#endif
#include "RAS_Rect.h"
@@ -157,6 +159,10 @@ static void Myinit_gl_stuff(void)
}
glPolygonStipple(patc);
+
+ glFrontFace(GL_CCW);
+ glCullFace(GL_BACK);
+ glEnable(GL_CULL_FACE);
}
@@ -270,12 +276,9 @@ void RAS_OpenGLRasterizer::DisplayFog()
-void RAS_OpenGLRasterizer::SetMaterial(const RAS_IPolyMaterial& mat)
+bool RAS_OpenGLRasterizer::SetMaterial(const RAS_IPolyMaterial& mat)
{
- if (mat.GetCachingInfo() != m_materialCachingInfo)
- {
- mat.Activate(this, m_materialCachingInfo);
- }
+ return mat.Activate(this, m_materialCachingInfo);
}
@@ -1329,4 +1332,14 @@ double RAS_OpenGLRasterizer::GetTime()
return m_time;
}
-
+void RAS_OpenGLRasterizer::SetPolygonOffset(float mult, float add)
+{
+ glPolygonOffset(mult, add);
+ GLint mode = GL_POLYGON_OFFSET_FILL;
+ if (m_drawingmode < KX_SHADED)
+ mode = GL_POLYGON_OFFSET_LINE;
+ if (mult != 0.0f || add != 0.0f)
+ glEnable(mode);
+ else
+ glDisable(mode);
+}
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
index d5a0e7ff551..2571cee1333 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
@@ -105,7 +105,7 @@ public:
};*/
virtual void SetDepthMask(DepthMask depthmask);
- virtual void SetMaterial(const RAS_IPolyMaterial& mat);
+ virtual bool SetMaterial(const RAS_IPolyMaterial& mat);
virtual bool Init();
virtual void Exit();
virtual bool BeginFrame(int drawingmode, double time);
@@ -224,6 +224,7 @@ public:
float difZ,
float diffuse
);
+ virtual void SetPolygonOffset(float mult, float add);
};