Files
mtgodot-poc/audit/port-map/EterLib/GrpScreen.cpp.json
T
shenleiandClaude Opus 5.5 5285ca85fd native render: transliterate D3D8 fixed-function pipeline (unit A)
- Texture coordinates: TEXCOORDINDEX generation (camera-space normal /
  position / reflection vector, LOCALVIEWER) and D3DTS_TEXTUREn under
  TEXTURETRANSFORMFLAGS (incl. PROJECTED) now run in native.vert; the
  RecordingDevice CPU uv baking and the sphere-map / multiplicative-shadow
  shader hacks are removed. Godot consumer uses Render3DStageTexcoords.
- Lighting: 8 D3D lights in camera space, 1/(a0+a1d+a2d^2) without clamp,
  spot cone theta/2 phi/2 with falloff, diffuse/ambient/emissive material
  sources, NORMALIZENORMALS, inverse-transpose normal matrix.
- Alpha test compares 8-bit alpha against ALPHAREF with ALPHAFUNC.
- Back-buffer Clear() is recorded in draw order and executed with
  vkCmdClearAttachments; render pass clears to 0xff000000.
- D3DVIEWPORT8 (incl. MinZ/MaxZ) is dynamic per-draw state.
- Missing vertex diffuse is opaque white; alpha blend mirrors SRC/DESTBLEND.
- CScreen::ms_clearDepth / ms_diffuseColor initialised to 40250's
  1.0f / 0xffffffff (were zero; exposed once clears were executed).
- Capture format v8; --screenshot-out FILE.bmp swapchain readback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 12:54:13 +09:00

180 lines
5.5 KiB
JSON

{
"reference": "EterLib/GrpScreen.cpp",
"reference_sha256": "3efb287b5acc846f557ade7b828fa76026699a393407d1f0151f5fd5e1dcbebc",
"priority": "P4",
"contracts": [],
"functions": {
"CScreen::RenderLine3d": {
"status": "TODO"
},
"CScreen::RenderBox3d": {
"status": "TODO"
},
"CScreen::RenderBar3d": {
"status": "TODO"
},
"CScreen::RenderGradationBar3d": {
"status": "TODO"
},
"CScreen::RenderLineCube": {
"status": "TODO"
},
"CScreen::RenderCube": {
"status": "TODO"
},
"CScreen::RenderLine2d": {
"status": "TODO"
},
"CScreen::RenderBox2d": {
"status": "ADAPTED",
"impl": [
"extension/src/platform/EterLib/GrpScreen.cpp:CScreen::RenderBox2d"
],
"test": "extension/tests/port_app_loop_test.cpp",
"note": "40250 four edge line pairs, including the bottom edge extending one pixel, are recorded into the Godot UI command stream."
},
"CScreen::RenderBar2d": {
"status": "TODO"
},
"CScreen::RenderGradationBar2d": {
"status": "ADAPTED",
"impl": [
"extension/src/platform/EterLib/GrpScreen.cpp:CScreen::RenderGradationBar2d"
],
"test": "extension/tests/port_app_loop_test.cpp",
"note": "40250 top and bottom vertex colours are serialized as a vertically interpolated Godot canvas polygon; zero-width and zero-height guards match the source."
},
"CScreen::RenderCircle2d": {
"status": "TODO"
},
"CScreen::RenderCircle3d": {
"status": "TODO"
},
"CScreen::RenderD3DXMesh": {
"status": "TODO"
},
"CScreen::RenderSphere": {
"status": "TODO"
},
"CScreen::RenderCylinder": {
"status": "TODO"
},
"CScreen::RenderTextureBox": {
"status": "TODO"
},
"CScreen::RenderBillboard": {
"status": "TODO"
},
"CScreen::DrawMinorGrid": {
"status": "TODO"
},
"CScreen::DrawGrid": {
"status": "TODO"
},
"CScreen::SetCursorPosition": {
"status": "ADAPTED",
"impl": [
"extension/src/platform/EterLib/GrpScreen.cpp:CScreen::SetCursorPosition"
],
"test": "extension/tests/port_login_flow_test.cpp",
"note": "40250 body verbatim in the platform layer (pick ray through the cursor)."
},
"CScreen::GetCursorPosition": {
"status": "TODO"
},
"CScreen::GetCursorXYPosition": {
"status": "TODO"
},
"CScreen::GetCursorZPosition": {
"status": "TODO"
},
"CScreen::GetPickingPosition": {
"status": "TODO"
},
"CScreen::SetDiffuseColor": {
"status": "TODO"
},
"CScreen::SetClearColor": {
"status": "TODO"
},
"CScreen::SetClearDepth": {
"status": "TODO"
},
"CScreen::SetClearStencil": {
"status": "TODO"
},
"CScreen::ClearDepthBuffer": {
"status": "NEEDS_LIVE",
"impl": [
"extension/src/platform/EterLib/GrpScreen.cpp:CScreen::ClearDepthBuffer"
],
"note": "Statement-equivalent Clear(ZBUFFER, ms_clearColor, ms_clearDepth, ms_clearStencil). The port had ms_clearDepth/ms_diffuseColor zero-initialized instead of 40250's 1.0f/0xffffffff; fixed. RecordingDevice now records back-buffer clears in draw order and the native renderer executes them (vkCmdClearAttachments over the current viewport); before, the clear was dropped. Native fake-server char select shows the model again with the clear executed; Windows screenshot parity open."
},
"CScreen::Clear": {
"status": "NEEDS_LIVE",
"impl": [
"extension/src/platform/EterLib/GrpScreen.cpp:CScreen::Clear"
],
"note": "Statement-equivalent Clear(TARGET|ZBUFFER); executed in draw order by the native renderer since the clear-entry change. Windows screenshot parity open."
},
"CScreen::IsLostDevice": {
"status": "TODO"
},
"CScreen::RestoreDevice": {
"status": "TODO"
},
"CScreen::Begin": {
"status": "TODO"
},
"CScreen::End": {
"status": "TODO"
},
"CScreen::Show": {
"status": "TODO"
},
"CScreen::ProjectPosition": {
"status": "ADAPTED",
"impl": [
"extension/src/platform/EterLib/GrpScreen.cpp:CScreen::ProjectPosition"
],
"note": "Body verbatim; D3DXVec3Project/Unproject come from port/common/D3DXMath.cpp (D3DX semantics, null matrix = identity).",
"test": "extension/tests/port_login_flow_test.cpp ground-item step (port.login_flow: ALT frame projects the item name tail, textTail Pick returns the ground item VID)"
},
"CScreen::UnprojectPosition": {
"status": "ADAPTED",
"impl": [
"extension/src/platform/EterLib/GrpScreen.cpp:CScreen::UnprojectPosition"
],
"note": "Body verbatim; D3DXVec3Project/Unproject come from port/common/D3DXMath.cpp (D3DX semantics, null matrix = identity).",
"test": "extension/tests/port_login_flow_test.cpp ground-item step (port.login_flow: ALT frame projects the item name tail, textTail Pick returns the ground item VID)"
},
"CScreen::SetColorOperation": {
"status": "TODO"
},
"CScreen::SetDiffuseOperation": {
"status": "TODO"
},
"CScreen::SetBlendOperation": {
"status": "TODO"
},
"CScreen::SetOneColorOperation": {
"status": "TODO"
},
"CScreen::SetAddColorOperation": {
"status": "TODO"
},
"CScreen::Identity": {
"status": "TODO"
},
"CScreen::CScreen": {
"status": "TODO"
},
"CScreen::~CScreen": {
"status": "TODO"
},
"CScreen::BuildViewFrustum": {
"status": "TODO"
}
}
}