diff options
Diffstat (limited to 'source/gameengine/Rasterizer')
4 files changed, 43 insertions, 1 deletions
diff --git a/source/gameengine/Rasterizer/RAS_Deformer.h b/source/gameengine/Rasterizer/RAS_Deformer.h index f61ac7ea18a..37543092e68 100644 --- a/source/gameengine/Rasterizer/RAS_Deformer.h +++ b/source/gameengine/Rasterizer/RAS_Deformer.h @@ -76,6 +76,10 @@ public: { return NULL; } + virtual struct DerivedMesh* GetPhysicsMesh() + { + return NULL; + } virtual class RAS_MeshObject* GetRasMesh() { /* m_pMesh does not seem to be being used?? */ diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp index 0c81d7d8274..00f1f5f2848 100644 --- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp +++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp @@ -208,6 +208,11 @@ Material *RAS_IPolyMaterial::GetBlenderMaterial() const return NULL; } +Image *RAS_IPolyMaterial::GetBlenderImage() const +{ + return NULL; +} + Scene* RAS_IPolyMaterial::GetBlenderScene() const { return NULL; diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h index e7bd78c2309..59554e31c36 100644 --- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h +++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h @@ -45,6 +45,7 @@ class RAS_IRasterizer; struct MTFace; struct Material; +struct Image; struct Scene; class SCA_IScene; @@ -160,6 +161,7 @@ public: int GetMaterialIndex() const; virtual Material* GetBlenderMaterial() const; + virtual Image* GetBlenderImage() const; virtual Scene* GetBlenderScene() const; virtual void ReleaseMaterial(); virtual void GetMaterialRGBAColor(unsigned char *rgba) const; diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp index e8c2db5526a..c2859394176 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp @@ -731,6 +731,7 @@ static RAS_MeshSlot *current_ms; static RAS_MeshObject *current_mesh; static int current_blmat_nr; static GPUVertexAttribs current_gpu_attribs; +static Image *current_image; static int CheckMaterialDM(int matnr, void *attribs) { // only draw the current material @@ -769,6 +770,33 @@ static int CheckTexfaceDM(void *mcol, int index) return 0; } +static int CheckTexDM(MTFace *tface, MCol *mcol, int matnr) +{ + + // index is the original face index, retrieve the polygon + if (matnr == current_blmat_nr && + (tface == NULL || tface->tpage == current_image)) { + // must handle color. + if (current_wireframe) + return 2; + if (current_ms->m_bObjectColor) { + MT_Vector4& rgba = current_ms->m_RGBAcolor; + glColor4d(rgba[0], rgba[1], rgba[2], rgba[3]); + // don't use mcol + return 2; + } + if (!mcol) { + // we have to set the color from the material + unsigned char rgba[4]; + current_polymat->GetMaterialRGBAColor(rgba); + glColor4ubv((const GLubyte *)rgba); + return 2; + } + return 1; + } + return 0; +} + void RAS_OpenGLRasterizer::IndexPrimitivesInternal(RAS_MeshSlot& ms, bool multi) { bool obcolor = ms.m_bObjectColor; @@ -807,7 +835,10 @@ void RAS_OpenGLRasterizer::IndexPrimitivesInternal(RAS_MeshSlot& ms, bool multi) ms.m_pDerivedMesh->drawFacesGLSL(ms.m_pDerivedMesh, CheckMaterialDM); GPU_set_material_blend_mode(current_blend_mode); } else { - ms.m_pDerivedMesh->drawMappedFacesTex(ms.m_pDerivedMesh, CheckTexfaceDM, mcol); + //ms.m_pDerivedMesh->drawMappedFacesTex(ms.m_pDerivedMesh, CheckTexfaceDM, mcol); + current_blmat_nr = current_polymat->GetMaterialIndex(); + current_image = current_polymat->GetBlenderImage(); + ms.m_pDerivedMesh->drawFacesTex(ms.m_pDerivedMesh, CheckTexDM); } return; } |