SetShadingModel functions

This commit is contained in:
disinvite 2025-04-17 16:15:07 -04:00
parent 40bb4eb1f2
commit a18bc67d2c
4 changed files with 40 additions and 27 deletions

View File

@ -1,5 +1,6 @@
#include "impl.h" #include "impl.h"
#include <assert.h>
#include <d3drmwin.h> #include <d3drmwin.h>
using namespace TglImpl; using namespace TglImpl;
@ -29,13 +30,20 @@ Result DeviceImpl::SetColorModel(ColorModel)
return Success; return Success;
} }
// FUNCTION: BETA10 0x1016e020
inline Result DeviceSetShadingModel(IDirect3DRMDevice2* pDevice, ShadingModel model)
{
D3DRMRENDERQUALITY renderQuality = Translate(model);
return ResultVal(pDevice->SetQuality(renderQuality));
}
// FUNCTION: LEGO1 0x100a2c30 // FUNCTION: LEGO1 0x100a2c30
// FUNCTION: BETA10 0x1016dfc0
Result DeviceImpl::SetShadingModel(ShadingModel model) Result DeviceImpl::SetShadingModel(ShadingModel model)
{ {
// Doesn't match well even though we know this is exactly assert(m_data);
// the original code thanks to the jump table.
D3DRMRENDERQUALITY renderQuality = Translate(model); return DeviceSetShadingModel(m_data, model);
return ResultVal(m_data->SetQuality(renderQuality));
} }
// FUNCTION: LEGO1 0x100a2ca0 // FUNCTION: LEGO1 0x100a2ca0

View File

@ -603,6 +603,7 @@ void TextureImpl::Destroy()
} }
// Translation helpers // Translation helpers
// FUNCTION: BETA10 0x1016fc40
inline D3DRMRENDERQUALITY Translate(ShadingModel tglShadingModel) inline D3DRMRENDERQUALITY Translate(ShadingModel tglShadingModel)
{ {
D3DRMRENDERQUALITY renderQuality; D3DRMRENDERQUALITY renderQuality;

View File

@ -1,5 +1,7 @@
#include "impl.h" #include "impl.h"
#include <assert.h>
using namespace TglImpl; using namespace TglImpl;
DECOMP_SIZE_ASSERT(D3DRMVERTEX, 0x24); DECOMP_SIZE_ASSERT(D3DRMVERTEX, 0x24);
@ -49,28 +51,19 @@ Result MeshImpl::SetTextureMappingMode(TextureMappingMode mode)
} }
} }
// FUNCTION: BETA10 0x10170750
inline Result MeshSetShadingModel(MeshImpl::MeshData* pMesh, ShadingModel model)
{
D3DRMRENDERQUALITY mode = Translate(model);
return ResultVal(pMesh->groupMesh->SetGroupQuality(pMesh->groupIndex, mode));
}
// FUNCTION: LEGO1 0x100a3fc0 // FUNCTION: LEGO1 0x100a3fc0
// FUNCTION: BETA10 0x101706f0
Result MeshImpl::SetShadingModel(ShadingModel model) Result MeshImpl::SetShadingModel(ShadingModel model)
{ {
D3DRMRENDERQUALITY mode; assert(m_data);
switch (model) { return MeshSetShadingModel(m_data, model);
case Wireframe:
mode = D3DRMRENDER_WIREFRAME;
break;
case UnlitFlat:
mode = D3DRMRENDER_UNLITFLAT;
break;
case Flat:
mode = D3DRMRENDER_FLAT;
break;
case Gouraud:
mode = D3DRMRENDER_GOURAUD;
break;
case Phong:
mode = D3DRMRENDER_PHONG;
break;
}
return ResultVal(m_data->groupMesh->SetGroupQuality(m_data->groupIndex, mode));
} }
// FUNCTION: LEGO1 0x100a4030 // FUNCTION: LEGO1 0x100a4030

View File

@ -1,5 +1,7 @@
#include "impl.h" #include "impl.h"
#include <assert.h>
using namespace TglImpl; using namespace TglImpl;
DECOMP_SIZE_ASSERT(MeshBuilder, 0x04); DECOMP_SIZE_ASSERT(MeshBuilder, 0x04);
@ -159,12 +161,12 @@ inline Result MeshBuilderImpl::CreateMeshImpl(
); );
} }
// FUNCTION: LEGO1 0x100a3ae0 // FUNCTION: BETA10 0x1016e060
Result MeshBuilderImpl::GetBoundingBox(float min[3], float max[3]) const inline Result MeshBuilderGetBoundingBox(IDirect3DRMMesh* pMesh, float min[3], float max[3])
{ {
D3DRMBOX box; D3DRMBOX box;
Result result = ResultVal(m_data->GetBox(&box)); Result result = ResultVal(pMesh->GetBox(&box));
if (result == Success) { if (Succeeded(result)) {
min[0] = box.min.x; min[0] = box.min.x;
min[1] = box.min.y; min[1] = box.min.y;
min[2] = box.min.z; min[2] = box.min.z;
@ -175,6 +177,15 @@ Result MeshBuilderImpl::GetBoundingBox(float min[3], float max[3]) const
return result; return result;
} }
// FUNCTION: LEGO1 0x100a3ae0
// FUNCTION: BETA10 0x1016ce00
Result MeshBuilderImpl::GetBoundingBox(float min[3], float max[3]) const
{
assert(m_data);
return MeshBuilderGetBoundingBox(m_data, min, max);
}
// FUNCTION: LEGO1 0x100a3b40 // FUNCTION: LEGO1 0x100a3b40
MeshBuilder* MeshBuilderImpl::Clone() MeshBuilder* MeshBuilderImpl::Clone()
{ {