ã¯ããã«
CryEngineã¯ã2002幎ã«ãã€ãã®äŒç€ŸCrytekã«ãã£ãŠäœæãããã²ãŒã ãšã³ãžã³ã§ãããšããšãã¡ãŒã¯ã©ã€ã®äžäººç§°ã·ã¥ãŒãã£ã³ã°ã²ãŒã ã§äœ¿çšãããŠããŸããã ãã¡ãŒã¯ã©ã€ãã¯ã©ã€ã·ã¹ããšã³ãããã¢ãŠãããŒã¹ããã«ãŒããŒãºããŠã©ãŒãã§ã€ã¹ãããŒã ããã³ãïŒã¶ã¬ããªã¥ãŒã·ã§ã³ãã¹ãã€ããŒïŒãŽãŒã¹ããŠã©ãªã¢ãŒãã¢ãŒããŒããŠã©ãŒãã§ã¢ããšãã«ããªã©ããšã³ãžã³ãã©ã€ã»ã³ã¹ããããŸããŸãªã²ãŒã ã¹ã¿ãžãªã®ããŸããŸãªããŒãžã§ã³ã®ããŸããŸãªã²ãŒã ãCryEngineã§äœæãããŸãã ã 2016幎3æãCrytekã¯æ°ããCryEngine Vãšã³ãžã³ã®ãªãªãŒã¹ãçºè¡šãããŸããªãGithubã§ãœãŒã¹ã³ãŒããå ¬éããŸããã
ãªãŒãã³ãœãŒã¹ã³ãŒãã確èªããããã«ã PVS-StudioããŒãžã§ã³6.05éçã¢ãã©ã€ã¶ãŒã䜿çšãããŸããã ããã¯ãCãC ++ãCïŒã§æžãããããã°ã©ã ã®ãœãŒã¹ã³ãŒãã®ãšã©ãŒãæ€åºããããã®ããŒã«ã§ãã éçåææ¹æ³è«ã䜿çšããå¯äžã®ç¢ºå®ãªæ¹æ³ã¯ãéçºã³ã³ãã¥ãŒã¿ãŒãšãã«ããµãŒããŒã®ã³ãŒããå®æçã«ãã§ãã¯ããããšã§ãã ãã ããPVS-Studioã¢ãã©ã€ã¶ãŒã®æ©èœãå®èšŒããããã«ã ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã® 1åéãã®ãã§ãã¯ãå®è¡ããç¹å®ããããšã©ãŒã®èª¬æãå«ãã¬ãã¥ãŒèšäºãäœæããŸãã ãããããããžã§ã¯ããç§ãã¡ã«ãšã£ãŠèå³æ·±ããšæãããå Žåã1ã2幎ã®åºçŸåŸãå床確èªããããšãã§ããŸãã å®éãå€ãã®å€æŽãã³ãŒãã«èç©ãããããããã®ãããªç¹°ãè¿ããããã§ãã¯ã¯1åéãã®ãã§ãã¯ãšå€ãããŸããã
æ€èšŒã®ããã«ãåã«ããç¥ããã人æ°ã®ãããããžã§ã¯ããšãèªè ãé»åã¡ãŒã«ã§ææ¡ãããããžã§ã¯ããéžæããŸãã ãããã£ãŠãã²ãŒã ãšã³ãžã³ã®äžã§ãCryEngine Vã¯æåã®ãã®ãšã¯ã»ã©é ããã®ã§ãã 次ã®ãšã³ãžã³ããã¹ããããŸããã
- ã¢ã³ãªã¢ã«ãšã³ãžã³4ïŒ æåã®ãã§ã㯠ã 2çªç®ã®ãã§ã㯠ã 3çªç®ã®ãã§ã㯠ïŒ
- Godotãšã³ãžã³ãã§ãã¯
- æ·±å»ãªãšã³ãžã³ãã§ãã¯
- X-Rayãšã³ãžã³ã確èªããŠãã ãã
- Xenko Engineã®ç¢ºèª
ãŸãã CryEngine 3 SDKã¯äžåºŠãã¹ããããŸããã
ã¢ã³ãªã¢ã«ãšã³ãžã³4ã®ã²ãŒã ãšã³ãžã³ããã§ãã¯ããããšã«ç¹ã«æ³šæãæãããã§ãã ãã®ãããžã§ã¯ãã®äŸã䜿çšããŠãå®éã®ãããžã§ã¯ãã§ã®éç解æææ³ã®æ£ããé©çšã«ã€ããŠè©³çŽ°ã«äŒããããšãã§ããŸããïŒãããžã§ã¯ãã«ã¢ãã©ã€ã¶ãŒãå®è£ ããããšãããèŠåã®æ°ããŒãã«æžãããæ°ããã³ãŒãã®ãšã©ãŒãç£èŠãããŸã§ã Unreal Engine 4ãããžã§ã¯ãã§ã®äœæ¥ã«ãããEpic Gamesãšã®ã³ã©ãã¬ãŒã·ã§ã³ãå®çŸããŸãããPVS-StudioããŒã ã¯ããšã³ãžã³ã®ãœãŒã¹ã³ãŒãå ã®ãã¹ãŠã®ã¢ãã©ã€ã¶ãŒã®èŠåãä¿®æ£ããå®äºããäœæ¥ã«é¢ããå ±åèšäºãæžããŸããã 翻蚳 ïŒã Epic Gamesã¯ãç¬ç«ããã³ãŒãå質管çã®ããã®PVS-Studioã©ã€ã»ã³ã¹ãååŸããŸããã Crytekãšåæ§ã®ååã®æºåãã§ããŠããŸãã
åæã¬ããŒãã®æ§é
ãã®èšäºã§ã¯ãèŠåãšèª€æ€ç¥ã®æ°ã«é¢ãããããã質åã«çããããšæããŸãã ããšãã°ã-ã誀æ€ç¥ã¯äœããŒã»ã³ãã§ããïŒã-ãŸãã¯-ããã®ãããªå€§èŠæš¡ãªãããžã§ã¯ãã§ãšã©ãŒãå°ãªãã®ã¯ãªãã§ããïŒã
ãŸããPVS-Studioã¢ãã©ã€ã¶ãŒã®ãã¹ãŠã®èŠåã¯ã3ã€ã®éèŠåºŠã¬ãã«ïŒ é« ã äžã äœïŒã«åããããŸã ã ãããã£ãŠã é«ã¬ãã«ã«ã¯å®éã®ãšã©ãŒã§ããå¯èœæ§ãéåžžã«é«ãé倧ãªèŠåãå«ãŸãã äœã¬ãã«ã«ã¯äœé倧床ã®èŠåããŸãã¯èª€æ€ç¥ã®å¯èœæ§ãéåžžã«é«ãèŠåãå«ãŸããŸãã ç¹å®ã®ãšã©ãŒã³ãŒãã¯ãç¹å®ã®ã¬ãã«ã®éèŠåºŠã«å¿ ããããã€ã³ãããããã§ã¯ãªããã°ã«ãŒããžã®ã¡ãã»ãŒãžã®é ä¿¡ã¯ãããããçæãããã³ã³ããã¹ãã«åŒ·ãäŸåããããšãèŠããŠãã䟡å€ããããŸãã
CryEngine Vãããžã§ã¯ãã§ã¯ãäžè¬åæã®èŠåã¯æ¬¡ã®ããã«é倧床ã¬ãã«å¥ã«åé¡ãããŸãã
- é«ïŒ576èŠåã
- äžïŒ814åã®èŠåã
- äœïŒ2942èŠå
å³1ã¯ãé倧床ã¬ãã«ããšã®ã¢ã©ãŒãã®ååžãåã°ã©ãã§ç€ºããŠããŸãã
å³1-é倧床ã¬ãã«å¥ã®ã¢ã©ãŒãã®ååžïŒããŒã»ã³ããŒãžïŒ
ãã¹ãŠã®èŠåã®èª¬æãèšäºã«åãããŠã察å¿ããã³ãŒããã©ã°ã¡ã³ãã衚瀺ããããšã¯äžå¯èœã§ãã éåžžãèšäºã«ã¯10ã40åã®ãšã©ãŒã®äŸãšèª¬æãå«ãŸããŠããŸãã ããã€ãã®çãããã³ãŒãã®å Žæã¯åã«ãªã¹ããããŠããŸãã ã»ãšãã©ã®èŠåã¯ä¿çäžã®ãŸãŸã§ãã æè¯ã®å Žåãéçºè ã«éç¥ããåŸãéçºè ã¯è©³çŽ°ãªèª¿æ»ã®ããã«å®å šãªåæã¬ããŒããèŠæ±ããŸãã æ²ããçå®ã¯ãç§ãã¡ããã¹ãããŠããã»ãšãã©ã®ãããžã§ã¯ãã§ã é«ã¬ãã«ã®èŠåã®ã¿ã衚瀺ããåŸãèšäºã®è³æã¯ååããããšããããšã§ãã ãŸããCryEngine Vã²ãŒã ãšã³ãžã³ãäŸå€ã§ã¯ãããŸããã å³2ã¯ã é«ã¬ãã«ã¢ã©ãŒãã®æ§é ã瀺ããŠããŸãã
å³2-é«ã¬ãã«ã¢ã©ãŒãã®èª¬æ
æ瀺ãããåã°ã©ãã®ã»ã¯ã¿ãŒã«ã€ããŠããã«è©³ããïŒ
- èšäºã§èª¬æãããŠããïŒ6ïŒ ïŒ-èšäºã§æäŸãããŠããã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžãšã³ãŒããã©ã°ã¡ã³ãããã³èª¬æã
- æ瀺ãªã¹ãïŒ46ïŒ ïŒ-èšäºã«ãªã¹ããšããŠãªã¹ããããŠããã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžã ãã®ãããªèŠåã¯ããã®èšäºã§æ¢ã«è©³çŽ°ã«èª¬æãããŠããããã€ãã®ã±ãŒã¹ãšéåžžã«äŒŒãŠãããããèŠåã«é¢ããæ å ±ã¯åã«ç€ºãããŠããŸãã
- 誀æ€ç¥ïŒ8ïŒ ïŒ-å°æ¥çã«åæè£ çœ®ãå®æãããããã«ãäžå®ã®å²åã®èª€æ€ç¥ãæžã蟌ãŸããŸããã
- ã¹ãããïŒ40ïŒ ïŒ-ä»ã®ãã¹ãŠã®ã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžã ãããã«ã¯ãèšäºã«åãŸããªãèŠåãéèŠã§ã¯ãªããããŸãé¢çœããªãããŸãã¯ãã§ãã¯ããããããžã§ã¯ãã®éçºè ããŒã 以å€ã®äººã«ãšã£ãŠç解ãé£ããã³ãŒãã®ã»ã¯ã·ã§ã³ã§èŠã€ãã£ãèŠåãå«ãŸããŸãã ãUnreal Engine 4ãã§ã®äœæ¥ã§ç€ºãããŠããããã«ãå®éã«ã¯ãã®ãããªã³ãŒãã¯ãèããããããã¹ãŠã®èŠåã¯ãšã«ããä¿®æ£ãããŸãã
æ€èšŒçµæ
äžå¿«ãªã³ããŒã¢ã³ãããŒã¹ã
V501 ã-ãæŒç®åã®å·Šå³ã«åãå¯æ¬¡åŒããããŸããq2.vz-q2.vz entitynode.cpp 93
bool CompareRotation(const Quat& q1, const Quat& q2, float epsilon) { return (fabs_tpl(q1.vx - q2.vx) <= epsilon) && (fabs_tpl(q1.vy - q2.vy) <= epsilon) && (fabs_tpl(q2.vz - q2.vz) <= epsilon) // <= && (fabs_tpl(q1.w - q2.w) <= epsilon); }
1æ¡ã®ã¿ã€ããã¹ã¯ãããããããã°ã©ããäœæã§ããæãåä»ãªã¿ã€ããã¹ã®1ã€ã§ãã ãã®é¢æ°ã§ã¯ãã¢ãã©ã€ã¶ãŒã¯å€æ°q1ãšq2ãæ··åãããŠããå¯èœæ§ãé«ãçãããåŒïŒq2.vz-q2.vzïŒãæ€åºããŸããã
V501ã||ãã®å·ŠåŽãšå³åŽã«åäžã®å¯æ¬¡åŒãïŒm_eTFSrc == eTF_BC6UHïŒãããããŸã æŒç®åã texturestreaming.cpp 919
//! Texture formats. enum ETEX_Format : uint8 { .... eTF_BC4U, //!< 3Dc+. eTF_BC4S, eTF_BC5U, //!< 3Dc. eTF_BC5S, eTF_BC6UH, eTF_BC6SH, eTF_BC7, eTF_R9G9B9E5, .... }; bool CTexture::StreamPrepare(CImageFile* pIM) { .... if ((m_eTFSrc == eTF_R9G9B9E5) || (m_eTFSrc == eTF_BC6UH) || // <= (m_eTFSrc == eTF_BC6UH)) // <= { m_cMinColor /= m_cMaxColor.a; m_cMaxColor /= m_cMaxColor.a; } .... }
å¥ã®ã¿ã€ãã®ã¿ã€ããã¹ã«ã¯ãå®æ°ã®ã³ããŒãå«ãŸããŸãã ãã®å Žåãå€æ°m_eTFSrcã¯å®æ°eTF_BC6UHãš2åæ¯èŒãããŸããããã¯ãä»ã®æåã«çœ®ãæããå¿ èŠããããŸããããšãã°ã1æåã ãã§åºå¥ããŸã-å®æ°eTF_BC6SH
ãããžã§ã¯ãå ã®2ã€ã®é¡äŒŒããå ŽæïŒ
- V501ã||ãã®å·Šãšå³ã«åäžã®å¯æ¬¡åŒãïŒtd.m_eTF == eTF_BC6UHïŒãããããŸã æŒç®åã texture.cpp 1214
- V501ã|ãã®å·ŠåŽãšå³åŽã«åäžã®ãµãåŒãgeom_colltype_solidãããããŸã æŒç®åã attachmentmanager.cpp 1004
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ266ã268ãd3dhwshader.cpp 266
int SD3DShader::Release(EHWShaderClass eSHClass, int nSize) { .... if (eSHClass == eHWSC_Pixel) return ((ID3D11PixelShader*)pHandle)->Release(); else if (eSHClass == eHWSC_Vertex) return ((ID3D11VertexShader*)pHandle)->Release(); else if (eSHClass == eHWSC_Geometry) // <= return ((ID3D11GeometryShader*)pHandle)->Release(); // <= else if (eSHClass == eHWSC_Geometry) // <= return ((ID3D11GeometryShader*)pHandle)->Release(); // <= else if (eSHClass == eHWSC_Hull) return ((ID3D11HullShader*)pHandle)->Release(); else if (eSHClass == eHWSC_Compute) return ((ID3D11ComputeShader*)pHandle)->Release(); else if (eSHClass == eHWSC_Domain) return ((ID3D11DomainShader*)pHandle)->Release() .... }
以äžã¯ãæ¡ä»¶ä»ãã¹ããŒãã¡ã³ãã®ã«ã¹ã±ãŒãã®é 延ã³ããŒã®äŸã§ãã³ãŒãã®å€æŽãå¿ããŠããŸããã
V517 ãifïŒAïŒ{...} else ifïŒAïŒ{...}ããã¿ãŒã³ã®äœ¿çšãæ€åºãããŸããã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã è¡ã確èªããŠãã ããïŒ970ã974ãenvironmentalweapon.cpp 970
void CEnvironmentalWeapon::UpdateDebugOutput() const { .... const char* attackStateName = "None"; if(m_currentAttackState & // <= EAttackStateType_EnactingPrimaryAttack) // <= { attackStateName = "Primary Attack"; } else if(m_currentAttackState & // <= EAttackStateType_EnactingPrimaryAttack) // <= { attackStateName = "Charged Throw"; } .... }
åã®ã³ãŒãã§ã¯ãã³ãŒãã®ã³ããŒãå€ãããããã«äœåãªæ¡ä»¶ãçºçããå¯èœæ§ãå°ãªããšãããã1ã€ã®ãã§ãã¯ã¯åã«äžèŠã§ãã ãã®ã³ãŒããã©ã°ã¡ã³ãã§ã¯ãåäžã®æ¡ä»¶åŒã«ãããå€æ°attackStateNameã¯å€ãCharged Throwããæ³å®ããŸããã
V519 ãBlendFactor [2]ãå€æ°ã«ã¯å€ã2åé£ç¶ããŠå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ1265ã1266ãccrydxgldevicecontext.cpp 1266
void CCryDXGLDeviceContext:: OMGetBlendState(...., FLOAT BlendFactor[4], ....) { CCryDXGLBlendState::ToInterface(ppBlendState, m_spBlendState); if ((*ppBlendState) != NULL) (*ppBlendState)->AddRef(); BlendFactor[0] = m_auBlendFactor[0]; BlendFactor[1] = m_auBlendFactor[1]; BlendFactor[2] = m_auBlendFactor[2]; // <= BlendFactor[2] = m_auBlendFactor[3]; // <= *pSampleMask = m_uSampleMask; }
ãããžã§ã¯ãã³ãŒãã§ãã€ã³ããã¯ã¹ã®ã¿ã€ããã¹ã®ããã«ãã€ã³ããã¯ã¹3ã§èŠçŽ ãåããããšãã§ããªãã£ããããªé¢æ°ãèŠã€ããŸããïŒ BlendFactor [3] ã ãã®å Žæã¯ãã¿ã€ããã¹ãèš±å¯ãããã³ãŒããã³ããŒãããããã«2ã€ã®ãã©ã°ã¡ã³ããã¢ãã©ã€ã¶ã§èŠã€ãããªãã£ãå Žåãã¿ã€ããã¹ã®èå³æ·±ãå Žæã®1ã€ã«ãããŸããã
V519 ãm_auBlendFactor [2]ãå€æ°ã«ã¯ãå€ãé£ç¶ããŠ2åå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ904ã905ãccrydxgldevicecontext.cpp 905
void CCryDXGLDeviceContext:: OMSetBlendState(....const FLOAT BlendFactor[4], ....) { .... m_uSampleMask = SampleMask; if (BlendFactor == NULL) { m_auBlendFactor[0] = 1.0f; m_auBlendFactor[1] = 1.0f; m_auBlendFactor[2] = 1.0f; // <= m_auBlendFactor[2] = 1.0f; // <= } else { m_auBlendFactor[0] = BlendFactor[0]; m_auBlendFactor[1] = BlendFactor[1]; m_auBlendFactor[2] = BlendFactor[2]; // <= m_auBlendFactor[2] = BlendFactor[3]; // <= } m_pContext->SetBlendColor(m_auBlendFactor[0], m_auBlendFactor[1], m_auBlendFactor[2], m_auBlendFactor[3]); m_pContext->SetSampleMask(m_uSampleMask); .... }
ããã¯ãã€ã³ããã¯ã¹ '3'ã§èŠçŽ ã®å ¥åãã¹ããããç¶ããå Žæã§ãã ãã°ããã®éãããã¯çã«ããªã£ãŠãããšæã£ãŠããŸããããé¢æ°ã®æåŸã§m_auBlendFactoré åã®4ã€ã®èŠçŽ ãã¹ãŠã«é åãæãããšãããã®èãã¯ããã«ç§ãå»ããŸããã ccrydxgldevicecontext.cppãã¡ã€ã«ãã¿ã€ããã¹ã³ãŒãã®ã³ããŒãããã€ãäœæããããã§ãã
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã d3dshadows.cpp 1410
void CD3D9Renderer::ConfigShadowTexgen(....) { .... if ((pFr->m_Flags & DLF_DIRECTIONAL) || (!(pFr->bUseHWShadowMap) && !(pFr->bHWPCFCompare))) { //linearized shadows are used for any kind of directional //lights and for non-hw point lights m_cEF.m_TempVecs[2][Num] = 1.f / (pFr->fFarDist); } else { //hw point lights sources have non-linear depth for now m_cEF.m_TempVecs[2][Num] = 1.f / (pFr->fFarDist); } .... }
ã³ããŒããŒã¹ãã«é¢ããã»ã¯ã·ã§ã³ã®çµããã«ãå¥ã®èå³æ·±ããšã©ãŒã«ã€ããŠèª¬æããŸãã æ¡ä»¶åŒã®çµæã«é¢ä¿ãªãã m_cEF.m_TempVecs [2] [Num]ã®å€ã¯åžžã«1ã€ã®åŒã䜿çšããŠèšç®ãããŸãã ãã®ãã©ã°ã¡ã³ãã®é£æ¥ããã³ãŒãããå€æãããšãã€ã³ããã¯ã¹ã«ã¿ã€ããã¹ã¯ãããŸããããã®ç¶æ ã§ã¯ãã€ã³ããã¯ã¹ã2ãã®èŠçŽ ãæ£ç¢ºã«åããããšèããŠããŸãã ãããããããããèšç®åŒã¯ç°ãªããã®ã䜿çšãããã£ãã®ã§ãããè¡ãã³ããŒããåŸãã³ãŒããå€æŽããã®ãå¿ããŠããŸããã
åæåã®åé¡
V546ã¯ã©ã¹ã®ã¡ã³ããŒã¯ããèªäœã§åæåãããŸãïŒ 'eConfigMaxïŒeConfigMaxïŒ'ã particleparams.h 1013
ParticleParams() : .... fSphericalApproximation(1.f), fVolumeThickness(1.0f), fSoundFXParam(1.f), eConfigMax(eConfigMax.VeryHigh), // <= fFadeAtViewCosAngle(0.f) {}
ã¯ã©ã¹ãã£ãŒã«ããåºæå€ã䜿çšããŠåæåããããšãã«ãã¢ãã©ã€ã¶ãŒãã¿ã€ããã¹ãæ€åºããŸããã
V603ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãå Žåã¯ããthis-> SRenderingPassInfo :: SRenderingPassInfoïŒ....ïŒãã䜿çšããå¿ èŠããããŸãã i3dengine.h 2589
SRenderingPassInfo() : pShadowGenMask(NULL) , nShadowSide(0) , nShadowLod(0) , nShadowFrustumId(0) , m_bAuxWindow(0) , m_nRenderStackLevel(0) , m_eShadowMapRendering(static_cast<uint8>(SHADOW_MAP_NONE)) , m_bCameraUnderWater(0) , m_nRenderingFlags(0) , m_fZoomFactor(0.0f) , m_pCamera(NULL) , m_nZoomInProgress(0) , m_nZoomMode(0) , m_pJobState(nullptr) { threadID nThreadID = 0; gEnv->pRenderer->EF_Query(EFQ_MainThreadList, nThreadID); m_nThreadID = static_cast<uint8>(nThreadID); m_nRenderFrameID = gEnv->pRenderer->GetFrameID(); m_nRenderMainFrameID = gEnv->pRenderer->GetFrameID(false); } SRenderingPassInfo(threadID id) { SRenderingPassInfo(); // <= SetThreadID(id); }
ããã§ãã¢ãã©ã€ã¶ãŒã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã®äžé©åãªäœ¿çšãæ€åºããŸããã ããã°ã©ããŒã¯ãããããå¥ã®ã³ã³ã¹ãã©ã¯ã¿ãŒå ã®ãã©ã¡ãŒã¿ãŒãªãã§ãã®æ¹æ³ã§ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããšãã¯ã©ã¹ã®ãã£ãŒã«ããåæåããããšèããŸããããããã§ã¯ãããŸããã
ãã®ã³ãŒãã§ã¯ã次ã®ããšãçºçããŸããã¿ã€ãSRenderingPassInfoã®æ°ããååã®ãªããªããžã§ã¯ããããã«äœæããã³ç Žæ£ãããŸãã ãã®çµæãã¯ã©ã¹ãã£ãŒã«ãã¯åæåãããŸããã ãšã©ãŒãä¿®æ£ãã1ã€ã®æ¹æ³ã¯ãå¥åã®åæåé¢æ°ãäœæããç°ãªãã³ã³ã¹ãã©ã¯ã¿ãŒããåŒã³åºãããšã§ãã
V688 ãm_cNewGeomMMLãããŒã«ã«å€æ°ã¯ãã¯ã©ã¹ã¡ã³ããŒã®1ã€ãšåãååãæã£ãŠãããããæ··ä¹±ãæãå¯èœæ§ããããŸãã terrain_node.cpp 344
void CTerrainNode::Init(....) { .... m_nOriginX = m_nOriginY = 0; // sector origin m_nLastTimeUsed = 0; // basically last time rendered uint8 m_cNewGeomMML = m_cCurrGeomMML = m_cNewGeomMML_Min .... m_pLeafData = 0; m_nTreeLevel = 0; .... }
ã¢ãã©ã€ã¶ãŒã¯ãããŒã«ã«å€æ°cNewGeomMMLã®ååãšã¯ã©ã¹ãã£ãŒã«ãã®äžèŽãæ€åºããŸããã å€ãã®å Žåããã®ã³ãŒãã¯ãšã©ãŒã§ã¯ãããŸããããããã§ã¯ã¯ã©ã¹ã®ä»ã®ãã£ãŒã«ãã®åæåã®èæ¯ã«å¯ŸããŠéåžžã«çãããããã«èŠããŸãã
V575 ãmemsetãæ©èœã¯ã0ãèŠçŽ ãåŠçããŸãã 3çªç®ã®åŒæ°ã調ã¹ãŸãã crythreadutil_win32.h 294
void EnableFloatExceptions(....) { .... CONTEXT ctx; memset(&ctx, sizeof(ctx), 0); // <= .... }
ã¢ãã©ã€ã¶ãŒã䜿çšãããšãéåžžã«èå³æ·±ããšã©ãŒãèŠã€ãããŸããã memsetïŒïŒé¢æ°ãåŒã³åºããããšãæž¡ãããåŒæ°ãæ··åããããã®çµæã0ãã€ãã®ã¡ã¢ãªãåããããã«é¢æ°ãåŒã³åºãããŸããã é¢æ°ãããã¿ã€ãã¯æ¬¡ã®ããã«ãªããŸãã
void * memset ( void * ptr, int value, size_t num );
3çªç®ã®åŒæ°ã¯ãããã¡ã®ãµã€ãºã§ããå¿ èŠãããã2çªç®ã®åŒæ°ã¯ãããã¡ãåããå¿ èŠãããå€ã§ãã
ä¿®æ£ããããªãã·ã§ã³ïŒ
void EnableFloatExceptions(....) { .... CONTEXT ctx; memset(&ctx, 0, sizeof(ctx)); .... }
V630 ã_allocaãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã command_buffer.cpp 62
void CBuffer::Execute() { .... QuatT * pJointsTemp = static_cast<QuatT*>( alloca(m_state.m_jointCount * sizeof(QuatT))); .... }
ãããžã§ã¯ãã³ãŒãã«ã¯ã allocaïŒïŒé¢æ°ã䜿çšããŠããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããå ŽæããããŸãã äžèšã®ã³ãŒãã§ã¯ããã®ã¡ã¢ãªå²ãåœãŠæ¹æ³ã䜿çšããŠã QuatTã¯ã©ã¹ã®ãªããžã§ã¯ãã¯ã³ã³ã¹ãã©ã¯ã¿ãŒãŸãã¯ãã¹ãã©ã¯ã¿ãåŒã³åºããŸããã ãã®ãããªã³ãŒãã¯ãåæåãããŠããªãå€æ°ããã®ä»ã®ãšã©ãŒãåŠçããå¯èœæ§ããããŸãã
äžå¯©ãªå Žæã®å šãªã¹ãïŒ
- V630ã_allocaãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã command_buffer.cpp 67
- V630ã_allocaãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã posematching.cpp 144
- V630ã_allocaãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã characterinstance.cpp 280
- V630ã_allocaãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã characterinstance.cpp 282
- V630ã_allocaãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã scriptbind_entity.cpp 6252
- V630ã_allocaãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã jobmanager.cpp 1016
- V630ã_allocaãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã driverd3d.cpp 5859
V583 ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€-1.8fãè¿ããŸãã posealignerc3.cpp 330
ILINE bool InitializePoseAlignerPinger(....) { .... chainDesc.offsetMin = Vec3(0.0f, 0.0f, bIsMP ? -1.8f : -1.8f); chainDesc.offsetMax = Vec3(0.0f, 0.0f, bIsMP ? +0.75f : +1.f); .... }
ãããžã§ã¯ãã³ãŒãã§ã¯ãäžé æŒç®åïŒïŒãåãå€ãè¿ãå ŽåããããŸãã ããããåã®ã±ãŒã¹ã§ã圌ãã¯ã³ãŒãã®çŸããã®ããã«ãããæžããŸãããããªããã®æçã§ãããããã®ã§ããïŒ
float predictDelta = inputSpeed < 0.0f ? 0.1f : 0.1f; // <= float dict = angle + predictDelta * ( angle - m_prevAngle) / dt ;
ãããžã§ã¯ãå ã«ãããã®ãããªå Žæã¯ãã¹ãŠïŒ
- V583ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€-1.8fãè¿ããŸãã posealignerc3.cpp 313
- V583ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«åãå€-2.fãè¿ããŸãã posealignerc3.cpp 347
- V583ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€D3D11_RTV_DIMENSION_TEXTURE2DARRAYãè¿ããŸãã d3dtexture.cpp 2277
- V583ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€255Uãè¿ããŸãã renderer.cpp 3389
- V583ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€D3D12_RESOURCE_STATE_GENERIC_READãè¿ããŸãã dx12device.cpp 151
- V583ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€0.1fãè¿ããŸãã vehiclemovementstdboat.cpp 720
V570 ãruntimeData.entityIdãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã behaviortreenodes_ai.cpp 1771
void ExecuteEnterScript(RuntimeData& runtimeData) { ExecuteScript(m_enterScriptFunction, runtimeData.entityId); runtimeData.entityId = runtimeData.entityId; // <= runtimeData.executeExitScriptIfDestructed = true; }
å€æ°èªäœãžã®çãããå²ãåœãŠã éçºè ã¯ãã®å Žæããã§ãã¯ããŠãã ããã
æäœã®åªå é äœ
V502ãããããã?:ãæŒç®åã¯äºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããŸãã ãïŒïŒãæŒç®åã¯ãã+ãæŒç®åãããåªå 床ãäœããªããŸãã gpuparticlefeaturespawn.cpp 79
bool HasDuration() { return m_useDuration; } void CFeatureSpawnRate::SpawnParticles(....) { .... SSpawnData& spawn = pRuntime->GetSpawnData(i); const float amount = spawn.amount; const int spawnedBefore = int(spawn.spawned); const float endTime = spawn.delay + HasDuration() ? spawn.duration : fHUGE; .... }
ãã®æ©èœã§ã¯æéèšæž¬ãæ£ããè¡ãããŠããªãããã§ãã å ç®æŒç®åã®åªå é äœã¯ãäžé æŒç®åïŒïŒãããé«ããããå€0ãŸãã¯1ãæåã«spawn.delayã«è¿œå ãããå€spawn.durationãŸãã¯fHUGEãåžžã«endTime å€æ°ã«æžã蟌ãŸããŸã ã ããã¯ããªãããããééãã§ãã èšäºã C / C ++ã®è«çåŒã㧠ãPVS-Studioãšã©ãŒããŒã¿ããŒã¹ã§èŠã€ãã£ãæäœã®åªå 床ã«é¢ããèå³æ·±ããšã©ãŒãã¿ãŒã³ã«ã€ããŠèª¬æããŸããã å°é家ã¯ééã£ãŠããŸãã ã
V634 ã*ãæäœã®åªå é äœã¯ãã<<ãæäœã®åªå é äœãããé«ããªã£ãŠããŸãã åŒã§æ¬åŒ§ã䜿çšããå¿ èŠãããå ŽåããããŸãã model.cpp 336
enum joint_flags { angle0_locked = 1, .... }; bool CDefaultSkeleton::SetupPhysicalProxies(....) { .... for (int j = 0; .... ; j++) { // lock axes with 0 limits range m_arrModelJoints[i]....flags |= (....) * angle0_locked << j; } .... }
ãã1ã€ã®éåžžã«èå³æ·±ãééãã¯ãä¹ç®ãšãããåäœã®ã·ããæŒç®ã®åªå é äœã«é¢é£ããŠããŸãã åŸè ã¯å®è¡åªå é äœãäœããããåå埩ã§ã®åŒå šäœã«1ãä¹ç®ããïŒ angle0_lockedå®æ°ã¯1ã«çããïŒãéåžžã«å¥åŠã«èŠããŸãã
ã»ãšãã©ã®å Žåã圌ãã¯æ¬¡ã®ããã«æžããããšæã£ãŠããŸããã
m_arrModelJoints[i]....flags |= (....) * (angle0_locked << j);
åªå ã·ããæŒç®åãæã€35ã®çãããå Žæã®ãªã¹ãã¯ã CryEngine5_V634.txtãã¡ã€ã«ã§æäŸãããŸãã
æªå®çŸ©ã®åäœ
æªå®çŸ©ã®åäœã¯ãç¹å®ã®ç¶æ³ã§ã®äžéšã®ããã°ã©ãã³ã°èšèªã®ããããã£ã§ãããã¡ã¢ãªç¶æ ãããªã¬ãŒãããå²ã蟌ã¿ãªã©ã®ã©ã³ãã ãªèŠå ã«äŸåããçµæãçæããŸãã èšãæããã°ãä»æ§ã§ã¯ãå¯èœãªç¶æ³ã§ã®èšèªã®åäœã¯å®çŸ©ãããŠããŸããã ããã°ã©ã å ã®ãã®ãããªç¶æ³ãèªããããšã¯ééãã§ãããããã°ã©ã ãäžéšã®ã³ã³ãã€ã©ã§æ£åžžã«å®è¡ããããšããŠããã¯ãã¹ãã©ãããã©ãŒã ã§ã¯ãªããå¥ã®ãã·ã³ãå¥ã®OSãããã³ä»ã®ã³ã³ãã€ã©èšå®ã§ã倱æããå¯èœæ§ããããŸãã
V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã '-1'ã¯è² ã§ãã physicalplaceholder.h 25
#ifndef physicalplaceholder_h #define physicalplaceholder_h #pragma once .... const int NO_GRID_REG = -1<<14; const int GRID_REG_PENDING = NO_GRID_REG+1; ....
ææ°ã®C ++æšæºã«ããã°ãè² ã®æ°ã®å·Šã·ããã¯æªå®çŸ©ã®åäœã«ã€ãªãããŸãã ããã«ãCryEngine Vã³ãŒãã«ã¯ããã«ããã€ãã®å ŽæããããŸãã
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šãªãã©ã³ã 'ãïŒTFragSeqStorageïŒ0ïŒïŒ'ã¯è² ã§ãã udpdatagramsocket.cpp 757
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã '-1'ã¯è² ã§ãã tetrlattice.cpp 324
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã '-1'ã¯è² ã§ãã tetrlattice.cpp 350
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã '-1'ã¯è² ã§ãã tetrlattice.cpp 617
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã '-1'ã¯è² ã§ãã tetrlattice.cpp 622
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã 'ïŒãïŒ0xFïŒïŒ'ã¯è² ã§ãã d3ddeferredrender.cpp 876
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã 'ïŒãïŒ0xFïŒïŒ'ã¯è² ã§ãã d3ddeferredshading.cpp 791
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ã 'ïŒãïŒ1 << 0ïŒïŒ'ã¯è² ã§ãã d3dsprites.cpp 1038
V567æªå®çŸ©ã®åäœã 'm_current'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã operatorqueue.cpp 105
bool COperatorQueue::Prepare(....) { ++m_current &= 1; m_ops[m_current].clear(); return true; }
ã¢ãã©ã€ã¶ãŒã¯ãæªå®çŸ©ã®ããã°ã©ã åäœã«ã€ãªããåŒãæ€åºããŸããã å€æ°ã¯ãå€ãå€åããéãé£ç¶ãã2ã€ã®ãã€ã³ãéã§ç¹°ãè¿ã䜿çšãããŸãã ãã®çµæããã®åŒã®çµæãäºæž¬ããããšã¯äžå¯èœã§ãã
ããäžå¯©ãªå ŽæïŒ
- V567æªå®çŸ©ã®åäœã 'itail'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã trimesh.cpp 3101
- V567æªå®çŸ©ã®åäœã ãiheadãå€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã trimesh.cpp 3108
- V567æªå®çŸ©ã®åäœã 'ivtx'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã boolean3d.cpp 1194
- V567æªå®çŸ©ã®åäœã 'ivtx'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã boolean3d.cpp 1202
- V567æªå®çŸ©ã®åäœã 'ivtx'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã boolean3d.cpp 1220
- V567æªå®çŸ©ã®åäœã 'm_commandBufferIndex'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã xconsole.cpp 180
- V567æªå®çŸ©ã®åäœã 'm_FrameFenceCursor'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã ccrydx12devicecontext.cpp 952
- V567æªå®çŸ©ã®åäœã ãm_iNextAnimIndexãå€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã hitdeathreactionsdefs.cpp 192
æ¡ä»¶ã®ãã®ä»ã®ãšã©ãŒ
V579 memcmpé¢æ°ã¯ããã€ã³ã¿ãŒãšãã®ãµã€ãºãåŒæ°ãšããŠåãåããŸãã ééããããããŸããã 3çªç®ã®åŒæ°ã調ã¹ãŸãã graphicspipelinestateset.h 58
bool operator==(const SComputePipelineStateDescription& other) const { return 0 == memcmp(this, &other, sizeof(this)); // <= }
ãªããžã§ã¯ãã®ãµã€ãºã§ã¯ãªãããã€ã³ã¿ãŒã®ãµã€ãºãæž¡ãããšã«ãããçå€æŒç®åãmemcmpïŒïŒã®åŒã³åºããééããŸããã çŸåšããªããžã§ã¯ãã¯æåã®æ°ãã€ãã§æ¯èŒãããŸãã
ä¿®æ£ããããªãã·ã§ã³ïŒ
memcmp(this, &other, sizeof(*this));
æ®å¿µãªããããããžã§ã¯ãã«ã¯ããã«3ã€ã®å Žæãããã確èªãã䟡å€ããããŸãã
- V579 memcpyé¢æ°ã¯ããã€ã³ã¿ãŒãšãã®ãµã€ãºãåŒæ°ãšããŠåãåããŸãã ééããããããŸããã 3çªç®ã®åŒæ°ã調ã¹ãŸãã geomcacherendernode.cpp 286
- V579 AddObjecté¢æ°ã¯ããã€ã³ã¿ãŒãšãã®ãµã€ãºãåŒæ°ãšããŠåãåããŸãã ééããããããŸããã 2çªç®ã®åŒæ°ã調ã¹ãŸãã clipvolumemanager.cpp 145
- V579 memcmpé¢æ°ã¯ããã€ã³ã¿ãŒãšãã®ãµã€ãºãåŒæ°ãšããŠåãåããŸãã ééããããããŸããã 3çªç®ã®åŒæ°ã調ã¹ãŸãã graphicspipelinestateset.h 34
V640ã³ãŒãã®æäœããžãã¯ããã®ãã©ãŒãããã«å¯Ÿå¿ããŠããŸããã 2çªç®ã®ã¹ããŒãã¡ã³ãã¯åžžã«å®è¡ãããŸãã äžæ¬åŒ§ãæ¬ èœããŠããå¯èœæ§ããããŸãã livingentity.cpp 181
CLivingEntity::~CLivingEntity() { for(int i=0;i<m_nParts;i++) { if (!m_parts[i].pPhysGeom || ....) delete[] m_parts[i].pMatMapping; m_parts[i].pMatMapping=0; } .... }
ã²ãŒã ãšã³ãžã³ã®ã³ãŒãã§ã¯ãéçºè ã1è¡ã«è€æ°ã®ã¹ããŒãã¡ã³ããæžãå Žæãããããããããšã«æ°ä»ããŸããã å€ãã®å Žåããããã¯éåžžã®å²ãåœãŠã§ã¯ãªããã«ãŒããæ¡ä»¶ãé¢æ°åŒã³åºãããããŠæã«ã¯ããããã¹ãŠãæ··åãããŠããŸãïŒå³3ïŒã
å³3-äžååãªã³ãŒã圢åŒ
ãã®ãããªããã°ã©ãã³ã°ã¹ã¿ã€ã«ã§ã¯ã倧éã®ãšã©ãŒãåé¿ããããšã¯ã»ãŒäžå¯èœã§ãã ãã®ãããæ€èšäžã®ã±ãŒã¹ã§ã¯ãç¹å®ã®æ¡ä»¶äžã§ããªããžã§ã¯ãã®é åã®äžããã¡ã¢ãªã解æŸãããã€ã³ã¿ããªã»ããããããšãèšç»ãããŠããŸããã ããããäžé©åãªæžåŒèšå®ã®ããã m_parts [i] .pMatMappingãã€ã³ã¿ãŒã¯ã«ãŒãã®åå埩ã§ç¡å¹ã«ãªããŸãã ãããã©ããªè² ã®çµæããããããã¯äºæž¬ã§ããŸããããã³ãŒãã¯æããã«èŠæããŠããŸãã
çãããæžåŒèšå®ã®ããã€ãã®å ŽæïŒ
- V640ã³ãŒãã®æäœããžãã¯ããã®ãã©ãŒãããã«å¯Ÿå¿ããŠããŸããã 2çªç®ã®ã¹ããŒãã¡ã³ãã¯åžžã«å®è¡ãããŸãã äžæ¬åŒ§ãæ¬ èœããŠããå¯èœæ§ããããŸãã physicalworld.cpp 2449
- V640ã³ãŒãã®æäœããžãã¯ããã®ãã©ãŒãããã«å¯Ÿå¿ããŠããŸããã 2çªç®ã®ã¹ããŒãã¡ã³ãã¯åžžã«å®è¡ãããŸãã äžæ¬åŒ§ãæ¬ èœããŠããå¯èœæ§ããããŸãã articulatedentity.cpp 1723
- V640ã³ãŒãã®æäœããžãã¯ããã®ãã©ãŒãããã«å¯Ÿå¿ããŠããŸããã 2çªç®ã®ã¹ããŒãã¡ã³ãã¯åžžã«å®è¡ãããŸãã äžæ¬åŒ§ãæ¬ èœããŠããå¯èœæ§ããããŸãã articulatedentity.cpp 1726
V695ç¯å²ã®äº€å·®ã¯æ¡ä»¶åŒå ã§å¯èœã§ãã äŸïŒifïŒA <5ïŒ{...} else ifïŒA <2ïŒ{...}ã è¡ã確èªããŠãã ããïŒ538ã540ãstatobjrend.cpp 540
bool CStatObj::RenderDebugInfo(....) { .... ColorB clr(0, 0, 0, 0); if (nRenderMats == 1) clr = ColorB(0, 0, 255, 255); else if (nRenderMats == 2) clr = ColorB(0, 255, 255, 255); else if (nRenderMats == 3) clr = ColorB(0, 255, 0, 255); else if (nRenderMats == 4) clr = ColorB(255, 0, 255, 255); else if (nRenderMats == 5) clr = ColorB(255, 255, 0, 255); else if (nRenderMats >= 6) // <= clr = ColorB(255, 0, 0, 255); else if (nRenderMats >= 11) // <= clr = ColorB(255, 255, 255, 255); .... }
ãã®ã³ãŒãã§ã¯ãããã°ã©ãããã¹ãç¯ããããã ColorBã«ã©ãŒïŒ255ã255ã255ã255ïŒã¯éžæãããŸããã æåã«ã nRenderMatsã®å€ã¯1ãã5ãŸã§ã®æ°åãšé çªã«æ¯èŒãããŸãããéçºè ãå€ã®ç¯å²ã§ã®äœæ¥ã«åãæ¿ãããšãã11ãè¶ ããå€ããã§ã«6ãè¶ ããç¯å²ã«å ¥ãããšãèæ ®ããªãã£ããããæåŸã®æ¡ä»¶ãæºããããããšã¯ãããŸããã
ãã®äžé£ã®æ¡ä»¶ã¯ããã1ã€ã®å Žæã«å®å šã«ã³ããŒãããŸããã
- V695ç¯å²ã®äº€å·®ã¯æ¡ä»¶åŒå ã§å¯èœã§ãã äŸïŒifïŒA <5ïŒ{...} else ifïŒA <2ïŒ{...}ã è¡ã確èªããŠãã ããïŒ338ã340ãmodelmesh_debugpc.cpp 340
V695ç¯å²ã®äº€å·®ã¯æ¡ä»¶åŒå ã§å¯èœã§ãã äŸïŒifïŒA <5ïŒ{...} else ifïŒA <2ïŒ{...}ã è¡ã確èªããŠãã ããïŒ393ã399ãxmlcpb_nodelivewriter.cpp 399
enum eNodeConstants { .... CHILDBLOCKS_MAX_DIST_FOR_8BITS = BIT(7) - 1, // 127 CHILDBLOCKS_MAX_DIST_FOR_16BITS = BIT(6) - 1, // 63 .... }; void CNodeLiveWriter::Compact() { .... if (dist <= CHILDBLOCKS_MAX_DIST_FOR_8BITS) // dist <= 127 { uint8 byteDist = dist; writeBuffer.AddData(&byteDist, sizeof(byteDist)); isChildBlockSaved = true; } else if (dist <= CHILDBLOCKS_MAX_DIST_FOR_16BITS) // dist <= 63 { uint8 byteHigh = CHILDBLOCKS_USING_MORE_THAN_8BITS | ....); uint8 byteLow = dist & 255; writeBuffer.AddData(&byteHigh, sizeof(byteHigh)); writeBuffer.AddData(&byteLow, sizeof(byteLow)); isChildBlockSaved = true; } .... }
ãã®ã³ãŒããã©ã°ã¡ã³ãã®æ¡ä»¶ã§åæ§ã®ãšã©ãŒãçºçããŸããããã³ã³ãããŒã«ãããªã倧ããªã³ãŒããã©ã°ã¡ã³ããåãåããªãããã«ãªããŸããã å®æ°CHILDBLOCKS_MAX_DIST_FOR_8BITSããã³CHILDBLOCKS_MAX_DIST_FOR_16BITSã®å€ã«ã¯ã2çªç®ã®æ¡ä»¶ãçã«ãªããªããããªå€ããããŸãã
V547åŒ 'pszScript [iSrcBufPos]ïŒ=' == ''ã¯åžžã«trueã§ãã charåã®å€ã®ç¯å²ïŒ[-128ã127]ã luadbg.cpp 716
bool CLUADbg::LoadFile(const char* pszFile, bool bForceReload) { FILE* hFile = NULL; char* pszScript = NULL, * pszFormattedScript = NULL; .... while (pszScript[iSrcBufPos] != ' ' && .... pszScript[iSrcBufPos] != '=' && pszScript[iSrcBufPos] != '==' && // <= pszScript[iSrcBufPos] != '*' && pszScript[iSrcBufPos] != '+' && pszScript[iSrcBufPos] != '/' && pszScript[iSrcBufPos] != '~' && pszScript[iSrcBufPos] != '"') {} .... }
倧èŠæš¡ãªæ¡ä»¶åŒã«ã¯ãåžžã«çãšãªãéšååŒããããŸãã ãªãã©ã« '=='ã¯intåã§ããã15677ã«çãããªããŸããpszScripté åã¯charåã®èŠçŽ ã§æ§æãããŸãã charå€ã15677ã«çããããããšã¯ã§ããŸããããã®ããã pszScript [iSrcBufPos]ïŒ= '=='åŒã¯åžžã«trueã§ãã
V734éå°ãªè¡šçŸã ãµãã¹ããªã³ã°ã_ddnãããã³ã_ddnaãã調ã¹ãŸãã texture.cpp 4212
void CTexture::PrepareLowResSystemCopy(byte* pTexData, ....) { .... // make sure we skip non diffuse textures if (strstr(GetName(), "_ddn") // <= || strstr(GetName(), "_ddna") // <= || strstr(GetName(), "_mask") || strstr(GetName(), "_spec.") || strstr(GetName(), "_gloss") || strstr(GetName(), "_displ") || strstr(GetName(), "characters") || strstr(GetName(), "$") ) return; .... }
strstrïŒïŒé¢æ°ã¯ãæå®ãããéšåæååãå¥ã®æååã§æåã«çŸããå Žæãæ€çŽ¢ããéšåæååãæåã«çŸããå Žæãžã®ãã€ã³ã¿ãŸãã¯nullãã€ã³ã¿ãè¿ããŸãã ãµãã¹ããªã³ã°ã_ddnããæåã«æ€çŽ¢ããã次ã«ã_ddnaããæ€çŽ¢ãããŸããããã¯ãçããµãã¹ããªã³ã°ãèŠã€ãã£ãå Žåã«æ¡ä»¶ãæºããããããšãæå³ããŸãã ãããããããã°ã©ããŒãèšç»ãããšããã«ã³ãŒããæ©èœããªãå¯èœæ§ããããŸãã ããŠããŸãã¯å°ãªããšãåŒã¯åé·ã§ãããäœåãªãã§ãã¯ãåé€ããããšã§ç°¡ç¥åã§ããŸãã
V590ãã®è¡šçŸã調ã¹ãããšãæ€èšããŠãã ããã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã goalop_crysis2.cpp 3779
void COPCrysis2FlightFireWeapons::ParseParam(....) { .... else if (!paused && (m_State == eFP_PAUSED) && // <= (m_State != eFP_PAUSED_OVERRIDE)) // <= .... }
ParseParamïŒïŒé¢æ°ã®æ¡ä»¶åŒã¯ãçµæãéšååŒïŒ m_StateïŒ= EFP_PAUSED_OVERRIDE ïŒã«äŸåããªãããã«èšè¿°ãããŠããŸãã
ç°¡åãªäŸãèããŠã¿ãŸãããã
if ( err == code1 && err != code2) { .... }
æ¡ä»¶åŒå šäœã®çµæã¯éšååŒïŒerrïŒ= Code2ïŒã®çµæã«äŸåããŸãããããã¯ããã®äŸã®ççå€è¡šãäœæãããšãã«æ確ã«èŠãããŸãïŒå³4ïŒ
å³4-è«çåŒã®ççå€è¡š
笊å·ãªãã®æ°å€ãšãŒãã®æ¯èŒ
ãã¹ãããããããžã§ã¯ãã§ã¯ãå€ãã®å ŽåããŒããšç¬Šå·ãªãã®æ°å€ã®æ¯èŒãæ€åºããããã®çµæã¯åžžã«trueãŸãã¯falseã«ãªããŸãããã®ãããªã³ãŒãã«ã¯ãå¿ ãããé倧ãªãšã©ãŒãå«ãŸãããšã¯éããŸãããå€ãã®å Žåãããã¯é床ã®æ³šæã®çµæã§ããããå€æ°ã®åã笊å·ä»ããã笊å·ãªãã«å€æŽããåŸããã§ãã¯ãæ®ããŸãããããã«ããŠãããã®ãããªæ¯èŒã¯æ éã«ç¢ºèªããå¿ èŠããããŸãã
V547åŒ 'm_socket <0'ã¯åžžã«falseã§ãã笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸããservicenetwork.cpp 585
typedef SOCKET CRYSOCKET; // Internal socket data CRYSOCKET m_socket; bool CServiceNetworkConnection::TryReconnect() { .... // Create new socket if needed if (m_socket == 0) { m_socket = CrySock::socketinet(); if (m_socket < 0) { .... return false; } } .... }
ç°ãªããã©ãããã©ãŒã ã§çœ²åããã³çœ²å解é€ã§ããSOCKETã¿ã€ãã«ã€ããŠè©³ãã説æããŸãããããã£ãŠããã®ã¿ã€ãã䜿çšããã«ã¯ãæšæºããããŒãã¡ã€ã«ã§å®çŸ©ãããç¹å¥ãªãã¯ããšå®æ°ã䜿çšããããšã匷ããå§ãããŸãã
ã¯ãã¹ãã©ãããã©ãŒã ãããžã§ã¯ãã§ã¯ã0ãŸãã¯-1ã®å€ãšã®æ¯èŒãé »ç¹ã«æ€åºããããšã©ãŒã³ãŒãã®èª€ã£ã解éã«ã€ãªãããŸããCryEngine Vãããžã§ã¯ããäŸå€ã§ã¯ãããŸããããæ£ãããã§ãã¯ãååšããå ŽæããããŸããããšãã°ïŒ
if (m_socket == CRY_INVALID_SOCKET)
ããããå€ãã®å Žæã§ã³ãŒãã¯ç°ãªãæ€èšŒæ¹æ³ã䜿çšããŠããŸãã
眲åãããŠããªãå€æ°ããŒããšæ¯èŒããŠçããã47ç®æãCryEngine5_V547.txtãã¡ã€ã«ã«ç§»åãããŸãããéçºè ã¯æå®ãããå Žæã確èªããããšããå§ãããŸãã
å±éºãªãã€ã³ã¿ãŒ
蚺æã«ãŒã«V595ã¯ãã³ãŒãå ã§éåç §ãã€ã³ã¿ãŒãèŠã€ããŸãããã®æå¹æ§ã¯ã³ãŒãã®äžã§å®è¡ãããŸãããã€ã³ã¿ãŒã䜿çšããåŸãå®éã«ã¯ããã®èšºæã¯éåžžã«æ¥ãªãšã©ãŒãèŠã€ããŸãããã€ã³ã¿ãŒãéæ¥çã«ãã§ãã¯ããããšããäºå®ã«ãããå°æ°ã®èª€æ€ç¥ãçºçããŸãã1ã€ãŸãã¯è€æ°ã®ä»ã®å€æ°ã䜿çšããŸããããã®ãããªã³ãŒããç解ããã®ã¯éåžžã«é£ããããšã«åæããŸãããã®èšºæã®ããªã¬ãŒã®3ã€ã®äŸãæããŸããããã®ãããªã³ãŒããã©ã®ããã«æ©èœãããã¯ç¹ã«é©ãããšã§ãããæ®ãã¯CryEngine5_V595.txtãã¡ã€ã«ã«ãããŸãã
äŸ1
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_pPartManagerããã€ã³ã¿ãŒã䜿çšãããŸããããã§ãã¯è¡ïŒ1441ã1442ã3denginerender.cpp 1441
void C3DEngine::RenderInternal(....) { .... m_pPartManager->GetLightProfileCounts().ResetFrameTicks(); if (passInfo.IsGeneralPass() && m_pPartManager) m_pPartManager->Update(); .... }
m_pPartManagerãã€ã³ã¿ãŒã®éåç §ãšãã§ãã¯ã
äŸ2
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããgEnv-> p3DEngineããã€ã³ã¿ãŒã䜿çšãããŸãããè¡ã確èªããŠãã ããïŒ1477ã1480ãgameserialize.cpp 1477
bool CGameSerialize::LoadLevel(....) { .... // can quick-load if (!gEnv->p3DEngine->RestoreTerrainFromDisk()) return false; if (gEnv->p3DEngine) { gEnv->p3DEngine->ResetPostEffects(); } .... }
gEnv-> p3DEngine pointerã®éåç §ãšãã§ãã¯ã
äŸ3
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpSplineããã€ã³ã¿ãŒã䜿çšãããŸãããè¡ã確èªããŠãã ããïŒ158ã161ãfacechannelkeycleanup.cpp 158
void FaceChannel::CleanupKeys(....) { CFacialAnimChannelInterpolator backupSpline(*pSpline); // Create the key entries array. int numKeys = (pSpline ? pSpline->num_keys() : 0); .... }
pSplineãã€ã³ã¿ãŒã®éåç §ãšãã§ãã¯ã
ãã®ä»ã®èŠå
V622ãswitchãã¹ããŒãã¡ã³ãã®æ€æ»ãæ€èšããŠãã ãããæåã®ãã±ãŒã¹ãæŒç®åãæ¬ èœããŠããå¯èœæ§ããããŸããmergedmeshrendernode.cpp 999
static inline void ExtractSphereSet(....) { .... switch (statusPos.pGeom->GetType()) { if (false) { case GEOM_CAPSULE: statusPos.pGeom->GetPrimitive(0, &cylinder); } if (false) { case GEOM_CYLINDER: statusPos.pGeom->GetPrimitive(0, &cylinder); } for (int i = 0; i < 2 && ....; ++i) { .... } break; .... }
ãããããã³ãŒãã®ãã®äœåã¯ããããžã§ã¯ãCryEngine Vã«çºçãããã¹ãŠã®å¥åŠã§ããã©ãã«ãéžæããå Žåã¯ãæ¡ä»¶æã«äŸåããªãå Žåããã£ãŠããïŒåœã®ïŒå Žåã¯ã声æã®ã¹ã€ããã¯ããããè¡šçŸæºããå Žåãã©ãã«ã«ç¡æ¡ä»¶ãžã£ã³ããå®è¡ããŠããã¹ã€ããããbreakæŒç®åã䜿çšããã«ããã®ãããªã³ãŒãã䜿çšãããšãäžèŠãªæŒç®åã®å®è¡ãããã€ãã¹ãã§ããŸããããã¹ãŠã®éçºè ããã®ãããªæçœã§ãªãã³ãŒãã«ä»éã§ããããã§ã¯ãããŸããããããŠããªãã©ãã«ãžã®ç§»è¡GEOM_CAPSULEãšGEOM_CYLINDERã¯ãåãã³ãŒããå®è¡ããŸããïŒ
V510'LogError'é¢æ°ã¯ãã¯ã©ã¹ã¿ã€ãå€æ°ã2çªç®ã®å®åŒæ°ãšããŠåãåãããšã¯æ³å®ãããŠããŸããã behaviortreenodes_action.cpp 143
typedef CryStringT<char> string; // The actual fragment name. string m_fragName; //! cast to C string. const value_type* c_str() const { return m_str; } const value_type* data() const { return m_str; }; void LogError(const char* format, ...) const { .... } void QueueAction(const UpdateContext& context) { .... ErrorReporter(*this, context).LogError("....'%s'", m_fragName); .... }
é¢æ°ã®èª¬æã§ãã¹ãŠã®æå¹ãªãã©ã¡ãŒã¿ãŒã®æ°ãšã¿ã€ãã瀺ãããšãã§ããªãå Žåãä»®ãã©ã¡ãŒã¿ãŒã®ãªã¹ãã¯çç¥èšå·ïŒ...ïŒã§çµãããŸããããã¯ãããããŠããããããããã«ããã€ãã®åŒæ°ããæå³ããŸããPODïŒPlain Old DataïŒã¿ã€ãã®ã¿ãçç¥èšå·ã®å®éã®ãã©ã¡ãŒã¿ãŒãšããŠæ©èœã§ããŸããé¢æ°ã®çç¥èšå·ãã¯ã©ã¹ãªããžã§ã¯ãã«ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããå Žåãã»ãšãã©ã®å Žåãããã°ã©ã ã®ãšã©ãŒã瀺ããŸããæååãžã®ãã€ã³ã¿ã®ä»£ããã«ããªããžã§ã¯ãã®å 容ã¯ã¹ã¿ãã¯ã«èœã¡ãŸãããã®ãããªã³ãŒãã¯ããããã¡å ã®ãæå³äžæãã®åœ¢æããŸãã¯ããã°ã©ã ã®ç°åžžçµäºã«ã€ãªãããŸããCryEngine Vã³ãŒãã¯ç¬èªã®æååã¯ã©ã¹ã䜿çšãããã§ã«é©åãªc_strïŒïŒã¡ãœãããæã£ãŠããŸãã
ä¿®æ£ããããªãã·ã§ã³ïŒ
LogError("....'%s'", m_fragName.c_str();
ããã«ããã€ãã®çãããå ŽæïŒ
- V510 The 'LogError' function is not expected to receive class-type variable as second actual argument. behaviortreenodes_core.cpp 1339
- V510 The 'Format' function is not expected to receive class-type variable as second actual argument. behaviortreenodes_core.cpp 2648
- V510 The 'CryWarning' function is not expected to receive class-type variable as sixth actual argument. crypak.cpp 3324
- V510 The 'CryWarning' function is not expected to receive class-type variable as fifth actual argument. crypak.cpp 3333
- V510 The 'CryWarning' function is not expected to receive class-type variable as fifth actual argument. shaderfxparsebin.cpp 4864
- V510 The 'CryWarning' function is not expected to receive class-type variable as fifth actual argument. shaderfxparsebin.cpp 4931
- V510ããã©ãŒããããé¢æ°ã¯ãã¯ã©ã¹ã¿ã€ãå€æ°ã3çªç®ã®å®åŒæ°ãšããŠåãåãããšã¯æ³å®ãããŠããŸãããfeaturetester.cpp 1727
V529å¥æ°ã»ãã³ãã³ ';' ãforãæŒç®åã®åŸãboolean3d.cpp 1314
int CTriMesh::Slice(....) { .... bop_meshupdate *pmd = new bop_meshupdate, *pmd0; pmd->pMesh[0]=pmd->pMesh[1] = this; AddRef();AddRef(); for(pmd0=m_pMeshUpdate; pmd0->next; pmd0=pmd0->next); // <= pmd0->next = pmd; .... }
éåžžã«çãããã³ãŒããforã«ãŒãã®åŸã«ã»ãã³ãã³ãå ¥ããŸãããã³ãŒãããã©ãŒããããããšãã«ãŒãå ã«æ¬æãååšããããšãæå³ããŸãã
V535å€æ° 'j'ã¯ããã®ã«ãŒããšå€åŽã®ã«ãŒãã«äœ¿çšãããŠããŸããè¡ã確èªããŠãã ããïŒ3447ã3490ãphysicalworld.cpp 3490
void CPhysicalWorld::SimulateExplosion(....) { .... for(j=0;j<pmd->nIslands;j++) // <= line 3447 { .... for(j=0;j<pcontacts[ncont].nborderpt;j++) // <= line 3490 { .... }
ãããžã§ã¯ãã³ãŒãã«ã¯ãããšãã°ããã¹ãã«ãŒããšå€éšã«ãŒãã§1ã€ã®ã«ãŠã³ã¿ãŒã䜿çšãããªã©ãä»ã®å±éºãªã³ãŒãããã£ã±ãã§ãããœãŒã¹ã³ãŒãä»ãã®å€§ããªãã¡ã€ã«ã«ã¯ãããŸããŸãªå Žæã§è€éãªæžåŒèšå®ãšå€æ°ã®å€æŽãå«ãŸããŠããŸããããã§ã¯éçåæãè¡ãæ¹æ³ã¯ãããŸããã
ããã«ããã€ãã®çããããµã€ã¯ã«ïŒ
- V535å€æ° 'i'ã¯ããã®ã«ãŒããšå€åŽã®ã«ãŒãã«äœ¿çšãããŠããŸãããã§ãã¯è¡ïŒ1630ã1683ãentity.cpp 1683
- V535å€æ° 'i1'ã¯ããã®ã«ãŒããšå€åŽã®ã«ãŒãã«äœ¿çšãããŠããŸãããã§ãã¯è¡ïŒ1521ã1576ãsoftentity.cpp 1576
- V535å€æ° 'i'ã¯ããã®ã«ãŒããšå€åŽã®ã«ãŒãã«äœ¿çšãããŠããŸããè¡ã確èªïŒ2315ã2316ãphysicalentity.cpp 2316
- V535å€æ° 'i'ã¯ããã®ã«ãŒããšå€åŽã®ã«ãŒãã«äœ¿çšãããŠããŸããè¡ã確èªããŠãã ããïŒ1288ã1303ãshadercache.cpp 1303
V539é¢æ°ãeraseããžã®åŒæ°ãšããŠæž¡ãããã€ãã¬ãŒã¿ãŒã®æ€æ»ãæ€èšããŠãã ãããframeprofilerender.cpp 1090
float CFrameProfileSystem::RenderPeaks() { .... std::vector<SPeakRecord>& rPeaks = m_peaks; // Go through all peaks. for (int i = 0; i < (int)rPeaks.size(); i++) { .... if (age > fHotToColdTime) { rPeaks.erase(m_peaks.begin() + i); // <= i--; } .... }
ã¢ãã©ã€ã¶ãŒã¯ãå¥ã®ã³ã³ãããŒã®ã€ãã¬ãŒã¿ãŒããã³ã³ãããŒã§ã¢ã¯ã·ã§ã³ãå®è¡ããé¢æ°ã«æž¡ãããããšãèšç®ããŸããããã®ã³ãŒãã§ã¯ãããã§ã¯ãªãããšã©ãŒã¯ãããŸãããrPeakså€æ°ã¯m_peaksãžã®åç §ã§ãããã ãããã®ãããªã³ãŒãã¯ãã³ãŒãã¢ãã©ã€ã¶ãŒã ãã§ãªããã³ãŒãã«åè¡ãã人ã«ãšã£ãŠã誀解ãæãå¯èœæ§ããããŸãããã®ããã«æžããªãã§ãã ããã
V713ãã€ã³ã¿ãŒpCollisionã¯ãåãè«çåŒã®nullptrã«å¯ŸããŠæ€èšŒãããåã«ãè«çåŒã§äœ¿çšãããŸãããactiongame.cpp 4235
int CActionGame::OnCollisionImmediate(const EventPhys* pEvent) { .... else if (pMat->GetBreakability() == 2 && pCollision->idmat[0] != pCollision->idmat[1] && (energy = pMat->GetBreakEnergy()) > 0 && pCollision->mass[0] * 2 > energy && .... pMat->GetHitpoints() <= FtoI(min(1E6f, hitenergy / energy)) && pCollision) // <= return 0; .... }
ãªãã¬ãŒã¿ãããã°ãåžžã«ãã€ã³ã¿ã®ã¢ã¯ã»ã¹ã¯éåžžã«æ¡ä»¶åŒãå«ãŸããŠãpCollisionãããšã©ãŒã¯ããŒãã«ããpCollisionãã€ã³ã¿ãŒã®ææ°ã®å€ã®ãã§ãã¯ã§ããè€æ°ã®éæ¥åç §ã®åŸã
V758é¢æ°ã«ãã£ãŠè¿ãããã¹ããŒããã€ã³ã¿ãŒãç Žæ£ããããšããcommandListãåç §ãç¡å¹ã«ãªããŸããrenderitemdrawer.cpp 274
typedef std::shared_ptr<....> CDeviceGraphicsCommandListPtr; CDeviceGraphicsCommandListPtr CDeviceObjectFactory::GetCoreGraphicsCommandList() const { return m_pCoreCommandList; } void CRenderItemDrawer::DrawCompiledRenderItems(....) const { .... { auto& RESTRICT_REFERENCE commandList = *CCryDeviceWrapper:: GetObjectFactory().GetCoreGraphicsCommandList(); passContext....->PrepareRenderPassForUse(commandList); } .... }
ã¹ããŒããã€ã³ã¿ãŒãä¿æããå€ãžã®åç §ã¯ãcommandListå€æ°ã«æ ŒçŽãããŸãããªããžã§ã¯ããã¹ããŒããã€ã³ã¿ãŒã«ãã£ãŠç Žæ£ããããšããªã³ã¯ã¯ç¡å¹ã«ãªããŸãã
ããã«ããã€ãã®ãã®ãããªå ŽæïŒ
- V758 The 'commandList' reference becomes invalid when smart pointer returned by a function is destroyed. renderitemdrawer.cpp 384
- V758 The 'commandList' reference becomes invalid when smart pointer returned by a function is destroyed. renderitemdrawer.cpp 368
- V758 The 'commandList' reference becomes invalid when smart pointer returned by a function is destroyed. renderitemdrawer.cpp 485
- V758 The 'commandList' reference becomes invalid when smart pointer returned by a function is destroyed. renderitemdrawer.cpp 553
ãããã«
ãã¹ã¿ãŒã®äœæ¥æ®µéã«ãããšã©ãŒãšã¯ç°ãªããã³ãŒãäœæäžã®ãšã©ãŒã®ä¿®æ£ã«ã¯ã»ãšãã©è²»çšãããããŸããããŸãããªãªãŒã¹ããã補åã®ãšã©ãŒã«ã¯ãã§ã«è«å€§ãªè²»çšãããããŸãã䜿çšããã¢ãã©ã€ã¶ãŒã«é¢ä¿ãªããéçã³ãŒãåæã®æ¹æ³è«ã¯ãã³ãŒãããã³ãœãããŠã§ã¢è£œåå šäœã®å質ãå¶åŸ¡ããéåžžã«å¹æçãªæ¹æ³ã§ããããšãé·ãé蚌æãããŠããŸãã
Epic Gamesãšã®ã³ã©ãã¬ãŒã·ã§ã³ã¯ãUnreal Engine 4ã«éçã¢ãã©ã€ã¶ãŒãå®è£ ããå©ç¹ãå®èšŒããŠããŸããéçºè ãã¢ãã©ã€ã¶ãŒçµ±åã®ããããåé¡ãæ¯æŽããçºèŠãããšã©ãŒãä¿®æ£ããŠãæ°ãããããžã§ã¯ãã³ãŒããå®æçã«ãã§ãã¯ã§ããããã«ããŸããã Crytekãšåæ§ã®ååã®æºåãã§ããŠããŸããPVS-Studio
ããè©Šããã ããC / C ++ / CïŒãããžã§ã¯ãã
CryEngineVéçºè ã¯ãããžã§ã¯ãã¬ãã¥ãŒã®åã«éç¥ããããããäžéšã®ãšã©ãŒã¯ãã§ã«ä¿®æ£ãããŠããå¯èœæ§ããããŸãã
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav RazmyslovãCryEngineã®ãã§ãã¯ã€ã³ãã³ã°VãåŸ ã£ãŠããŸããã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã