Show debug info about total skinning joints being calculated

This commit is contained in:
Benau 2016-12-07 16:26:22 +08:00
parent d21e5e0f76
commit 407ed319de
4 changed files with 18 additions and 7 deletions

View File

@ -252,11 +252,7 @@ void DrawCalls::handleSTKCommon(scene::ISceneNode *Node,
(!culled_for_cams[0] || !culled_for_cams[1] || !culled_for_cams[2] ||
!culled_for_cams[3] || !culled_for_cams[4] || !culled_for_cams[5]))
{
skinning_offset =
std::accumulate(m_mesh_for_skinning.begin(),
m_mesh_for_skinning.end(), 0, [] (const size_t previous,
const STKAnimatedMesh* m)
{ return previous + m->getTotalJointSize(); });
skinning_offset = getSkinningOffset();
m_mesh_for_skinning.insert(am);
am->setSkinningOffset(skinning_offset * sizeof(core::matrix4));
}
@ -584,6 +580,7 @@ void DrawCalls::prepareDrawCalls( ShadowMatrices& shadow_matrices,
&m_immediate_draw_list, camnode, shadow_matrices);
PROFILER_POP_CPU_MARKER();
irr_driver->setSkinningJoint(getSkinningOffset());
// Add a 1 s timeout
if (!m_sync)
m_sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
@ -882,3 +879,12 @@ void DrawCalls::multidrawGlow() const
m_glow_cmd_buffer->multidraw();
}
#endif // !defined(USE_GLES2)
// ----------------------------------------------------------------------------
uint32_t DrawCalls::getSkinningOffset() const
{
return std::accumulate(m_mesh_for_skinning.begin(),
m_mesh_for_skinning.end(), 0, []
(const size_t previous, const STKAnimatedMesh* m)
{ return previous + m->getTotalJointSize(); });
} // getSkinningOffset

View File

@ -107,6 +107,7 @@ public:
void drawIndirectGlow() const;
void multidrawGlow() const;
void renderBoundingBoxes();
uint32_t getSkinningOffset() const;
};
#endif //HEADER_DRAW_CALLS_HPP

View File

@ -139,6 +139,7 @@ IrrDriver::IrrDriver()
m_lightviz = m_shadowviz = m_distortviz = m_rsm = m_rh = m_gi = false;
m_boundingboxesviz = false;
m_last_light_bucket_distance = 0;
m_skinning_joint = 0;
} // IrrDriver
// ----------------------------------------------------------------------------
@ -1899,9 +1900,10 @@ void IrrDriver::displayFPS()
if ((UserConfigParams::m_artist_debug_mode)&&(CVS->isGLSL()))
{
fps_string = _("FPS: %d/%d/%d - PolyCount: %d Solid, "
"%d Shadows - LightDist : %d",
"%d Shadows - LightDist : %d, Total skinning joints: %d",
min, fps, max, m_renderer->getPolyCount(SOLID_NORMAL_AND_DEPTH_PASS),
m_renderer->getPolyCount(SHADOW_PASS), m_last_light_bucket_distance);
m_renderer->getPolyCount(SHADOW_PASS), m_last_light_bucket_distance,
m_skinning_joint);
}
else
fps_string = _("FPS: %d/%d/%d - %d KTris", min, fps, max, (int)roundf(kilotris));

View File

@ -173,6 +173,7 @@ private:
bool m_boundingboxesviz;
unsigned m_last_light_bucket_distance;
unsigned m_skinning_joint;
u32 m_renderpass;
class STKMeshSceneNode *m_sun_interposer;
core::vector3df m_sun_direction;
@ -292,6 +293,7 @@ public:
void showPointer();
void hidePointer();
void setLastLightBucketDistance(unsigned d) { m_last_light_bucket_distance = d; }
void setSkinningJoint(unsigned d) { m_skinning_joint = d; }
bool isPointerShown() const { return m_pointer_shown; }
core::position2di getMouseLocation();