Hidden Surface Removal

An emerging class of 3D hardware accelerators do not perform hidden surface removal using a conventional z-buffer. The IDirect3DDevice::BeginScene and IDirect3DDevice::EndScene methods must be used correctly to support these accelerators. Although these accelerators may implement a number of mechanisms for performing hidden surface removal, such as internal tiling or polygon sorting, they share a common characteristic: To perform hidden surface removal, they must process a copy of the entire geometric database for a single frame.

To process all of the geometry for a single frame, these new accelerators must perform scene capture. That is, they must store, for later processing, the geometric information passed to them via execute buffers. To ensure that the hidden surface processing is correct, a single call to the IDirect3DDevice::BeginScene and a single call to the IDirect3DDevice::EndScene method must bracket all the drawing instructions that make up a single frame. If multiple IDirect3DDevice::BeginScene and IDirect3DDevice::EndScene calls are made while composing a single frame, the accelerator will be unable to correctly resolve hidden surface interactions between triangles executed in different scene contexts.

Applications should not use multiple IDirect3DDevice::BeginScene and IDirect3DDevice::EndScene calls in a frame, even if there are no hidden surface interactions between the triangles in different scene contexts. Some accelerators use scene capture to perform high-quality rendering effects in addition to hidden surface removal. For example, a scene-capturing accelerator may be able to render shadows and semi-transparent objects. These effects rely on the accelerator's ability to process the entire geometric database for a frame and do not work if there are multiple IDirect3DDevice::BeginScene and IDirect3DDevice::EndScene contexts.