DotNet编程-星光伴我行

滴滴真谛 水滴石穿

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
List of Examples Converting XNA 3.1 to XNA 4.0
SpriteBlendMode, SaveStateMode
1
2
// XNA 3.1
sprite.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Deferred, SaveStateMode.SaveState);
1
2
// XNA 4.0
sprite.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
1
2
3
// XNA 3.1
// Sort the object layer and player sprite according to depth
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.BackToFront, SaveStateMode.None);
1
2
3
// XNA 4.0
// Sort the object layer and player sprite according to depth
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
1
2
// XNA 3.1
sprite.Begin(SpriteBlendMode.None, SpriteSortMode.Immediate, SaveStateMode.SaveState);
1
2
// XNA 4.0
sprite.Begin(SpriteSortMode.Immediate, BlendState.Opaque);
1
2
3
4
5
6
// XNA 3.1
// Draw the background image.
spriteBatch.Begin(SpriteBlendMode.None);
Viewport viewport = GraphicsDevice.Viewport;
spriteBatch.Draw(background, new Rectangle(0, 0, viewport.Width, viewport.Height), Color.White);
spriteBatch.End();
1
2
3
4
5
// XNA 4.0
// Draw the background image.
spriteBatch.Begin(0, BlendState.Opaque);
spriteBatch.Draw(background, GraphicsDevice.Viewport.Bounds, Color.White);
spriteBatch.End();
RenderState
1
2
3
4
5
6
7
8
9
10
// XNA 3.1
// enable alpha blending and disable depth write
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;
GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = true;
GraphicsDevice.RenderState.AlphaBlendOperation = BlendFunction.Add;
GraphicsDevice.RenderState.AlphaSourceBlend = Blend.One;
GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.One;
GraphicsDevice.RenderState.DepthBufferWriteEnable = false;
1
2
3
4
// XNA 4.0
// enable alpha blending and disable depth write
GraphicsDevice.BlendState = BlendState.AlphaBlend;
GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead;
1
2
3
4
5
// XNA 3.1
// reset blend and depth write
GraphicsDevice.RenderState.AlphaBlendEnable = false;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = false;
GraphicsDevice.RenderState.DepthBufferWriteEnable = true;
1
2
3
4
// XNA 4.0
// reset blend and depth write
GraphicsDevice.BlendState = BlendState.Additive;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
1
2
3
// XNA 3.1
// enable depth buffering
GraphicsDevice.RenderState.DepthBufferEnable = true;
1
2
3
// XNA 4.0
// enable depth buffering
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
1
2
3
4
// XNA 3.1
//disable depth buffering
GraphicsDevice.RenderState.DepthBufferWriteEnable = false;
GraphicsDevice.RenderState.DepthBufferEnable = false;
1
2
3
// XNA 4.0
//disable depth buffering
GraphicsDevice.DepthStencilState = DepthStencilState.None;
1
2
3
4
5
6
// XNA 3.1
// set additive blend (zero on alpha)
GraphicsDevice.RenderState.DepthBufferWriteEnable = false;
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.SourceBlend = Blend.One;
GraphicsDevice.RenderState.DestinationBlend = Blend.One;
1
2
3
4
// XNA 4.0
// set additive blend (zero on alpha)
GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead;
GraphicsDevice.BlendState = BlendState.AlphaBlend;
1
2
3
4
5
// XNA 3.1
// restore blend modes
GraphicsDevice.RenderState.DepthBufferWriteEnable = true;
GraphicsDevice.RenderState.AlphaBlendEnable = false;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = false;
1
2
3
4
// XNA 4.0
// restore blend modes
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
1
2
3
4
5
6
7
// XNA 3.1
// set alpha blend and no depth test or write
GraphicsDevice.RenderState.DepthBufferEnable = false;
GraphicsDevice.RenderState.DepthBufferWriteEnable = false;
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;
GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;
1
2
3
4
// XNA 4.0
// set alpha blend and no depth test or write
GraphicsDevice.DepthStencilState = DepthStencilState.None;
GraphicsDevice.BlendState = BlendState.AlphaBlend;
1
2
3
4
5
// XNA 3.1
// Set suitable renderstates for drawing a 3D model
GraphicsDevice.RenderState.AlphaBlendEnable = false;
GraphicsDevice.RenderState.AlphaTestEnable = false;
GraphicsDevice.RenderState.DepthBufferEnable = true;
1
2
3
4
// XNA 4.0
// Set suitable renderstates for drawing a 3D model
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
1
2
3
4
5
// XNA 3.1
// additive blend
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.SourceBlend = Blend.One;
GraphicsDevice.RenderState.DestinationBlend = Blend.One;
1
2
3
// XNA 4.0
// additive blend
GraphicsDevice.BlendState = BlendState.Additive;
1
2
3
// XNA 3.1
// set additive blend
GraphicsDevice.RenderState.DestinationBlend = Blend.One;
1
2
3
// XNA 4.0
// set additive blend
GraphicsDevice.BlendState = BlendState.Additive;
1
2
3
// XNA 3.1
// set alpha blend
GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;
1
2
3
// XNA 4.0
// set alpha blend
GraphicsDevice.BlendState = BlendState.AlphaBlend;
1
2
// XNA 3.1
GraphicsDevice.RenderState.CullMode = CullMode.CullCounterClockwiseFace;
1
2
// XNA 4.0
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// XNA 3.1
// set render states
GraphicsDevice.RenderState.DepthBufferEnable = false;
GraphicsDevice.RenderState.DepthBufferWriteEnable = false;
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.SourceBlend = Blend.One;
GraphicsDevice.RenderState.DestinationBlend = Blend.One;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = true;
GraphicsDevice.RenderState.AlphaBlendOperation = BlendFunction.Add;
GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.Zero;
GraphicsDevice.RenderState.AlphaSourceBlend = Blend.Zero;
      // drawing code here..
