123
This commit is contained in:
273
CryAnimation/CryAnimationBase.h
Normal file
273
CryAnimation/CryAnimationBase.h
Normal file
@@ -0,0 +1,273 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// CryEngine Source code
|
||||
//
|
||||
// File:CryAnimationBase.h
|
||||
// Declaration of CryAnimationBase class
|
||||
// Access to external stuff used by 3d engine
|
||||
// Most classes are derived from this base class to access the external interfaces
|
||||
//
|
||||
// History:
|
||||
// -:Created by Vladimir Kajalin
|
||||
// -:Taken over by Sergiy Migdalskiy
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _CRY_ANIMATION_BASE_HEADER_
|
||||
#define _CRY_ANIMATION_BASE_HEADER_
|
||||
|
||||
#include "FrameProfiler.h"
|
||||
#include "CVars.h"
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// There's only one ISystem in the process, just like there is one CryCharManager.
|
||||
// So this ISystem is kept in the global pointer and is initialized upon creation
|
||||
// of the CryCharManager and is valid until its destruction.
|
||||
// Upon destruction, it's NULLed. In any case, there must be no object needing it
|
||||
// after that since the animation system is only active when the Manager object is alive
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern ISystem* g_pISystem;
|
||||
extern IConsole* g_pIConsole;
|
||||
extern ITimer* g_pITimer;
|
||||
extern ILog* g_pILog;
|
||||
extern ICryPak* g_pIPak;
|
||||
extern IStreamEngine* g_pIStreamEngine;
|
||||
|
||||
extern IRenderer* g_pIRenderer;
|
||||
extern IPhysicalWorld* g_pIPhysicalWorld;
|
||||
extern I3DEngine* g_pI3DEngine;
|
||||
|
||||
extern bool g_bProfilerOn;
|
||||
extern CryAnimVars* g_pCVariables;
|
||||
|
||||
|
||||
|
||||
|
||||
// initializes the global values - just remembers the pointer to the system that will
|
||||
// be kept valid until deinitialization of the class (that happens upon destruction of the
|
||||
// CryCharManager instance). Also initializes the console variables
|
||||
__forceinline void g_InitInterfaces(ISystem* pISystem)
|
||||
{
|
||||
assert (pISystem);
|
||||
g_pISystem = pISystem;
|
||||
g_pIConsole = pISystem->GetIConsole();
|
||||
g_pITimer = pISystem->GetITimer();
|
||||
g_pILog = pISystem->GetILog();
|
||||
g_pIPak = pISystem->GetIPak();
|
||||
g_pIStreamEngine = pISystem->GetStreamEngine();
|
||||
|
||||
//we initialize this pointers in CryCharManager::Update()
|
||||
g_pIRenderer = NULL; //pISystem->GetIRenderer();
|
||||
g_pIPhysicalWorld = NULL; //pISystem->GetIPhysicalWorld();
|
||||
g_pI3DEngine = NULL; //pISystem->GetI3DEngine();
|
||||
|
||||
//---------------------------------------------------
|
||||
|
||||
#ifdef _DEBUG
|
||||
enum {numTests = 2};
|
||||
for (int i = 0; i < numTests; ++i)
|
||||
{
|
||||
CryAnimVars* p = new CryAnimVars();
|
||||
delete p;
|
||||
}
|
||||
#endif
|
||||
|
||||
g_pCVariables = new CryAnimVars();
|
||||
}
|
||||
|
||||
|
||||
// deinitializes the Class - actually just NULLs the system pointer and deletes the variables
|
||||
__forceinline void g_DeleteInterfaces()
|
||||
{
|
||||
delete g_pCVariables;
|
||||
g_pCVariables = NULL;
|
||||
|
||||
g_pISystem = NULL;
|
||||
g_pITimer = NULL;
|
||||
g_pILog = NULL;
|
||||
g_pIConsole = NULL;
|
||||
g_pIPak = NULL;
|
||||
g_pIStreamEngine = NULL;;
|
||||
|
||||
g_pIRenderer = NULL;
|
||||
g_pIPhysicalWorld = NULL;
|
||||
g_pI3DEngine = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
__forceinline CCamera& GetViewCamera() { return g_pISystem->GetViewCamera(); }
|
||||
__forceinline ISystem* GetISystem() { return g_pISystem; } //we need this one just for the profiler
|
||||
|
||||
__forceinline ISystem* g_GetISystem() { return g_pISystem; }
|
||||
__forceinline ITimer* g_GetTimer() {return g_pITimer;}
|
||||
__forceinline ILog* g_GetLog() {return g_pILog;}
|
||||
__forceinline IConsole* g_GetConsole() { return g_pIConsole; }
|
||||
__forceinline ICryPak* g_GetPak() { return g_pIPak; }
|
||||
__forceinline IStreamEngine* g_GetStreamEngine() { return g_pIStreamEngine;}
|
||||
|
||||
__forceinline IPhysicalWorld* GetPhysicalWorld() { return g_pIPhysicalWorld; }
|
||||
__forceinline I3DEngine* Get3DEngine() { return g_pI3DEngine; }
|
||||
__forceinline IRenderer* g_GetIRenderer() { return g_pIRenderer; }
|
||||
|
||||
__forceinline bool IsProfilerOn() { return g_bProfilerOn; }
|
||||
__forceinline CryAnimVars* g_GetCVars() { return g_pCVariables; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
inline void g_LogToFile (const char* szFormat, ...)
|
||||
{
|
||||
char szBuffer[0x800];
|
||||
va_list args;
|
||||
va_start(args,szFormat);
|
||||
_vsnprintf (szBuffer, sizeof(szBuffer), szFormat, args);
|
||||
va_end(args);
|
||||
g_GetLog()->LogToFile ("%s", szBuffer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
// this is an alternate log, that will do nothing in non-debug builds
|
||||
inline void g_Info (const char* szFormat, ...)
|
||||
{
|
||||
if (!g_GetCVars()->ca_EnableAnimationLog())
|
||||
return;
|
||||
|
||||
FILE* f = fopen ("Animation.log", "at");
|
||||
if (f)
|
||||
{
|
||||
va_list arg;
|
||||
va_start (arg, szFormat);
|
||||
|
||||
fprintf (f, "%5d ", g_GetIRenderer()->GetFrameID());
|
||||
vfprintf (f, szFormat, arg);
|
||||
fprintf (f, "\n");
|
||||
|
||||
va_end(arg);
|
||||
fclose (f);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define g_Info while(0)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
// collector profilers: collect the total time spent on something
|
||||
extern double g_dTimeAnimLoadBind;
|
||||
extern double g_dTimeAnimLoadBindNoCal;
|
||||
extern double g_dTimeAnimLoadBindWithCal;
|
||||
extern double g_dTimeAnimLoadBindPreallocate;
|
||||
extern double g_dTimeGeomLoad;
|
||||
extern double g_dTimeGeomPostInit;
|
||||
extern double g_dTimeShaderLoad;
|
||||
extern double g_dTimeGeomChunkLoad;
|
||||
extern double g_dTimeGeomChunkLoadFileIO;
|
||||
extern double g_dTimeGenRenderArrays;
|
||||
extern double g_dTimeAnimLoadFile;
|
||||
extern double g_dTimeAnimBindControllers;
|
||||
extern double g_dTimeTest1;
|
||||
extern double g_dTimeTest2;
|
||||
extern double g_dTimeTest3;
|
||||
extern double g_dTimeTest4;
|
||||
|
||||
// the number of animations that were loaded asynchronously
|
||||
// (one animation can be counted several times if it has been loaded/unloaded)
|
||||
extern unsigned g_nAsyncAnimCounter;
|
||||
// this is the sum of all delays between animation load and animation load finish, in frames
|
||||
extern unsigned g_nAsyncAnimFrameDelays;
|
||||
|
||||
extern int g_CpuFlags;
|
||||
extern double g_SecondsPerCycle;
|
||||
|
||||
#define ENABLE_GET_MEMORY_USAGE 1
|
||||
|
||||
const float g_fDefaultAnimationScale = 0.01f;
|
||||
|
||||
|
||||
// this is current frame id PLUS OR MINUS a few frames.
|
||||
// can be used in places where it's really not significant for functionality but speed is a must.
|
||||
extern int g_nFrameID;
|
||||
|
||||
// this is true when the game runs in such a mode that requires all bones be updated every frame
|
||||
extern bool g_bUpdateBonesAlways;
|
||||
|
||||
#ifndef AUTO_PROFILE_SECTION
|
||||
#pragma message ("Warning: ITimer not included")
|
||||
#else
|
||||
#undef AUTO_PROFILE_SECTION
|
||||
#endif
|
||||
|
||||
#define AUTO_PROFILE_SECTION(g_fTimer) CITimerAutoProfiler<double> __section_auto_profiler(g_GetTimer(), g_fTimer)
|
||||
|
||||
#define DEFINE_PROFILER_FUNCTION() FUNCTION_PROFILER_FAST(g_GetISystem(), PROFILE_ANIMATION, IsProfilerOn())
|
||||
#define DEFINE_PROFILER_SECTION(NAME) FRAME_PROFILER_FAST(NAME, g_GetISystem(), PROFILE_ANIMATION, IsProfilerOn())
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
inline void g_UpdateLoadingScreen(const char *command,...)
|
||||
{
|
||||
if(command)
|
||||
{
|
||||
va_list arglist;
|
||||
char buf[512];
|
||||
va_start(arglist, command);
|
||||
vsprintf(buf, command, arglist);
|
||||
va_end(arglist);
|
||||
g_GetLog()->UpdateLoadingScreen(buf);
|
||||
}
|
||||
else
|
||||
g_GetLog()->UpdateLoadingScreen(0);
|
||||
}
|
||||
|
||||
inline void UpdateLoadingScreenPlus(const char *command,...)
|
||||
{
|
||||
va_list arglist;
|
||||
char buf[512];
|
||||
va_start(arglist, command);
|
||||
vsprintf(buf, command, arglist);
|
||||
va_end(arglist);
|
||||
g_GetLog()->UpdateLoadingScreenPlus(buf);
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
inline T g_GetConsoleVariable (const char * szVarName, const char * szFileName, const T tDefaultValue)
|
||||
{
|
||||
return GetConsole()->GetVariable(szVarName, szFileName, tDefaultValue);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline T g_GetConsoleVariable (const char * szVarName, const string& strFileName, const T szDefaultValue)
|
||||
{
|
||||
return GetConsoleVariable (szVarName, strFileName.c_str(), szDefaultValue);
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _CryAnimationBase_h_
|
||||
Reference in New Issue
Block a user