Reversed from Halo CE 1.08 using OllyDbg, IDA Pro, Hexrays, and msdn.

This function releases resources used in Halo rendering code. There is a total of 9 textures and surfaces. Halo only uses one vertex buffer and one index buffer for optimization. They pack as much object data in one buffer, instead of creating one for each object or whatever.

Code:
struct s_RenderTarget
{
  UINT Width;
  UINT Height;
  D3DFORMAT Format;
  IDirect3DSurface9* pSurface;
  IDirect3DBaseTexture9* pTexture;
};
Code:
//----- (00530100) --------------------------------------------------------
void ReleaseResources()
{
  s_RenderTarget* RenderTarget = (s_RenderTarget*)0x00638A20;
  IDirect3DIndexBuffer9* pIndexData = *(IDirect3DIndexBuffer9**)0x006B83D8;
  IDirect3DVertexBuffer9* pVertexBuffer = *(IDirect3DVertexBuffer9**)0x006B83DC;
  for(UINT i = 0; i < 9; i++)
  {
    if(RenderTarget[i].pSurface)
    {
      RenderTarget[i].pSurface->Release();
      RenderTarget[i].pSurface = NULL;
    }
    if(RenderTarget[i].pTexture)
    {
      RenderTarget[i].pTexture->Release();
      RenderTarget[i].pTexture = NULL;
    }
  }

  *(WORD*)0x00638A18 = 0xFFFF;

  if(pIndexData)
  {
    pIndexData->Release();
    pIndexData = NULL;
  }
  if(pVertexBuffer)
  {
    pVertexBuffer->Release();
    pVertexBuffer = NULL;
  } 
}