// restore render states
GraphicsDevice.RenderState.DepthBufferEnable = true;
GraphicsDevice.RenderState.DepthBufferWriteEnable = true;
GraphicsDevice.RenderState.AlphaBlendEnable = false;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = false;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// XNA 4.0
//save the states
DepthStencilState ds = GraphicsDevice.DepthStencilState;
BlendState bs = GraphicsDevice.BlendState;
//set render states
GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead;
GraphicsDevice.BlendState = BlendState.AlphaBlend;
       // drawing code here..
// restore render states
GraphicsDevice.DepthStencilState = ds;
GraphicsDevice.BlendState = bs;
Effect and EffectPass, Begin(), End(), CommitChanges(), Clone()
1
2
3
4
5
6
7
// apply effect XNA 3.1
blurEffect.CommitChanges();
blurEffect.Begin(SaveStateMode.SaveState);
blurEffect.CurrentTechnique.Passes[0].Begin();
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);
blurEffect.CurrentTechnique.Passes[0].End();
blurEffect.End();
1
2
3
// apply effect XNA 4.0
blurEffect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);
1
2
3
// XNA 3.1
// commit effect changes
effect.CommitChanges();
1
2
3
// XNA 4.0
//  you will need to call EffectPass.Apply() if any of the effect properties change
// Otherwise Delete it.
1
2
3
4
// XNA 3.1
// begin effect
effect.Begin(SaveStateMode.SaveState);
effect.CurrentTechnique.Passes[0].Begin();
1
2
3
// XNA 4.0
// begin effect
effect.CurrentTechnique.Passes[0].Apply();
1
2
3
4
// XNA 3.1
// end effect
effect.CurrentTechnique.Passes[0].End();
effect.End();
1
2
// XNA 4.0
// Delete it. No longer needed.
1
2
3
// XNA 3.1
// Make a clone of our replacement effect
Effect newEffect = replacementEffect.Clone(replacementEffect.GraphicsDevice);
1
2
3
// XNA 4.0
// Make a clone of our replacement effect. 3.1
Effect newEffect = replacementEffect.Clone();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// XNA 3.1
// Activate the appropriate effect technique
postprocessEffect.CurrentTechnique = postprocessEffect.Techniques[effectTechniqueName];    
// Draw a fullscreen sprite to apply the postprocessing effect.
spriteBatch.Begin(SpriteBlendMode.None,SpriteSortMode.Immediate, SaveStateMode.None);
postprocessEffect.Begin();
postprocessEffect.CurrentTechnique.Passes[0].Begin();
spriteBatch.Draw(sceneRenderTarget.GetTexture(), Vector2.Zero, Color.White);
spriteBatch.End();
postprocessEffect.CurrentTechnique.Passes[0].End();
postprocessEffect.End();
1
2
3
4
5
6
7
8
// XNA 4.0
// Activate the appropriate effect technique
postprocessEffect.CurrentTechnique = postprocessEffect.Techniques[effectTechniqueName];
// Draw a fullscreen sprite to apply the postprocessing effect.
spriteBatch.Begin(0, BlendState.Opaque, null, null, null, postprocessEffect);
spriteBatch.Draw(sceneRenderTarget, Vector2.Zero, Color.White);
spriteBatch.End();
ShaderProfile, TotalRealTime, TransparentBlack
1
2
3
// XNA 3.1
graphics.MinimumPixelShaderProfile = ShaderProfile.PS_3_0; //any PS number...
graphics.MinimumVertexShaderProfile = ShaderProfile.VS_3_0;//any VS number...
1
2
// XNA 4.0
// Delete it. No longer needed.
1
2
// XNA 3.1
float myTime = (float)gameTime.TotalRealTime.TotalSeconds * 0.2f;
1
2
// XNA 4.0
float myTime = (float)gameTime.TotalGameTime.TotalSeconds * 0.2f;
1
2
// XNA 3.1
GraphicsDevice.Clear(Color.TransparentBlack);
1
2
// XNA 4.0
GraphicsDevice.Clear(Color.Transparent);
ResolveTexture2D, ResolveBackBuffer, RenderTarget2D, GetTexture, DepthStencilBuffer, PresentationParameters, MultiSampleType, MultiSampleQuality, SetRenderTarget
1
2
// XNA 3.1
ResolveTexture2D sceneMap;
1
2
// XNA 4.0
RenderTarget2D sceneMap;
1
2
3
4
5
6
// XNA 3.1
// Look up the resolution and format of our main backbuffer.
PresentationParameters pp = GraphicsDevice.PresentationParameters;
// Create a texture for reading back the backbuffer contents.
sceneMap = new ResolveTexture2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, 1, pp.BackBufferFormat);
1
2
3
4
5
6
7
8
9
10
11
// XNA 4.0
// Look up the resolution and format of our main backbuffer.
PresentationParameters pp = GraphicsDevice.PresentationParameters;
// Create a texture for reading back the backbuffer contents.
sceneMap = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, false, pp.BackBufferFormat,
                                pp.DepthStencilFormat);
