Take some debug render code out of main_loop.cpp, see #43
This commit is contained in:
parent
825ebb3335
commit
a046b1c494
6 changed files with 601 additions and 495 deletions
|
@ -153,6 +153,7 @@
|
|||
// pulled from main_loop.cpp
|
||||
#include "ping.h"
|
||||
#include "profiling.h"
|
||||
#include "main_loop_debug.h"
|
||||
|
||||
|
||||
///////////
|
||||
|
@ -178,7 +179,6 @@ static void viewportToScissor(const CViewport &vp, CScissor &scissor)
|
|||
////////////
|
||||
// EXTERN //
|
||||
////////////
|
||||
extern std::set<std::string> LodCharactersNotFound;
|
||||
extern UDriver *Driver;
|
||||
extern IMouseDevice *MouseDevice;
|
||||
extern UScene *Scene;
|
||||
|
@ -193,13 +193,16 @@ extern TTime UniversalTime;
|
|||
extern UMaterial GenericMat;
|
||||
extern UCamera MainCam;
|
||||
extern CEventsListener EventsListener;
|
||||
extern uint32 NbDatabaseChanges;
|
||||
extern CMatrix MainSceneViewMatrix;
|
||||
extern CMatrix InvMainSceneViewMatrix;
|
||||
extern std::vector<UTextureFile*> LogoBitmaps;
|
||||
extern bool IsInRingSession;
|
||||
extern std::string UsedFSAddr;
|
||||
|
||||
// temp
|
||||
extern NLMISC::CValueSmoother smoothFPS;
|
||||
extern NLMISC::CValueSmoother moreSmoothFPS;
|
||||
|
||||
void loadBackgroundBitmap (TBackground background);
|
||||
void destroyLoadingBitmap ();
|
||||
void drawLoadingBitmap (float progress);
|
||||
|
@ -301,8 +304,6 @@ CGameContextMenu GameContextMenu;
|
|||
|
||||
|
||||
|
||||
NLMISC::CValueSmoother smoothFPS;
|
||||
NLMISC::CValueSmoother moreSmoothFPS(64);
|
||||
|
||||
|
||||
// Profile
|
||||
|
@ -344,12 +345,6 @@ H_AUTO_DECL ( RZ_Client_Main_Loop_Net )
|
|||
///////////////
|
||||
// FUNCTIONS //
|
||||
///////////////
|
||||
// Display some debug infos.
|
||||
void displayDebug();
|
||||
void displayDebugFps();
|
||||
void displayDebugUIUnderMouse();
|
||||
// Display an Help.
|
||||
void displayHelp();
|
||||
|
||||
//update the sound manager (listener pos, user walk/run sound...)
|
||||
void updateSound();
|
||||
|
@ -3056,488 +3051,6 @@ class CHandlerDebugUiDumpElementUnderMouse : public IActionHandler
|
|||
REGISTER_ACTION_HANDLER( CHandlerDebugUiDumpElementUnderMouse, "debug_ui_inspect_element_under_mouse");
|
||||
|
||||
|
||||
//---------------------------------------------------
|
||||
// displayDebug :
|
||||
// Display some debug infos.
|
||||
//---------------------------------------------------
|
||||
void displayDebug()
|
||||
{
|
||||
float lineStep = ClientCfg.DebugLineStep;
|
||||
float line;
|
||||
|
||||
// Initialize Pen //
|
||||
//----------------//
|
||||
// Create a shadow when displaying a text.
|
||||
TextContext->setShaded(true);
|
||||
// Set the font size.
|
||||
TextContext->setFontSize(ClientCfg.DebugFontSize);
|
||||
// Set the text color
|
||||
TextContext->setColor(ClientCfg.DebugFontColor);
|
||||
|
||||
// TOP LEFT //
|
||||
//----------//
|
||||
TextContext->setHotSpot(UTextContext::TopLeft);
|
||||
line = 0.9f;
|
||||
// FPS and Ms per frame
|
||||
{
|
||||
// smooth across frames.
|
||||
double deltaTime = smoothFPS.getSmoothValue ();
|
||||
// FPS and Ms per frame
|
||||
if(deltaTime != 0.f)
|
||||
TextContext->printfAt(0.f, line,"%.1f fps", 1.f/deltaTime);
|
||||
else
|
||||
TextContext->printfAt(0.f, line,"%.1f fps", 0.f);
|
||||
TextContext->printfAt(0.1f, line, "%d ms", (uint)(deltaTime*1000));
|
||||
}
|
||||
line -= lineStep;
|
||||
line -= lineStep;
|
||||
|
||||
// USER
|
||||
// Front
|
||||
TextContext->printfAt(0.0f, line, " %f (%f,%f,%f) front", atan2(UserEntity->front().y, UserEntity->front().x), UserEntity->front().x, UserEntity->front().y, UserEntity->front().z);
|
||||
line -= lineStep;
|
||||
// Dir
|
||||
TextContext->printfAt(0.0f, line, " %f (%f,%f,%f) dir", atan2(UserEntity->dir().y, UserEntity->dir().x), UserEntity->dir().x, UserEntity->dir().y, UserEntity->dir().z);
|
||||
line -= lineStep;
|
||||
// NB Stage
|
||||
TextContext->printfAt(0.0f, line, " NB Stage: %d", UserEntity->nbStage());
|
||||
line -= lineStep;
|
||||
// NB Animation FXs still remaining in the remove list.
|
||||
TextContext->printfAt(0.0f, line, " NB FXs to remove: %d", UserEntity->nbAnimFXToRemove());
|
||||
line -= lineStep;
|
||||
// Mode.
|
||||
TextContext->printfAt(0.0f, line, " Mode: %d (%s)", (sint)UserEntity->mode(), MBEHAV::modeToString(UserEntity->mode()).c_str());
|
||||
line -= lineStep;
|
||||
// Behaviour.
|
||||
TextContext->printfAt(0.0f, line, " Behaviour: %d (%s)", (sint)UserEntity->behaviour(), MBEHAV::behaviourToString(UserEntity->behaviour()).c_str());
|
||||
line -= lineStep;
|
||||
// Display the target mount.
|
||||
TextContext->printfAt(0.0f, line, " Mount: %d", UserEntity->mount());
|
||||
line -= lineStep;
|
||||
// Display the target rider.
|
||||
TextContext->printfAt(0.0f, line, " Rider: %d", UserEntity->rider());
|
||||
line -= lineStep;
|
||||
// Display the current animation name.
|
||||
TextContext->printfAt(0.0f, line, " Current Animation Name: %s", UserEntity->currentAnimationName().c_str());
|
||||
line -= lineStep;
|
||||
// Display the current move animation set name.
|
||||
TextContext->printfAt(0.0f, line, " Current AnimationSet Name (MOVE): %s", UserEntity->currentAnimationSetName(MOVE).c_str());
|
||||
line -= lineStep;
|
||||
// Display Missing Animations
|
||||
if(::CAnimation::MissingAnim.empty() == false)
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, " '%u' Missing Animations, 1st: '%s'", ::CAnimation::MissingAnim.size(), (*(::CAnimation::MissingAnim.begin())).c_str());
|
||||
line -= lineStep;
|
||||
}
|
||||
// Display Missing LoD
|
||||
if(LodCharactersNotFound.empty() == false)
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, " '%u' Missing LoD, 1st: '%s'", LodCharactersNotFound.size(), (*(LodCharactersNotFound.begin())).c_str());
|
||||
line -= lineStep;
|
||||
}
|
||||
|
||||
// Watched Entity
|
||||
line -= lineStep;
|
||||
// Now Displaying the selection.
|
||||
TextContext->printfAt(0.0f, line, "--*** Watched entity ***--");
|
||||
line -= lineStep;
|
||||
// Display information about the debug entity slot.
|
||||
if(WatchedEntitySlot != CLFECOMMON::INVALID_SLOT)
|
||||
{
|
||||
// Get a pointer on the target.
|
||||
CEntityCL *watchedEntity = EntitiesMngr.entity(WatchedEntitySlot);
|
||||
if(watchedEntity)
|
||||
{
|
||||
// Display Debug Information about the Selection.
|
||||
watchedEntity->displayDebug(0.0f, line, -lineStep);
|
||||
|
||||
// Distance of the target
|
||||
CVectorD diffvector = UserEntity->pos() - watchedEntity->pos();
|
||||
TextContext->printfAt(0.0f, line, " Distance: %10.2f (Manhattan: %.2f)", diffvector.norm(), fabs(diffvector.x) + fabs(diffvector.y) );
|
||||
line -= lineStep;
|
||||
}
|
||||
// Target not allocated
|
||||
else
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, "Not allocated (%d)", WatchedEntitySlot);
|
||||
line -= lineStep;
|
||||
}
|
||||
}
|
||||
// No Target
|
||||
else
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, "None");
|
||||
line -= lineStep;
|
||||
}
|
||||
|
||||
/* Ca rame grave !
|
||||
|
||||
uint nMem = NLMEMORY::GetAllocatedMemory();
|
||||
line -= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Mem Used: %d",nMem);*/
|
||||
|
||||
// 3D Filters information:
|
||||
#ifdef _PROFILE_ON_
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "3D Filters:");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "MeshNoVP: %s", Filter3D[FilterMeshNoVP]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "MeshVP: %s", Filter3D[FilterMeshVP]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "FXs: %s", Filter3D[FilterFXs]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
if (Landscape)
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, "Landscape: %s", Filter3D[FilterLandscape]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
}
|
||||
else
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, "Landscape not enabled");
|
||||
}
|
||||
TextContext->printfAt(0.0f, line, "Vegetable: %s", Filter3D[FilterVegetable]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Skeleton: %s", Filter3D[FilterSkeleton]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Water: %s", Filter3D[FilterWater]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Cloud: %s", Filter3D[FilterCloud]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "CoarseMesh: %s", Filter3D[FilterCoarseMesh]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Sky: %s", Filter3D[FilterSky]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
// Materials Infos
|
||||
TextContext->printfAt(0.0f, line, "SetupedMatrix: %d", Driver->profileSetupedModelMatrix() );
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "SetupedMaterials: %d", Driver->profileSetupedMaterials() );
|
||||
line-= lineStep;
|
||||
// Display camera cluster system
|
||||
TextContext->printfAt(0.0f, line, "ClusterSystem: %p", MainCam.getClusterSystem() );
|
||||
line-= 2 * lineStep;
|
||||
// Lua stuffs
|
||||
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
||||
TextContext->printfAt(0.0f, line, "Lua mem (kb) : %d / %d", CLuaManager::getInstance().getLuaState()->getGCCount(), CLuaManager::getInstance().getLuaState()->getGCThreshold());
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Lua stack size = %d", CLuaManager::getInstance().getLuaState()->getTop());
|
||||
line-= lineStep;
|
||||
|
||||
#endif
|
||||
|
||||
// TOP LEFT //
|
||||
//-----------//
|
||||
TextContext->setHotSpot(UTextContext::TopLeft);
|
||||
line = 1.f;
|
||||
string str;
|
||||
#if FINAL_VERSION
|
||||
str = "FV";
|
||||
#else
|
||||
str = "DEV";
|
||||
#endif
|
||||
if(ClientCfg.ExtendedCommands)
|
||||
str += "_E";
|
||||
str += " "RYZOM_VERSION;
|
||||
TextContext->printfAt(0.f, line, "Version %s", str.c_str());
|
||||
|
||||
// TOP MIDDLE //
|
||||
//------------//
|
||||
TextContext->setHotSpot(UTextContext::MiddleTop);
|
||||
line = 1.f;
|
||||
// Motion Mode
|
||||
TextContext->printfAt(0.5f, line, "%s", UserControls.modeStr().c_str());
|
||||
line -= lineStep;
|
||||
|
||||
// TOP RIGHT //
|
||||
//-----------//
|
||||
TextContext->setHotSpot(UTextContext::TopRight);
|
||||
line = 1.f;
|
||||
//// 3D Infos
|
||||
// Video mem allocated.
|
||||
TextContext->printfAt(1.f, line, "Video mem. : %f", Driver->profileAllocatedTextureMemory()/(1024.f*1024.f));
|
||||
line -= lineStep;
|
||||
// Video mem used since last swapBuffers().
|
||||
TextContext->printfAt(1.f, line, "Video mem. since last swap buffer: %f", Driver->getUsedTextureMemory()/(1024.f*1024.f));
|
||||
line -= lineStep;
|
||||
// Get the last face count asked from the main scene before reduction.
|
||||
TextContext->printfAt(1.f, line, "Nb Skin Face Asked: %f", Scene->getGroupNbFaceAsked("Skin"));
|
||||
line -= lineStep;
|
||||
TextContext->printfAt(1.f, line, "Nb Fx Face Asked: %f", Scene->getGroupNbFaceAsked("Fx"));
|
||||
line -= lineStep;
|
||||
// All Triangles In
|
||||
CPrimitiveProfile pIn;
|
||||
CPrimitiveProfile pOut;
|
||||
Driver->profileRenderedPrimitives(pIn, pOut);
|
||||
TextContext->printfAt(1.f, line, "Tri In : %d", pIn.NTriangles+2*pIn.NQuads);
|
||||
line -= lineStep;
|
||||
// All Triangles Out
|
||||
TextContext->printfAt(1.f, line, "Tri Out : %d", pOut.NTriangles+2*pIn.NQuads);
|
||||
line -= lineStep;
|
||||
// Current Cluster
|
||||
string strPos;
|
||||
// Check there is a PACS Primitive before using it.
|
||||
if(UserEntity->getPrimitive() && GR)
|
||||
{
|
||||
UGlobalPosition gPos;
|
||||
UserEntity->getPrimitive()->getGlobalPosition(gPos, dynamicWI);
|
||||
string strPos = GR->getIdentifier(gPos);
|
||||
}
|
||||
else
|
||||
strPos = "No Primitive";
|
||||
TextContext->printfAt(1.f, line, "Cluster : %s", strPos.c_str());
|
||||
line -= lineStep;
|
||||
//// SOUND Infos
|
||||
line -= lineStep;
|
||||
if(SoundMngr)
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Sound source instance: %u", SoundMngr->getSourcesInstanceCount());
|
||||
line -= lineStep;
|
||||
TextContext->printfAt(1.f, line, "Logical playing SoundSource: %u", SoundMngr->getMixer()->getPlayingSourcesCount ());
|
||||
line -= lineStep;
|
||||
TextContext->printfAt(1.f, line, "Audio tracks: %u/%u", SoundMngr->getMixer()->getUsedTracksCount(), SoundMngr->getMixer()->getPolyphony());
|
||||
line -= lineStep;
|
||||
if (SoundMngr->getMixer()->getMutedPlayingSourcesCount() > 0)
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Source muted: %u !", SoundMngr->getMixer()->getMutedPlayingSourcesCount());
|
||||
line -= lineStep;
|
||||
}
|
||||
TextContext->printfAt(1.f, line, "Samples in memory: %g MB", SoundMngr->getLoadingSamplesSize() / (1024.0f*1024.0f));
|
||||
line -= lineStep;
|
||||
|
||||
}
|
||||
|
||||
// BOTTOM RIGHT //
|
||||
//--------------//
|
||||
TextContext->setHotSpot(UTextContext::BottomRight);
|
||||
line = 0.f;
|
||||
//// POSITION
|
||||
CVector postmp = View.viewPos();
|
||||
// Pos
|
||||
TextContext->printfAt(1.f, line, "Position : %d %d %d",(int)postmp.x,(int)postmp.y,(int)postmp.z);
|
||||
line += lineStep;
|
||||
// Body Heading
|
||||
TextContext->printfAt(1.f, line, "Front : %.2f %.2f %.2f", UserEntity->front().x, UserEntity->front().y, UserEntity->front().z);
|
||||
line += lineStep;
|
||||
// Speed
|
||||
TextContext->printfAt(1.f, line, "Speed : %.2f", (float) UserEntity->speed());
|
||||
line += lineStep;
|
||||
// Zone
|
||||
if (!ClientCfg.Light)
|
||||
{
|
||||
if (Landscape)
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Zone: %s", Landscape->getZoneName(postmp).c_str());
|
||||
line += lineStep;
|
||||
}
|
||||
}
|
||||
// Prim File
|
||||
string primFile = PrimFiles.getCurrentPrimitive ();
|
||||
if (!primFile.empty ())
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Prim File: %s", primFile.c_str ());
|
||||
line += lineStep;
|
||||
}
|
||||
|
||||
//// CONNECTION
|
||||
line += lineStep;
|
||||
// Ryzom Day.
|
||||
TextContext->printfAt(1.f, line, "Ryzom Day : %d", RT.getRyzomDay());
|
||||
line += lineStep;
|
||||
// hour in the game
|
||||
float dayNightCycleHour = (float)RT.getRyzomTime();
|
||||
TextContext->printfAt(1.f, line, "Ryzom Time : %2u:%02u", int(dayNightCycleHour), int((dayNightCycleHour-int(dayNightCycleHour))*60.0f));
|
||||
line += lineStep;
|
||||
// light hour in the game, used to display te day/night
|
||||
TextContext->printfAt(1.f, line, "Ryzom Light Time : %2u:%02u (%s)", int(DayNightCycleHour), int((DayNightCycleHour-int(DayNightCycleHour))*60.0f), LightCycleManager.getStateString().c_str());
|
||||
line += lineStep;
|
||||
// Server GameCycle
|
||||
TextContext->printfAt(1.f, line, "Server GameCycle : %u", (uint)NetMngr.getCurrentServerTick());
|
||||
line += lineStep;
|
||||
// Current GameCycle
|
||||
TextContext->printfAt(1.f, line, "Current GameCycle : %u", (uint)NetMngr.getCurrentClientTick());
|
||||
line += lineStep;
|
||||
// Current GameCycle
|
||||
TextContext->printfAt(1.f, line, "Ms per Cycle : %d", NetMngr.getMsPerTick());
|
||||
line += lineStep;
|
||||
// Packet Loss
|
||||
TextContext->printfAt(1.f, line, "Packet Loss : %.1f %%", NetMngr.getMeanPacketLoss()*100.0f);
|
||||
line += lineStep;
|
||||
// Packet Loss
|
||||
TextContext->printfAt(1.f, line, "Packets Lost : %u", NetMngr.getTotalLostPackets());
|
||||
line += lineStep;
|
||||
// Mean Upload
|
||||
TextContext->printfAt(1.f, line, "Mean Upld : %.3f kbps", NetMngr.getMeanUpload());
|
||||
line += lineStep;
|
||||
// Mean Download
|
||||
TextContext->printfAt(1.f, line, "Mean Dnld : %.3f kbps", NetMngr.getMeanDownload());
|
||||
line += lineStep;
|
||||
|
||||
// Mean Download
|
||||
TextContext->printfAt(1.f, line, "Nb in Vision : %d(%d,%d,%d)",
|
||||
EntitiesMngr.nbEntitiesAllocated(),
|
||||
EntitiesMngr.nbUser(),
|
||||
EntitiesMngr.nbPlayer(),
|
||||
EntitiesMngr.nbChar());
|
||||
line += lineStep;
|
||||
|
||||
// Number of database changes
|
||||
TextContext->printfAt(1.f, line, "DB Changes : %u", NbDatabaseChanges );
|
||||
line += lineStep;
|
||||
|
||||
// Ping
|
||||
TextContext->printfAt(1.f, line, "DB Ping : %u ms", Ping.getValue());
|
||||
line += lineStep;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Manual weather setup
|
||||
{
|
||||
if(ContinentMngr.cur()) // Only usable if there is a continent loaded.
|
||||
{
|
||||
if (!ForceTrueWeatherValue)
|
||||
{
|
||||
const CWeatherFunction &wf = ContinentMngr.cur()->WeatherFunction[CurrSeason];
|
||||
float wv;
|
||||
if (ClientCfg.ManualWeatherSetup)
|
||||
{
|
||||
wv = std::max(wf.getNumWeatherSetups() - 1, 0u) * ManualWeatherValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
wv = std::max(wf.getNumWeatherSetups() - 1, 0u) * ::getBlendedWeather(RT.getRyzomDay(), RT.getRyzomTime(), *WeatherFunctionParams, ContinentMngr.cur()->WeatherFunction);
|
||||
}
|
||||
const CWeatherSetup *ws = wf.getWeatherSetup((uint) floorf(wv));
|
||||
std::string name0 = ws ? NLMISC::CStringMapper::unmap(ws->SetupName) : "???";
|
||||
ws = wf.getWeatherSetup(std::min((uint) (floorf(wv) + 1), wf.getNumWeatherSetups() - 1));
|
||||
std::string name1 = ws ? NLMISC::CStringMapper::unmap(ws->SetupName) : "???";
|
||||
TextContext->printfAt(1.f, line, "Weather value : %.02f : %s -> %s", ws ? wv : 0.f, name0.c_str(), name1.c_str());
|
||||
line += lineStep;
|
||||
}
|
||||
else
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Weather value : %.02f", WeatherManager.getWeatherValue() * std::max(ContinentMngr.cur()->WeatherFunction[CurrSeason].getNumWeatherSetups() - 1, 0u));
|
||||
line += lineStep;
|
||||
TextContext->printfAt(1.f, line, "TEST WEATHER FUNCTION");
|
||||
line += lineStep;
|
||||
}
|
||||
// season
|
||||
TextContext->printfAt(1.f, line, "Season : %s", EGSPD::CSeason::toString(CurrSeason).c_str());
|
||||
line += lineStep;
|
||||
}
|
||||
}
|
||||
|
||||
// fog dist
|
||||
if (ContinentMngr.cur())
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Continent fog min near = %.1f, max far = %.1f", ContinentMngr.cur()->FogStart, ContinentMngr.cur()->FogEnd);
|
||||
line += lineStep;
|
||||
CFogState tmpFog;
|
||||
ContinentMngr.getFogState(MainFog, LightCycleManager.getLightLevel(), LightCycleManager.getLightDesc().DuskRatio, LightCycleManager.getState(), View.viewPos(), tmpFog);
|
||||
TextContext->printfAt(1.f, line, "Continent fog curr near = %.1f, curr far = %.1f", tmpFog.FogStartDist, tmpFog.FogEndDist);
|
||||
line += lineStep;
|
||||
}
|
||||
const CWeatherState &ws = WeatherManager.getCurrWeatherState();
|
||||
TextContext->printfAt(1.f, line, "Weather fog near = %.1f, far = %.1f", ws.FogNear[MainFog], ws.FogFar[MainFog]);
|
||||
line += lineStep;
|
||||
TextContext->printfAt(1.f, line, "Final fog near = %.1f, far = %.1f", MainFogState.FogStartDist, MainFogState.FogEndDist);
|
||||
line += lineStep;
|
||||
float left, right, bottom, top, znear, zfar;
|
||||
Scene->getCam().getFrustum(left, right, bottom, top, znear, zfar);
|
||||
TextContext->printfAt(1.f, line, "Clip near = %.1f, far = %.1f", znear, zfar);
|
||||
line += lineStep;
|
||||
|
||||
// Connection states
|
||||
TextContext->printfAt(1.f, line, "State : %s", NetMngr.getConnectionStateCStr() );
|
||||
line += lineStep;
|
||||
|
||||
// UGlobalPosition globalPos;
|
||||
// UserEntity->getPrimitive()->getGlobalPosition(globalPos, dynamicWI);
|
||||
// uint32 material = GR->getMaterial( globalPos );
|
||||
// TextContext->printfAt(0.5f,0.5f,"Material : %d Gpos=(inst=%d,surf=%d,x=%.2f,y=%.2f",material, globalPos.InstanceId, globalPos.LocalPosition.Surface, globalPos.LocalPosition.Estimation.x, globalPos.LocalPosition.Estimation.y);
|
||||
|
||||
// No more shadow when displaying a text.
|
||||
TextContext->setShaded(false);
|
||||
}// displayDebug //
|
||||
|
||||
//-----------------------------------------------
|
||||
// Macro to Display a Text
|
||||
//-----------------------------------------------
|
||||
#define DISP_TEXT(x, text) \
|
||||
/* Display the text at the right place */ \
|
||||
TextContext->printfAt(x, line, text); \
|
||||
/* Change the line */ \
|
||||
line += lineStep; \
|
||||
|
||||
//---------------------------------------------------
|
||||
// displayHelp :
|
||||
// Display an Help.
|
||||
//---------------------------------------------------
|
||||
void displayHelp()
|
||||
{
|
||||
float line = 1.f;
|
||||
float lineStep = -ClientCfg.HelpLineStep;
|
||||
|
||||
// Create a shadow when displaying a text.
|
||||
TextContext->setShaded(true);
|
||||
// Set the font size.
|
||||
TextContext->setFontSize(ClientCfg.HelpFontSize);
|
||||
// Set the text color
|
||||
TextContext->setColor(ClientCfg.HelpFontColor);
|
||||
|
||||
|
||||
line = 1.f;
|
||||
TextContext->setHotSpot(UTextContext::TopLeft);
|
||||
DISP_TEXT(0.0f, "SHIFT + F1 : This Menu")
|
||||
DISP_TEXT(0.0f, "SHIFT + F2 : Display Debug Infos")
|
||||
DISP_TEXT(0.0f, "SHIFT + F3 : Wire mode");
|
||||
DISP_TEXT(0.0f, "SHIFT + F4 : Do not Render the Scene");
|
||||
DISP_TEXT(0.0f, "SHIFT + F5 : Toogle Display OSD interfaces");
|
||||
// DISP_TEXT(0.0f, "SHIFT + F6 : Not used");
|
||||
DISP_TEXT(0.0f, "SHIFT + F7 : Compass Mode (User/Camera)");
|
||||
DISP_TEXT(0.0f, "SHIFT + F8 : Camera Mode (INSERT to change your position)");
|
||||
DISP_TEXT(0.0f, "SHIFT + F9 : Free Mouse");
|
||||
DISP_TEXT(0.0f, "SHIFT + F10 : Take a Screen Shot (+CTRL) for jpg");
|
||||
// DISP_TEXT(0.0f, "SHIFT + F11 : Test");
|
||||
DISP_TEXT(0.0f, "SHIFT + ESCAPE : Quit");
|
||||
DISP_TEXT(0.0f, "SHIFT + C : First/Third Person View");
|
||||
|
||||
line = 1.f;
|
||||
TextContext->setHotSpot(UTextContext::TopRight);
|
||||
DISP_TEXT(1.0f, "UP : FORWARD");
|
||||
DISP_TEXT(1.0f, "DOWN : BACKWARD");
|
||||
DISP_TEXT(1.0f, "LEFT : ROTATE LEFT");
|
||||
DISP_TEXT(1.0f, "RIGHT : ROTATE RIGHT");
|
||||
DISP_TEXT(1.0f, "CTRL + LEFT : STRAFE LEFT");
|
||||
DISP_TEXT(1.0f, "CTRL + RIGHT : STRAFE RIGHT");
|
||||
DISP_TEXT(1.0f, "END : Auto Walk");
|
||||
DISP_TEXT(1.0f, "DELETE : Walk/Run");
|
||||
DISP_TEXT(1.0f, "PG UP : Look Up");
|
||||
DISP_TEXT(1.0f, "PG DOWN : Look Down");
|
||||
// DISP_TEXT(1.0f, "CTRL + I : Inventory");
|
||||
// DISP_TEXT(1.0f, "CTRL + C : Spells composition interface");
|
||||
// DISP_TEXT(1.0f, "CTRL + S : Memorized Spells interface");
|
||||
DISP_TEXT(1.0f, "CTRL + B : Show/Hide PACS Borders");
|
||||
DISP_TEXT(1.0f, "CTRL + P : Player target himself");
|
||||
DISP_TEXT(1.0f, "CTRL + D : Unselect target");
|
||||
DISP_TEXT(1.0f, "CTRL + TAB : Next Chat Mode (say/shout");
|
||||
DISP_TEXT(1.0f, "CTRL + R : Reload Client.cfg File");
|
||||
// DISP_TEXT(1.0f, "CTRL + N : Toggle Night / Day lighting");
|
||||
DISP_TEXT(1.0f, "CTRL + F2 : Profile on / off");
|
||||
DISP_TEXT(1.0f, "CTRL + F3 : Movie Shooter record / stop");
|
||||
DISP_TEXT(1.0f, "CTRL + F4 : Movie Shooter replay");
|
||||
DISP_TEXT(1.0f, "CTRL + F5 : Movie Shooter save");
|
||||
#ifndef NL_USE_DEFAULT_MEMORY_MANAGER
|
||||
DISP_TEXT(1.0f, "CTRL + F6 : Save memory stat report");
|
||||
#endif // NL_USE_DEFAULT_MEMORY_MANAGER
|
||||
DISP_TEXT(1.0f, "CTRL + F7 : Show / hide prim file");
|
||||
DISP_TEXT(1.0f, "CTRL + F8 : Change prim file UP");
|
||||
DISP_TEXT(1.0f, "CTRL + F9 : Change prim file DOWN");
|
||||
|
||||
// No more shadow when displaying a text.
|
||||
TextContext->setShaded(false);
|
||||
}// displayHelp //
|
||||
|
||||
|
||||
//---------------------------------------------------
|
||||
|
|
560
code/ryzom/client/src/main_loop_debug.cpp
Normal file
560
code/ryzom/client/src/main_loop_debug.cpp
Normal file
|
@ -0,0 +1,560 @@
|
|||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <nel/misc/types_nl.h>
|
||||
#include "main_loop_debug.h"
|
||||
|
||||
#include <nel/3d/u_text_context.h>
|
||||
|
||||
#include "game_share/ryzom_version.h"
|
||||
|
||||
#include "global.h"
|
||||
#include "client_cfg.h"
|
||||
#include "user_entity.h"
|
||||
#include "debug_client.h"
|
||||
#include "entities.h"
|
||||
#include "motion/user_controls.h"
|
||||
#include "pacs_client.h"
|
||||
#include "sound_manager.h"
|
||||
#include "view.h"
|
||||
#include "prim_file.h"
|
||||
#include "weather.h"
|
||||
#include "light_cycle_manager.h"
|
||||
#include "net_manager.h"
|
||||
#include "ping.h"
|
||||
#include "world_database_manager.h"
|
||||
#include "continent_manager.h"
|
||||
#include "client_sheets/weather_function_params_sheet.h"
|
||||
#include "weather_manager_client.h"
|
||||
#include "fog_map.h"
|
||||
|
||||
using namespace NLMISC;
|
||||
using namespace NL3D;
|
||||
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
|
||||
extern std::set<std::string> LodCharactersNotFound;
|
||||
extern uint32 NbDatabaseChanges;
|
||||
extern CFogState MainFogState;
|
||||
extern CPing Ping;
|
||||
|
||||
//namespace /* anonymous */ {
|
||||
|
||||
NLMISC::CValueSmoother smoothFPS;
|
||||
NLMISC::CValueSmoother moreSmoothFPS(64);
|
||||
|
||||
//} /* anonymous namespace */
|
||||
|
||||
//---------------------------------------------------
|
||||
// displayDebug :
|
||||
// Display some debug infos.
|
||||
//---------------------------------------------------
|
||||
void displayDebug()
|
||||
{
|
||||
float lineStep = ClientCfg.DebugLineStep;
|
||||
float line;
|
||||
|
||||
// Initialize Pen //
|
||||
//----------------//
|
||||
// Create a shadow when displaying a text.
|
||||
TextContext->setShaded(true);
|
||||
// Set the font size.
|
||||
TextContext->setFontSize(ClientCfg.DebugFontSize);
|
||||
// Set the text color
|
||||
TextContext->setColor(ClientCfg.DebugFontColor);
|
||||
|
||||
// TOP LEFT //
|
||||
//----------//
|
||||
TextContext->setHotSpot(UTextContext::TopLeft);
|
||||
line = 0.9f;
|
||||
// FPS and Ms per frame
|
||||
{
|
||||
// smooth across frames.
|
||||
double deltaTime = smoothFPS.getSmoothValue ();
|
||||
// FPS and Ms per frame
|
||||
if(deltaTime != 0.f)
|
||||
TextContext->printfAt(0.f, line,"%.1f fps", 1.f/deltaTime);
|
||||
else
|
||||
TextContext->printfAt(0.f, line,"%.1f fps", 0.f);
|
||||
TextContext->printfAt(0.1f, line, "%d ms", (uint)(deltaTime*1000));
|
||||
}
|
||||
line -= lineStep;
|
||||
line -= lineStep;
|
||||
|
||||
// USER
|
||||
// Front
|
||||
TextContext->printfAt(0.0f, line, " %f (%f,%f,%f) front", atan2(UserEntity->front().y, UserEntity->front().x), UserEntity->front().x, UserEntity->front().y, UserEntity->front().z);
|
||||
line -= lineStep;
|
||||
// Dir
|
||||
TextContext->printfAt(0.0f, line, " %f (%f,%f,%f) dir", atan2(UserEntity->dir().y, UserEntity->dir().x), UserEntity->dir().x, UserEntity->dir().y, UserEntity->dir().z);
|
||||
line -= lineStep;
|
||||
// NB Stage
|
||||
TextContext->printfAt(0.0f, line, " NB Stage: %d", UserEntity->nbStage());
|
||||
line -= lineStep;
|
||||
// NB Animation FXs still remaining in the remove list.
|
||||
TextContext->printfAt(0.0f, line, " NB FXs to remove: %d", UserEntity->nbAnimFXToRemove());
|
||||
line -= lineStep;
|
||||
// Mode.
|
||||
TextContext->printfAt(0.0f, line, " Mode: %d (%s)", (sint)UserEntity->mode(), MBEHAV::modeToString(UserEntity->mode()).c_str());
|
||||
line -= lineStep;
|
||||
// Behaviour.
|
||||
TextContext->printfAt(0.0f, line, " Behaviour: %d (%s)", (sint)UserEntity->behaviour(), MBEHAV::behaviourToString(UserEntity->behaviour()).c_str());
|
||||
line -= lineStep;
|
||||
// Display the target mount.
|
||||
TextContext->printfAt(0.0f, line, " Mount: %d", UserEntity->mount());
|
||||
line -= lineStep;
|
||||
// Display the target rider.
|
||||
TextContext->printfAt(0.0f, line, " Rider: %d", UserEntity->rider());
|
||||
line -= lineStep;
|
||||
// Display the current animation name.
|
||||
TextContext->printfAt(0.0f, line, " Current Animation Name: %s", UserEntity->currentAnimationName().c_str());
|
||||
line -= lineStep;
|
||||
// Display the current move animation set name.
|
||||
TextContext->printfAt(0.0f, line, " Current AnimationSet Name (MOVE): %s", UserEntity->currentAnimationSetName(MOVE).c_str());
|
||||
line -= lineStep;
|
||||
// Display Missing Animations
|
||||
if(::CAnimation::MissingAnim.empty() == false)
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, " '%u' Missing Animations, 1st: '%s'", ::CAnimation::MissingAnim.size(), (*(::CAnimation::MissingAnim.begin())).c_str());
|
||||
line -= lineStep;
|
||||
}
|
||||
// Display Missing LoD
|
||||
if(LodCharactersNotFound.empty() == false)
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, " '%u' Missing LoD, 1st: '%s'", LodCharactersNotFound.size(), (*(LodCharactersNotFound.begin())).c_str());
|
||||
line -= lineStep;
|
||||
}
|
||||
|
||||
// Watched Entity
|
||||
line -= lineStep;
|
||||
// Now Displaying the selection.
|
||||
TextContext->printfAt(0.0f, line, "--*** Watched entity ***--");
|
||||
line -= lineStep;
|
||||
// Display information about the debug entity slot.
|
||||
if(WatchedEntitySlot != CLFECOMMON::INVALID_SLOT)
|
||||
{
|
||||
// Get a pointer on the target.
|
||||
CEntityCL *watchedEntity = EntitiesMngr.entity(WatchedEntitySlot);
|
||||
if(watchedEntity)
|
||||
{
|
||||
// Display Debug Information about the Selection.
|
||||
watchedEntity->displayDebug(0.0f, line, -lineStep);
|
||||
|
||||
// Distance of the target
|
||||
CVectorD diffvector = UserEntity->pos() - watchedEntity->pos();
|
||||
TextContext->printfAt(0.0f, line, " Distance: %10.2f (Manhattan: %.2f)", diffvector.norm(), fabs(diffvector.x) + fabs(diffvector.y) );
|
||||
line -= lineStep;
|
||||
}
|
||||
// Target not allocated
|
||||
else
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, "Not allocated (%d)", WatchedEntitySlot);
|
||||
line -= lineStep;
|
||||
}
|
||||
}
|
||||
// No Target
|
||||
else
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, "None");
|
||||
line -= lineStep;
|
||||
}
|
||||
|
||||
/* Ca rame grave !
|
||||
|
||||
uint nMem = NLMEMORY::GetAllocatedMemory();
|
||||
line -= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Mem Used: %d",nMem);*/
|
||||
|
||||
// 3D Filters information:
|
||||
#ifdef _PROFILE_ON_
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "3D Filters:");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "MeshNoVP: %s", Filter3D[FilterMeshNoVP]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "MeshVP: %s", Filter3D[FilterMeshVP]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "FXs: %s", Filter3D[FilterFXs]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
if (Landscape)
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, "Landscape: %s", Filter3D[FilterLandscape]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
}
|
||||
else
|
||||
{
|
||||
TextContext->printfAt(0.0f, line, "Landscape not enabled");
|
||||
}
|
||||
TextContext->printfAt(0.0f, line, "Vegetable: %s", Filter3D[FilterVegetable]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Skeleton: %s", Filter3D[FilterSkeleton]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Water: %s", Filter3D[FilterWater]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Cloud: %s", Filter3D[FilterCloud]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "CoarseMesh: %s", Filter3D[FilterCoarseMesh]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Sky: %s", Filter3D[FilterSky]?"Ok":"NOT RENDERED!");
|
||||
line-= lineStep;
|
||||
// Materials Infos
|
||||
TextContext->printfAt(0.0f, line, "SetupedMatrix: %d", Driver->profileSetupedModelMatrix() );
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "SetupedMaterials: %d", Driver->profileSetupedMaterials() );
|
||||
line-= lineStep;
|
||||
// Display camera cluster system
|
||||
TextContext->printfAt(0.0f, line, "ClusterSystem: %p", MainCam.getClusterSystem() );
|
||||
line-= 2 * lineStep;
|
||||
// Lua stuffs
|
||||
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
||||
TextContext->printfAt(0.0f, line, "Lua mem (kb) : %d / %d", CLuaManager::getInstance().getLuaState()->getGCCount(), CLuaManager::getInstance().getLuaState()->getGCThreshold());
|
||||
line-= lineStep;
|
||||
TextContext->printfAt(0.0f, line, "Lua stack size = %d", CLuaManager::getInstance().getLuaState()->getTop());
|
||||
line-= lineStep;
|
||||
|
||||
#endif
|
||||
|
||||
// TOP LEFT //
|
||||
//-----------//
|
||||
TextContext->setHotSpot(UTextContext::TopLeft);
|
||||
line = 1.f;
|
||||
string str;
|
||||
#if FINAL_VERSION
|
||||
str = "FV";
|
||||
#else
|
||||
str = "DEV";
|
||||
#endif
|
||||
if(ClientCfg.ExtendedCommands)
|
||||
str += "_E";
|
||||
str += " "RYZOM_VERSION;
|
||||
TextContext->printfAt(0.f, line, "Version %s", str.c_str());
|
||||
|
||||
// TOP MIDDLE //
|
||||
//------------//
|
||||
TextContext->setHotSpot(UTextContext::MiddleTop);
|
||||
line = 1.f;
|
||||
// Motion Mode
|
||||
TextContext->printfAt(0.5f, line, "%s", UserControls.modeStr().c_str());
|
||||
line -= lineStep;
|
||||
|
||||
// TOP RIGHT //
|
||||
//-----------//
|
||||
TextContext->setHotSpot(UTextContext::TopRight);
|
||||
line = 1.f;
|
||||
//// 3D Infos
|
||||
// Video mem allocated.
|
||||
TextContext->printfAt(1.f, line, "Video mem. : %f", Driver->profileAllocatedTextureMemory()/(1024.f*1024.f));
|
||||
line -= lineStep;
|
||||
// Video mem used since last swapBuffers().
|
||||
TextContext->printfAt(1.f, line, "Video mem. since last swap buffer: %f", Driver->getUsedTextureMemory()/(1024.f*1024.f));
|
||||
line -= lineStep;
|
||||
// Get the last face count asked from the main scene before reduction.
|
||||
TextContext->printfAt(1.f, line, "Nb Skin Face Asked: %f", Scene->getGroupNbFaceAsked("Skin"));
|
||||
line -= lineStep;
|
||||
TextContext->printfAt(1.f, line, "Nb Fx Face Asked: %f", Scene->getGroupNbFaceAsked("Fx"));
|
||||
line -= lineStep;
|
||||
// All Triangles In
|
||||
CPrimitiveProfile pIn;
|
||||
CPrimitiveProfile pOut;
|
||||
Driver->profileRenderedPrimitives(pIn, pOut);
|
||||
TextContext->printfAt(1.f, line, "Tri In : %d", pIn.NTriangles+2*pIn.NQuads);
|
||||
line -= lineStep;
|
||||
// All Triangles Out
|
||||
TextContext->printfAt(1.f, line, "Tri Out : %d", pOut.NTriangles+2*pIn.NQuads);
|
||||
line -= lineStep;
|
||||
// Current Cluster
|
||||
string strPos;
|
||||
// Check there is a PACS Primitive before using it.
|
||||
if(UserEntity->getPrimitive() && GR)
|
||||
{
|
||||
UGlobalPosition gPos;
|
||||
UserEntity->getPrimitive()->getGlobalPosition(gPos, dynamicWI);
|
||||
string strPos = GR->getIdentifier(gPos);
|
||||
}
|
||||
else
|
||||
strPos = "No Primitive";
|
||||
TextContext->printfAt(1.f, line, "Cluster : %s", strPos.c_str());
|
||||
line -= lineStep;
|
||||
//// SOUND Infos
|
||||
line -= lineStep;
|
||||
if(SoundMngr)
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Sound source instance: %u", SoundMngr->getSourcesInstanceCount());
|
||||
line -= lineStep;
|
||||
TextContext->printfAt(1.f, line, "Logical playing SoundSource: %u", SoundMngr->getMixer()->getPlayingSourcesCount ());
|
||||
line -= lineStep;
|
||||
TextContext->printfAt(1.f, line, "Audio tracks: %u/%u", SoundMngr->getMixer()->getUsedTracksCount(), SoundMngr->getMixer()->getPolyphony());
|
||||
line -= lineStep;
|
||||
if (SoundMngr->getMixer()->getMutedPlayingSourcesCount() > 0)
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Source muted: %u !", SoundMngr->getMixer()->getMutedPlayingSourcesCount());
|
||||
line -= lineStep;
|
||||
}
|
||||
TextContext->printfAt(1.f, line, "Samples in memory: %g MB", SoundMngr->getLoadingSamplesSize() / (1024.0f*1024.0f));
|
||||
line -= lineStep;
|
||||
|
||||
}
|
||||
|
||||
// BOTTOM RIGHT //
|
||||
//--------------//
|
||||
TextContext->setHotSpot(UTextContext::BottomRight);
|
||||
line = 0.f;
|
||||
//// POSITION
|
||||
CVector postmp = View.viewPos();
|
||||
// Pos
|
||||
TextContext->printfAt(1.f, line, "Position : %d %d %d",(int)postmp.x,(int)postmp.y,(int)postmp.z);
|
||||
line += lineStep;
|
||||
// Body Heading
|
||||
TextContext->printfAt(1.f, line, "Front : %.2f %.2f %.2f", UserEntity->front().x, UserEntity->front().y, UserEntity->front().z);
|
||||
line += lineStep;
|
||||
// Speed
|
||||
TextContext->printfAt(1.f, line, "Speed : %.2f", (float) UserEntity->speed());
|
||||
line += lineStep;
|
||||
// Zone
|
||||
if (!ClientCfg.Light)
|
||||
{
|
||||
if (Landscape)
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Zone: %s", Landscape->getZoneName(postmp).c_str());
|
||||
line += lineStep;
|
||||
}
|
||||
}
|
||||
// Prim File
|
||||
string primFile = PrimFiles.getCurrentPrimitive ();
|
||||
if (!primFile.empty ())
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Prim File: %s", primFile.c_str ());
|
||||
line += lineStep;
|
||||
}
|
||||
|
||||
//// CONNECTION
|
||||
line += lineStep;
|
||||
// Ryzom Day.
|
||||
TextContext->printfAt(1.f, line, "Ryzom Day : %d", RT.getRyzomDay());
|
||||
line += lineStep;
|
||||
// hour in the game
|
||||
float dayNightCycleHour = (float)RT.getRyzomTime();
|
||||
TextContext->printfAt(1.f, line, "Ryzom Time : %2u:%02u", int(dayNightCycleHour), int((dayNightCycleHour-int(dayNightCycleHour))*60.0f));
|
||||
line += lineStep;
|
||||
// light hour in the game, used to display te day/night
|
||||
TextContext->printfAt(1.f, line, "Ryzom Light Time : %2u:%02u (%s)", int(DayNightCycleHour), int((DayNightCycleHour-int(DayNightCycleHour))*60.0f), LightCycleManager.getStateString().c_str());
|
||||
line += lineStep;
|
||||
// Server GameCycle
|
||||
TextContext->printfAt(1.f, line, "Server GameCycle : %u", (uint)NetMngr.getCurrentServerTick());
|
||||
line += lineStep;
|
||||
// Current GameCycle
|
||||
TextContext->printfAt(1.f, line, "Current GameCycle : %u", (uint)NetMngr.getCurrentClientTick());
|
||||
line += lineStep;
|
||||
// Current GameCycle
|
||||
TextContext->printfAt(1.f, line, "Ms per Cycle : %d", NetMngr.getMsPerTick());
|
||||
line += lineStep;
|
||||
// Packet Loss
|
||||
TextContext->printfAt(1.f, line, "Packet Loss : %.1f %%", NetMngr.getMeanPacketLoss()*100.0f);
|
||||
line += lineStep;
|
||||
// Packet Loss
|
||||
TextContext->printfAt(1.f, line, "Packets Lost : %u", NetMngr.getTotalLostPackets());
|
||||
line += lineStep;
|
||||
// Mean Upload
|
||||
TextContext->printfAt(1.f, line, "Mean Upld : %.3f kbps", NetMngr.getMeanUpload());
|
||||
line += lineStep;
|
||||
// Mean Download
|
||||
TextContext->printfAt(1.f, line, "Mean Dnld : %.3f kbps", NetMngr.getMeanDownload());
|
||||
line += lineStep;
|
||||
|
||||
// Mean Download
|
||||
TextContext->printfAt(1.f, line, "Nb in Vision : %d(%d,%d,%d)",
|
||||
EntitiesMngr.nbEntitiesAllocated(),
|
||||
EntitiesMngr.nbUser(),
|
||||
EntitiesMngr.nbPlayer(),
|
||||
EntitiesMngr.nbChar());
|
||||
line += lineStep;
|
||||
|
||||
// Number of database changes
|
||||
TextContext->printfAt(1.f, line, "DB Changes : %u", NbDatabaseChanges );
|
||||
line += lineStep;
|
||||
|
||||
// Ping
|
||||
TextContext->printfAt(1.f, line, "DB Ping : %u ms", Ping.getValue());
|
||||
line += lineStep;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Manual weather setup
|
||||
{
|
||||
if(ContinentMngr.cur()) // Only usable if there is a continent loaded.
|
||||
{
|
||||
if (!ForceTrueWeatherValue)
|
||||
{
|
||||
const CWeatherFunction &wf = ContinentMngr.cur()->WeatherFunction[CurrSeason];
|
||||
float wv;
|
||||
if (ClientCfg.ManualWeatherSetup)
|
||||
{
|
||||
wv = std::max(wf.getNumWeatherSetups() - 1, 0u) * ManualWeatherValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
wv = std::max(wf.getNumWeatherSetups() - 1, 0u) * ::getBlendedWeather(RT.getRyzomDay(), RT.getRyzomTime(), *WeatherFunctionParams, ContinentMngr.cur()->WeatherFunction);
|
||||
}
|
||||
const CWeatherSetup *ws = wf.getWeatherSetup((uint) floorf(wv));
|
||||
std::string name0 = ws ? NLMISC::CStringMapper::unmap(ws->SetupName) : "???";
|
||||
ws = wf.getWeatherSetup(std::min((uint) (floorf(wv) + 1), wf.getNumWeatherSetups() - 1));
|
||||
std::string name1 = ws ? NLMISC::CStringMapper::unmap(ws->SetupName) : "???";
|
||||
TextContext->printfAt(1.f, line, "Weather value : %.02f : %s -> %s", ws ? wv : 0.f, name0.c_str(), name1.c_str());
|
||||
line += lineStep;
|
||||
}
|
||||
else
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Weather value : %.02f", WeatherManager.getWeatherValue() * std::max(ContinentMngr.cur()->WeatherFunction[CurrSeason].getNumWeatherSetups() - 1, 0u));
|
||||
line += lineStep;
|
||||
TextContext->printfAt(1.f, line, "TEST WEATHER FUNCTION");
|
||||
line += lineStep;
|
||||
}
|
||||
// season
|
||||
TextContext->printfAt(1.f, line, "Season : %s", EGSPD::CSeason::toString(CurrSeason).c_str());
|
||||
line += lineStep;
|
||||
}
|
||||
}
|
||||
|
||||
// fog dist
|
||||
if (ContinentMngr.cur())
|
||||
{
|
||||
TextContext->printfAt(1.f, line, "Continent fog min near = %.1f, max far = %.1f", ContinentMngr.cur()->FogStart, ContinentMngr.cur()->FogEnd);
|
||||
line += lineStep;
|
||||
CFogState tmpFog;
|
||||
ContinentMngr.getFogState(MainFog, LightCycleManager.getLightLevel(), LightCycleManager.getLightDesc().DuskRatio, LightCycleManager.getState(), View.viewPos(), tmpFog);
|
||||
TextContext->printfAt(1.f, line, "Continent fog curr near = %.1f, curr far = %.1f", tmpFog.FogStartDist, tmpFog.FogEndDist);
|
||||
line += lineStep;
|
||||
}
|
||||
const CWeatherState &ws = WeatherManager.getCurrWeatherState();
|
||||
TextContext->printfAt(1.f, line, "Weather fog near = %.1f, far = %.1f", ws.FogNear[MainFog], ws.FogFar[MainFog]);
|
||||
line += lineStep;
|
||||
TextContext->printfAt(1.f, line, "Final fog near = %.1f, far = %.1f", MainFogState.FogStartDist, MainFogState.FogEndDist);
|
||||
line += lineStep;
|
||||
float left, right, bottom, top, znear, zfar;
|
||||
Scene->getCam().getFrustum(left, right, bottom, top, znear, zfar);
|
||||
TextContext->printfAt(1.f, line, "Clip near = %.1f, far = %.1f", znear, zfar);
|
||||
line += lineStep;
|
||||
|
||||
// Connection states
|
||||
TextContext->printfAt(1.f, line, "State : %s", NetMngr.getConnectionStateCStr() );
|
||||
line += lineStep;
|
||||
|
||||
// UGlobalPosition globalPos;
|
||||
// UserEntity->getPrimitive()->getGlobalPosition(globalPos, dynamicWI);
|
||||
// uint32 material = GR->getMaterial( globalPos );
|
||||
// TextContext->printfAt(0.5f,0.5f,"Material : %d Gpos=(inst=%d,surf=%d,x=%.2f,y=%.2f",material, globalPos.InstanceId, globalPos.LocalPosition.Surface, globalPos.LocalPosition.Estimation.x, globalPos.LocalPosition.Estimation.y);
|
||||
|
||||
// No more shadow when displaying a text.
|
||||
TextContext->setShaded(false);
|
||||
}// displayDebug //
|
||||
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
|
||||
//-----------------------------------------------
|
||||
// Macro to Display a Text
|
||||
//-----------------------------------------------
|
||||
#define DISP_TEXT(x, text) \
|
||||
/* Display the text at the right place */ \
|
||||
TextContext->printfAt(x, line, text); \
|
||||
/* Change the line */ \
|
||||
line += lineStep; \
|
||||
|
||||
//---------------------------------------------------
|
||||
// displayHelp :
|
||||
// Display an Help.
|
||||
//---------------------------------------------------
|
||||
void displayHelp()
|
||||
{
|
||||
float line = 1.f;
|
||||
float lineStep = -ClientCfg.HelpLineStep;
|
||||
|
||||
// Create a shadow when displaying a text.
|
||||
TextContext->setShaded(true);
|
||||
// Set the font size.
|
||||
TextContext->setFontSize(ClientCfg.HelpFontSize);
|
||||
// Set the text color
|
||||
TextContext->setColor(ClientCfg.HelpFontColor);
|
||||
|
||||
|
||||
line = 1.f;
|
||||
TextContext->setHotSpot(UTextContext::TopLeft);
|
||||
DISP_TEXT(0.0f, "SHIFT + F1 : This Menu")
|
||||
DISP_TEXT(0.0f, "SHIFT + F2 : Display Debug Infos")
|
||||
DISP_TEXT(0.0f, "SHIFT + F3 : Wire mode");
|
||||
DISP_TEXT(0.0f, "SHIFT + F4 : Do not Render the Scene");
|
||||
DISP_TEXT(0.0f, "SHIFT + F5 : Toogle Display OSD interfaces");
|
||||
// DISP_TEXT(0.0f, "SHIFT + F6 : Not used");
|
||||
DISP_TEXT(0.0f, "SHIFT + F7 : Compass Mode (User/Camera)");
|
||||
DISP_TEXT(0.0f, "SHIFT + F8 : Camera Mode (INSERT to change your position)");
|
||||
DISP_TEXT(0.0f, "SHIFT + F9 : Free Mouse");
|
||||
DISP_TEXT(0.0f, "SHIFT + F10 : Take a Screen Shot (+CTRL) for jpg");
|
||||
// DISP_TEXT(0.0f, "SHIFT + F11 : Test");
|
||||
DISP_TEXT(0.0f, "SHIFT + ESCAPE : Quit");
|
||||
DISP_TEXT(0.0f, "SHIFT + C : First/Third Person View");
|
||||
|
||||
line = 1.f;
|
||||
TextContext->setHotSpot(UTextContext::TopRight);
|
||||
DISP_TEXT(1.0f, "UP : FORWARD");
|
||||
DISP_TEXT(1.0f, "DOWN : BACKWARD");
|
||||
DISP_TEXT(1.0f, "LEFT : ROTATE LEFT");
|
||||
DISP_TEXT(1.0f, "RIGHT : ROTATE RIGHT");
|
||||
DISP_TEXT(1.0f, "CTRL + LEFT : STRAFE LEFT");
|
||||
DISP_TEXT(1.0f, "CTRL + RIGHT : STRAFE RIGHT");
|
||||
DISP_TEXT(1.0f, "END : Auto Walk");
|
||||
DISP_TEXT(1.0f, "DELETE : Walk/Run");
|
||||
DISP_TEXT(1.0f, "PG UP : Look Up");
|
||||
DISP_TEXT(1.0f, "PG DOWN : Look Down");
|
||||
// DISP_TEXT(1.0f, "CTRL + I : Inventory");
|
||||
// DISP_TEXT(1.0f, "CTRL + C : Spells composition interface");
|
||||
// DISP_TEXT(1.0f, "CTRL + S : Memorized Spells interface");
|
||||
DISP_TEXT(1.0f, "CTRL + B : Show/Hide PACS Borders");
|
||||
DISP_TEXT(1.0f, "CTRL + P : Player target himself");
|
||||
DISP_TEXT(1.0f, "CTRL + D : Unselect target");
|
||||
DISP_TEXT(1.0f, "CTRL + TAB : Next Chat Mode (say/shout");
|
||||
DISP_TEXT(1.0f, "CTRL + R : Reload Client.cfg File");
|
||||
// DISP_TEXT(1.0f, "CTRL + N : Toggle Night / Day lighting");
|
||||
DISP_TEXT(1.0f, "CTRL + F2 : Profile on / off");
|
||||
DISP_TEXT(1.0f, "CTRL + F3 : Movie Shooter record / stop");
|
||||
DISP_TEXT(1.0f, "CTRL + F4 : Movie Shooter replay");
|
||||
DISP_TEXT(1.0f, "CTRL + F5 : Movie Shooter save");
|
||||
#ifndef NL_USE_DEFAULT_MEMORY_MANAGER
|
||||
DISP_TEXT(1.0f, "CTRL + F6 : Save memory stat report");
|
||||
#endif // NL_USE_DEFAULT_MEMORY_MANAGER
|
||||
DISP_TEXT(1.0f, "CTRL + F7 : Show / hide prim file");
|
||||
DISP_TEXT(1.0f, "CTRL + F8 : Change prim file UP");
|
||||
DISP_TEXT(1.0f, "CTRL + F9 : Change prim file DOWN");
|
||||
|
||||
// No more shadow when displaying a text.
|
||||
TextContext->setShaded(false);
|
||||
}// displayHelp //
|
||||
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
// ********************************************************************
|
||||
|
||||
/* end of file */
|
31
code/ryzom/client/src/main_loop_debug.h
Normal file
31
code/ryzom/client/src/main_loop_debug.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef CL_MAIN_LOOP_DEBUG_H
|
||||
#define CL_MAIN_LOOP_DEBUG_H
|
||||
|
||||
#include <nel/misc/types_nl.h>
|
||||
|
||||
// Display some debug infos.
|
||||
void displayDebug();
|
||||
void displayDebugFps();
|
||||
void displayDebugUIUnderMouse();
|
||||
// Display an Help.
|
||||
void displayHelp();
|
||||
|
||||
#endif // CL_MAIN_LOOP_DEBUG_H
|
||||
|
||||
/* end of file */
|
|
@ -14,6 +14,7 @@
|
|||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <nel/misc/types_nl.h>
|
||||
#include "ping.h"
|
||||
|
||||
#include "interface_v3/interface_manager.h"
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <nel/misc/types_nl.h>
|
||||
#include "profiling.h"
|
||||
|
||||
// NeL includes
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef CL_MAIN_LOOP_PROFILING_H
|
||||
#define CL_MAIN_LOOP_PROFILING_H
|
||||
#ifndef CL_PROFILING_H
|
||||
#define CL_PROFILING_H
|
||||
|
||||
#include <nel/misc/types_nl.h>
|
||||
|
||||
|
@ -31,6 +31,6 @@ void testLaunchProfile();
|
|||
/// Test ProfilingVBLock and run?
|
||||
void testLaunchProfileVBLock();
|
||||
|
||||
#endif // CL_MAIN_LOOP_PROFILING_H
|
||||
#endif // CL_PROFILING_H
|
||||
|
||||
/* end of file */
|
Loading…
Reference in a new issue