> ## Name

> cgD3D9UnbindProgram - de-activate a program with D3D

> ## Synopsis

>     #include <Cg/cgD3D9.h>

>     HRESULT cgD3D9UnbindProgram( CGprogram program );

> ## Parameters

> program
>   The program to de-activate with D3D.

> ## Return Values

> Returns D3D_OK if the function succeeds.

> Returns the D3D failure code if the function fails due to a D3D call.

> ## Description

> cgD3D9UnbindProgram de-activates a program with D3D. The program is de-activated using IDirect3DDevice9::SetVertexShader or IDirect3DDevice9::SetPixelShader with a NULL argument depending on the program's profile type.

> ## Examples

>     // vertexProg and pixelProg are CGprograms initialized elsewhere
>     // pDev is an IDirect3DDevice9 interface intialized elsewhere
>     ...
>     HRESULT hr = cgD3D9BindProgram(vertexProg);
>     HRESULT hr2 = cgD3D9BindProgram(pixelProg);
>     // Draw a quad using the vertex and pixel shader
>     // A vertex and index buffer are set up elsewhere.
>     HRESULT hr3 = pDev->DrawIndexedPrimitve(D3DPT_TRIANGLELIST, 0, 4, 0, 2);

>     cgD3D9UnbindProgram(vertexProg);
>     cgD3D9UnbindProgram(pixelProg);

> ## Errors

> cgD3D9Failed is generated if a D3D function returns an error.

> CGD3D9ERR_NOTLOADED is returned if program was not loaded with the cgD3D9LoadProgram.

> CGD3D9ERR_NODEVICE is returned if a required D3D device is NULL. This usually occurs when an expanded interface routine is called but a D3D device has not been set with cgD3D9SetDevice.

> ## History

> cgD3D9UnbindProgram was introduced in Cg 3.0.

> ## See Also

> cgD3D9LoadProgram, cgD3D9BindProgram