Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wrappers: reverse-engineered TriAPI functions from hardware engine #523

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from
16 changes: 9 additions & 7 deletions BunnymodXT/modules/ClientDLL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
#include "../discord_integration.hpp"
#include <GL/gl.h>

#include "../wrappers/triangle_wrappers.hpp"

// Linux hooks.
#ifndef _WIN32
extern "C" void __cdecl HUD_Init()
Expand Down Expand Up @@ -1704,7 +1706,7 @@ HOOK_DEF_0(ClientDLL, void, __cdecl, HUD_DrawTransparentTriangles)
glEnable(GL_TEXTURE_2D);

// This is required for the WON DLLs.
pEngfuncs->pTriAPI->RenderMode(kRenderNormal);
TriangleWrappers::RenderMode(kRenderNormal);
}
}

Expand Down Expand Up @@ -1983,10 +1985,10 @@ HOOK_DEF_1(ClientDLL, void, __fastcall, CStudioModelRenderer__StudioRenderModel,
if (pEngfuncs) {
if (pCurrentEntity == pEngfuncs->GetViewModel()) {
if (CVars::bxt_viewmodel_semitransparent.GetBool()) {
pEngfuncs->pTriAPI->RenderMode(kRenderTransAdd);
pEngfuncs->pTriAPI->Brightness(2);
TriangleWrappers::RenderMode(kRenderTransAdd);
TriangleWrappers::Brightness(2);
} else {
pEngfuncs->pTriAPI->RenderMode(old_rendermode);
TriangleWrappers::RenderMode(old_rendermode);
}
}
}
Expand All @@ -2009,10 +2011,10 @@ HOOK_DEF_1(ClientDLL, void, __cdecl, CStudioModelRenderer__StudioRenderModel_Lin
if (pEngfuncs) {
if (pCurrentEntity == pEngfuncs->GetViewModel()) {
if (CVars::bxt_viewmodel_semitransparent.GetBool()) {
pEngfuncs->pTriAPI->RenderMode(kRenderTransAdd);
pEngfuncs->pTriAPI->Brightness(2);
TriangleWrappers::RenderMode(kRenderTransAdd);
TriangleWrappers::Brightness(2);
} else {
pEngfuncs->pTriAPI->RenderMode(old_rendermode);
TriangleWrappers::RenderMode(old_rendermode);
}
}
}
Expand Down
8 changes: 5 additions & 3 deletions BunnymodXT/modules/HwDLL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
#include "../splits.hpp"
#include "../helper_functions.hpp"

#include "../wrappers/triangle_wrappers.hpp"

using namespace std::literals;

// Callbacks for bxt-rs.
Expand Down Expand Up @@ -8136,10 +8138,10 @@ HOOK_DEF_0(HwDLL, void, __cdecl, R_StudioRenderModel)
if (cl.pEngfuncs) {
if (currententity == cl.pEngfuncs->GetViewModel()) {
if (CVars::bxt_viewmodel_semitransparent.GetBool()) {
cl.pEngfuncs->pTriAPI->RenderMode(kRenderTransAdd);
cl.pEngfuncs->pTriAPI->Brightness(2);
TriangleWrappers::RenderMode(kRenderTransAdd);
TriangleWrappers::Brightness(2);
} else {
cl.pEngfuncs->pTriAPI->RenderMode(old_rendermode); }
TriangleWrappers::RenderMode(old_rendermode); }
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions BunnymodXT/modules/HwDLL.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,9 @@ class HwDLL : public IHookableNameFilterOrdered

int tas_studio_norefresh_override = 0;

float **gWorldToScreen;
float gScreenToWorld[16];

private:
// Make sure to have hl.exe last here, so that it is the lowest priority.
HwDLL() : IHookableNameFilterOrdered({ L"hw.dll", L"hw.so", L"sw.dll", L"sw.so", L"hl.exe" }) {};
Expand All @@ -390,6 +393,13 @@ class HwDLL : public IHookableNameFilterOrdered
typedef void(__cdecl* _Host_Noclip_f) ();
_Host_Noclip_f ORIG_Host_Noclip_f;

typedef void(__cdecl* _VGUI2_ResetCurrentTexture) ();
_VGUI2_ResetCurrentTexture ORIG_VGUI2_ResetCurrentTexture;
typedef mspriteframe_t*(__cdecl* _R_GetSpriteFrame) (msprite_t *pSprite, int frame);
_R_GetSpriteFrame ORIG_R_GetSpriteFrame;
typedef void(__cdecl* _GL_Bind) (int texnum);
_GL_Bind ORIG_GL_Bind;

HLStrafe::PlayerData GetPlayerData();

protected:
Expand Down
Loading
Loading