> # NAME

> cgD3D9LoadProgram - create a D3D shader and enable the expanded interface routines

> # SYNOPSIS

>       #include <Cg/cgD3D9.h>

>       HRESULT cgD3D9LoadProgram( CGprogram program,
>                                  CGbool paramShadowing,
>                                  DWORD assemFlags );

> # PARAMETERS

> program

>   A program whose compiled output is used to create the D3D shader.

> paramShadowing

>   Indicates if parameter shadowing is desired for program.

> assemFlags

>   The flags to pass to D3DXAssembleShader. See the D3D documentation for a list of valid flags.

> # RETURN VALUES

> Returns D3D_OK if the function succeeds or program has already been loaded.

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

> # DESCRIPTION

> cgD3D9LoadProgram creates a D3D shader for a program and enables use of expanded interface routines for that program.

> cgD3D9LoadProgram assembles the compiled Cg output for program using D3DXAssembleShader and then creates a D3D shader using IDirect3DDevice9::CreateVertexShader or IDirect3DDevice9::CreatePixelShader depending on the program's profile.

> Parameter shadowing is enabled or disabled for the program with paramShadowing. This behavior can be changed after creating the program by calling cgD3D9EnableParameterShadowing.

> The D3D shader handle is not returned. If the shader handle is desired by the application, the expanded interface should not be used for that program.

> # EXAMPLES

>       // vertexProg is a CGprogram using a vertex profile
>       // pixelProg is a CGprogram using a pixel profile
>       ...
>       HRESULT hr1 = cgD3D9LoadProgram(vertexProg, TRUE, D3DXASM_DEBUG);
>       HRESULT hr2 = cgD3D9LoadProgram(pixelProg, TRUE, 0);

> # ERRORS

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

> CGD3D9ERR_INVALIDPROFILE is returned if program's profile is not a supported D3D profile.

> 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

> cgD3D9LoadProgram was introduced in Cg 1.1.

> # SEE ALSO

> cgD3D9EnableParameterShadowing, cgD3D9ValidateVertexDeclaration, cgD3D9SetDevice