197 lines
7.0 KiB
C++
197 lines
7.0 KiB
C++
// AUTO-GENERATED FILE, MOVE TO 'gh_fix' FOLDER PREVENT OVERWRITING!!!!!
|
|
|
|
#include <r3/binders/auto.h>
|
|
#include <gh_global.h>
|
|
|
|
extern "C" {
|
|
undefined FUN_00496ac0(void); // 00496ac0 // FUN_00496ac0 // cdecl
|
|
undefined FUN_00470b00(void); // 00470b00 // FUN_00470b00 // cdecl
|
|
undefined FUN_00484ea0(undefined4 param_1); // 00484ea0 // FUN_00484ea0 // cdecl
|
|
//
|
|
// 0046f870
|
|
undefined4 gfx_init(HWND hwnd, int param_2, UINT param_3, UINT param_4,
|
|
int param_5)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
HRESULT HVar2;
|
|
int iVar3;
|
|
D3DFORMAT AdapterFormat;
|
|
D3DPRESENT_PARAMETERS *pDVar4;
|
|
D3DDISPLAYMODE DStack_54;
|
|
D3DDISPLAYMODE displayMode;
|
|
D3DPRESENT_PARAMETERS DStack_34;
|
|
|
|
puVar1 = &DAT_007eaf60;
|
|
for (iVar3 = 0x13; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
*puVar1 = 0;
|
|
puVar1 = puVar1 + 1;
|
|
}
|
|
puVar1 = &g_gfx_lastColorOp;
|
|
for (iVar3 = 0x58; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
*puVar1 = 0;
|
|
puVar1 = puVar1 + 1;
|
|
}
|
|
puVar1 = &DAT_007eb044;
|
|
do {
|
|
*puVar1 = 0xbf800000;
|
|
puVar1 = puVar1 + 0xb;
|
|
} while ((int)puVar1 < 0x7eb1a4);
|
|
DAT_005bf684 = param_2;
|
|
if (param_2 == 0) {
|
|
DWORD_005e6c20 = g_GLI_width0;
|
|
DWORD_005e6c24 = g_GLI_height0;
|
|
DAT_005e6c28 = g_GLI_bitdepth0;
|
|
if (param_3 == 0) {
|
|
param_3 = g_GLI_width0;
|
|
}
|
|
if (param_4 == 0) {
|
|
param_4 = g_GLI_height0;
|
|
}
|
|
if (param_5 == 0) {
|
|
param_5 = g_GLI_bitdepth0;
|
|
}
|
|
} else {
|
|
DWORD_005e6c20 = param_3;
|
|
DWORD_005e6c24 = param_4;
|
|
DAT_005e6c28 = param_5;
|
|
}
|
|
|
|
static FnD3Create8 fn_Direct3DCreate8 = getDirect3DCreate8();
|
|
gfx_d3d = fn_Direct3DCreate8(0xdc);
|
|
if (gfx_d3d == (IDirect3D8 *)0x0) {
|
|
return 1;
|
|
}
|
|
HVar2 = (*gfx_d3d->lpVtbl->GetAdapterDisplayMode)(gfx_d3d, 0, &displayMode);
|
|
if (HVar2 < 0) {
|
|
return 1;
|
|
}
|
|
pDVar4 = &DStack_34;
|
|
for (iVar3 = 0xd; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
pDVar4->BackBufferWidth = 0;
|
|
pDVar4 = (D3DPRESENT_PARAMETERS *)&pDVar4->BackBufferHeight;
|
|
}
|
|
DStack_34.Windowed = (BOOL)(DAT_005bf684 == 0);
|
|
if (DAT_005bf684 == 0) {
|
|
DStack_34.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC;
|
|
DStack_34.BackBufferFormat = displayMode.Format;
|
|
param_5 = FUN_00484ea0(displayMode.Format);
|
|
AdapterFormat = displayMode.Format;
|
|
DAT_005e6c28 = param_5;
|
|
} else {
|
|
DStack_34.SwapEffect = D3DSWAPEFFECT_FLIP;
|
|
if (param_5 == 0x10) {
|
|
DStack_34.BackBufferFormat = D3DFMT_R5G6B5;
|
|
AdapterFormat = D3DFMT_R5G6B5;
|
|
} else {
|
|
DStack_34.BackBufferFormat = D3DFMT_A8R8G8B8;
|
|
AdapterFormat = D3DFMT_X8R8G8B8;
|
|
}
|
|
}
|
|
DStack_34.FullScreen_PresentationInterval = (UINT)(DAT_005bf684 != 0);
|
|
DStack_34.BackBufferHeight = param_4;
|
|
DStack_34.BackBufferCount = 1;
|
|
DStack_34.EnableAutoDepthStencil = 1;
|
|
DStack_34.FullScreen_RefreshRateInHz = 0;
|
|
DStack_34.BackBufferWidth = param_3;
|
|
if (0x10 < param_5) {
|
|
HVar2 = (*gfx_d3d->lpVtbl->CheckDeviceFormat)(
|
|
gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, AdapterFormat, 2,
|
|
D3DRTYPE_SURFACE, D3DFMT_D24S8);
|
|
if (HVar2 == 0) {
|
|
DStack_34.AutoDepthStencilFormat = D3DFMT_D24S8;
|
|
DAT_0063be50 = 1;
|
|
goto LAB_0046fa6f;
|
|
}
|
|
HVar2 = (*gfx_d3d->lpVtbl->CheckDeviceFormat)(
|
|
gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, AdapterFormat, 2,
|
|
D3DRTYPE_SURFACE, D3DFMT_D32);
|
|
DAT_0063be50 = 0;
|
|
if (HVar2 == 0) {
|
|
DStack_34.AutoDepthStencilFormat = D3DFMT_D32;
|
|
goto LAB_0046fa6f;
|
|
}
|
|
}
|
|
DAT_0063be50 = 0;
|
|
DStack_34.AutoDepthStencilFormat = D3DFMT_D16;
|
|
(*gfx_d3d->lpVtbl->CheckDeviceFormat)(gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL,
|
|
AdapterFormat, 2, D3DRTYPE_SURFACE,
|
|
D3DFMT_D16);
|
|
LAB_0046fa6f:
|
|
DStack_34.Flags = 1;
|
|
if (g_GLI_tnl == '\0') {
|
|
HVar2 =
|
|
(*gfx_d3d->lpVtbl->CreateDevice)(gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL,
|
|
hwnd, 0x24, &DStack_34, &gfx_device);
|
|
if (HVar2 < 0) {
|
|
return 1;
|
|
}
|
|
} else {
|
|
HVar2 =
|
|
(*gfx_d3d->lpVtbl->CreateDevice)(gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL,
|
|
hwnd, 0x44, &DStack_34, &gfx_device);
|
|
if ((HVar2 < 0) && (HVar2 = (*gfx_d3d->lpVtbl->CreateDevice)(
|
|
gfx_d3d, g_GLI_adapter, D3DDEVTYPE_HAL, hwnd, 0x24,
|
|
&DStack_34, &gfx_device),
|
|
HVar2 < 0)) {
|
|
return 1;
|
|
}
|
|
}
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_NORMALIZENORMALS, 0);
|
|
DAT_007eafa4 = 0;
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ZENABLE, 1);
|
|
DAT_007eafa0 = 1;
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ZFUNC, 4);
|
|
DAT_007eaf7c = 4;
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_DITHERENABLE, 1);
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_SPECULARENABLE, 0);
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_CULLMODE, 1);
|
|
(*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_COLORARG1,
|
|
2);
|
|
(*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_COLORARG2,
|
|
0);
|
|
(*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_COLOROP, 4);
|
|
(*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_MINFILTER,
|
|
2);
|
|
(*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 0, D3DTSS_MAGFILTER,
|
|
2);
|
|
(*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 1, D3DTSS_MINFILTER,
|
|
2);
|
|
(*gfx_device->lpVtbl->SetTextureStageState)(gfx_device, 1, D3DTSS_MAGFILTER,
|
|
2);
|
|
FUN_00470b00();
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ALPHATESTENABLE, 0);
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ALPHAFUNC, 7);
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_ALPHAREF, 0xc0);
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_CLIPPING, 1);
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_LIGHTING, 0);
|
|
DAT_007eafcc = 0x3f800000;
|
|
DAT_007eafc8 = 0x3f800000;
|
|
DAT_007eafc4 = 0x3f800000;
|
|
DAT_007eafc0 = 0x3f800000;
|
|
DAT_007eafdc = 0x3f800000;
|
|
DAT_007eafd8 = 0x3f800000;
|
|
DAT_007eafd4 = 0x3f800000;
|
|
DAT_007eafd0 = 0x3f800000;
|
|
DAT_007eaff8 = 0;
|
|
DAT_007eaff4 = 0;
|
|
DAT_007eaff0 = 0;
|
|
DAT_007eaffc = 0x3f800000;
|
|
DAT_007eb000 = 0;
|
|
(*gfx_device->lpVtbl->SetMaterial)(gfx_device, (D3DMATERIAL8 *)&DAT_007eafc0);
|
|
(*gfx_device->lpVtbl->SetRenderState)(gfx_device, D3DRS_FOGVERTEXMODE, 3);
|
|
if ((g_startOfGfxStruct.d3dSurface != (IDirect3DSurface8 *)0x0) ||
|
|
(HVar2 = (*gfx_device->lpVtbl->GetBackBuffer)(
|
|
gfx_device, 0, D3DBACKBUFFER_TYPE_MONO,
|
|
&g_startOfGfxStruct.d3dSurface),
|
|
HVar2 == 0)) {
|
|
(*gfx_device->lpVtbl->GetDisplayMode)(gfx_device, &DStack_54);
|
|
DStack_54.Height = 0;
|
|
DStack_54.Width = DStack_54.RefreshRate;
|
|
g_perfCounterRate = (float)DStack_54.RefreshRate;
|
|
FUN_00496ac0();
|
|
}
|
|
return 0;
|
|
}
|
|
}
|