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; } }