port: ScriptLib Resource.cpp verbatim 40250; PythonUtils mapped (already verbatim)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-30 16:10:32 +09:00
co-authored by Claude Opus 5.5
parent f9cd63713f
commit 58a3d01027
6 changed files with 275 additions and 40 deletions
+2
View File
@@ -640,3 +640,5 @@
{"date": "2026-09-30", "unit": "EterLib/GrpDevice.cpp", "action": "port", "evidence": "verbatim except Create (recording device in place of Direct3DCreate8/detector/CreateDevice, EL3D_ConfirmDevice on its caps); RecordingDevice decodes declaration-only vertex shaders to stream-0 FVFs; GrpScreen Show uses the GrpDevice browser globals; port.app_loop (PT/PNT/PNT2 FVFs, max texture 4096), full ctest, live-client screenshot matches"} {"date": "2026-09-30", "unit": "EterLib/GrpDevice.cpp", "action": "port", "evidence": "verbatim except Create (recording device in place of Direct3DCreate8/detector/CreateDevice, EL3D_ConfirmDevice on its caps); RecordingDevice decodes declaration-only vertex shaders to stream-0 FVFs; GrpScreen Show uses the GrpDevice browser globals; port.app_loop (PT/PNT/PNT2 FVFs, max texture 4096), full ctest, live-client screenshot matches"}
{"date": "2026-09-30", "unit": "EterLib/GrpDetector.cpp", "action": "port", "evidence": "verbatim; IDirect3D8 shim completed (adapter count/caps/format checks/CreateDevice) and implemented once as the host adapter behind Direct3DCreate8 (RecordingDevice.cpp), which CPythonGraphic::GetD3D also returns; GrpDevice::Create now verbatim but for the D3DX debug meshes; port.app_loop (800x600x32 HWVP D16 mode, ms_lpd3d, GetString), full ctest, live-client screenshot matches"} {"date": "2026-09-30", "unit": "EterLib/GrpDetector.cpp", "action": "port", "evidence": "verbatim; IDirect3D8 shim completed (adapter count/caps/format checks/CreateDevice) and implemented once as the host adapter behind Direct3DCreate8 (RecordingDevice.cpp), which CPythonGraphic::GetD3D also returns; GrpDevice::Create now verbatim but for the D3DX debug meshes; port.app_loop (800x600x32 HWVP D16 mode, ms_lpd3d, GetString), full ctest, live-client screenshot matches"}
{"date": "2026-09-30", "unit": "UserInterface/UserInterface.cpp", "action": "port", "evidence": "ApplicationSetErrorString/ApplicationStringTable_Initialize verbatim + port.app_loop; Main ADAPTED to PythonBoot; Win32 entry/launcher options N_A"} {"date": "2026-09-30", "unit": "UserInterface/UserInterface.cpp", "action": "port", "evidence": "ApplicationSetErrorString/ApplicationStringTable_Initialize verbatim + port.app_loop; Main ADAPTED to PythonBoot; Win32 entry/launcher options N_A"}
{"date": "2026-09-30", "unit": "ScriptLib/PythonUtils.cpp", "action": "port", "evidence": "already verbatim (udiff: MSVC cast + perf counters); mapped"}
{"date": "2026-09-30", "unit": "ScriptLib/Resource.cpp", "action": "port", "evidence": "verbatim 40250 (was a rewrite that also registered .png); ctest 29/29, screenshot unchanged"}
+80 -19
View File
@@ -5,61 +5,122 @@
"contracts": [], "contracts": [],
"functions": { "functions": {
"Py_BadArgument": { "Py_BadArgument": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:Py_BadArgument"
]
}, },
"Py_BuildException": { "Py_BuildException": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:Py_BuildException"
]
}, },
"Py_BuildNone": { "Py_BuildNone": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:Py_BuildNone"
]
}, },
"Py_ReleaseNone": { "Py_ReleaseNone": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:Py_ReleaseNone"
]
}, },
"PyTuple_GetObject": { "PyTuple_GetObject": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetObject"
]
}, },
"PyTuple_GetLong": { "PyTuple_GetLong": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetLong"
]
}, },
"PyTuple_GetDouble": { "PyTuple_GetDouble": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetDouble"
]
}, },
"PyTuple_GetFloat": { "PyTuple_GetFloat": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetFloat"
]
}, },
"PyTuple_GetByte": { "PyTuple_GetByte": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetByte"
],
"note": "verbatim except `unsigned char(val)` (MSVC-only cast) written as `(unsigned char) val`."
}, },
"PyTuple_GetInteger": { "PyTuple_GetInteger": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetInteger"
]
}, },
"PyTuple_GetUnsignedLong": { "PyTuple_GetUnsignedLong": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetUnsignedLong"
]
}, },
"PyTuple_GetUnsignedInteger": { "PyTuple_GetUnsignedInteger": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetUnsignedInteger"
]
}, },
"PyTuple_GetString": { "PyTuple_GetString": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetString"
]
}, },
"PyTuple_GetBoolean": { "PyTuple_GetBoolean": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyTuple_GetBoolean"
]
}, },
"PyCallClassMemberFunc": { "PyCallClassMemberFunc": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyCallClassMemberFunc"
]
}, },
"PyCallClassMemberFunc_ByPyString": { "PyCallClassMemberFunc_ByPyString": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:PyCallClassMemberFunc_ByPyString"
]
}, },
"__PyCallClassMemberFunc_ByCString": { "__PyCallClassMemberFunc_ByCString": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:__PyCallClassMemberFunc_ByCString"
],
"note": "verbatim plus the MtPerf::CPythonScope / CountPythonMissing perf counters (no behaviour change)."
}, },
"__PyCallClassMemberFunc_ByPyString": { "__PyCallClassMemberFunc_ByPyString": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:__PyCallClassMemberFunc_ByPyString"
],
"note": "verbatim plus the MtPerf::CPythonScope / CountPythonMissing perf counters (no behaviour change)."
}, },
"__PyCallClassMemberFunc": { "__PyCallClassMemberFunc": {
"status": "TODO" "status": "PORTED",
"impl": [
"src/port/ScriptLib/PythonUtils.cpp:__PyCallClassMemberFunc"
],
"note": "verbatim plus the MtPerf::CPythonScope / CountPythonMissing perf counters (no behaviour change)."
} }
} }
} }
@@ -0,0 +1,69 @@
{
"reference": "ScriptLib/Resource.cpp",
"reference_sha256": "559339874da495b2e5fbeb78256a6ea9dfde2ea11f838d55c4f01b918a052c7f",
"priority": "P4",
"contracts": [],
"functions": {
"NewImage": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:NewImage"
]
},
"NewSubImage": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:NewSubImage"
]
},
"NewText": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:NewText"
]
},
"NewThing": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:NewThing"
]
},
"NewEffectMesh": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:NewEffectMesh"
]
},
"NewAttributeData": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:NewAttributeData"
]
},
"CPythonResource::DumpFileList": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:CPythonResource::DumpFileList"
]
},
"CPythonResource::Destroy": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:CPythonResource::Destroy"
],
"note": "verbatim; like 40250 only CPythonApplication::Destroy calls it, which is DIVERGENT (host tears down via PythonBoot::Stop resets), so it does not run at shutdown yet."
},
"CPythonResource::CPythonResource": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:CPythonResource::CPythonResource"
]
},
"CPythonResource::~CPythonResource": {
"status": "PORTED",
"impl": [
"src/platform/ScriptLib/Resource.cpp:CPythonResource::~CPythonResource"
]
}
}
}
@@ -0,0 +1,11 @@
{
"reference": "UserInterface/PythonNetworkDatagramModule.cpp",
"reference_sha256": "fc49120f237cee410aeb9d8d18dcda0eeeb8a244f541af878b8ebaf08858e9de",
"priority": "P4",
"contracts": [],
"functions": {
"initudp": {
"status": "TODO"
}
}
}
@@ -0,0 +1,17 @@
{
"reference": "UserInterface/PythonProfilerModule.cpp",
"reference_sha256": "6afa0c492e2ad88eea775c55ff3f6bd9c490abe91408772dae461e40a207b96c",
"priority": "P4",
"contracts": [],
"functions": {
"profilerPush": {
"status": "TODO"
},
"profilerPop": {
"status": "TODO"
},
"initProfiler": {
"status": "TODO"
}
}
}
+96 -21
View File
@@ -1,31 +1,106 @@
// 40250 ScriptLib/Resource.cpp, verbatim.
#include "ScriptLib/StdAfx.h" #include "ScriptLib/StdAfx.h"
#include "ScriptLib/Resource.h" #include "EterLib/GrpExpandedImageInstance.h"
#include "EterLib/GrpImage.h" #include "EterLib/GrpTextInstance.h"
#include "EterLib/GrpMarkInstance.h"
#include "EterLib/GrpSubImage.h" #include "EterLib/GrpSubImage.h"
#include "EterLib/GrpText.h" #include "EterLib/GrpText.h"
#include "EterLib/AttributeData.h" #include "EterLib/AttributeData.h"
#include "EterGrnLib/Thing.h" #include "EterGrnLib/Thing.h"
#include "EterGrnLib/ThingInstance.h"
#include "EffectLib/EffectMesh.h" #include "EffectLib/EffectMesh.h"
#include "EffectLib/EffectInstance.h"
#include "GameLib/WeaponTrace.h"
#include "GameLib/MapType.h"
#include "GameLib/GameType.h"
#include "GameLib/RaceData.h"
#include "GameLib/RaceMotionData.h"
#include "GameLib/ActorInstance.h"
#include "GameLib/Area.h"
#include "GameLib/ItemData.h"
#include "GameLib/FlyingData.h"
#include "GameLib/FlyTrace.h"
#include "GameLib/FlyingInstance.h"
#include "GameLib/FlyingData.h"
namespace { #include "ScriptLib/Resource.h"
CResource* NewUIImage(const char* name) { return new CGraphicImage(name); }
CResource* NewUISubImage(const char* name) { return new CGraphicSubImage(name); } CResource * NewImage(const char* c_szFileName)
// 40250 UserInterface/PythonApplication.cpp NewText: a "<face>:<size>[i].fnt" name is a CGraphicText. {
CResource* NewText(const char* name) { return new CGraphicText(name); } return new CGraphicImage(c_szFileName);
CResource* NewThing(const char* name) { return new CGraphicThing(name); }
CResource* NewEffectMesh(const char* name) { return new CEffectMesh(name); }
CResource* NewAttributeData(const char* name) { return new CAttributeData(name); }
} }
CPythonResource::CPythonResource() { CResource * NewSubImage(const char* c_szFileName)
for (const char* ext : {"tga", "dds", "png", "jpg", "bmp"}) {
m_resManager.RegisterResourceNewFunctionPointer(ext, NewUIImage); return new CGraphicSubImage(c_szFileName);
m_resManager.RegisterResourceNewFunctionPointer("sub", NewUISubImage); }
m_resManager.RegisterResourceNewFunctionPointer("fnt", NewText);
m_resManager.RegisterResourceNewFunctionPointer("gr2", NewThing); CResource * NewText(const char* c_szFileName)
m_resManager.RegisterResourceNewFunctionPointer("mde", NewEffectMesh); {
m_resManager.RegisterResourceNewFunctionPointer("mdatr", NewAttributeData); return new CGraphicText(c_szFileName);
}
CResource * NewThing(const char* c_szFileName)
{
return new CGraphicThing(c_szFileName);
}
CResource * NewEffectMesh(const char* c_szFileName)
{
return new CEffectMesh(c_szFileName);
}
CResource * NewAttributeData(const char* c_szFileName)
{
return new CAttributeData(c_szFileName);
}
void CPythonResource::DumpFileList(const char * c_szFileName)
{
m_resManager.DumpFileListToTextFile(c_szFileName);
}
void CPythonResource::Destroy()
{
CFlyingInstance::DestroySystem();
CActorInstance::DestroySystem();
CArea::DestroySystem();
CGraphicExpandedImageInstance::DestroySystem();
CGraphicImageInstance::DestroySystem();
CGraphicMarkInstance::DestroySystem();
CGraphicThingInstance::DestroySystem();
CGrannyModelInstance::DestroySystem();
CGraphicTextInstance::DestroySystem();
CEffectInstance::DestroySystem();
CWeaponTrace::DestroySystem();
CFlyTrace::DestroySystem();
m_resManager.DestroyDeletingList();
CFlyingData::DestroySystem();
CItemData::DestroySystem();
CEffectData::DestroySystem();
CEffectMesh::SEffectMeshData::DestroySystem();
CRaceData::DestroySystem();
NRaceData::DestroySystem();
CRaceMotionData::DestroySystem();
m_resManager.Destroy();
}
CPythonResource::CPythonResource()
{
m_resManager.RegisterResourceNewFunctionPointer("sub", NewSubImage);
m_resManager.RegisterResourceNewFunctionPointer("dds", NewImage);
m_resManager.RegisterResourceNewFunctionPointer("jpg", NewImage);
m_resManager.RegisterResourceNewFunctionPointer("tga", NewImage);
m_resManager.RegisterResourceNewFunctionPointer("bmp", NewImage);
m_resManager.RegisterResourceNewFunctionPointer("fnt", NewText);
m_resManager.RegisterResourceNewFunctionPointer("gr2", NewThing);
m_resManager.RegisterResourceNewFunctionPointer("mde", NewEffectMesh);
m_resManager.RegisterResourceNewFunctionPointer("mdatr", NewAttributeData);
}
CPythonResource::~CPythonResource()
{
} }
CPythonResource::~CPythonResource() { m_resManager.DestroyDeletingList(); }
void CPythonResource::Destroy() { m_resManager.DestroyDeletingList(); m_resManager.Destroy(); }
void CPythonResource::DumpFileList(const char* name) { m_resManager.DumpFileListToTextFile(name); }