SpeedTreeLib: port 40250 wrapper/forest verbatim over a CSpeedTreeRT stand-in
Delete the platform proxy tree renderer and copy SpeedTreeWrapper, SpeedTreeForest, SpeedTreeForestDirectX8, SpeedTreeConfig.h and VertexShaders.h from 40250. The SDK SpeedTreeRT.h public API becomes the shim; the closed CSpeedTreeRT is reimplemented in platform/SpeedTreeLib/SpeedTreeRT.cpp (procedural geometry, static lighting, single LOD, DIVERGENT). Shims gain the D3D8 vertex shader declaration tokens, D3D_OK, CreateVertexShader/DeleteVertexShader, ID3DXBuffer/D3DXAssembleShader, MessageBox and __min/__max. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
86e602cb32
commit
d817bd7cab
@@ -561,3 +561,4 @@
|
||||
{"date": "2026-09-28T03:59:30+00:00", "unit": "EterLib/GrpLightManager.cpp", "action": "unit B: platform stub removed, 40250 GrpLightManager.cpp copied verbatim into port/ (port_copy.py); CPythonApplication::Create now calls m_LightManager.Initialize() (40250 :1263) so light IDs start at skip index 1; 40250 never calls FlushLight/RestoreLight, so no device-light change", "evidence": "ctest 35/35 (login_live excluded); fake-server frame 900 vs baseline mean abs diff 0.21/255"}
|
||||
{"date": "2026-09-28T04:02:30+00:00", "unit": "EterLib/LensFlare.cpp + ScreenFilter.cpp + Decal.cpp", "action": "unit C (part 1): platform stubs removed, 40250 sources copied verbatim (GL code is commented out in 40250 too); CMapOutdoor callers were already ported, so lens flare, screen filter and CDecal clipping (TerrainDecal) now run", "evidence": "ctest 35/35 (login_live excluded); fake-server frame 900 vs unit B mean abs diff 0.014/255; flare/filter visuals NEEDS_LIVE"}
|
||||
{"date": "2026-09-28T04:05:55+00:00", "unit": "EterLib/GrpShadowTexture.cpp + character shadow render target (RecordingDevice)", "action": "unit C part 2 / unit D: GrpShadowTexture stub replaced with verbatim 40250 copy (dead in 40250); CPU shadow-target rasterizer kept (flat TFACTOR pass, output-equivalent) and switched to the D3D top-left fill rule; Vulkan offscreen targets not needed since snow blur is hard-disabled in 40250", "evidence": "ctest 35/35 (login_live excluded); fake-server frame 900 vs previous mean abs diff 0.013/255 (frame noise); shadow parity NEEDS_LIVE"}
|
||||
{"date": "2026-09-28T04:31:20+00:00", "unit": "SpeedTreeLib/SpeedTreeWrapper.cpp + SpeedTreeForest.cpp + SpeedTreeForestDirectX8.cpp (+ CSpeedTreeRT stand-in)", "action": "unit E: platform proxy tree renderer deleted; 40250 wrapper/forest/DirectX8 copied verbatim (with SpeedTreeConfig.h, VertexShaders.h); SDK SpeedTreeRT.h public API as shim, closed CSpeedTreeRT reimplemented in platform/SpeedTreeLib/SpeedTreeRT.cpp (procedural geometry kept, DIVERGENT); D3D8 vertex-shader decl tokens, D3D_OK, CreateVertexShader/DeleteVertexShader, ID3DXBuffer/D3DXAssembleShader, MessageBox, __min/__max added to shims", "evidence": "ctest 35/35 (login_live excluded); fake-server frame 900 at spawn vs unit D mean abs diff ~3.2/255 (area-name fade + anim phase, no trees in view); spawn moved next to a tree (temporary) shows trunk/branches/leaf cards drawn by the wrapper; tree visuals NEEDS_LIVE"}
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"reference": "SpeedTreeLib/SpeedTreeForest.cpp",
|
||||
"reference_sha256": "655f3a39fac7fd4e0c5a151a5c2ab21d94bee5035acf9045af23b78bf609d2aa",
|
||||
"priority": "P4",
|
||||
"contracts": [],
|
||||
"functions": {
|
||||
"CSpeedTreeForest::CSpeedTreeForest": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::CSpeedTreeForest"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::~CSpeedTreeForest": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::~CSpeedTreeForest"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::Clear": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::Clear"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::GetMainTree": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::GetMainTree"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::CreateInstance": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::CreateInstance"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::DeleteInstance": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::DeleteInstance"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::UpdateSystem": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::UpdateSystem"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::AdjustExtents": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::AdjustExtents"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::SetWindStrength": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::SetWindStrength"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::SetupWindMatrices": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::SetupWindMatrices"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::SetLight": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::SetLight"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForest::SetFog": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForest.cpp:CSpeedTreeForest::SetFog"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"reference": "SpeedTreeLib/SpeedTreeForestDirectX8.cpp",
|
||||
"reference_sha256": "7dd29079a158ed8af665e45ee1ed7b319732c5d33b5c8a8edcc458b5337c005a",
|
||||
"priority": "P4",
|
||||
"contracts": [],
|
||||
"functions": {
|
||||
"CSpeedTreeForestDirectX8::CSpeedTreeForestDirectX8": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForestDirectX8.cpp:CSpeedTreeForestDirectX8::CSpeedTreeForestDirectX8"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForestDirectX8::~CSpeedTreeForestDirectX8": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForestDirectX8.cpp:CSpeedTreeForestDirectX8::~CSpeedTreeForestDirectX8"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForestDirectX8::InitVertexShaders": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForestDirectX8.cpp:CSpeedTreeForestDirectX8::InitVertexShaders"
|
||||
],
|
||||
"note": "verbatim; WRAPPER_USE_NO_WIND / no GPU placement in SpeedTreeConfig.h, so the shader path returns the FVF as in 40250"
|
||||
},
|
||||
"CSpeedTreeForestDirectX8::SetRenderingDevice": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForestDirectX8.cpp:CSpeedTreeForestDirectX8::SetRenderingDevice"
|
||||
],
|
||||
"note": "verbatim; light 0 attributes reach the CSpeedTreeRT stand-in's static lighting; tone NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeForestDirectX8::UploadWindMatrix": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForestDirectX8.cpp:CSpeedTreeForestDirectX8::UploadWindMatrix"
|
||||
],
|
||||
"note": "verbatim; WRAPPER_USE_NO_WIND / no GPU placement in SpeedTreeConfig.h, so the shader path returns the FVF as in 40250"
|
||||
},
|
||||
"CSpeedTreeForestDirectX8::UpdateCompundMatrix": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForestDirectX8.cpp:CSpeedTreeForestDirectX8::UpdateCompundMatrix"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeForestDirectX8::Render": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeForestDirectX8.cpp:CSpeedTreeForestDirectX8::Render"
|
||||
],
|
||||
"note": "verbatim; render states as 40250 (branch CULL_CW, leaf/billboard passes); visual NEEDS_LIVE"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
{
|
||||
"reference": "SpeedTreeLib/SpeedTreeWrapper.cpp",
|
||||
"reference_sha256": "938924f5303879f1b322ad48f11c974319471fcdcca616fcb958d8cf43469fa5",
|
||||
"priority": "P4",
|
||||
"contracts": [],
|
||||
"functions": {
|
||||
"CSpeedTreeWrapper::CSpeedTreeWrapper": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::CSpeedTreeWrapper"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::SetVertexShaders": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetVertexShaders"
|
||||
],
|
||||
"note": "verbatim; WRAPPER_USE_NO_WIND / no GPU placement in SpeedTreeConfig.h, so the shader path returns the FVF as in 40250"
|
||||
},
|
||||
"CSpeedTreeWrapper::OnRenderPCBlocker": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::OnRenderPCBlocker"
|
||||
],
|
||||
"note": "verbatim; PC-blocker alpha visual NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeWrapper::OnRender": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::OnRender"
|
||||
],
|
||||
"note": "verbatim; visual NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeWrapper::~CSpeedTreeWrapper": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::~CSpeedTreeWrapper"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::LoadTree": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::LoadTree"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::SetupBuffers": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetupBuffers"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::SetupBranchBuffers": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetupBranchBuffers"
|
||||
],
|
||||
"note": "verbatim. DIVERGENT input: CSpeedTreeRT is the closed IDV lib; platform/SpeedTreeLib/SpeedTreeRT.cpp stands in for it and yields procedural branch strips (height 1000, species from file name), not the .spt-computed geometry; visual NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeWrapper::SetupFrondBuffers": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetupFrondBuffers"
|
||||
],
|
||||
"note": "verbatim; the CSpeedTreeRT stand-in reports no fronds (0 vertices), so palms/ferns lose their fronds -- DIVERGENT until the .spt engine is reproduced; NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeWrapper::SetupLeafBuffers": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetupLeafBuffers"
|
||||
],
|
||||
"note": "verbatim. DIVERGENT input: the stand-in's leaf clusters and composite-atlas rects are hand-picked (not the .spt leaf-map texcoords); NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeWrapper::Advance": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::Advance"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::MakeInstance": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::MakeInstance"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::GetInstances": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::GetInstances"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::DeleteInstance": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::DeleteInstance"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::SetupBranchForTreeType": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetupBranchForTreeType"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::RenderBranches": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::RenderBranches"
|
||||
],
|
||||
"note": "verbatim; static-lit colours (LIGHT_STATIC, LIGHTING FALSE), stage-1 self-shadow modulate, ALPHAREF 84; visual NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeWrapper::SetupFrondForTreeType": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetupFrondForTreeType"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::RenderFronds": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::RenderFronds"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::SetupLeafForTreeType": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetupLeafForTreeType"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::UploadLeafTables": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::UploadLeafTables"
|
||||
],
|
||||
"note": "verbatim; WRAPPER_USE_NO_WIND / no GPU placement in SpeedTreeConfig.h, so the shader path returns the FVF as in 40250"
|
||||
},
|
||||
"CSpeedTreeWrapper::RenderLeaves": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::RenderLeaves"
|
||||
],
|
||||
"note": "verbatim; camera-facing leaf cards come from the stand-in's m_pLeafMapCoords (rebuilt from SetCamera); visual NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeWrapper::EndLeafForTreeType": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::EndLeafForTreeType"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::RenderBillboards": {
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::RenderBillboards"
|
||||
],
|
||||
"note": "verbatim; the stand-in keeps billboards inactive (single LOD), so far trees never drop to billboards -- NEEDS_LIVE"
|
||||
},
|
||||
"CSpeedTreeWrapper::CleanUpMemory": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::CleanUpMemory"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::PositionTree": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::PositionTree"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::LoadTexture": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::LoadTexture"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::SetShaderConstants": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetShaderConstants"
|
||||
],
|
||||
"note": "verbatim; WRAPPER_USE_NO_WIND / no GPU placement in SpeedTreeConfig.h, so the shader path returns the FVF as in 40250"
|
||||
},
|
||||
"CSpeedTreeWrapper::SetPosition": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::SetPosition"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::GetBoundingSphere": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::GetBoundingSphere"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::CalculateBBox": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::CalculateBBox"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::GetCollisionObjectCount": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::GetCollisionObjectCount"
|
||||
],
|
||||
"note": "verbatim; the stand-in returns one trunk CO_CYLINDER (radius 35, height 750), not the .spt collision objects"
|
||||
},
|
||||
"CSpeedTreeWrapper::GetCollisionObject": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::GetCollisionObject"
|
||||
],
|
||||
"note": "verbatim; the stand-in returns one trunk CO_CYLINDER (radius 35, height 750), not the .spt collision objects"
|
||||
},
|
||||
"CSpeedTreeWrapper::GetPosition": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::GetPosition"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::GetTreeSize": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::GetTreeSize"
|
||||
]
|
||||
},
|
||||
"CSpeedTreeWrapper::OnUpdateCollisionData": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/SpeedTreeLib/SpeedTreeWrapper.cpp:CSpeedTreeWrapper::OnUpdateCollisionData"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user