Effect.FromFile Method

Language:

How Do I...?

Creates an effect from an ASCII or binary effect description.

Definition

Visual Basic Public Shared Function FromFile( _
    ByVal device As Device, _
    ByVal sourceDataFile As String, _
    ByVal preprocessorDefines() As Macro, _
    ByVal includeFile As Include, _
    ByVal skipConstants As String, _
    ByVal flags As ShaderFlags, _
    ByVal pool As EffectPool, _
    ByRef compilationErrors As String _
) As Effect
C# public static Effect FromFile(
    Device device,
    string sourceDataFile,
    Macro[] preprocessorDefines,
    Include includeFile,
    string skipConstants,
    ShaderFlags flags,
    EffectPool pool,
    out string compilationErrors
);
C++ public:
static EffectFromFile(
    Devicedevice,
    StringsourceDataFile,
    array<Macro>^ preprocessorDefines,
    IncludeincludeFile,
    StringskipConstants,
    ShaderFlags flags,
    EffectPoolpool,
    [Out] String^% compilationErrors
);
JScript public static function FromFile(
    device : Device,
    sourceDataFile : String,
    preprocessorDefines : Macro[],
    includeFile : Include,
    skipConstants : String,
    flags : ShaderFlags,
    pool : EffectPool,
    compilationErrors : String
) : Effect;

Parameters

device Microsoft.DirectX.Direct3D.Device
The Device that creates the effect.
sourceDataFile System.String
A String Leave Site object that indicates the file name.
preprocessorDefines Microsoft.DirectX.Direct3D.Macro[]
Optional array of preprocessor macro definitions. For more information, see Macro.
includeFile Microsoft.DirectX.Direct3D.Include
Optional Include object to use for handling #include directives. If this value is null, #include directives are either honored when compiling from a file, or cause an error when compiled from a resource or memory.
skipConstants System.String
A string of effect parameters that will be ignored by the effect system. The string must be NULL terminated and needs to contain the name of each application-managed constant separated by a semicolon.
flags Microsoft.DirectX.Direct3D.ShaderFlags
One or more compile options identified by the ShaderFlags enumeration.
pool Microsoft.DirectX.Direct3D.EffectPool
An EffectPool object to use for shared parameters. If this value is null, no parameters are shared.
compilationErrors System.String
String that contains a listing of compilation errors.

Return Value

Microsoft.DirectX.Direct3D.Effect
An Effect that contains the compiled effect.

Remarks

Exceptions
InvalidCallException The method call is invalid. For example, a method's parameter might contain an invalid value.
InvalidDataException The data is invalid.
OutOfMemoryException Leave Site Microsoft Direct3D could not allocate sufficient memory to complete the call.

How Do I...?

Using an Effect

This example demonstrates how to use an effect technique that was loaded from a file.

Add effects code to your rendering method, such as OnRender(), in-between calls to Device.BeginScene and Device.EndScene.

  1. Create or obtain access to a high-level shader language (HLSL) file (.fx).
  2. Load the HLSL file using Effect.FromFile.
  3. Set Effect.Technique with the effect's technique.
  4. Use Effect.Begin to obtain the number of passes for the effect.
  5. Create a loop to iterate through all of the effect's passes. Rendering an effect occurs within a loop between calls to Effect.BeginPass and Effect.EndPass. The loop itself is nested between calls to Effect.Begin and Effect.End.
  6. Render each pass within the loop with calls to Effect.BeginPass, Device.DrawPrimitives, and Effect.EndPass.

In the following C# code example, device is assumed to be the rendering Device.

              [C#]
              
public void OnRender () { . . . // Load the effect from file. Effect effect = Effect.FromFile(device, "shadercode.fx", null, ShaderFlags.None, null); // Set the technique. effect.Technique = "ShaderTechnique"; // Note: Effect.Begin returns the number of // passes required to render the effect. int passes = effect.Begin(0); // Loop through all of the effect's passes. for (int i = 0; i < passes; i++) { // Set a shader constant effect.SetValue("WorldMatrix", worldMatrix); // Set state for the current effect pass. effect.BeginPass(i); // Render some primitives. device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1); // End the effect pass effect.EndPass(); } // Must call Effect.End to signal the end of the technique. effect.End(); . . . }

See Also


Send comments about this topic to Microsoft. © Microsoft Corporation. All rights reserved.

Feedback? Please provide us with your comments on this topic.
For more help, visit the DirectX Developer Center