mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Redacted most code to only perform operation to obtain studiohdr and staticprop material (read only operation, function does not modify memory used by the original 'v_BuildPropStaticFrustumCullMap()' implementation!) The new function checks if pointer is within bounds (must stay within .data memory), if this isn't the case, the 'batch' is considered corrupt and function call to 'v_BuildPropStaticFrustumCullMap' won't proceed (note that the loop checks all bodygroups/LOD's of a model, it is possible that one doesn't have corrupt data, but a model where only one of its submeshes culls properly in the level is too much effort to fix as this function is based of disassembled output of the engine implementation, which in it self, comes with its own limitations). For a better implementation we should proceed fully rebuilding the function (see commented function body). The current and only problem with this is that it doesn't compute cull data properly (see bsplib.cpp line '222').
44 lines
1.5 KiB
C++
44 lines
1.5 KiB
C++
#ifndef MODULE_H
|
|
#define MODULE_H
|
|
|
|
class CModule
|
|
{
|
|
public:
|
|
struct ModuleSections_t
|
|
{
|
|
ModuleSections_t(void) = default;
|
|
ModuleSections_t(const string& svSectionName, uintptr_t pSectionBase, size_t nSectionSize) :
|
|
m_svSectionName(svSectionName), m_pSectionBase(pSectionBase), m_nSectionSize(nSectionSize) {}
|
|
|
|
bool IsSectionValid(void) const
|
|
{
|
|
return m_nSectionSize != 0;
|
|
}
|
|
|
|
string m_svSectionName; // Name of section.
|
|
uintptr_t m_pSectionBase{}; // Start address of section.
|
|
size_t m_nSectionSize{}; // Size of section.
|
|
};
|
|
|
|
CModule(void) = default;
|
|
CModule(const string& moduleName);
|
|
CMemory FindPatternSIMD(const uint8_t* szPattern, const char* szMask) const;
|
|
CMemory FindString(const string& string, const ptrdiff_t occurence = 1, bool nullTerminator = false) const;
|
|
CMemory FindStringReadOnly(const string& svString, bool nullTerminator) const;
|
|
|
|
CMemory GetExportedFunction(const string& svFunctionName) const;
|
|
ModuleSections_t GetSectionByName(const string& svSectionName) const;
|
|
uintptr_t GetModuleBase(void) const;
|
|
DWORD GetModuleSize(void) const;
|
|
string GetModuleName(void) const;
|
|
|
|
private:
|
|
string m_svModuleName;
|
|
uintptr_t m_pModuleBase{};
|
|
DWORD m_nModuleSize{};
|
|
IMAGE_NT_HEADERS64* m_pNTHeaders = nullptr;
|
|
IMAGE_DOS_HEADER* m_pDOSHeader = nullptr;
|
|
vector<ModuleSections_t> m_vModuleSections{};
|
|
};
|
|
|
|
#endif // MODULE_H
|