Batch physics debug rendering
This commit is contained in:
parent
46a832a67f
commit
486d5c291f
@ -1952,6 +1952,16 @@ void IrrDriver::update(float dt)
|
|||||||
else
|
else
|
||||||
renderFixed(dt);
|
renderFixed(dt);
|
||||||
|
|
||||||
|
|
||||||
|
if (world != NULL && world->getPhysics() != NULL)
|
||||||
|
{
|
||||||
|
IrrDebugDrawer* debug_drawer = world->getPhysics()->getDebugDrawer();
|
||||||
|
if (debug_drawer != NULL && debug_drawer->debugEnabled())
|
||||||
|
{
|
||||||
|
debug_drawer->beginNextFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (m_request_screenshot) doScreenShot();
|
if (m_request_screenshot) doScreenShot();
|
||||||
|
|
||||||
// Enable this next print statement to get render information printed
|
// Enable this next print statement to get render information printed
|
||||||
|
@ -197,6 +197,24 @@ void IrrDriver::renderGLSL(float dt)
|
|||||||
drawDebugMeshes();
|
drawDebugMeshes();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
if (world != NULL && world->getPhysics() != NULL)
|
||||||
|
{
|
||||||
|
IrrDebugDrawer* debug_drawer = world->getPhysics()->getDebugDrawer();
|
||||||
|
if (debug_drawer != NULL && debug_drawer->debugEnabled())
|
||||||
|
{
|
||||||
|
const std::map<video::SColor, std::vector<btVector3>>& lines = debug_drawer->getLines();
|
||||||
|
std::map<video::SColor, std::vector<btVector3>>::const_iterator it;
|
||||||
|
for (it = lines.begin(); it != lines.end(); it++)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < it->second.size(); i += 2)
|
||||||
|
{
|
||||||
|
draw3DLine((const core::vector3df&)it->second[0], (const core::vector3df&)it->second[1], it->first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PROFILER_PUSH_CPU_MARKER("EndSccene", 0x45, 0x75, 0x45);
|
PROFILER_PUSH_CPU_MARKER("EndSccene", 0x45, 0x75, 0x45);
|
||||||
m_video_driver->endScene();
|
m_video_driver->endScene();
|
||||||
PROFILER_POP_CPU_MARKER();
|
PROFILER_POP_CPU_MARKER();
|
||||||
|
@ -621,8 +621,14 @@ void World::resetAllKarts()
|
|||||||
// Stil wait will all karts are in rest (and handle the case that a kart
|
// Stil wait will all karts are in rest (and handle the case that a kart
|
||||||
// fell through the ground, which can happen if a kart falls for a long
|
// fell through the ground, which can happen if a kart falls for a long
|
||||||
// time, therefore having a high speed when hitting the ground.
|
// time, therefore having a high speed when hitting the ground.
|
||||||
|
int count = 0;
|
||||||
while(!all_finished)
|
while(!all_finished)
|
||||||
{
|
{
|
||||||
|
if (count++ > 100)
|
||||||
|
{
|
||||||
|
Log::error("World", "Infitine loop waiting for all_finished?");
|
||||||
|
break;
|
||||||
|
}
|
||||||
m_physics->update(1.f/60.f);
|
m_physics->update(1.f/60.f);
|
||||||
all_finished=true;
|
all_finished=true;
|
||||||
for ( KartList::iterator i=m_karts.begin(); i!=m_karts.end(); i++)
|
for ( KartList::iterator i=m_karts.begin(); i!=m_karts.end(); i++)
|
||||||
|
@ -58,7 +58,21 @@ void IrrDebugDrawer::drawLine(const btVector3& from, const btVector3& to,
|
|||||||
{
|
{
|
||||||
video::SColor c(255, (int)(color.getX()*255), (int)(color.getY()*255),
|
video::SColor c(255, (int)(color.getX()*255), (int)(color.getY()*255),
|
||||||
(int)(color.getZ()*255) );
|
(int)(color.getZ()*255) );
|
||||||
draw3DLine((const core::vector3df&)from, (const core::vector3df&)to, c);
|
|
||||||
|
m_lines[c].push_back(from);
|
||||||
|
m_lines[c].push_back(to);
|
||||||
|
|
||||||
|
//draw3DLine((const core::vector3df&)from, (const core::vector3df&)to, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void IrrDebugDrawer::beginNextFrame()
|
||||||
|
{
|
||||||
|
for (std::map<video::SColor, std::vector<btVector3>>::iterator it = m_lines.begin(); it != m_lines.end(); it++)
|
||||||
|
{
|
||||||
|
it->second.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
@ -23,6 +23,8 @@
|
|||||||
#include "graphics/glwrap.hpp"
|
#include "graphics/glwrap.hpp"
|
||||||
|
|
||||||
#include "utils/vec3.hpp"
|
#include "utils/vec3.hpp"
|
||||||
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup physics
|
* \ingroup physics
|
||||||
@ -39,6 +41,9 @@ public:
|
|||||||
DM_NO_KARTS_GRAPHICS = 0x02
|
DM_NO_KARTS_GRAPHICS = 0x02
|
||||||
};
|
};
|
||||||
DebugModeType m_debug_mode;
|
DebugModeType m_debug_mode;
|
||||||
|
|
||||||
|
std::map<video::SColor, std::vector<btVector3>> m_lines;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setDebugMode(int debug_mode) {}
|
virtual void setDebugMode(int debug_mode) {}
|
||||||
/** Callback for bullet: if debug drawing should be done or not.
|
/** Callback for bullet: if debug drawing should be done or not.
|
||||||
@ -66,6 +71,9 @@ public:
|
|||||||
bool debugEnabled() const {return m_debug_mode!=0;}
|
bool debugEnabled() const {return m_debug_mode!=0;}
|
||||||
void nextDebugMode();
|
void nextDebugMode();
|
||||||
void setDebugMode(DebugModeType mode);
|
void setDebugMode(DebugModeType mode);
|
||||||
|
|
||||||
|
void beginNextFrame();
|
||||||
|
const std::map<video::SColor, std::vector<btVector3>>& getLines() const { return m_lines; }
|
||||||
}; // IrrDebugDrawer
|
}; // IrrDebugDrawer
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -165,6 +165,7 @@ public:
|
|||||||
void setDebugMode(IrrDebugDrawer::DebugModeType mode) { m_debug_drawer->setDebugMode(mode); }
|
void setDebugMode(IrrDebugDrawer::DebugModeType mode) { m_debug_drawer->setDebugMode(mode); }
|
||||||
/** Returns true if the debug drawer is enabled. */
|
/** Returns true if the debug drawer is enabled. */
|
||||||
bool isDebug() const {return m_debug_drawer->debugEnabled(); }
|
bool isDebug() const {return m_debug_drawer->debugEnabled(); }
|
||||||
|
IrrDebugDrawer* getDebugDrawer() { return m_debug_drawer; }
|
||||||
virtual btScalar solveGroup(btCollisionObject** bodies, int numBodies,
|
virtual btScalar solveGroup(btCollisionObject** bodies, int numBodies,
|
||||||
btPersistentManifold** manifold,int numManifolds,
|
btPersistentManifold** manifold,int numManifolds,
|
||||||
btTypedConstraint** constraints,int numConstraints,
|
btTypedConstraint** constraints,int numConstraints,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user