| Microsoft DirectX 8.1 (C++) |
An effect file defines the techniques used. The basic layout of an effect file starts with one or more declarations and then defines each technique for that effect. This sample shows a basic effect file that contains two textures and two techniques. This effect file allows a device that doesn't support single-pass rendering for two textures to use multiple passes to render the textures.
// Declare two textures.
texture tex0; // First texture
texture tex1; // Second texture
// Technique 't0' will render the scene in one pass. The color
// for each pixel is calculated to be tex0 + tex1. Because it uses
// two textures at once, it will work only on cards that support
// multitexture.
technique t0
{
pass p0
{
Texture[0] = <tex0>;
ColorOp[0] = SelectArg1;
ColorArg1[0] = Texture;
Texture[1] = <tex1>;
ColorOp[1] = Add;
ColorArg1[1] = Texture;
ColorArg2[1] = Current;
ColorOp[2] = Disable;
}
}
// Technique 't1' renders the scene in two passes. The first pass sets
// each pixel to the color of tex0. The second pass adds in the color
// of tex1. The result should look identical to the first
// technique. However, this technique can be used on cards that do not
// support multitexture.
technique t1
{
pass p0
{
AlphaBlendEnable = False;
Texture[0] = <tex0>;
ColorOp[0] = SelectArg1;
ColorArg1[0] = Texture;
ColorOp[1] = Disable;
}
pass p1
{
AlphaBlendEnable = True;
SrcBlend = One;
DestBlend = One;
Texture[0] = <tex1>;
ColorOp[0] = SelectArg1;
ColorArg[0] = Texture;
ColorOp[1] = Disable;
}
}
This example shows the basic syntax and layout of a typical effect file.
//
// Sample Effect
// This effect adds two textures, using single pass or multipass technique.
//
texture tex0;
texture tex1;
// Single pass
technique t0
{
pass p0
{
Texture[0] = <tex0>;
Texture[1] = <tex1>;
ColorOp[0] = SelectArg1;
ColorArg1[0] = Texture;
ColorOp[1] = Add;
ColorArg1[1] = Texture;
ColorArg2[1] = Current;
ColorOp[2] = Disable;
}
}
// Multipass
technique t1
{
pass p0
{
Texture[0] = <tex0>;
ColorOp[0] = SelectArg1;
ColorArg1[0] = Texture;
ColorOp[1] = Disable;
}
pass p1
{
AlphaBlendEnable = True;
SrcBlend = One;
DestBlend = One;
Texture[0] = <tex1>;
ColorOp[0] = SelectArg1;
ColorArg1[0] = Texture;
ColorOp[1] = Disable;
}
}