This function was reversed from Halo CE 1.08 using OllyDbg, IDA Pro, Hexrays and my brain.
This function clears a surface that can be a render target, a stencil buffer, or a depth buffer. Refer to IDirect3DDevice9 interface documentation on MSDN for more information on the Direct3d functions.
Note: pDevice should be the global device, defined outside of this function, but for no-compile error sake, I just threw it in there.
Code://----- (00530170) -------------------------------------------------------- HRESULT ClearSurface(WORD SurfaceIndex, D3DCOLOR Color, bool bClear) { IDirect3DDevice9* pDevice = NULL; IDirect3DSurface9* pSurface = NULL; D3DSURFACE_DESC* pDesc; D3DVIEWPORT9 vp; if(SurfaceIndex < 9) { if(SurfaceIndex >= 0) pSurface = (IDirect3DSurface9*)((20 * SurfaceIndex) + (int)0x00638A2C); } pDevice->SetRenderTarget(0, pSurface); *(short*)0x00638A18 = SurfaceIndex; if(SurfaceIndex == 1) { vp.X = *(WORD*)0x0075C176; vp.Y = *(WORD*)0x0075C174; vp.Width = *(WORD*)0x0075C17A - *(WORD*)0x0075C176; vp.Height = *(WORD*)0x0075C178 - *(WORD*)0x0075C174; } else { pSurface->GetDesc(pDesc); vp.X = 0; vp.Y = 0; vp.Width = pDesc->Width; vp.Height = pDesc->Height; } vp.MinZ = 0.0f; vp.MaxZ = 1.0f; pDevice->SetViewport(&vp); if(bClear) { DWORD Flags = D3DCLEAR_TARGET; if(SurfaceIndex == 1 || SurfaceIndex == 2) Flags = D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL; return pDevice->Clear(0, NULL, Flags, Color, 1.0f, 0); } return bClear; }






Bookmarks