port EterLib/GrpShadowTexture verbatim; D3D top-left fill rule for the shadow target (unit C/D)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5be37b6363
commit
86e602cb32
@@ -560,3 +560,4 @@
|
||||
{"date": "2026-09-28T03:54:13+00:00", "unit": "EterLib/GrpScreen.cpp + native D3D8 fixed-function emulation (RecordingDevice / native_render)", "action": "unit A: D3D8 texcoord generation + D3DTS_TEXTUREn in shader (CPU uv baking removed), 8-light D3D lighting (no attenuation clamp, spot theta/2 phi/2, emissive source, NORMALIZENORMALS, inverse-transpose normals), 8-bit alpha test, clears in draw order, dynamic D3D viewport + MinZ/MaxZ, black back-buffer clear, white default diffuse, alpha blend mirrors colour factors; removed sphere-map and multiplicative-shadow hacks; CScreen ms_clearDepth/ms_diffuseColor initialisers fixed to 40250 values; capture v8; --screenshot-out readback", "evidence": "ctest 35/35 (login_live excluded); mt_native_render fake-server 240/900-frame screenshots vs baseline: game frame mean abs diff 0.55/255, char select model now placed by introselect.py grp.SetViewport(270/w,...); Windows reference frame pending (NEEDS_LIVE)"}
|
||||
{"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"}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"reference": "EterLib/GrpShadowTexture.cpp",
|
||||
"reference_sha256": "0b538a6e4a772ae16cbbf9095c656edd403bd01e60802b6eaa66df352e9507a6",
|
||||
"priority": "P4",
|
||||
"contracts": [],
|
||||
"functions": {
|
||||
"CGraphicShadowTexture::Destroy": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::Destroy"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::Create": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::Create"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::Set": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::Set"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::GetLightVPMatrixReference": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::GetLightVPMatrixReference"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::GetD3DTexture": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::GetD3DTexture"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::Begin": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::Begin"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::End": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::End"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::Initialize": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::Initialize"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::CGraphicShadowTexture": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::CGraphicShadowTexture"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
},
|
||||
"CGraphicShadowTexture::~CGraphicShadowTexture": {
|
||||
"status": "PORTED",
|
||||
"impl": [
|
||||
"extension/src/port/EterLib/GrpShadowTexture.cpp:CGraphicShadowTexture::~CGraphicShadowTexture"
|
||||
],
|
||||
"note": "verbatim; 40250 never instantiates CGraphicShadowTexture (CGraphicThingInstance::ProjectShadow is declared but undefined)"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,7 @@
|
||||
"impl": [
|
||||
"extension/src/platform/GameLib/MapOutdoorCharacterShadow.cpp:CMapOutdoor::BeginRenderCharacterShadowToTexture"
|
||||
],
|
||||
"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."
|
||||
"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. The pass is SELECTARG1 TFACTOR with ALPHAOP DISABLE into a white-cleared R5G6B5 target, so the CPU rasterizer is output-equivalent to a GPU target; it now follows the D3D top-left fill rule. The only other offscreen target in 40250 (CSnowEnvironment blur) is hard-disabled (m_bBlurEnable = FALSE), so no Vulkan offscreen path is needed."
|
||||
},
|
||||
"CMapOutdoor::EndRenderCharacterShadowToTexture": {
|
||||
"status": "NEEDS_LIVE",
|
||||
|
||||
Reference in New Issue
Block a user