This commit is contained in:
Christian Semmler 2024-12-20 11:41:54 -07:00
parent a942195b50
commit 093e9d8578
3 changed files with 62 additions and 53 deletions

View File

@ -113,57 +113,66 @@ Result GroupImpl::RemoveAll()
} }
// FUNCTION: LEGO1 0x100a3540 // FUNCTION: LEGO1 0x100a3540
Result GroupImpl::Bounds(D3DVECTOR *p_min, D3DVECTOR *p_max) Result GroupImpl::Bounds(D3DVECTOR* p_min, D3DVECTOR* p_max)
{ {
D3DRMBOX size; D3DRMBOX size;
IDirect3DRMFrame2 *frame = m_data; IDirect3DRMFrame2* frame = m_data;
size.min.x = 88888.f;
size.min.y = 88888.f; size.min.x = 88888.f;
size.min.z = 88888.f; size.min.y = 88888.f;
size.max.x = -88888.f; size.min.z = 88888.f;
size.max.y = -88888.f; size.max.x = -88888.f;
size.max.z = -88888.f; size.max.y = -88888.f;
IDirect3DRMVisualArray *visuals; size.max.z = -88888.f;
Result result = (Result) SUCCEEDED(frame->GetVisuals(&visuals));
if (result) { IDirect3DRMVisualArray* visuals;
int i; Result result = (Result) SUCCEEDED(frame->GetVisuals(&visuals));
for (i = 0; i < (int)visuals->GetSize(); i++) {
IDirect3DRMVisual *visual; if (result == Success) {
visuals->GetElement(i, &visual); int i;
IDirect3DRMMesh *mesh; for (i = 0; i < (int) visuals->GetSize(); i++) {
/* IDirect3DRMVisual* visual;
* BUG: should be: visuals->GetElement(i, &visual);
* visual->QueryInterface(IID_IDirect3DRMMesh, (void**)&mesh)); IDirect3DRMMesh* mesh;
*/ /*
result = (Result) SUCCEEDED(visual->QueryInterface(IID_IDirect3DRMMeshBuilder, (void**)&mesh)); * BUG: should be:
if (result) { * visual->QueryInterface(IID_IDirect3DRMMesh, (void**)&mesh));
D3DRMBOX box; */
result = (Result) SUCCEEDED(mesh->GetBox(&box)); result = (Result) SUCCEEDED(visual->QueryInterface(IID_IDirect3DRMMeshBuilder, (void**) &mesh));
if (size.max.y < box.max.y) {
size.max.y = box.max.y; if (result == Success) {
} D3DRMBOX box;
if (size.max.z < box.max.z) { result = (Result) SUCCEEDED(mesh->GetBox(&box));
size.max.z = box.max.z;
} if (size.max.y < box.max.y) {
if (box.min.x < size.min.x) { size.max.y = box.max.y;
size.min.x = box.min.x; }
} if (size.max.z < box.max.z) {
if (box.min.y < size.min.y) { size.max.z = box.max.z;
size.min.y = box.min.y; }
} if (box.min.x < size.min.x) {
if (box.min.z < size.min.z) { size.min.x = box.min.x;
size.min.z = box.min.z; }
} if (box.min.y < size.min.y) {
if (size.max.x < box.max.x) { size.min.y = box.min.y;
size.max.x = box.max.x; }
} if (box.min.z < size.min.z) {
mesh->Release(); size.min.z = box.min.z;
} }
visual->Release(); if (size.max.x < box.max.x) {
} size.max.x = box.max.x;
visuals->Release(); }
}
*p_min = size.min; mesh->Release();
*p_max = size.max; }
visual->Release();
}
visuals->Release();
}
*p_min = size.min;
*p_max = size.max;
return result; return result;
} }

View File

@ -335,7 +335,7 @@ class GroupImpl : public Group {
Result RemoveAll() override; Result RemoveAll() override;
// vtable+0x30 // vtable+0x30
Result Bounds(D3DVECTOR *p_min, D3DVECTOR *p_max) override; Result Bounds(D3DVECTOR* p_min, D3DVECTOR* p_max) override;
IDirect3DRMFrame2* ImplementationData() const { return m_data; } IDirect3DRMFrame2* ImplementationData() const { return m_data; }

View File

@ -305,7 +305,7 @@ class Group : public Object {
// This is TransformLocalToWorld in the leak, however it seems // This is TransformLocalToWorld in the leak, however it seems
// to have been replaced by something else in the shipped code. // to have been replaced by something else in the shipped code.
virtual Result Bounds(D3DVECTOR *, D3DVECTOR *) = 0; virtual Result Bounds(D3DVECTOR*, D3DVECTOR*) = 0;
// SYNTHETIC: LEGO1 0x100a2510 // SYNTHETIC: LEGO1 0x100a2510
// Tgl::Group::~Group // Tgl::Group::~Group