diff --git a/LEGO1/tgl/d3drm/impl.h b/LEGO1/tgl/d3drm/impl.h index a5307e1a..35553ee3 100644 --- a/LEGO1/tgl/d3drm/impl.h +++ b/LEGO1/tgl/d3drm/impl.h @@ -114,6 +114,7 @@ class RendererImpl : public Renderer { unsigned long height, ViewImpl& rView ); + inline Result CreateMeshBuilder(MeshBuilderImpl& rMesh); private: RendererDataType m_data; @@ -411,10 +412,9 @@ class MeshImpl : public Mesh { typedef MeshData* MeshDataType; - // FUNCTION: BETA10 0x10170420 const MeshDataType& ImplementationData() const { return m_data; } - // FUNCTION: BETA10 0x10170440 + // FUNCTION: BETA10 0x10171b70 MeshDataType& ImplementationData() { return m_data; } inline void Destroy(); @@ -532,7 +532,10 @@ class MeshBuilderImpl : public MeshBuilder { typedef IDirect3DRMMesh* MeshBuilderDataType; + // FUNCTION: BETA10 0x10170420 const MeshBuilderDataType& ImplementationData() const { return m_data; } + + // FUNCTION: BETA10 0x10170440 MeshBuilderDataType& ImplementationData() { return m_data; } inline void Destroy(); diff --git a/LEGO1/tgl/d3drm/renderer.cpp b/LEGO1/tgl/d3drm/renderer.cpp index 11c387ac..a275825a 100644 --- a/LEGO1/tgl/d3drm/renderer.cpp +++ b/LEGO1/tgl/d3drm/renderer.cpp @@ -279,14 +279,33 @@ Light* RendererImpl::CreateLight(LightType type, float r, float g, float b) return pLightImpl; } +// FUNCTION: BETA10 0x1016d8e0 +inline Result RendererCreateMeshBuilder(IDirect3DRM2* pD3DRM, IDirect3DRMMesh*& rpMesh) +{ + return ResultVal(pD3DRM->CreateMesh(&rpMesh)); +} + +// FUNCTION: BETA10 0x1016d850 +inline Result RendererImpl::CreateMeshBuilder(MeshBuilderImpl& rMesh) +{ + assert(m_data); + assert(!rMesh.ImplementationData()); + + return RendererCreateMeshBuilder(m_data, rMesh.ImplementationData()); +} + // FUNCTION: LEGO1 0x100a1e90 +// FUNCTION: BETA10 0x1016abf0 MeshBuilder* RendererImpl::CreateMeshBuilder() { + assert(m_data); MeshBuilderImpl* meshBuilder = new MeshBuilderImpl(); - if (FAILED(m_data->CreateMesh(&meshBuilder->m_data))) { + + if (!CreateMeshBuilder(*static_cast(meshBuilder))) { delete meshBuilder; meshBuilder = NULL; } + return meshBuilder; }