mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-22 16:04:17 +00:00
Use bitfield for MxVideoParamFlags (#40)
* Use bitfield for MxVideoParamFlags Using a bitfield for MxVideoParamFlags results in the same xor/and logic that was partially inlined in the header file. This approach is a lot cleaner and there's a good chance this is what the devs would have landed on. The code generation is really finicky -- other inlines in the header influence the code just by being there -- so I decided to stub out all of them. This got the match to 100%. While I was in isle.cpp::SetupVideoFlags, I changed the signature so that the `m_using16bit` parameter is just `using16bit`. * fix: cast Set16Bit inline arg to byte
This commit is contained in:
@@ -1,88 +1,49 @@
|
||||
#ifndef MXVIDEOPARAMFLAGS_H
|
||||
#define MXVIDEOPARAMFLAGS_H
|
||||
|
||||
#include "legoinc.h"
|
||||
|
||||
class MxVideoParamFlags
|
||||
{
|
||||
public:
|
||||
enum LowFlags
|
||||
{
|
||||
FULL_SCREEN = 0x1,
|
||||
FLIP_SURFACES = 0x2,
|
||||
BACK_BUFFERS = 0x4,
|
||||
ENABLE_16BIT = 0x20,
|
||||
WIDE_VIEW_ANGLE = 0x40,
|
||||
UNKNOWN3 = 0x80
|
||||
};
|
||||
|
||||
enum HighFlags
|
||||
{
|
||||
UNKNOWN1 = 0x1,
|
||||
UNKNOWN2 = 0x2
|
||||
};
|
||||
|
||||
__declspec(dllexport) MxVideoParamFlags();
|
||||
|
||||
inline void EnableFullScreen(BOOL e)
|
||||
{
|
||||
m_flags1 = (m_flags1 ^ (e << 0)) & FULL_SCREEN ^ m_flags1;
|
||||
}
|
||||
|
||||
inline void EnableFlipSurfaces(BOOL e)
|
||||
{
|
||||
m_flags1 = (m_flags1 ^ (e << 1)) & FLIP_SURFACES ^ m_flags1;
|
||||
}
|
||||
|
||||
inline void EnableBackBuffers(BOOL e)
|
||||
{
|
||||
m_flags1 = (m_flags1 ^ ((!e) << 2)) & BACK_BUFFERS ^ m_flags1;
|
||||
}
|
||||
|
||||
inline void SetUnknown3(BOOL e)
|
||||
{
|
||||
m_flags1 = (m_flags1 ^ (e << 7)) & UNKNOWN3 ^ m_flags1;
|
||||
}
|
||||
|
||||
inline void Set8Bit()
|
||||
{
|
||||
m_flags1 &= ~ENABLE_16BIT;
|
||||
}
|
||||
|
||||
inline void Set16Bit()
|
||||
{
|
||||
m_flags1 |= ENABLE_16BIT;
|
||||
}
|
||||
|
||||
inline void Enable16Bit(unsigned char e)
|
||||
{
|
||||
m_flags1 = ((e << 5) ^ m_flags1) & ENABLE_16BIT ^ m_flags1;
|
||||
}
|
||||
|
||||
inline void EnableWideViewAngle(BOOL e)
|
||||
{
|
||||
m_flags1 = (m_flags1 ^ (e << 6)) & WIDE_VIEW_ANGLE ^ m_flags1;
|
||||
}
|
||||
|
||||
inline void EnableUnknown1(BOOL e)
|
||||
{
|
||||
m_flags2 = (m_flags2 ^ ((!e) << 0)) & UNKNOWN1 ^ m_flags2;
|
||||
}
|
||||
|
||||
inline void EnableUnknown2(BOOL e)
|
||||
{
|
||||
m_flags2 = (m_flags2 ^ (e << 1)) & UNKNOWN2 ^ m_flags2;
|
||||
}
|
||||
|
||||
inline void EnableUnknown2()
|
||||
{
|
||||
m_flags2 |= UNKNOWN2;
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned char m_flags1;
|
||||
unsigned char m_flags2;
|
||||
|
||||
};
|
||||
|
||||
#endif // MXVIDEOPARAMFLAGS_H
|
||||
#ifndef MXVIDEOPARAMFLAGS_H
|
||||
#define MXVIDEOPARAMFLAGS_H
|
||||
|
||||
#include "legoinc.h"
|
||||
|
||||
// Must be union with struct for match.
|
||||
typedef union {
|
||||
struct {
|
||||
BYTE bit0: 1;
|
||||
BYTE bit1: 1;
|
||||
BYTE bit2: 1;
|
||||
BYTE bit3: 1;
|
||||
BYTE bit4: 1;
|
||||
BYTE bit5: 1;
|
||||
BYTE bit6: 1;
|
||||
BYTE bit7: 1;
|
||||
};
|
||||
// BYTE all; // ?
|
||||
} flag_bitfield;
|
||||
|
||||
class MxVideoParamFlags
|
||||
{
|
||||
public:
|
||||
__declspec(dllexport) MxVideoParamFlags();
|
||||
|
||||
inline void SetFullScreen(BOOL e) { m_flags1.bit0 = e; }
|
||||
inline void SetFlipSurfaces(BOOL e) { m_flags1.bit1 = e; }
|
||||
inline void SetBackBuffers(BOOL e) { m_flags1.bit2 = e; }
|
||||
inline void Set_f1bit3(BOOL e) { m_flags1.bit3 = e; }
|
||||
inline void Set_f1bit4(BOOL e) { m_flags1.bit4 = e; }
|
||||
inline void Set16Bit(BYTE e) { m_flags1.bit5 = e; }
|
||||
inline void SetWideViewAngle(BOOL e) { m_flags1.bit6 = e; }
|
||||
inline void Set_f1bit7(BOOL e) { m_flags1.bit7 = e; }
|
||||
inline void Set_f2bit0(BOOL e) { m_flags2.bit0 = e; }
|
||||
inline void Set_f2bit1(BOOL e) { m_flags2.bit1 = e; }
|
||||
inline void Set_f2bit2(BOOL e) { m_flags2.bit2 = e; }
|
||||
inline void Set_f2bit3(BOOL e) { m_flags2.bit3 = e; }
|
||||
inline void Set_f2bit4(BOOL e) { m_flags2.bit4 = e; }
|
||||
inline void Set_f2bit5(BOOL e) { m_flags2.bit5 = e; }
|
||||
inline void Set_f2bit6(BOOL e) { m_flags2.bit6 = e; }
|
||||
inline void Set_f2bit7(BOOL e) { m_flags2.bit7 = e; }
|
||||
|
||||
private:
|
||||
flag_bitfield m_flags1;
|
||||
flag_bitfield m_flags2;
|
||||
|
||||
};
|
||||
|
||||
#endif // MXVIDEOPARAMFLAGS_H
|
||||
|
Reference in New Issue
Block a user