//or
sceneMap = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, false, pp.BackBufferFormat,
                                pp.DepthStencilFormat, pp.MultiSampleCount, RenderTargetUsage.DiscardContents);
1
2
// XNA 3.1
GraphicsDevice.ResolveBackBuffer(sceneMap);
1
2
// XNA 4.0
GraphicsDevice.SetRenderTarget(sceneMap);
1
2
3
4
5
6
// XNA 3.1
int width = GraphicsDevice.Viewport.Width;
int height = GraphicsDevice.Viewport.Height;
// create render target
myRenderTarget = new RenderTarget2D(GraphicsDevice, width, height, 1, SurfaceFormat.Color);
1
2
3
4
5
6
// XNA 4.0
int width = GraphicsDevice.Viewport.Width;
int height = GraphicsDevice.Viewport.Height;
// create render target
myRenderTarget = new RenderTarget2D(GraphicsDevice, width, height, true, SurfaceFormat.Color, DepthFormat.Depth24);
1
2
3
4
5
6
// XNA 3.1
PresentationParameters pp = GraphicsDevice.PresentationParameters;
// Create custom rendertarget
sceneRenderTarget = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, 1,
                                   pp.BackBufferFormat, pp.MultiSampleType, pp.MultiSampleQuality);
1
2
3
4
5
6
7
// XNA 4.0
PresentationParameters pp = GraphicsDevice.PresentationParameters;
// Create custom rendertarget
sceneRenderTarget = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, false,
                                   pp.BackBufferFormat, pp.DepthStencilFormat, pp.MultiSampleCount,
                                   RenderTargetUsage.DiscardContents);
