Hi,
Month: September 2009
Shaders in Blend
Hi,
I’ve decided to create a project that lets you use Shaders in Microsoft Blend.
You can check my first RC Alpha at http://xhader.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33162
I hope soon I’ll be posting some videos with samples
PS: Here my first video sample
http://www.youtube.com/watch/v/bQ23vesp_gY
Regards,
Herberth
Getting started with Silverlight and Pixel Shader
Getting started with Silverlight and Pixel Shader
See an update about my project at http://wp.me/pIsCU-3e
Iâll start this thread about my experience while Iâm trying to create an installer for Expression Blend 3 for adding custom (pixel shader) effects.
So letâs get started. First of all we need to write shaders⌠hm⌠Iâm not really good writing pixel shaders Iâll be using the pixel shaders from http://wpffx.codeplex.com/, unfortunately the last updated is based on the SL3 beta.
If you want Iâll be indicating the updated source code so you can skip all this âupdate commentsâ. First Iâve download the âMar 25 2009â release.
Pre requisites:
As far as I remember these products were installed when I started this journey.
- Visual Studio 2008 SP1
- Expression Blend 3
- Silverlight SDK
- Silverlight Toolkit
- Shader Effects BuildTask and Template
I think this requires XNA Framework SDK or Direct X SDK, however Iâm not quite sure because of I have them already installed.
Getting the Windows Presentation Foundation Pixel Shader Effects Library
The project âWindows Presentation Foundation Pixel Shader Effects Libraryâ (aka WPFFX) is hosted in http://www.codeplex.com at http://wpffx.codeplex.com/. You can download the Changeset #15691 of from http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=wpffx&DownloadId=63200&FileTime=128825198998100000&Build=15691
Here we might run into some troubles so, once you have gotten the WPFFX and try to compile it. If it compiles then go ahead to the next section. If not check the following trouble shouting table:
Issues and  Solutions for WPFFX
Issue:Â The “ShaderBuildTask.PixelShaderCompile” task could not be loaded from the assembly ShaderBuildTask, Version=1.0.3072.18169, Culture=neutral, PublicKeyToken=44e467d1687af125. Could not load file or assembly ‘ShaderBuildTask, Version=1.0.3072.18169, Culture=neutral, PublicKeyToken=44e467d1687af125’ or one of its dependencies. The system cannot find the file specified. Confirm that the declaration is correct, and that the assembly and all its dependencies are available.
Solution: You will have to install the âShader Effects BuildTask and Templateâ. The project other project is in codeplex. You can download an specific build at http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=14962 . Please read the readme file about how to install it appropriately. Also you will know how to create projects that uses pixel shaders. For additional information about this build task http://blogs.msdn.com/greg_schechter/archive/2008/08/11/a-visualstudio-buildtask-and-project-and-item-templates-for-writing-shadereffects.aspx
Issue: The type or namespace name ‘Theming’ does not exist in the namespace ‘System.Windows.Controls’ (are you missing an assembly reference?) MainPage.xaml.cs 13 31 SLEffectHarness
You will have to install the âSilverlight Toolkitâ. I downloaded http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24246 (July 2009 release). Once It has been installed, you can copy the assemblies to a folder in your solution or use the assemblies in the default installation folder. The important thing here is to update the references.
Issue:Â The name ‘PixelFormats’ does not exist in the current context MainPage.xaml.cs 57 148
Solution: SLEffectHarness has been affected by breaking changes when moving from Silverlight 2 to Silverlight See:
3.3.19 WriteableBitmap changes
The PixelFormat parameter for the WriteableBitmap constructor has been removed. WriteableBitmap(int pixelWidth, int pixelHeight, PixelFormat format) is now WriteableBitmap(int pixelWidth, int pixelHeight).
The only supported PixelFormat is now Pbgra32.
Similarly, the PixelFormat and PixelFormats type has been removed.
Lock() and Unlock() have been removed.
From http://msdn.microsoft.com/en-us/library/cc645049%28VS.95%29.aspx
Issue:Â The tag ‘Expander’ does not exist in XML namespace ‘clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls’. MainPage.xaml 225 10 SLEffectHarness
— or â
The tag ‘Viewbox’ does not exist in XML namespace ‘clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls’. MainPage.xaml 314 13 SLEffectHarness
Update the namespace and assembly where the controls are stored.
Add a reference to the dll âSystem.Windows.Controls.Toolkit.dllâ.
After xmlns:ctls=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls” Add the following namespace:
xmlns:ctrlsToolkit=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit”
Replace all the âctls:Expanderâ with âctrlsToolkit:Expanderâ
Replace all the âctls:Viewboxâ with âctrlsToolkit:Viewboxâ
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: Could not load file or assembly ‘System.Web.Silverlight’ or one of its dependencies. The system cannot find the file specified.
Solution: Â Remove the Silverlight reference from the properties in your web project. Then remove all the Silverlight pages, and JavaScriptâs for Silverlight, and the ClientBin folder too. Then re add the silverlight project by using the silverlight tab in the web project properties. At last set the âStart up pageâ.
Issue: System.Windows.Markup.XamlParseException occurred
Message=”Invalid attribute value SearchMode for property Property. [Line: 5772 Position: 26]”
LineNumber=5772
LinePosition=26
StackTrace:
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at SLEffectHarness.App.InitializeComponent()
at SLEffectHarness.App..ctor()
InnerException:
— OR —
System.Windows.Markup.XamlParseException occurred
Message=”Invalid attribute value controls:Expander for property TargetType. [Line: 6281 Position: 45]”
LineNumber=6281
LinePosition=45
StackTrace:
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at SLEffectHarness.App.InitializeComponent()
at SLEffectHarness.App..ctor()
InnerException:
XamlParserExceptions are thrown because of there are a couple of Xaml syntax outdated.
Remove the setter tag for the âSearchModeâ property from the following files:
âŚ\WPFSLFx\WPFSLFx\SL\Demo_silverlight\SLEffectHarness\ShinyBlue.xaml(5772)
âŚ\WPFSLFx\WPFSLFx\SL\Demo_silverlight\SLEffectHarness\System.Windows.Controls.Theming.ShinyRed.xaml(5738)
Update namespace controls:Expander and controls:Viewbox. Remember first we need to add the âxmlns:ctrlsToolkitâ namespace, and then we replace the old namespace with this new one. These are the files:
…\WPFSLFx\WPFSLFx\SL\Demo_silverlight\SLEffectHarness\ShinyBlue.xaml(6281)
…\WPFSLFx\WPFSLFx\SL\Demo_silverlight\SLEffectHarness\ShinyBlue.xaml(6286)
…\WPFSLFx\WPFSLFx\SL\Demo_silverlight\SLEffectHarness\System.Windows.Controls.Theming.ShinyRed.xaml(5997)
…\WPFSLFx\WPFSLFx\SL\Demo_silverlight\SLEffectHarness\System.Windows.Controls.Theming.ShinyRed.xaml(6002)
Error: Unhandled Error in Silverlight Application
Code: 4004
Category: ManagedRuntimeError
Message: System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
at System.Windows.FrameworkElement.NotifyDataContextChanged(DataContextChangedEventArgs e)
at System.Windows.FrameworkElement.OnTreeParentUpdated(DependencyObject newParent, Boolean bIsNewParentAlive)
at System.Windows.DependencyObject.UpdateTreeParent(IManagedPeer oldParent, IManagedPeer newParent, Boolean bIsNewParentAlive, Boolean keepReferenceToParent)
at MS.Internal.FrameworkCallbacks.ManagedPeerTreeUpdate(IntPtr oldParentElement, IntPtr parentElement, IntPtr childElement, Byte bIsParentAlive, Byte bKeepReferenceToParent)
Source File: http://localhost:36397/Default.html
Line: 54
Solution: This is a very unusual exception. Unfortunately I havenât been able to solve it. However Iâve noticed some scenarios that trigger this exception. Make sure you have installed Silverlight Runtime 3.0.40818.0 instead of 3.0.40624.0 The error is very a constant in Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5 (.NET CLR 3.5.30729). Internet explorer and Chrome does not fail after updating Silverlight Runtime. If you run the application in âReleaseâ configuration, this issue shouldn’t appear.
Issue:Â The “PixelShaderCompile” task failed unexpectedly.
System.NullReferenceException: Object reference not set to an instance of an object.
at ShaderBuildTask.PixelShaderCompile.Execute()
at Microsoft.Build.BuildEngine.TaskEngine.ExecuteInstantiatedTask(EngineProxy engineProxy, ItemBucket bucket, TaskExecutionMode howToExecuteTask, ITask task, Boolean& taskResult) WPFTransitionEffects.csproj 139 5 WPFTransitionEffects
Solution: Unfortunately I don’t why this happens, it’s solved by closing and reopening the visual studio.
At this time the project should compile and you should be able to see the samples running.
Regards,
Herberth