Selecting Reach vs. HiDef

Selecting Reach vs. HiDef

  • Comments 28

When you create a Windows Phone game project, XNA defaults to Reach profile. When you create a Windows or Xbox 360 project, it defaults to HiDef. But it is also possible to target Reach from a Windows or Xbox game! There are two reasons you might want to do this:

  • If you want to distribute your Windows game and have it run on a wide range of computers that do not support HiDef functionality
  • If you are developing on Windows or Xbox, but plan on later porting to Windows Phone, and want to make sure you don't accidentally use graphics features that are not supported on the phone

To use Reach on Windows or Xbox:

  • Right-click your project in Solution Explorer
  • Choose Properties
  • Focus the XNA Game Studio tab, and make your selection


You can also choose profiles at runtime, by setting GraphicsDeviceManager.GraphicsProfile from your Game constructor. It is usually better to specify this via the project properties, though.

  • If you do not explicitly set GraphicsDeviceManager.GraphicsProfile, it defaults to whatever was chosen in the project properties
  • Project properties also control the Content Pipeline build process, so it knows how to validate things like max texture size and supported formats
  • HiDef is a superset of Reach, so if you build content for Reach, you can load the resulting .xnb files into a HiDef graphics device
  • The reverse is not true: you cannot load content that was built for HiDef into a Reach graphics device
  • Hi, I have a few questions.

    - Will the final version of XNA 4.0 will support Windows XP?

    - If so, will we be able to use HiDef and Shader Model 3.0 on Windows XP (assuming that one has GPU that supports DX10), or Windows XP users are forced to Reach?

  • I would be a very happy camper if someone could tell me how to get a hidef graphicsdevice using F# and XNA. I got everything to work with F# and XNA except that. Is it even possible?

  • Never mind, I found it:

    graphics.GraphicsProfile <- GraphicsProfile.HiDef

    It is a case of "finding it when you no longer need it" :)

  • Hi Shawn, first off great blog, I`ve been using it a lot to help me develop this WPF + XNA 4 game I`m working on. I`m having a problem with xnb files copied over from one content project to another.

    What I needed to do was select the Reach profile because the game has to run on a fairly old set of Dell laptops that have very limited GPU capabilities. Thus I have to modify all my textures to use power of two sizes and rebuild them. I can now load the textures fine in a test project that I use just to validate the graphics device can handle the textures and load them properly, but when I copy over the folder of all these .xnbs to my game folder, each time I try and use the content manager via a Reach profile to load one of the textures, it says they are still created for a Hidef profile and I am in Reach. I don`t understand at all what`s happening. When I run the game in hidef with the hidef-built versions on my desktop, it can load the textures fine and I don`t need to limit them to power of twos or 2048x2048 sizes. The exact same code keeps throwing these exceptions, saying that I should be loading these resources in Hidef when I rebuilt them and they load fine in Reach via a real Game-based XNA project.

    Any ideas?

    My exact exception is :

    {Microsoft.Xna.Framework.Content.ContentLoadException: Error loading "_____". This file was compiled for the HiDef profile, and cannot be loaded into a Reach GraphicsDevice.

      at Microsoft.Xna.Framework.Graphics.GraphicsContentHelper.GraphicsDeviceFromContentReader(ContentReader contentReader)

      at Microsoft.Xna.Framework.Content.Texture2DReader.Read(ContentReader input, Texture2D existingInstance)

      at Microsoft.Xna.Framework.Content.ContentReader.InvokeReader[T](ContentTypeReader reader, Object existingInstance)

      at Microsoft.Xna.Framework.Content.ContentReader.ReadObjectInternal[T](Object existingInstance)

      at Microsoft.Xna.Framework.Content.ContentReader.ReadObject[T]()

      at Microsoft.Xna.Framework.Content.ContentReader.ReadAsset[T]()

      at Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[T](String assetName, Action`1 recordDisposableObject)

      at Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetName)

      at _______.TextureManager.LoadAlphaTexture(String path) in ____________________.cs:line 182}

    I did a search for any files containing hidef and it looks like the default content importer assumes a HIdef graphics interpretation unless Reach is explicitly stated. So that if you aren`t using a Content pipeline reference in your project and just instantiating a ContentManager in code, it will throw this type of exception. Is there a way to set my content manager to interpret the XNB files as they truly are, i.e. compiled as Reach? I can`t figure it out.

  • Bela: this error means that whatever project you are using to build these .xnb files is set to HiDef as opposed to Reach profile, in its Visual Studio properties.

    btw. I would recommend the forums for getting help with issues like this: that's a better place than blog comments for tech support discussions!

  • Thanx you little bit help me ^_^

  • It'd be nice if there was a way to get the fatbat's hack functionality officially added. I.e. we should be able to develop for hi-def on a non compliant machine as an option. My card is fully capable of everything required by hidef except two (unused) requirements. Since I'm devloping for xbox360, it's frustrating to be artificially limited by the dev machine rather than the final platform. You're basically forcing us to release a lower quality game due to this limitation, which is a lose-lose for everyone.

  • I'm sorry but I'm really starting to rage at this.. Y.. I don't have this interface. All I'm trying to swap the thing so it'll run a certain popular game going about. Nor do I see any connection between this and any programme in the XNA game studio programme folder.

  • hello! when i did it after the program show me an other error....

    that: No suitale graphics card found.

         Unable to create the graphics device.

    please answer me How can i fix it!


    sorry bad english. ;-)

  • Thanks for the help , worked for me :)

  • can anyone tell me how can i change profile?

  • If you start a new project and then up top on go to "Project" your project name should be the 2nd to last one it would say something like windowsgame1 properties... you can get to it and change it like the first post said

  • Thanks! this it it what i need!

Page 2 of 2 (28 items) 12
Leave a Comment
  • Please add 2 and 8 and type the answer here:
  • Post