1
2
3
4
5
6
7
8
9
// XNA 3.1
PresentationParameters pp = GraphicsDevice.PresentationParameters;
// Setup a DepthBuffer
drawBuffer = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, 1,
                                SurfaceFormat.Color, pp.MultiSampleType, pp.MultiSampleQuality);
drawDepthBuffer = new DepthStencilBuffer(GraphicsDevice, pp.AutoDepthStencilFormat,
                                            pp.MultiSampleType, pp.MultiSampleQuality);
1
2
3
4
5
6
7
8
// XNA 4.0
PresentationParameters pp = GraphicsDevice.PresentationParameters;
// Setup a DepthBuffer
drawBuffer = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, true,
                                SurfaceFormat.Color,DepthFormat.Depth24Stencil8,
                                pp.MultiSampleCount, RenderTargetUsage.DiscardContents);
//NOTE:  DepthStencilBuffer class no longer exists
1
2
// XNA 3.1
spriteBatch.Draw(myRenderTarget.GetTexture(), Vector2.Zero, Color.White);
1
2
// XNA 4.0
spriteBatch.Draw(myRenderTarget, Vector2.Zero, Color.White); // NOTE: ".GetTexure()"  No longer needed
1
2
// XNA 3.1
Texture2D myTexture = myRenderTarget.GetTexture();
1
2
// XNA 4.0
Texture2D myTexture = myRenderTarget; // NOTE: ".GetTexure()"  No longer needed
1
2
// XNA 3.1
GraphicsDevice.SetRenderTarget(0, myRenderTarget);
1
2
// XNA 4.0
GraphicsDevice.SetRenderTarget(myRenderTarget);
1
2
3
4
// XNA 3.1
// Set the two render targets
GraphicsDevice.SetRenderTarget(0, colorRT);
GraphicsDevice.SetRenderTarget(1, depthRT);
1
2
3
// XNA 4.0
// Set the two render targets
GraphicsDevice.SetRenderTargets(colorRT, depthRT);
1
2
// XNA 3.1
GraphicsDevice.SetRenderTarget(0, null);
1
2
// XNA 4.0
GraphicsDevice.SetRenderTarget(null);
1
2
3
4
5
6
7
8
9
// XNA 3.1
// resolve the backbuffer as the depth map
GraphicsDevice.ResolveBackBuffer(depthMap);
// draw the scene image again, blur it with the depth map
GraphicsDevice.Textures[1] = depthMap;
Viewport viewport = GraphicsDevice.Viewport;
dofEffect.CurrentTechnique = depthBlurTechnique;
DrawFullscreenQuad(sceneMap, viewport.Width, viewport.Height, dofEffect);
1
2
3
4
5
6
7
8
9
10
// XNA 4.0
// resolve the backbuffer as the depth map
GraphicsDevice.SetRenderTarget(null);
// draw the scene image again, blur it with the depth map
GraphicsDevice.Textures[1] = depthMap;
GraphicsDevice.SamplerStates[1] = SamplerState.PointClamp;
Viewport viewport = GraphicsDevice.Viewport;
dofEffect.CurrentTechnique = depthBlurTechnique;
DrawFullscreenQuad(sceneMap, viewport.Width, viewport.Height, dofEffect);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// XNA 3.1
ResolveTexture2D resolveTarget;
RenderTarget2D renderTarget1;
RenderTarget2D renderTarget2;
// Look up the resolution and format of our main backbuffer.
PresentationParameters pp = GraphicsDevice.PresentationParameters;
int width = pp.BackBufferWidth;
int height = pp.BackBufferHeight;
SurfaceFormat format = pp.BackBufferFormat;
// Create a texture for reading back the backbuffer contents.
resolveTarget = new ResolveTexture2D(GraphicsDevice, width, height, 1, format);
// Create two rendertargets half size for the bloom processing.
width /= 2;
height /= 2;
renderTarget1 = new RenderTarget2D(GraphicsDevice, width, height, 1,format);
renderTarget2 = new RenderTarget2D(GraphicsDevice, width, height, 1,format);
// ... In the Draw Method...
GraphicsDevice.ResolveBackBuffer(resolveTarget);
// ...apply effect and draw pass 1...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// XNA 4.0
RenderTarget2D sceneRenderTarget;
RenderTarget2D renderTarget1;
RenderTarget2D renderTarget2;
// Look up the resolution and format of our main backbuffer.
PresentationParameters pp = GraphicsDevice.PresentationParameters;
int width = pp.BackBufferWidth;
int height = pp.BackBufferHeight;
SurfaceFormat format = pp.BackBufferFormat;
// Create a texture for rendering the main scene, prior to applying bloom.
sceneRenderTarget = new RenderTarget2D(GraphicsDevice, width, height, false,
                                       format, pp.DepthStencilFormat, pp.MultiSampleCount,
                                       RenderTargetUsage.DiscardContents);
