isle/LEGO1/mxdirect3drmdevice.h
Mark Langen c15ca8a34d Bootstrap decomp of D3DRM rendering code
* This PR kicks off work on decompiling the D3D Retained Mode (D3DRM)
  rendering part of the codebase.

* High level overview:

* There is a base IMxDirect3DRMObject class which all of the D3DRM
  rendering objects inherit from. Its only virtual method is one to get
  the underlying object handle.

* A hierarchy of abstract classes inherits from this base class, which
  I've called "IMxDirect3DRM<class>". These classes only have pure
  virtual methods on them and don't contain any data.

* Each one of the abstract classes has exactly one concrete
  implementation, which I've called "MxDirect3DRM<class>". These classes
  have exactly one piece of data, which is a pointer to the underlying
  D3D Retained Mode object.

* If the classes need to store additional data, they store it in a
  userdata blob which is attached to the D3DRM object rather than the
  additional data being stored in the class itself.

* I've worked out about twice this many classes related to D3DRM
  rendering so far but the PR was getting large enough as is, so I'm
  cutting it here for now.

* I decomped sufficiently many methods of these classe to convince
  myself that the above observations are correct. About 60% of the
  decomped methods here are perfect matches, including at least one
  non-trivial method per class.
2023-11-28 21:43:59 -08:00

52 lines
954 B
C++

#include "mxtypes.h"
#include "d3drm.h"
#include "mxdirect3drmobject.h"
// VTABLE 0x100db9b8
class IMxDirect3DRMDevice : public IMxDirect3DRMObject
{
public:
virtual ~IMxDirect3DRMDevice() {}
virtual IUnknown **GetHandle() = 0;
};
enum MxDirect3DRMDeviceQuality
{
Wireframe = 0x0,
UnlitFlat = 0x1,
Flat = 0x2,
Gouraud = 0x3,
Phong = 0x4,
};
// VTABLE 0x100db988
class MxDirect3DRMDevice : public IMxDirect3DRMDevice
{
public:
MxDirect3DRMDevice() {}
virtual ~MxDirect3DRMDevice() {}
virtual IUnknown **GetHandle();
// 0x08 in vtable
virtual int GetWidth();
virtual int GetHeight();
// 0x10 in vtable
virtual int unknown1();
virtual int SetQuality(MxDirect3DRMDeviceQuality p_quality);
virtual int SetShades(MxU32 p_shades);
virtual int SetDither(int p_dither);
// 0x20 in vtable
virtual int Update();
virtual void InitFromD3D();
virtual void Init();
private:
IDirect3DRMDevice *m_pD3DRMDevice;
};