Closed kaetemi closed 3 years ago
Only occurs in release mode, not in debug mode...
/shape ge_mission_eolienne_tr.shape
This occurs only when there is more than one instance of this shape in the scene.
The skeletons between these windmills are shared for some reason, but it's animating them based on a random windmill's initial timing.
Based on distance sort.
The skeletons should not be shared, though.
Non-animated windmills are getting animated too, which indicates an incorrectly shared vertex buffer.
Only occurs on D3D driver.
Vertex buffers are re-used.
nel_drv_direct3d_win_d.dll!NL3D::CDriverD3D::activeVertexBuffer(NL3D::CVertexBuffer & VB) Line 304 C++
ryzom_client_dev_d.exe!NL3D::CMeshGeom::render(NL3D::IDriver * drv, NL3D::CTransformShape * trans, float polygonCount, unsigned int rdrFlags, float globalAlpha) Line 636 C++
> ryzom_client_dev_d.exe!NL3D::CMesh::render(NL3D::IDriver * drv, NL3D::CTransformShape * trans, bool passOpaque) Line 2603 C++
ryzom_client_dev_d.exe!NL3D::CTransformShape::traverseRender() Line 233 C++
ryzom_client_dev_d.exe!NL3D::CRenderTrav::traverse(NL3D::UScene::TRenderPart renderPart, bool newRender, bool generateShadows) Line 252 C++
ryzom_client_dev_d.exe!NL3D::CScene::renderPart(NL3D::UScene::TRenderPart rp, bool doHrcPass, bool doTrav, bool keepTrav) Line 661 C++
ryzom_client_dev_d.exe!NL3D::CSceneUser::renderPart(NL3D::UScene::TRenderPart rp, bool doHrcPass, bool doTrav, bool keepTrav) Line 536 C++
ryzom_client_dev_d.exe!renderMainScenePart(NL3D::UScene::TRenderPart renderPart, bool wantTraversals, bool keepTraversals) Line 484 C++
ryzom_client_dev_d.exe!drawRenderScene(bool wantTraversals, bool keepTraversals) Line 762 C++
ryzom_client_dev_d.exe!doRenderScene(bool wantTraversals, bool keepTraversals) Line 787 C++
ryzom_client_dev_d.exe!mainLoop() Line 1746 C++
ryzom_client_dev_d.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * __formal, char * cmdline, int __formal) Line 409 C++
<title>Document</title>
<!--StartFragment-->
| Name | Value | Type
-- | -- | -- | --
◢ | VB | {DrvInfos={pinfo=0x000001a2a92d1e80 {Ptr=0x000001a2b0592e98 {crefs=0x00000000 pinfo=0x000001a2a92d1e80 {...} } ...} ...} ...} | NL3D::CVertexBuffer &
| ◢ NLMISC::CRefCount | {crefs=0x00000000 pinfo=0x000001a2abb52750 {Ptr=0x000001a2a8e8c3b8 {crefs=0x00000000 pinfo=0x000001a2abb52750 {...} } ...} } | NLMISC::CRefCount
| crefs | 0x00000000 | int
| ◢ pinfo | 0x000001a2abb52750 {Ptr=0x000001a2a8e8c3b8 {crefs=0x00000000 pinfo=0x000001a2abb52750 {Ptr=0x000001a2a8e8c3b8 {...} ...} } ...} | NLMISC::CRefCount::CPtrInfoBase *
| ▶ Ptr | 0x000001a2a8e8c3b8 {crefs=0x00000000 pinfo=0x000001a2abb52750 {Ptr=0x000001a2a8e8c3b8 {crefs=0x00000000 ...} ...} } | const NLMISC::CRefCount *
| RefCount | 0x00000002 | int
| IsNullPtrInfo | false | bool
| ▶ DrvInfos | {pinfo=0x000001a2a92d1e80 {Ptr=0x000001a2b0592e98 {crefs=0x00000000 pinfo=0x000001a2a92d1e80 {Ptr=0x000001a2b0592e98 {...} ...} } ...} ...} | NLMISC::CRefPtr<NL3D::IVBDrvInfos>
| ▶ _Type | 0x000001a2a8e8c3d8 "\a\a\x4\x4\x4\x4\x4\x4\x4\x4\f\f\n\f\x1\x1... | unsigned char[0x00000010]
| _VertexColorFormat | 0x01 '\x1' | unsigned char
| _VertexSize | 0x0034 | unsigned short
| _Flags | 0x3007 | unsigned short
| _InternalFlags | 0x0000 | unsigned short
| _NbVerts | 0x000001d5 | unsigned int
| _Capacity | 0x000001d5 | unsigned int
| ▶ _NonResidentVertices | { size=0x0000000000000000 } | std::vector<unsigned char,std::allocator<unsigned char>>
| ▶ _LockedBuffer | 0x0000000000000000 <NULL> | unsigned char *
| ▶ _Offset | 0x000001a2a8e8c420 {0x0000, 0x000c, 0x0018, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, ...} | unsigned short[0x00000010]
| ▶ _UVRouting | 0x000001a2a8e8c440 "" | unsigned char[0x00000008]
| _LockCounter | 0x00000000 | unsigned int
| _PreferredMemory | RAMPreferred (0x00000000) | NL3D::CVertexBuffer::TPreferredMemory
| _Location | RAMResident (0x00000000) | NL3D::CVertexBuffer::TLocation
| _ResidentSize | 0x00005f44 | unsigned int
| ▶ _Name | "" | std::string
| _KeepLocalMemory | false | bool
<!--EndFragment-->
> ryzom_client_dev_d.exe!NL3D::CMeshGeom::applySkin(NL3D::CSkeletonModel * skeleton) Line 1824 C++
ryzom_client_dev_d.exe!NL3D::CMeshGeom::renderSkin(NL3D::CTransformShape * trans, float alphaMRM) Line 776 C++
ryzom_client_dev_d.exe!NL3D::CMeshInstance::renderSkin(float alphaMRM) Line 148 C++
ryzom_client_dev_d.exe!NL3D::CSkeletonModel::renderSkinList(NLMISC::CObjectVector<NL3D::CTransform *,0> & skinList, float alphaMRM) Line 1544 C++
ryzom_client_dev_d.exe!NL3D::CSkeletonModel::renderSkins() Line 1489 C++
ryzom_client_dev_d.exe!NL3D::CSkeletonModel::traverseRender() Line 1090 C++
ryzom_client_dev_d.exe!NL3D::CRenderTrav::traverse(NL3D::UScene::TRenderPart renderPart, bool newRender, bool generateShadows) Line 252 C++
ryzom_client_dev_d.exe!NL3D::CScene::renderPart(NL3D::UScene::TRenderPart rp, bool doHrcPass, bool doTrav, bool keepTrav) Line 661 C++
ryzom_client_dev_d.exe!NL3D::CSceneUser::renderPart(NL3D::UScene::TRenderPart rp, bool doHrcPass, bool doTrav, bool keepTrav) Line 536 C++
ryzom_client_dev_d.exe!renderMainScenePart(NL3D::UScene::TRenderPart renderPart, bool wantTraversals, bool keepTraversals) Line 484 C++
ryzom_client_dev_d.exe!drawRenderScene(bool wantTraversals, bool keepTraversals) Line 762 C++
ryzom_client_dev_d.exe!doRenderScene(bool wantTraversals, bool keepTraversals) Line 787 C++
ryzom_client_dev_d.exe!mainLoop() Line 1746 C++
ryzom_client_dev_d.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * __formal, char * cmdline, int __formal) Line 409 C++
> nel_drv_direct3d_win_d.dll!NL3D::CDriverD3D::activeVertexBuffer(NL3D::CVertexBuffer & VB) Line 304 C++
ryzom_client_dev_d.exe!NL3D::CMeshGeom::renderSkin(NL3D::CTransformShape * trans, float alphaMRM) Line 793 C++
ryzom_client_dev_d.exe!NL3D::CMeshInstance::renderSkin(float alphaMRM) Line 148 C++
ryzom_client_dev_d.exe!NL3D::CSkeletonModel::renderSkinList(NLMISC::CObjectVector<NL3D::CTransform *,0> & skinList, float alphaMRM) Line 1544 C++
ryzom_client_dev_d.exe!NL3D::CSkeletonModel::renderSkins() Line 1489 C++
ryzom_client_dev_d.exe!NL3D::CSkeletonModel::traverseRender() Line 1090 C++
ryzom_client_dev_d.exe!NL3D::CRenderTrav::traverse(NL3D::UScene::TRenderPart renderPart, bool newRender, bool generateShadows) Line 252 C++
ryzom_client_dev_d.exe!NL3D::CScene::renderPart(NL3D::UScene::TRenderPart rp, bool doHrcPass, bool doTrav, bool keepTrav) Line 661 C++
ryzom_client_dev_d.exe!NL3D::CSceneUser::renderPart(NL3D::UScene::TRenderPart rp, bool doHrcPass, bool doTrav, bool keepTrav) Line 536 C++
ryzom_client_dev_d.exe!renderMainScenePart(NL3D::UScene::TRenderPart renderPart, bool wantTraversals, bool keepTraversals) Line 484 C++
ryzom_client_dev_d.exe!drawRenderScene(bool wantTraversals, bool keepTraversals) Line 762 C++
ryzom_client_dev_d.exe!doRenderScene(bool wantTraversals, bool keepTraversals) Line 787 C++
ryzom_client_dev_d.exe!mainLoop() Line 1746 C++
ryzom_client_dev_d.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * __formal, char * cmdline, int __formal) Line 409 C++
<title>Document</title>
<!--StartFragment-->
| Name | Value | Type
-- | -- | -- | --
◢ | VB | {DrvInfos={pinfo=0x000001a2a92d1e80 {Ptr=0x000001a2b0592e98 {crefs=0x00000000 pinfo=0x000001a2a92d1e80 {...} } ...} ...} ...} | NL3D::CVertexBuffer &
| ◢ NLMISC::CRefCount | {crefs=0x00000000 pinfo=0x000001a2abb52750 {Ptr=0x000001a2a8e8c3b8 {crefs=0x00000000 pinfo=0x000001a2abb52750 {...} } ...} } | NLMISC::CRefCount
| crefs | 0x00000000 | int
| ◢ pinfo | 0x000001a2abb52750 {Ptr=0x000001a2a8e8c3b8 {crefs=0x00000000 pinfo=0x000001a2abb52750 {Ptr=0x000001a2a8e8c3b8 {...} ...} } ...} | NLMISC::CRefCount::CPtrInfoBase *
| ▶ Ptr | 0x000001a2a8e8c3b8 {crefs=0x00000000 pinfo=0x000001a2abb52750 {Ptr=0x000001a2a8e8c3b8 {crefs=0x00000000 ...} ...} } | const NLMISC::CRefCount *
| RefCount | 0x00000002 | int
| IsNullPtrInfo | false | bool
| ▶ DrvInfos | {pinfo=0x000001a2a92d1e80 {Ptr=0x000001a2b0592e98 {crefs=0x00000000 pinfo=0x000001a2a92d1e80 {Ptr=0x000001a2b0592e98 {...} ...} } ...} ...} | NLMISC::CRefPtr<NL3D::IVBDrvInfos>
| ▶ _Type | 0x000001a2a8e8c3d8 "\a\a\x4\x4\x4\x4\x4\x4\x4\x4\f\f\n\f\x1\x1... | unsigned char[0x00000010]
| _VertexColorFormat | 0x01 '\x1' | unsigned char
| _VertexSize | 0x0034 | unsigned short
| _Flags | 0x3007 | unsigned short
| _InternalFlags | 0x0000 | unsigned short
| _NbVerts | 0x000001d5 | unsigned int
| _Capacity | 0x000001d5 | unsigned int
| ▶ _NonResidentVertices | { size=0x0000000000000000 } | std::vector<unsigned char,std::allocator<unsigned char>>
| ▶ _LockedBuffer | 0x0000000000000000 <NULL> | unsigned char *
| ▶ _Offset | 0x000001a2a8e8c420 {0x0000, 0x000c, 0x0018, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, ...} | unsigned short[0x00000010]
| ▶ _UVRouting | 0x000001a2a8e8c440 "" | unsigned char[0x00000008]
| _LockCounter | 0x00000000 | unsigned int
| _PreferredMemory | RAMPreferred (0x00000000) | NL3D::CVertexBuffer::TPreferredMemory
| _Location | RAMResident (0x00000000) | NL3D::CVertexBuffer::TLocation
| _ResidentSize | 0x00005f44 | unsigned int
| ▶ _Name | "" | std::string
| _KeepLocalMemory | false | bool
<!--EndFragment-->
Skinned meshes should never use instancing when doing software vertex animation.
Guard VertexBuffer against being locked for writing after it's already been used in the frame.
renderSkinList uses CVertexStreamManager &meshSkinManager= *rdrTrav.getMeshSkinManager();
vertexstream flags 7, size 32 mesh flags _Flags = 0x3007, size 52
PaletteSkin and Weight flags
Skinned meshes now use streamed vertex buffers, in the same way as skinned MRM meshes.
Maybe gimbal locked. Look for max files named
eolienne