// Create two rendertargets half size for the bloom processing.
width /= 2;
height /= 2;
renderTarget1 = new RenderTarget2D(GraphicsDevice, width, height, false, format, DepthFormat.None);
renderTarget2 = new RenderTarget2D(GraphicsDevice, width, height, false, format, DepthFormat.None);
// ...In the Draw Method...
GraphicsDevice.SetRenderTarget(sceneRenderTarget);
GraphicsDevice.SamplerStates[1] = SamplerState.LinearClamp;
// ...apply effect and draw pass 1....
VertexDeclaration, Vertices, VertexElements, SizeInBytes
1
2
3
// XNA 3.1
// Vertex declaration for rendering our 3D model.
GraphicsDevice.VertexDeclaration = new VertexDeclaration(VertexPositionTexture.VertexElements);
1
2
// XNA 4.0
// Delete it. No longer needed.
1
2
3
4
// XNA 3.1
// set vertex buffer and declaration
GraphicsDevice.VertexDeclaration = vertexDeclaration;
GraphicsDevice.Vertices[0].SetSource(vertexBuffer, 0, VertexPositionTexture.SizeInBytes);
1
2
3
// XNA 4.0
// set vertex buffer and declaration
GraphicsDevice.SetVertexBuffer(vertexBuffer);
1
2
3
// XNA 3.1
// create vertex declaration
vertexDeclaration = new VertexDeclaration(GraphicsDevice, VertexPositionTexture.VertexElements);
1
2
3
// XNA 4.0
// create vertex declaration
vertexDeclaration = new VertexDeclaration(VertexPositionTexture.VertexDeclaration.GetVertexElements());
1
2
3
4
// XNA 3.1
// reset vertex buffer declaration
GraphicsDevice.VertexDeclaration = null;
GraphicsDevice.Vertices[0].SetSource(null, 0, 0);
1
2
3
// XNA 4.0
// reset vertex buffer declaration
GraphicsDevice.SetVertexBuffer(null);
1
2
3
4
5
6
7
// XNA 3.1
// the vertices array
VertexPositionNormalTexture[] vertices = new VertexPositionNormalTexture[100];
// set new particles to vertex buffer
vertexBuffer.SetData<VertexPositionNormalTexture>(VertexPositionNormalTexture.SizeInBytes * vertexCount,
                    vertices,vertexCount,count,VertexPositionNormalTexture.SizeInBytes);
