How To Clear the z-buffer in Direct3D Retained Mode (152668)



The information in this article applies to:

  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional

This article was previously published under Q152668

SUMMARY

The IDirect3DRMViewport::Clear function clears a Retained Mode viewport's z-buffer and target rendering surface. You cannot direct this function to clear the z-buffer only. If you need to clear the z-buffer without calling IDirect3DRMViewport::Clear, then you will need to extract the immediate mode viewport from the retained mode viewport and use the low level clear functions in the immediate mode API to clear the z-buffer only.

MORE INFORMATION

A set of normal Retained Mode rendering instructions may look like the following:
   scene->Move(D3DVALUE(1.0));
   view->Clear();
   view->Render(scene);
   rmdev->Update();
				
If you want to render without clearing your target surface, you will need to remove your call to Clear. If you do this, however, your z-buffer will not get cleared and your objects will not be rendered properly. If you obtain the immediate mode viewport associated with your retained mode viewport, you can clear the z-buffer without clearing the target. Call IDirect3DRMViewport::GetDirect3DViewport to retrieve the Direct3D immediate mode viewport and then call the immediate mode viewport's Clear method to clear the z-buffer. You can do this by calling IDirect3DViewport::Clear with the D3DCLEAR_ZBUFFER flag set.

Sample Code

The following code shows how you can modify your rendering calls to achieve this functionality:
LPDIRECT3DVIEWPORT d3dview;

   scene->Move(D3DVALUE(1.0));
   view->GetDirect3DViewport(&d3dview);

   int clearflags;
   D3DRECT rc;
   clearflags = D3DCLEAR_ZBUFFER;
   rc.x1 = rc.y1 = 0;
   rc.x2 = 640;
   rc.y2 = 480;
   d3dview->Clear(1, &rc, clearflags);

   view->Render(scene);
   rmdev->Update();
				

REFERENCES

For more information about DirectX and Direct3D, see the DirectX topic in the Platform SDK. This is available on MSDN and online at

Modification Type:MinorLast Reviewed:3/21/2005
Keywords:kbDirect3dRM kbFAQ kbhowto KB152668