1

I found this great tutorial on making a particle system in XNA: http://www.catalinzima.com/tutorials/4-uses-of-vtf/particle-systems/

The problem is that its written for an older version of xna and xna 4.0.

In the DoPhysicsPass method I get this exception:

XNA Framework HiDef profile does not support alpha blending or ColorWriteChannels when using rendertarget format Vector4.

Here is the method that is blowing up

    private void doPhysicsPass(string technique, RenderTarget2D resultTarget)
    {
        GraphicsDevice.SetRenderTarget(temporaryRT);
        GraphicsDevice.Clear(Color.White);
        spriteBatch.Begin();
        physicsEffect.CurrentTechnique = physicsEffect.Techniques[technique];
        if (isPhysicsReset)
        {
            physicsEffect.Parameters["positionMap"].SetValue(positionRT);
            physicsEffect.Parameters["velocityMap"].SetValue(velocityRT);
        }

        physicsEffect.CurrentTechnique.Passes[0].Apply();
        spriteBatch.Draw(randomTexture, new Rectangle(0, 0, particleCount, particleCount), Color.White);
        spriteBatch.End(); //<-----     Exception thrown here

        GraphicsDevice.SetRenderTarget(resultTarget);
        spriteBatch.Begin();
        physicsEffect.CurrentTechnique = physicsEffect.Techniques["CopyTexture"];
        physicsEffect.CurrentTechnique.Passes[0].Apply();
        spriteBatch.Draw(temporaryRT, new Rectangle(0, 0, particleCount, particleCount), Color.White);
        spriteBatch.End();
    }

Here is the initialization of randomTexture:

velocityRT = new RenderTarget2D(GraphicsDevice, particleCount, particleCount, false, 
                                SurfaceFormat.Vector4, DepthFormat.None);

Can anyone offer some suggestions how to fix this?

Neil Knight
  • 47,437
  • 25
  • 129
  • 188
Mr Bell
  • 9,228
  • 18
  • 84
  • 134

1 Answers1

0

First of all, are you sure you're setting the effect on the SpriteBatch correctly? I'm not sure you are. It looks like you've converted the tutorial, which is using the old pre-4.0 way of applying custom render settings (details).

I suspect you either need to be passing SpriteSortMode.Immediate to Begin (note that this will disable batching), or passing in your effect (probably after setting CurrentTechnique).

The second issue is simply explained by the exception. You need to disable alpha blending and ColorWriteChannels. I suspect that ColorWriteChannels is actually disabled anyway (the default). To disable alpha blending, try passing BlendState.Opaque to SpriteBatch.Begin (AlphaBlend is the default).

I've not tried updating the tutorial to XNA 4.0 myself - but I'm pretty sure that fixing either one or both of these things will fix your problem.

Community
  • 1
  • 1
Andrew Russell
  • 26,924
  • 7
  • 58
  • 104