1
2
3
4
5
6
// XNA 4.0
// the vertices array
VertexPositionNormalTexture[] vertices = new VertexPositionNormalTexture[100];
// set new particles to vertex buffer
vertexBuffer.SetData<VertexPositionNormalTexture>(vertices);
VertexBuffer, StreamOffset, VertexStride, IndexBuffer, BaseVertex
1
2
3
4
5
6
7
8
9
10
11
12
// XNA 3.1
// for each mesh part
foreach (ModelMeshPart meshPart in mesh.MeshParts)
{
    // if primitives to render
    if (meshPart.PrimitiveCount > 0)
    {
        // setup vertices and indices
        GraphicsDevice.VertexDeclaration = meshPart.VertexDeclaration;
        GraphicsDevice.Vertices[0].SetSource(mesh.VertexBuffer, meshPart.StreamOffset, meshPart.VertexStride);
        GraphicsDevice.Indices = mesh.IndexBuffer;
        ...
1
2
3
4
5
6
7
8
9
10
11
12
13
// XNA 4.0
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap; // may be needed in some cases...
// for each mesh part
foreach (ModelMeshPart meshPart in mesh.MeshParts)
{
    // if primitives to render
    if (meshPart.PrimitiveCount > 0)
    {
        // setup vertices and indices
        GraphicsDevice.SetVertexBuffer(meshPart.VertexBuffer);
        GraphicsDevice.Indices = meshPart.IndexBuffer;
        ...
1
2
3
4
5
// XNA 3.1
// draw primitives
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList,
    meshPart.BaseVertex, 0, meshPart.NumVertices,
    meshPart.StartIndex, meshPart.PrimitiveCount);
1
2
3
4
// XNA 4.0
// draw primitives
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0,
    meshPart.NumVertices, meshPart.StartIndex, meshPart.PrimitiveCount);
Points, PointSpriteEnable, PointSizeMax, PointList
1
2
3
4
// XNA 3.1
// create the vertex buffer
vertexBuffer = new VertexBuffer(GraphicsDevice, typeof(VertexPositionNormalTexture),
                                250, BufferUsage.WriteOnly | BufferUsage.Points);
1
2
3
4
// XNA 4.0
// create the vertex buffer
vertexBuffer = new VertexBuffer(GraphicsDevice, typeof(VertexPositionNormalTexture),
                                250, BufferUsage.WriteOnly | BufferUsage.None);
1
2
3
4
// XNA 3.1
// enable point sprite 3.1
GraphicsDevice.RenderState.PointSpriteEnable = true;
GraphicsDevice.RenderState.PointSizeMax = 128;
1
2
// XNA 4.0
// Delete it. No longer available.
1
2
3
// XNA 3.1
// draw the point sprites
GraphicsDevice.DrawPrimitives(PrimitiveType.PointList, vertexPosition, numberVertices);
1
2
3
// XNA 4.0
// draw the point sprites
GraphicsDevice.DrawPrimitives(PrimitiveType.LineList, vertexPosition, numberVertices);
OpenContainer, BeginShowStorageDeviceSelector, EndShowStorageDeviceSelector, Path, TitleLocation, FileStream
1
2
3
// XNA 3.1
// open the container
StorageContainer storageContainer = storageDevice.OpenContainer("YourGameName");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// XNA 4.0
//To make life easier simply create a method to replace the storageDevice.OpenContainer...
/// <summary>
/// Synchronously opens storage container
/// </summary>
private static StorageContainer OpenContainer(StorageDevice storageDevice, string saveGameName)
{
    IAsyncResult result = storageDevice.BeginOpenContainer(saveGameName, null, null);
    // Wait for the WaitHandle to become signaled.
    result.AsyncWaitHandle.WaitOne();
    StorageContainer container = storageDevice.EndOpenContainer(result);
    // Close the wait handle.
    result.AsyncWaitHandle.Close();
    return container;
}
// open the container
StorageContainer storageContainer = OpenContainer(storageDevice, "YourGameName");
1
2
3
// XNA 3.1
// retrieve the storage device
Guide.BeginShowStorageDeviceSelector(GetStorageDeviceResult, retrievalDelegate);
1
2
3
4
5
6
// XNA 4.0
// retrieve the storage device
if (!Guide.IsVisible)
{
    StorageDevice.BeginShowSelector(GetStorageDeviceResult, retrievalDelegate);
}
1
2
3
// XNA 3.1
// retrieve and store the storage device
storageDevice = Guide.EndShowStorageDeviceSelector(result);
1
2
3
// XNA 4.0
// retrieve and store the storage device
storageDevice = StorageDevice.EndShowSelector(result);
1
2
3
// XNA 3.1
// get the level setup files
string[] filenames = Directory.GetFiles(storageContainer.Path, "LevelSetup*.xml");
1
2
3
// XNA 4.0
// get the level setup files
string[] filenames = storageContainer.GetFileNames("LevelSetup*.xml"");
1
2
3
4
5
6
// XNA 3.1
// save game level data
using (FileStream stream = new FileStream(Path.Combine(storageContainer.Path, levelFilename), FileMode.Create))
{
    new XmlSerializer(typeof(SaveGameLevel)).Serialize(stream, levelData);
}
1
2
3
4
5
6
// XNA 4.0
// save game level data
using (Stream stream = storageContainer.OpenFile(levelFilename, FileMode.Create))
{
    new XmlSerializer(typeof(SaveGameLevel)).Serialize(stream, levelData);
}
1
2
3
4
5
6
7
8
9
// XNA 3.1
// Delete the saved game level data.
using (StorageContainer storageContainer = storageDevice.OpenContainer("saveGameName"))
{
    File.Delete(Path.Combine(storageContainer.Path, saveGameLevel.FileName));
    File.Delete(Path.Combine(storageContainer.Path, "SaveGameLevel" +
        Path.GetFileNameWithoutExtension(saveGameLevel.FileName).Substring(8) +".xml"));
}
1
2
3
4
5
6
7
8
9
// XNA 4.0
// Delete the saved game level data. NOTE: using OpenContainer method created in previous example
using (StorageContainer storageContainer = OpenContainer(storageDevice, "saveGameName"))
{
    storageContainer.DeleteFile(saveGameLevel.FileName);
    storageContainer.DeleteFile("SaveGameLevel" +
        Path.GetFileNameWithoutExtension(saveGameLevel.FileName).Substring(8) + ".xml");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// XNA 3.1
//Load the Next Level...
// Find the path of the next level.
string levelPath;
// Loop here so we can try again when we can't find a level.
while (true)
{
    // Try to find the next level. They are sequentially numbered txt files.
    levelPath = String.Format("Levels/{0}.txt", ++levelIndex);
    levelPath = Path.Combine(StorageContainer.TitleLocation, "Content/" + levelPath);
    if (File.Exists(levelPath))
        break;
    // If there isn't even a level 0, something has gone wrong.
    if (levelIndex == 0)
        throw new Exception("No levels found.");
    // Whenever we can't find a level, start over again at 0.
    levelIndex = -1;
}
// Unloads the content for the current level before loading the next one.
if (level != null)
    level.Dispose();
// Load the level.
level = new Level(Services, levelPath);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// XNA 4.0
// Load the Next Level...
// move to the next level
levelIndex = (levelIndex + 1) % numberOfLevels;
// Unloads the content for the current level before loading the next one.
if (level != null)
    level.Dispose();
// Load the level.
string levelPath = string.Format("Content/Levels/{0}.txt", levelIndex);
using (Stream fileStream = TitleContainer.OpenStream(levelPath))
    level = new Level(Services, fileStream, levelIndex);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// XNA 3.1
//Save the current state of the session, with the given storage device.
// check the parameter
if ((storageDevice == null) || !storageDevice.IsConnected)
{
    return;
}
// open the container
using (StorageContainer storageContainer = storageDevice.OpenContainer(Session.SaveGameContainerName))
{
    string filename;
    string descriptionFilename;
    // get the filenames
    if (overwriteDescription == null)
    {
        int saveGameIndex = 0;
        string testFilename;
        do
        {
            saveGameIndex++;
            testFilename = Path.Combine(storageContainer.Path, "SaveGame" + saveGameIndex.ToString() + ".xml");
        }
        while (File.Exists(testFilename));
        filename = testFilename;
        descriptionFilename = "SaveGameDescription" + saveGameIndex.ToString() + ".xml";
    }
    else
    {
        filename = Path.Combine(storageContainer.Path, overwriteDescription.FileName);
        descriptionFilename = "SaveGameDescription" +
            Path.GetFileNameWithoutExtension(overwriteDescription.FileName).Substring(8) + ".xml";
    }
    using (FileStream stream = new FileStream(filename, FileMode.Create))
    {
        using (XmlWriter xmlWriter = XmlWriter.Create(stream))
        {
            //create and write xml data...
        }
    }
   // create the save game description
    SaveGameDescription description = new SaveGameDescription();
    description.FileName = Path.GetFileName(filename);
    description.ChapterName = IsQuestLineComplete ? "Quest Line Complete" : Quest.Name;
    description.Description = DateTime.Now.ToString();
    using (FileStream stream = new FileStream(Path.Combine(storageContainer.Path, descriptionFilename), FileMode.Create))
    {
        new XmlSerializer(typeof(SaveGameDescription)).Serialize(stream, description);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// XNA 4.0
//Save the current state of the session, with the given storage device.
// check the parameter
if ((storageDevice == null) || !storageDevice.IsConnected)
{
    return;
}
// open the container Note: using OpenContainer method from previous examples
using (StorageContainer storageContainer = OpenContainer(storageDevice, Session.SaveGameContainerName))
{
    string filename;
    string descriptionFilename;
    // get the filenames
    if (overwriteDescription == null)
    {
        int saveGameIndex = 0;
        string testFilename;
        do
        {
            saveGameIndex++;
            testFilename = "SaveGame" + saveGameIndex.ToString() + ".xml";
        }
        while (storageContainer.FileExists(testFilename));
        filename = testFilename;
        descriptionFilename = "SaveGameDescription" + saveGameIndex.ToString() + ".xml";
    }
    else
    {
        filename = overwriteDescription.FileName;
        descriptionFilename = "SaveGameDescription" +
            Path.GetFileNameWithoutExtension(overwriteDescription.FileName).Substring(8) + ".xml";
    }
    // Note: using Stream instead of FileStream...
    using (Stream stream = storageContainer.OpenFile(filename, FileMode.Create))
    {
        using (XmlWriter xmlWriter = XmlWriter.Create(stream))
        {
            //create and write xml data...
        }
    }
    // create the save game description
    SaveGameDescription description = new SaveGameDescription();
    description.FileName = Path.GetFileName(filename);
    description.ChapterName = IsQuestLineComplete ? "Quest Line Complete" : Quest.Name;
    description.Description = DateTime.Now.ToString();
    // Note: using Stream instead of FileStream...
    using (Stream stream = storageContainer.OpenFile(descriptionFilename, FileMode.Create))
    {
        new XmlSerializer(typeof(SaveGameDescription)).Serialize(stream, description);
    }
}
VertexShader, PixelShader, ps_1_x
Inside your shader (*.fx) files…
1
2
3
4
5
6
7
8
9
// XNA 3.1
VertexShaderOutput VertexShader(...)
{
    //some code
}
float4 PixelShader(...)
{
   // some code
}
1
2
3
4
5
6
7
8
9
10
11
// XNA 4.0
// VertexShader can not be used
VertexShaderOutput  VertexShaderFunction(...)
{
   // some code
}
// PixelShader can not be used
float4 PixelShaderFunction(...)
{
   // some code
}
1
2
3
4
5
6
7
8
9
// XNA 3.1
technique
{
    pass
    {
        VertexShader = compile vs_1_1 VertexShader();
        PixelShader  = compile ps_1_1 PixelShader();
    }
}
1
2
3
4
5
6
7
8
9
// XNA 4.0
technique
{
    pass
    {
        VertexShader = compile vs_2_0 VertexShaderFunction(); //VertexShader can not be used & set vs higher than 1_1
        PixelShader  = compile ps_2_0 PixelShaderFunction(); //PixelShader can not be used & set ps higher than 1_1
    }
}

XNA Model drawn inside out, slightly transparent, missing parts or just looks wrong

Add the following code before the XNA Model Draw code

 

1
2
3
4
5
// Set suitable renderstates for drawing a 3D model
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
// your model draw code starts here...


posted on 2012-02-16 13:48  DotNet编程  阅读(377)  评论(0编辑  收藏  举报