# PreferredBackBufferWidth/Height from GraphicsDeviceManager not working?

It works fine in other "projects" so it has something to do with project. The project im talking about here has tons of classes but nothing with graphicsdevicemanager other than game1.cs game1.cs starts with

    GraphicsDeviceManager graphics;


then in public game1()

        graphics = new GraphicsDeviceManager(this);
graphics.PreferredBackBufferWidth = 1024;


nope, the game is still 800x600. I have also tried adding graphics.ApplyChanges(); while I dont need it in game1 and would be calling twice, still didnt work.

        graphics.PreferredBackBufferWidth = 1024;
graphics.ApplyChanges();


to "Initialize" (graphics' init is still from game1) it works

as you can see, I can fix it by going to Initialize and wasting some resource but I wonder why this is happening ? Im sure someone else in my code doesnt interfere.(I have no idea if something like this exist in properties etc. tho)

• Why do you think doing it in Initialize wastes resources? – William Mariager Aug 7 '12 at 3:34
• well I dont "think" it might be incorrect, I've read it in somewhere else. Basically game1 alredy calls applychanges and you call it twice. of course, its very minimal but should avoid it when possible. What I read might be non-sense as well, I can never be sure. – Newell Aug 7 '12 at 4:13
• @Newell: You're quite right. See this answer for the exact details of why you shouldn't be setting the resolution in Initialize. – Andrew Russell Aug 7 '12 at 5:45
• are you initializing only witdh? I think you should initialize height too... – Blau Aug 7 '12 at 9:30
• @AndrewRussell, What exactly is bad about setting it up twice? You state it in the answer you linked, but you don't say why, but I'm very curious, as I have the creating of the GraphicsDeviceManager in the constructor, but set the resolution in Initialize in my current project. – William Mariager Aug 7 '12 at 14:38

I can think of many different ways that something could be sneaking in and changing the size of your backbuffer. Here are a few guesses:

• Something is hooking PreparingDeviceSettings and then overriding GraphicsDeviceInformation.PresentationParameters.BackBufferWidth/Height during the initial device setup. This seems likely if there is code in the project for configuring multisampling.

• A game component has an Initialize method that is doing the same thing as your own "hack" (please don't do this) and doing the equivalent of ApplyChanges (it could be calling GraphicsDevice.Reset directly, for example).

• The GraphicsDeviceManager class adds itself to Services. This is how Game is able to find it and use it to set up the graphics device in the first place. Perhaps something is using that as a way to go in and mess with it directly?

Probably the best way to determine when this is happening is to hook GraphicsDeviceManager.PreparingDeviceSettings or GraphicsDevice.DeviceResetting (or perhaps something else) with a blank event that contains a breakpoint (or Debugger.Break()). And then inspect the state that is being set up.

The other simple thing to do might be to just full text search your code for the number "600" or "800" and see if that helps you find the code responsible.

Another way, which is slow but will surely find the responsible code, is to step through the entire startup sequence of your game, line-by-line, in the debugger.

Okay there are a couple of basic things i would try.