render parity unit G: 40250 tiling selection + verbatim STP terrain
- PythonApplication::Create mirrors 40250 :1196-1251 (SOFTWARE_TILING cfg, auto tiling IsFastTNL ? HTP : STP, MinLOD on !IsFastTNL) - RecordingDevice caps: VertexShaderVersion 1.1 + CLIPTLVERTS (fast T&L -> HTP) - MapOutdoorRenderSTP.cpp replaced by the full 40250 source (native gate only) - native_render XYZRHW: fix inverted screen->NDC Y, negative rhw clip, no texture transform on TL vertices, specular-alpha vertex fog (capture v9) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
91ce13c3cf
commit
863f3771af
@@ -563,3 +563,4 @@
|
||||
{"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"}
|
||||
{"date": "2026-09-28T04:34:02+00:00", "unit": "EterLib/GrpMarkInstance.cpp", "action": "unit F: platform_stub skeleton deleted (every member was MT_PLATFORM_STUB), 40250 source copied verbatim; guild marks (PythonTextTail, PythonWindow CMarkBox) now load and draw", "evidence": "ctest 35/35 (login_live excluded); mark rendering NEEDS_LIVE"}
|
||||
{"date": "2026-09-28T04:53:55+00:00", "unit": "GameLib/MapOutdoorRenderSTP.cpp + UserInterface/PythonApplication.cpp Create (tiling) + RecordingDevice caps", "action": "unit G: STP file replaced by the full 40250 source (native-terrain gate only); Create gains the 40250 SOFTWARE_TILING/auto-tiling block and MinLOD for !IsFastTNL; RecordingDevice GetDeviceCaps reports VertexShaderVersion 1.1 + D3DPMISCCAPS_CLIPTLVERTS (40250 on a fast T&L card = HTP); native_render XYZRHW fixes: screen→NDC Y was inverted (drawn upside down and back-face culled), negative rhw forced w=1 (spikes), texture transform no longer applied to TL vertices, specular-alpha vertex fog plumbed (Render3DDraw.vertex_fog, capture v9)", "evidence": "ctest 35/35 (login_live excluded); default HTP frame 900 vs previous baseline mean abs diff ~0.6/255; STP forced (temporary edit, reverted) renders the spawn plaza/grass matching HTP layout, STP pixels NEEDS_LIVE"}
|
||||
|
||||
@@ -5,81 +5,97 @@
|
||||
"contracts": [],
|
||||
"functions": {
|
||||
"CMapOutdoor::__RenderTerrain_RenderSoftwareTransformPatch": {
|
||||
"status": "DIVERGENT",
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__RenderTerrain_RenderSoftwareTransformPatch"
|
||||
],
|
||||
"note": "No-op: the Godot terrain adapter draws the height-field (PORT-PLAN §3)."
|
||||
"note": "Verbatim 40250 body plus an early return when IsNativeTerrainRenderEnabled() is false (Godot terrain adapter path, PORT-PLAN §3), same gate as HTP. Reached only with SOFTWARE_TILING 1 or a non-fast-T&L device. Fake-server STP frame matches HTP layout; pixel parity vs a 40250 STP frame not verified."
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RenderPatchSplat"
|
||||
],
|
||||
"note": "Drawn via XYZRHW through RecordingDevice/native_render (fixed 2026-09-28: pretransformed Y mapping, negative-rhw clip, specular-alpha vertex fog); fake-server frame with SOFTWARE_TILING forced matches the HTP layout; pixel parity vs a 40250 STP frame not verified."
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_RenderPatchNone": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RenderPatchNone"
|
||||
],
|
||||
"note": "Drawn via XYZRHW through RecordingDevice/native_render (fixed 2026-09-28: pretransformed Y mapping, negative-rhw clip, specular-alpha vertex fog); fake-server frame with SOFTWARE_TILING forced matches the HTP layout; pixel parity vs a 40250 STP frame not verified."
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_ApplyStaticShadowRenderState": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_ApplyStaticShadowRenderState"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_ApplyDynamicShadowRenderState": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_ApplyDynamicShadowRenderState"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_ApplyFogShadowRenderState": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_ApplyFogShadowRenderState"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_RestoreStaticShadowRenderState": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RestoreStaticShadowRenderState"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_RestoreDynamicShadowRenderState": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RestoreDynamicShadowRenderState"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_RestoreFogShadowRenderState": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RestoreFogShadowRenderState"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_ApplyRenderState": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_ApplyRenderState"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_RestoreRenderState": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_RestoreRenderState"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_BuildPipeline": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_BuildPipeline"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_SetTransform": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_SetTransform"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_SetSplatStream": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_SetSplatStream"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_SetShadowStream": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderSoftwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderSTP.cpp:CMapOutdoor::__SoftwareTransformPatch_SetShadowStream"
|
||||
]
|
||||
},
|
||||
"CMapOutdoor::__SoftwareTransformPatch_Initialize": {
|
||||
"status": "PORTED",
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
"impl": [
|
||||
"extension/src/platform/UserInterface/PythonApplication.cpp:CPythonApplication::Create"
|
||||
],
|
||||
"note": "40250 CPythonApplication lifecycle and state adapted for platform host and singletons; m_LightManager.Initialize() (40250 :1263) now called; Destroy() still empty (m_LightManager.Destroy at 40250 :1418 not yet mirrored)",
|
||||
"note": "40250 CPythonApplication lifecycle and state adapted for platform host and singletons; m_LightManager.Initialize() (40250 :1263) now called; Destroy() still empty (m_LightManager.Destroy at 40250 :1418 not yet mirrored); 40250 :1196-1251 tiling selection mirrored (SOFTWARE_TILING cfg → GRAPHICS_CAPS_SOFTWARE_TILING before device create, auto tiling IsFastTNL ? HTP : STP via ReserveSoftwareTilingEnable, !IsFastTNL → CGrannyLODController::SetMinLODMode(true)); RecordingDevice caps report VS 1.1 + CLIPTLVERTS so auto picks HTP",
|
||||
"test": "extension/tests/port_login_flow_test.cpp"
|
||||
},
|
||||
"CPythonApplication::SetGlobalCenterPosition": {
|
||||
|
||||
Reference in New Issue
Block a user