BVB Source Codes

CRYENGINE Show Cry3DEngine.cpp Source code

Return Download CRYENGINE: download Cry3DEngine.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. // -------------------------------------------------------------------------
  4. //  File name:   cry3dengine.cpp
  5. //  Version:     v1.00
  6. //  Created:     28/5/2001 by Vladimir Kajalin
  7. //  Compilers:   Visual Studio.NET
  8. //  Description: Defines the DLL entry point, implements access to other modules
  9. // -------------------------------------------------------------------------
  10. //  History:
  11. //
  12. ////////////////////////////////////////////////////////////////////////////
  13.  
  14. #include "StdAfx.h"
  15.  
  16. // Must be included only once in DLL module.
  17. #include <CryCore/Platform/platform_impl.inl>
  18.  
  19. #include "3dEngine.h"
  20. #include "MatMan.h"
  21.  
  22. #include <CrySystem/IEngineModule.h>
  23. #include <CryExtension/ICryFactory.h>
  24. #include <CryExtension/ClassWeaver.h>
  25.  
  26. #define MAX_ERROR_STRING MAX_WARNING_LENGTH
  27.  
  28. // Disable printf argument verification since it is generated at runtime
  29. #if defined(__GNUC__)
  30.         #if __GNUC__ >= 4 && __GNUC__MINOR__ < 7
  31.                 #pragma GCC diagnostic ignored "-Wformat-security"
  32.         #else
  33.                 #pragma GCC diagnostic push
  34.                 #pragma GCC diagnostic ignored "-Wformat-security"
  35.         #endif
  36. #endif
  37. //////////////////////////////////////////////////////////////////////
  38.  
  39. struct CSystemEventListner_3DEngine : public ISystemEventListener
  40. {
  41. public:
  42.         virtual void OnSystemEvent(ESystemEvent event, UINT_PTR wparam, UINT_PTR lparam)
  43.         {
  44.                 switch (event)
  45.                 {
  46.                 case ESYSTEM_EVENT_LEVEL_POST_UNLOAD:
  47.                         {
  48.                                 if (Cry3DEngineBase::Get3DEngine())
  49.                                         Cry3DEngineBase::Get3DEngine()->ClearDebugFPSInfo(true);
  50.                                 break;
  51.                         }
  52.                 case ESYSTEM_EVENT_LEVEL_LOAD_END:
  53.                         {
  54.                                 if (Cry3DEngineBase::Get3DEngine())
  55.                                         Cry3DEngineBase::Get3DEngine()->ClearDebugFPSInfo();
  56.                                 if (Cry3DEngineBase::GetObjManager())
  57.                                         Cry3DEngineBase::GetObjManager()->FreeNotUsedCGFs();
  58.                                 Cry3DEngineBase::m_bLevelLoadingInProgress = false;
  59.                                 break;
  60.                         }
  61.                 case ESYSTEM_EVENT_LEVEL_LOAD_START:
  62.                         {
  63.                                 Cry3DEngineBase::m_bLevelLoadingInProgress = true;
  64.                                 break;
  65.                         }
  66.                 case ESYSTEM_EVENT_LEVEL_UNLOAD:
  67.                         {
  68.                                 Cry3DEngineBase::m_bLevelLoadingInProgress = true;
  69.                                 break;
  70.                         }
  71.                 case ESYSTEM_EVENT_3D_POST_RENDERING_START:
  72.                         {
  73.                                 // Pre allocate object tree for objects to go in
  74.                                 if ((Cry3DEngineBase::Get3DEngine()) && (Cry3DEngineBase::Get3DEngine()->m_pObjectsTree.Count() == 0))
  75.                                 {
  76.                                         Cry3DEngineBase::Get3DEngine()->m_pObjectsTree.PreAllocate(1, 1);
  77.                                 }
  78.                                 Cry3DEngineBase::GetMatMan()->DoLoadSurfaceTypesInInit(false);
  79.                                 break;
  80.                         }
  81.                 case ESYSTEM_EVENT_3D_POST_RENDERING_END:
  82.                         {
  83.                                 for (int nSID = 0; nSID < Cry3DEngineBase::Get3DEngine()->m_pObjectsTree.Count(); nSID++)
  84.                                 {
  85.                                         SAFE_DELETE(Cry3DEngineBase::Get3DEngine()->m_pObjectsTree[nSID]);
  86.                                 }
  87.                                 Cry3DEngineBase::Get3DEngine()->m_pObjectsTree.Free();
  88.  
  89.                                 // We have to unload physics data *before* shutting down the geom manager
  90.                                 // Otherwise physical entities that are destroyed later will reference dangling geom pointers
  91.                                 Cry3DEngineBase::Get3DEngine()->UnloadPhysicsData();
  92.  
  93.                                 if (CObjManager* pObjManager = Cry3DEngineBase::GetObjManager())
  94.                                 {
  95.                                         pObjManager->UnloadObjects(true);
  96.                                 }
  97.  
  98.                                 if (IGeomManager* pGeomManager = Cry3DEngineBase::GetPhysicalWorld()->GetGeomManager())
  99.                                 {
  100.                                         pGeomManager->ShutDownGeoman();
  101.                                 }
  102.  
  103.                                 if (Cry3DEngineBase::GetMatMan())
  104.                                 {
  105.                                         Cry3DEngineBase::GetMatMan()->ShutDown();
  106.                                         Cry3DEngineBase::GetMatMan()->DoLoadSurfaceTypesInInit(true);
  107.                                 }
  108.  
  109.                                 break;
  110.                         }
  111.                 }
  112.         }
  113. };
  114. static CSystemEventListner_3DEngine g_system_event_listener_engine;
  115.  
  116. //////////////////////////////////////////////////////////////////////////
  117. //////////////////////////////////////////////////////////////////////////
  118. class CEngineModule_Cry3DEngine : public IEngineModule
  119. {
  120.         CRYINTERFACE_SIMPLE(IEngineModule)
  121.         CRYGENERATE_SINGLETONCLASS(CEngineModule_Cry3DEngine, "EngineModule_Cry3DEngine", 0x2d38f12a521d43cf, 0xba18fd1fa7ea5020)
  122.  
  123.         virtual ~CEngineModule_Cry3DEngine() {}
  124.  
  125.         //////////////////////////////////////////////////////////////////////////
  126.         virtual const char* GetName() override { return "Cry3DEngine"; };
  127.         virtual const char* GetCategory() override { return "CryEngine"; };
  128.  
  129.         //////////////////////////////////////////////////////////////////////////
  130.         virtual bool Initialize(SSystemGlobalEnvironment& env, const SSystemInitParams& initParams) override
  131.         {
  132.                 ISystem* pSystem = env.pSystem;
  133.  
  134.                 ModuleInitISystem(pSystem, "Cry3DEngine");
  135.                 pSystem->GetISystemEventDispatcher()->RegisterListener(&g_system_event_listener_engine);
  136.  
  137.                 C3DEngine* p3DEngine = CryAlignedNew<C3DEngine>(pSystem);
  138.                 env.p3DEngine = p3DEngine;
  139.                 return true;
  140.         }
  141. };
  142.  
  143. CRYREGISTER_SINGLETON_CLASS(CEngineModule_Cry3DEngine)
  144.  
  145. //////////////////////////////////////////////////////////////////////////
  146. void Cry3DEngineBase::PrintComment(const char* szText, ...)
  147. {
  148.         if (!szText)
  149.                 return;
  150.  
  151.         va_list args;
  152.         va_start(args, szText);
  153.         GetLog()->LogV(IMiniLog::eComment, szText, args);
  154.         va_end(args);
  155. }
  156.  
  157. void Cry3DEngineBase::PrintMessage(const char* szText, ...)
  158. {
  159.         if (!szText)
  160.                 return;
  161.  
  162.         va_list args;
  163.         va_start(args, szText);
  164.         GetLog()->LogV(GetCVars()->e_3dEngineLogAlways ? IMiniLog::eAlways : IMiniLog::eMessage, szText, args);
  165.         va_end(args);
  166.  
  167.         GetLog()->UpdateLoadingScreen(0);
  168. }
  169.  
  170. void Cry3DEngineBase::PrintMessagePlus(const char* szText, ...)
  171. {
  172.         if (!szText)
  173.                 return;
  174.  
  175.         va_list arglist;
  176.         char buf[MAX_ERROR_STRING];
  177.         va_start(arglist, szText);
  178.         cry_vsprintf(buf, szText, arglist);
  179.         va_end(arglist);
  180.         GetLog()->LogPlus(buf);
  181.  
  182.         GetLog()->UpdateLoadingScreen(0);
  183. }
  184.  
  185. float Cry3DEngineBase::GetCurTimeSec()
  186. { return (gEnv->pTimer->GetCurrTime()); }
  187.  
  188. float Cry3DEngineBase::GetCurAsyncTimeSec()
  189. { return (gEnv->pTimer->GetAsyncTime().GetSeconds()); }
  190.  
  191. //////////////////////////////////////////////////////////////////////////
  192. void Cry3DEngineBase::Warning(const char* format, ...)
  193. {
  194.         if (!format)
  195.                 return;
  196.  
  197.         va_list args;
  198.         va_start(args, format);
  199.         // Call to validating warning of system.
  200.         m_pSystem->WarningV(VALIDATOR_MODULE_3DENGINE, VALIDATOR_WARNING, 0, 0, format, args);
  201.         va_end(args);
  202.  
  203.         GetLog()->UpdateLoadingScreen(0);
  204. }
  205.  
  206. //////////////////////////////////////////////////////////////////////////
  207. void Cry3DEngineBase::Error(const char* format, ...)
  208. {
  209.         //  assert(!"Cry3DEngineBase::Error");
  210.  
  211.         va_list args;
  212.         va_start(args, format);
  213.         // Call to validating warning of system.
  214.         m_pSystem->WarningV(VALIDATOR_MODULE_3DENGINE, VALIDATOR_ERROR, 0, 0, format, args);
  215.         va_end(args);
  216.  
  217.         GetLog()->UpdateLoadingScreen(0);
  218. }
  219.  
  220. //////////////////////////////////////////////////////////////////////////
  221. void Cry3DEngineBase::FileWarning(int flags, const char* file, const char* format, ...)
  222. {
  223.         va_list args;
  224.         va_start(args, format);
  225.         // Call to validating warning of system.
  226.         m_pSystem->WarningV(VALIDATOR_MODULE_3DENGINE, VALIDATOR_WARNING, flags | VALIDATOR_FLAG_FILE, file, format, args);
  227.         va_end(args);
  228.  
  229.         GetLog()->UpdateLoadingScreen(0);
  230. }
  231.  
  232. IMaterial* Cry3DEngineBase::MakeSystemMaterialFromShader(const char* sShaderName, SInputShaderResources* Res)
  233. {
  234.         IMaterial* pMat = Get3DEngine()->GetMaterialManager()->CreateMaterial(sShaderName);
  235.         //pMat->AddRef();
  236.  
  237.         if (GetRenderer())
  238.         {
  239.                 SShaderItem si;
  240.                 si = GetRenderer()->EF_LoadShaderItem(sShaderName, true, 0, Res);
  241.                 pMat->AssignShaderItem(si);
  242.         }
  243.  
  244.         return pMat;
  245. }
  246.  
  247. //////////////////////////////////////////////////////////////////////////
  248. bool Cry3DEngineBase::IsValidFile(const char* sFilename)
  249. {
  250.         LOADING_TIME_PROFILE_SECTION;
  251.  
  252.         return gEnv->pCryPak->IsFileExist(sFilename);
  253. }
  254.  
  255. //////////////////////////////////////////////////////////////////////////
  256. bool Cry3DEngineBase::IsResourceLocked(const char* sFilename)
  257. {
  258.         IResourceList* pResList = GetPak()->GetResourceList(ICryPak::RFOM_NextLevel);
  259.         if (pResList)
  260.         {
  261.                 return pResList->IsExist(sFilename);
  262.         }
  263.         return false;
  264. }
  265.  
  266. void Cry3DEngineBase::DrawBBoxLabeled(const AABB& aabb, const Matrix34& m34, const ColorB& col, const char* format, ...)
  267. {
  268.         va_list args;
  269.         va_start(args, format);
  270.         char szText[256];
  271.         cry_vsprintf(szText, format, args);
  272.         va_end(args);
  273.         float fColor[4] = { col[0] / 255.f, col[1] / 255.f, col[2] / 255.f, col[3] / 255.f };
  274.         GetRenderer()->GetIRenderAuxGeom()->SetRenderFlags(SAuxGeomRenderFlags());
  275.         IRenderAuxText::DrawLabelEx(m34.TransformPoint(aabb.GetCenter()), 1.3f, fColor, true, true, szText);
  276.         GetRenderer()->GetIRenderAuxGeom()->DrawAABB(aabb, m34, false, col, eBBD_Faceted);
  277. }
  278.  
  279. //////////////////////////////////////////////////////////////////////////
  280. void Cry3DEngineBase::DrawBBox(const Vec3& vMin, const Vec3& vMax, ColorB col)
  281. {
  282.         GetRenderer()->GetIRenderAuxGeom()->SetRenderFlags(SAuxGeomRenderFlags());
  283.         GetRenderer()->GetIRenderAuxGeom()->DrawAABB(AABB(vMin, vMax), false, col, eBBD_Faceted);
  284. }
  285.  
  286. void Cry3DEngineBase::DrawBBox(const AABB& box, ColorB col)
  287. {
  288.         GetRenderer()->GetIRenderAuxGeom()->SetRenderFlags(SAuxGeomRenderFlags());
  289.         GetRenderer()->GetIRenderAuxGeom()->DrawAABB(box, false, col, eBBD_Faceted);
  290. }
  291.  
  292. void Cry3DEngineBase::DrawLine(const Vec3& vMin, const Vec3& vMax, ColorB col)
  293. {
  294.         GetRenderer()->GetIRenderAuxGeom()->SetRenderFlags(SAuxGeomRenderFlags());
  295.         GetRenderer()->GetIRenderAuxGeom()->DrawLine(vMin, col, vMax, col);
  296. }
  297.  
  298. void Cry3DEngineBase::DrawSphere(const Vec3& vPos, float fRadius, ColorB color)
  299. {
  300.         GetRenderer()->GetIRenderAuxGeom()->SetRenderFlags(SAuxGeomRenderFlags());
  301.         GetRenderer()->GetIRenderAuxGeom()->DrawSphere(vPos, fRadius, color);
  302. }
  303.  
  304. void Cry3DEngineBase::DrawQuad(const Vec3& v0, const Vec3& v1, const Vec3& v2, const Vec3& v3, ColorB color)
  305. {
  306.         GetRenderer()->GetIRenderAuxGeom()->SetRenderFlags(SAuxGeomRenderFlags());
  307.         GetRenderer()->GetIRenderAuxGeom()->DrawTriangle(v0, color, v2, color, v3, color);
  308.         GetRenderer()->GetIRenderAuxGeom()->DrawTriangle(v0, color, v1, color, v2, color);
  309. }
  310.  
  311. // Check if preloading is enabled.
  312. bool Cry3DEngineBase::IsPreloadEnabled()
  313. {
  314.         bool bPreload = false;
  315.         ICVar* pSysPreload = GetConsole()->GetCVar("sys_preload");
  316.         if (pSysPreload && pSysPreload->GetIVal() != 0)
  317.                 bPreload = true;
  318.  
  319.         return bPreload;
  320. }
  321.  
  322. //////////////////////////////////////////////////////////////////////////
  323. bool Cry3DEngineBase::CheckMinSpec(uint32 nMinSpec)
  324. {
  325.         if (nMinSpec == CONFIG_DETAIL_SPEC && GetCVars()->e_ViewDistRatioDetail == 0)
  326.                 return false;
  327.  
  328.         if ((int)nMinSpec != 0 && GetCVars()->e_ObjQuality != 0 && (int)nMinSpec > GetCVars()->e_ObjQuality)
  329.                 return false;
  330.  
  331.         return true;
  332. }
  333.  
  334. bool Cry3DEngineBase::IsEscapePressed()
  335. {
  336. #if CRY_PLATFORM_WINDOWS
  337.         if (Cry3DEngineBase::m_bEditor && (CryGetAsyncKeyState(0x03) & 1)) // Ctrl+Break
  338.         {
  339.                 Get3DEngine()->PrintMessage("*** Ctrl-Break was pressed - operation aborted ***");
  340.                 return true;
  341.         }
  342. #endif
  343.         return false;
  344. }
  345.  
  346. #if defined(__GNUC__)
  347.         #if __GNUC__ >= 4 && __GNUC__MINOR__ < 7
  348.                 #pragma GCC diagnostic error "-Wformat-security"
  349.         #else
  350.                 #pragma GCC diagnostic pop
  351.         #endif
  352. #endif
  353.  
  354. #include <CryCore/CrtDebugStats.h>
  355.  
  356. // TypeInfo implementations for Cry3DEngine
  357. #ifndef _LIB
  358.         #include <CryCore/Common_TypeInfo.h>
  359. #endif
  360.  
  361. #include <CryCore/TypeInfo_impl.h>
  362.  
  363. // Common types
  364. #include <Cry3DEngine/IIndexedMesh_info.h>
  365. #include <Cry3DEngine/IRenderNode_info.h>
  366. #include <Cry3DEngine/CGF/CGFContent_info.h>
  367.  
  368. // 3DEngine types
  369. #include "SkyLightNishita_info.h"
  370. #include "terrain_sector_info.h"
  371.  
  372. STRUCT_INFO_BEGIN(SImageSubInfo)
  373. VAR_INFO(nDummy)
  374. VAR_INFO(nDim)
  375. VAR_INFO(fTilingIn)
  376. VAR_INFO(fTiling)
  377. VAR_INFO(fSpecularAmount)
  378. VAR_INFO(nSortOrder)
  379. STRUCT_INFO_END(SImageSubInfo)
  380.  
  381. STRUCT_INFO_BEGIN(SImageInfo)
  382. VAR_INFO(baseInfo)
  383. VAR_INFO(detailInfo)
  384. VAR_INFO(szDetMatName)
  385. VAR_INFO(arrTextureId)
  386. VAR_INFO(nPhysSurfaceType)
  387. VAR_INFO(szBaseTexName)
  388. VAR_INFO(fUseRemeshing)
  389. VAR_INFO(layerFilterColor)
  390. VAR_INFO(nLayerId)
  391. VAR_INFO(fBr)
  392. STRUCT_INFO_END(SImageInfo)
  393.  
downloadCry3DEngine.cpp Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top