Getting started with Silverlight and Pixel Shader 02


Getting started with Silverlight and Pixel Shader 02

See an update about my project at http://wp.me/pIsCU-3e

I’ll continue 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:

Just check the first part @ https://hmadrigal.wordpress.com/2009/09/10/getting-started-with-silverlight-and-pixel-shader/

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 BuildTas Template

I think this last product 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
You can download the WPF FC  from codeplex at http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=wpffx&DownloadId=63200&FileTime=128825198998100000&Build=15691 (please notices that I’m providing a link to a particular build, not the latest).  The project in http://www.codeplex.com is ‘Windows Presentation Foundation Pixel Shader Effects Library’ at http://wpffx.codeplex.com/. Once you have gotten the WPFFX and try to compile it. If it compiles then go ahead to the next section (where it’s the link to my CodePlex Project Xhader)

Trouble shouting  (the previous post also has some trouble shouting items).

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.

You will have to install the “Shader Effects BuildTask and Template”. The project is in codeplex 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

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.

The name ‘PixelFormats’ does not exist in the current context MainPage.xaml.cs 57 148 SLEffectHarness

Basically breaking changes for the SL3.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

The tag ‘Expander’ does not exist in XML namespace ‘clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls’. MainPage.xaml 225 10 SLEffectHarness

The tag ‘Viewbox’ does not exist in XML namespace ‘clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls’. MainPage.xaml 314 13 SLEffectHarnessUpdate 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.

If you run your web project and then this error comes up. To solve this, 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’.System.Windows.Markup.XamlParseException occurredMessage=”Invalid attribute value SearchMode for property Property. [Line: 5772 Position: 26]”LineNumber=5772LinePosition=26StackTrace:at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)at SLEffectHarness.App.InitializeComponent()at SLEffectHarness.App..ctor()InnerException:– OR –System.Windows.Markup.XamlParseException occurredMessage=”Invalid attribute value controls:Expander for property TargetType. [Line: 6281 Position: 45]”LineNumber=6281LinePosition=45StackTrace: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 ApplicationCode: 4004Category: ManagedRuntimeErrorMessage: 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.htmlLine: 54

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.0The 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’, the issue is not triggered.

Error 6 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 WPFTransitionEffectsUnfortunately 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. If you didn’t want to do all this work you might try to download my updated code from:

My code that sum up all this tricky work, my code has been posted at:

http://xhader.codeplex.com/

Regards,

Herberth

Advertisements

2 comments

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s