Chapter 4. How WPF and Silverlight Use Shaders
You can spend your programming days happily working within the comforting confines of .NET’s managed code libraries without ever seeing a smidgen of unmanaged code. The framework team is not stupid, though; they know there are times when you have to call out to a COM library or Win32 DLL to get your job done. So they created hooks in the framework to enable the flow of code between the sheltered world of managed code and the mysterious unmanaged realm. It’s the same story when interoping between HLSL code and Silverlight/WPF classes.
In this chapter, we look at the .NET parts that facilitate the use of
unmanaged HLSL shaders in the visual tree. The UIElement.Effect property is our first stop. It
provides a way to assign a ShaderEffect
to a visual element. Next, we look at some of the classes in the System.Windows.Media.Effects namespace. These
classes (ShaderEffect, PixelShader, etc.) enable the flow of information
to the HLSL world. We’ll examine how to create your own managed wrappers for
HLSL and investigate the prebuilt effects in the System.Windows.Media.Effects namespace and the
Expression Blend libraries.
Note
Remember: on the .NET side, the customary term is effect; on the HLSL side, the preferred term is shader.
Framework Effects
It’s easiest to start our discussion of framework effects by looking
at the two shaders included in the System.Windows.Media.Effects namespace (see
Figure 4-1). By starting
with the BlurEffect and DropShadowEffect ...