forked from bartvdbraak/blender
BGE performance: allow to create display list on meshes with modifiers but without armature and shape keys. These modified meshes are static and can be put safely in a display list. As the rendering of modifiers is done in direct openGL call, it results is a bit performance boost.
This commit is contained in:
parent
705764fe05
commit
5a0de728b0
@ -66,7 +66,7 @@ public:
|
||||
virtual bool Update(void){ return false; };
|
||||
virtual bool UpdateBuckets(void){ return false; };
|
||||
virtual RAS_Deformer* GetReplica(){return NULL;};
|
||||
virtual void ProcessReplica() { };
|
||||
virtual void ProcessReplica() {m_bDynamic=false;};
|
||||
struct Mesh* GetMesh() { return m_bmesh; };
|
||||
// virtual void InitDeform(double time){};
|
||||
|
||||
|
@ -121,7 +121,7 @@ bool BL_ShapeDeformer::ExecuteShapeDrivers(void)
|
||||
|
||||
ForceUpdate();
|
||||
m_armobj->RestorePose();
|
||||
|
||||
m_bDynamic = true;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -144,8 +144,10 @@ bool BL_ShapeDeformer::Update(void)
|
||||
|
||||
/* we will blend the key directly in mvert array: it is used by armature as the start position */
|
||||
/* m_bmesh->key can be NULL in case of Modifier deformer */
|
||||
if (m_bmesh->key)
|
||||
if (m_bmesh->key) {
|
||||
do_rel_key(0, m_bmesh->totvert, m_bmesh->totvert, (char *)m_bmesh->mvert->co, m_bmesh->key, 0);
|
||||
m_bDynamic = true;
|
||||
}
|
||||
|
||||
// Don't release the weight array as in Blender, it will most likely be reusable on next frame
|
||||
// The weight array are ultimately deleted when the skin mesh is destroyed
|
||||
|
@ -201,7 +201,8 @@ bool BL_SkinDeformer::Update(void)
|
||||
m_lastArmaUpdate=m_armobj->GetLastFrame();
|
||||
|
||||
m_armobj->RestorePose();
|
||||
|
||||
/* dynamic vertex, cannot use display list */
|
||||
m_bDynamic = true;
|
||||
/* indicate that the m_transverts and normals are up to date */
|
||||
return true;
|
||||
}
|
||||
|
@ -757,6 +757,7 @@ void KX_ConvertODEEngineObject(KX_GameObject* gameobj,
|
||||
virtual bool Update(void)
|
||||
{
|
||||
//printf("update\n");
|
||||
m_bDynamic = true;
|
||||
return true;//??
|
||||
}
|
||||
virtual bool UpdateBuckets(void)
|
||||
@ -775,6 +776,7 @@ void KX_ConvertODEEngineObject(KX_GameObject* gameobj,
|
||||
virtual void ProcessReplica()
|
||||
{
|
||||
// we have two pointers to deal with but we cannot do it now, will be done in Relink
|
||||
m_bDynamic = false;
|
||||
}
|
||||
virtual bool SkipVertexTransform()
|
||||
{
|
||||
|
@ -39,7 +39,7 @@
|
||||
class RAS_Deformer
|
||||
{
|
||||
public:
|
||||
RAS_Deformer(){};
|
||||
RAS_Deformer() : m_pMesh(0), m_bDynamic(false) {};
|
||||
virtual ~RAS_Deformer(){};
|
||||
virtual void Relink(GEN_Map<class GEN_HashedPtr, void*>*map)=0;
|
||||
virtual bool Apply(class RAS_IPolyMaterial *polymat)=0;
|
||||
@ -55,8 +55,14 @@ public:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// true when deformer produces varying vertex (shape or armature)
|
||||
bool IsDynamic()
|
||||
{
|
||||
return m_bDynamic;
|
||||
}
|
||||
protected:
|
||||
class RAS_MeshObject *m_pMesh;
|
||||
bool m_bDynamic;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -597,7 +597,7 @@ void RAS_MaterialBucket::RenderMeshSlot(const MT_Transform& cameratrans, RAS_IRa
|
||||
// then it won't have texture coordinates for actual drawing. also
|
||||
// for zsort we can't make a display list, since the polygon order
|
||||
// changes all the time.
|
||||
if(ms.m_pDeformer)
|
||||
if(ms.m_pDeformer && ms.m_pDeformer->IsDynamic())
|
||||
ms.m_bDisplayList = false;
|
||||
else if(!ms.m_DisplayList && rasty->GetDrawingMode() == RAS_IRasterizer::KX_SHADOW)
|
||||
ms.m_bDisplayList = false;
|
||||
|
Loading…
Reference in New Issue
Block a user