feat: complete native client rendering parity updates
This commit is contained in:
@@ -555,3 +555,5 @@
|
||||
{"time": "2026-09-25T03:00:00Z", "event": "route_cleanup", "unit": "client_main legacy elimination", "detail": "Removed legacy AppFlow route, preloads (AppFlow, LiveSmokeTest, PlayableLiveTest, NetTrace), and MT_PORT_PATH fallback from project/client_main.gd. client_main.tscn now unconditionally boots the native 40250 port route (PythonUISurface + Python3DSurface -> system.py). Passing MT_PORT_PATH=legacy emits a deprecation warning and continues on port route.", "tests": ["client_main.tscn verified on port route and legacy warning", "script/port_gate.sh macos PASS (19/19 suites)", "port_map.py check: 0 errors"]}
|
||||
{"time": "2026-09-24T07:07:19Z", "event": "port_verification_fix", "unit": "Client/root/*.py + UserInterface/PythonApplication platform adapter + MilesLib/SoundManager platform adapter", "detail": "Corrected 74 RUN_AS_IS mappings from unrelated assets/root to 40250 root.epk, added per-script byte/hash verification and stricter port-map validation. Restored GC_TIME server clock semantics and routed packed sound bytes to Godot without applying volume twice; replaced deleted legacy asset-gate tests with active host/audio tests. Qualified MT_PLATFORM_STUB_TRACE exposed 93 called stubs in offline login_flow; SetGlobalCenterPosition was implemented from the original call order, and remaining reached groups were recorded in audit/reports/platform-runtime-trace.md. Android port-only gate exposed the pre-existing Win32Crt.cpp glob/iconv API-24 build blocker after a missing <ctype.h> PCH dependency in Japanese.cpp was repaired.", "tests": ["script/verify_root_pack.py PASS (74/74)", "port_map.py check: 0 errors", "script/port_gate.sh macos PASS", "script/run_40250_asset_gate.sh PASS", "script/python_game_render_test.sh PASS", "MT_PLATFORM_STUB_TRACE=1 port.login_flow PASS (93 called stubs identified)", "android port_gate FAIL: Win32Crt.cpp glob/iconv declarations under NDK API 24"]}
|
||||
{"time": "2026-09-24T07:31:08Z", "event": "platform_adapter_fix", "unit": "EterLib/GrpScreen.cpp + MilesLib/SoundManager.cpp", "detail": "Implemented reached 40250 UI box and vertical gradient command bridge; audio bridge now preserves named three-slot music fades, frame-step fade speed and limit, indexed 3D volume, 3D play counts, and SaveVolume/RestoreVolume mute state. Remaining sky/water/shadow/culling/IME adapters stay TODO.", "evidence": ["./script/port_gate.sh macos", "./script/python_game_render_test.sh", "godot --headless --path project -s res://audio_driver_test.gd", "port_map.py check"]}
|
||||
{"date": "2026-09-28T01:31:59+00:00", "unit": "GameLib/MapOutdoorRenderHTP.cpp + GameLib/MapOutdoorCharacterShadow.cpp", "action": "native 40250 render parity: terrain near/mid/far LOD/fog/splat cap, character shadow RTT CPU raster, per-draw depth/sampler states and two-light fixed-function shading", "evidence": "mt_native_render fake-server game 90 frames; 178 3D draws; shadow mem texture 205 nonwhite pixels; matched Windows screenshot pending"}
|
||||
{"date": "2026-09-28T01:35:06+00:00", "unit": "GameLib/MapOutdoorRenderHTP.cpp", "action": "match 40250 lighting state in terrain splat passes: unlit base textures, temporary lit shadow pass, white fog color only for shadow pass", "evidence": "reference MapOutdoorRenderHTP.cpp non-WORLD_EDITOR branch; native fake-server scene rerun pending"}
|
||||
|
||||
+2
-2
@@ -4049,11 +4049,11 @@
|
||||
"project/gamescene_test.gd",
|
||||
"project/netbridge_test.gd"
|
||||
],
|
||||
"last_test_result": "PARTIAL: msenv/skybox/weather tests, xmas_snow native command, GameScene map filtering and M2Client signal pass; SnowEnvironment pool, DayMode, filter/lens flare/wind and linear fog remain open"
|
||||
"last_test_result": "PARTIAL: native fake-server 1024x768/24-mob render built and ran 90 frames; terrain and R5G6B5 character shadow target produced scene draws and 204 nonwhite shadow pixels. Same-scene Windows color parity, SnowEnvironment blur, DayMode, filter/lens flare/wind and fog timing remain open."
|
||||
},
|
||||
"remaining": [
|
||||
"实现或明确 screen filter、lens flare 和 SpeedTree/树木风更新,不以 metadata 代替运行时效果",
|
||||
"修正/验证 40250 线性 fog near/far/color 与 HTP/STP/terrain 的参数和时序",
|
||||
"原生 HTP 已恢复近/中/远景分段、LOD、splat 上限及远景雾色;继续用 Windows 同场景截图核对颜色、STP 和 fog 时序",
|
||||
"补齐 DayMode/PRESERVE_DayMode 正式环境切换;WeatherDayNightSystem 的自动地图预设继续隔离,不能替代服务器 xmas_snow 命令",
|
||||
"对天空 transition、云 plane、SnowEnvironment 池和真实渲染顺序增加参数/screenshot oracle",
|
||||
"增加重复加载、快速切图、暂停恢复、资源缺失和环境/粒子清理测试",
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorCharacterShadow.cpp:CMapOutdoor::SetShadowTextureSize"
|
||||
],
|
||||
"note": "40250 body verbatim, kept in the platform file beside the render-to-texture pass it serves (Begin/End are platform no-ops).",
|
||||
"note": "40250 shadow texture lifecycle in the platform file; Begin/End now run the light-view offscreen pass through the RecordingDevice CPU R5G6B5 target.",
|
||||
"test": "extension/tests/port_login_flow_test.cpp"
|
||||
},
|
||||
"CMapOutdoor::CreateCharacterShadowTexture": {
|
||||
@@ -17,7 +17,7 @@
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorCharacterShadow.cpp:CMapOutdoor::CreateCharacterShadowTexture"
|
||||
],
|
||||
"note": "40250 body verbatim, kept in the platform file beside the render-to-texture pass it serves (Begin/End are platform no-ops).",
|
||||
"note": "40250 shadow texture creation retained; the RecordingDevice now rasterizes its R5G6B5 render target and exposes the result as a memory texture.",
|
||||
"test": "extension/tests/port_login_flow_test.cpp"
|
||||
},
|
||||
"CMapOutdoor::ReleaseCharacterShadowTexture": {
|
||||
@@ -25,22 +25,22 @@
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorCharacterShadow.cpp:CMapOutdoor::ReleaseCharacterShadowTexture"
|
||||
],
|
||||
"note": "40250 body verbatim, kept in the platform file beside the render-to-texture pass it serves (Begin/End are platform no-ops).",
|
||||
"note": "40250 shadow texture release retained for the native offscreen pass.",
|
||||
"test": "extension/tests/port_login_flow_test.cpp"
|
||||
},
|
||||
"CMapOutdoor::BeginRenderCharacterShadowToTexture": {
|
||||
"status": "DIVERGENT",
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorCharacterShadow.cpp:CMapOutdoor::BeginRenderCharacterShadowToTexture"
|
||||
],
|
||||
"note": "Returns false: the render-to-texture character shadow pass is not drawn (RecordingDevice drops off-screen render targets); callers skip the pass as when 40250 fails to begin it."
|
||||
"note": "Restores 40250 light view, target, viewport and render states; the small R5G6B5 target is rasterized on CPU. Native fake-server capture contains nonwhite shadow pixels; matched Windows screenshot parity remains open."
|
||||
},
|
||||
"CMapOutdoor::EndRenderCharacterShadowToTexture": {
|
||||
"status": "DIVERGENT",
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorCharacterShadow.cpp:CMapOutdoor::EndRenderCharacterShadowToTexture"
|
||||
],
|
||||
"note": "No-op, paired with BeginRenderCharacterShadowToTexture returning false."
|
||||
"note": "Restores the 40250 viewport, render target, light state and transforms after the shadow pass; matched Windows screenshot parity remains open."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,17 +9,21 @@
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderHTP.cpp:CMapOutdoor::__RenderTerrain_RenderHardwareTransformPatch"
|
||||
],
|
||||
"note": "No-op: the Godot terrain adapter draws the height-field (PORT-PLAN §3); the D3D8 texture-stage splat passes have no recording-device counterpart."
|
||||
"note": "Native path now follows 40250 near/mid/far patch distance bands, LOD 0/1/2, splat limit and fog-color far fill; Godot path stays adapted. Same-scene Windows color and image comparison remains open."
|
||||
},
|
||||
"CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderHardwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderHTP.cpp:CMapOutdoor::__HardwareTransformPatch_RenderPatchSplat"
|
||||
],
|
||||
"note": "Native path draws 40250 terrain splat layers and static/character shadows; texture-0 fallback and state sequencing still differ from the reference and need matched image verification."
|
||||
},
|
||||
"CMapOutdoor::__HardwareTransformPatch_RenderPatchNone": {
|
||||
"status": "DIVERGENT",
|
||||
"impl": [],
|
||||
"note": "Not built: only called from __RenderTerrain_RenderHardwareTransformPatch, which is a no-op (Godot draws the terrain, PORT-PLAN §3)."
|
||||
"status": "NEEDS_LIVE",
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorRenderHTP.cpp:CMapOutdoor::__HardwareTransformPatch_RenderPatchNone"
|
||||
],
|
||||
"note": "Native path now draws the far patch with the 40250 fog texture factor; matched Windows image comparison remains open."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user