Index: KX_KetsjiEngine.cpp =================================================================== --- KX_KetsjiEngine.cpp (revision 50242) +++ KX_KetsjiEngine.cpp (working copy) @@ -722,7 +722,7 @@ frames--; } - bool bUseAsyncLogicBricks= false;//true; + bool bUseAsyncLogicBricks = false;//true; if (bUseAsyncLogicBricks) { @@ -1443,9 +1443,18 @@ void KX_KetsjiEngine::RenderDebugProperties() { STR_String debugtxt; - int xcoord = 10; // mmmm, these constants were taken from blender source - int ycoord = 14; // to 'mimic' behavior + int title_xmargin = -3; + int title_y_top_margin = 4; + int title_y_bottom_margin = 2; + int const_xindent =0; + int const_ysize = 14; + + int xcoord = 12; // mmmm, these constants were taken from blender source + int ycoord = 17; // to 'mimic' behavior + + int profile_indent = 64; + float tottime = m_logger->GetAverage(); if (tottime < 1e-6f) { tottime = 1e-6f; @@ -1455,99 +1464,161 @@ RAS_Rect viewport; m_canvas->SetViewPort(0, 0, int(m_canvas->GetWidth()), int(m_canvas->GetHeight())); + if (m_show_framerate || m_show_profile) + { + /* Title for profiling("Profile") */ + debugtxt.Format("Profile"); + m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, + debugtxt.Ptr(), + xcoord + const_xindent + title_xmargin, // Adds the constant x indent (0 for now) to the title x margin + ycoord, + m_canvas->GetWidth() /* RdV, TODO ?? */, + m_canvas->GetHeight() /* RdV, TODO ?? */); + + // Increase the indent by default increase + ycoord += const_ysize; + // Add the title indent afterwards + ycoord += title_y_bottom_margin; + } + /* Framerate display */ - if (m_show_framerate) { - debugtxt.Format("swap : %.3f (%.3f frames per second)", tottime, 1.0/tottime); + if (m_show_framerate) + { + debugtxt.Format("Frametime :"); m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, debugtxt.Ptr(), - xcoord, + xcoord + const_xindent, ycoord, m_canvas->GetWidth() /* RdV, TODO ?? */, m_canvas->GetHeight() /* RdV, TODO ?? */); - ycoord += 14; + + debugtxt.Format("%.3fms (%.3f fps)", tottime * 1000.f, 1.0/tottime); + m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, + debugtxt.Ptr(), + xcoord + const_xindent + profile_indent, + ycoord, + m_canvas->GetWidth() /* RdV, TODO ?? */, + m_canvas->GetHeight() /* RdV, TODO ?? */); + // Increase the indent by default increase + ycoord += const_ysize; } - /* Profile and framerate display */ + /* Profile display */ if (m_show_profile) - { + { for (int j = tc_first; j < tc_numCategories; j++) { debugtxt.Format(m_profileLabels[j]); m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, debugtxt.Ptr(), - xcoord,ycoord, + xcoord + const_xindent, + ycoord, m_canvas->GetWidth(), m_canvas->GetHeight()); + double time = m_logger->GetAverage((KX_TimeCategory)j); + debugtxt.Format("%.3fms (%2.2f %%)", time*1000.f, time/tottime * 100.f); m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, debugtxt.Ptr(), - xcoord + 60, ycoord, + xcoord + const_xindent + profile_indent, ycoord, m_canvas->GetWidth(), m_canvas->GetHeight()); - ycoord += 14; + ycoord += const_ysize; } } + // Add the ymargin for titles below the other section of debug info + ycoord += title_y_top_margin; + + /* Property display*/ if (m_show_debug_properties && m_propertiesPresent) { + + /* Title for debugging("Debug properties") */ + debugtxt.Format("Debug properties"); + m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, + debugtxt.Ptr(), + xcoord + const_xindent + title_xmargin, // Adds the constant x indent (0 for now) to the title x margin + ycoord, + m_canvas->GetWidth() /* RdV, TODO ?? */, + m_canvas->GetHeight() /* RdV, TODO ?? */); + + // Increase the indent by default increase + ycoord += const_ysize; + // Add the title indent afterwards + ycoord += title_y_bottom_margin; + KX_SceneList::iterator sceneit; - for (sceneit = m_scenes.begin();sceneit != m_scenes.end() ; sceneit++) + for (sceneit = m_scenes.begin();sceneit != m_scenes.end() ; sceneit++) // for each scene, call the proceed functions { KX_Scene* scene = *sceneit; - /* the 'normal' debug props */ - vector& debugproplist = scene->GetDebugProperties(); - - for (vector::iterator it = debugproplist.begin(); - !(it==debugproplist.end());it++) + vector& debugproplist = scene->GetDebugProperties(); // the 'normal' debug props + CListValue *obs = scene->GetObjectList(); + + for (int ob_idx = 0; ob_idx < obs->GetCount(); ob_idx++) { - CValue* propobj = (*it)->m_obj; - STR_String objname = propobj->GetName(); - STR_String propname = (*it)->m_name; - if (propname == "__state__") + KX_GameObject* gameobj = (KX_GameObject*)obs->GetValue(ob_idx); + STR_String objname = gameobj->GetName(); + + for (vector::iterator it = debugproplist.begin(); !(it==debugproplist.end());it++) { - // reserve name for object state - KX_GameObject* gameobj = static_cast(propobj); - unsigned int state = gameobj->GetState(); - debugtxt = objname + "." + propname + " = "; - bool first = true; - for (int statenum=1;state;state >>= 1, statenum++) + CValue* propobjdeb = (*it)->m_obj; + STR_String objnamedeb = propobjdeb->GetName(); + STR_String propnamedeb = (*it)->m_name; + + if (objname == objnamedeb) { - if (state & 1) + if (propnamedeb == "__state__") { - if (!first) + // reserve name for object state + unsigned int state = gameobj->GetState(); + debugtxt = objname + ": state = "; + bool first = true; + for (int statenum=1;state;state >>= 1, statenum++) { - debugtxt += ","; + if (state & 1) + { + if (!first) + { + debugtxt += ","; + } + debugtxt += STR_String(statenum); + first = false; + } } - debugtxt += STR_String(statenum); - first = false; + m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, + debugtxt.Ptr(), + xcoord + const_xindent, + ycoord, + m_canvas->GetWidth(), + m_canvas->GetHeight()); + ycoord += const_ysize; } + else + { + vector m_propNames = gameobj->GetPropertyNames(); + for (int prop_idx = 0; prop_idx < gameobj->GetPropertyCount(); prop_idx++) + { + STR_String propname = m_propNames[prop_idx]; + + if (propname == propnamedeb) + { + STR_String text = gameobj->GetPropertyText(propname); + debugtxt = objname + ": '" + propname + "' = " + text; + m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, + debugtxt.Ptr(), + xcoord + const_xindent, + ycoord, + m_canvas->GetWidth(), + m_canvas->GetHeight()); + ycoord += const_ysize; + } + } + } } - m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, - debugtxt.Ptr(), - xcoord, - ycoord, - m_canvas->GetWidth(), - m_canvas->GetHeight()); - ycoord += 14; } - else - { - CValue* propval = propobj->GetProperty(propname); - if (propval) - { - STR_String text = propval->GetText(); - debugtxt = objname + "." + propname + " = " + text; - m_rendertools->RenderText2D(RAS_IRenderTools::RAS_TEXT_PADDED, - debugtxt.Ptr(), - xcoord, - ycoord, - m_canvas->GetWidth(), - m_canvas->GetHeight()); - ycoord += 14; - } - } } } }