Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Vsync lag in DirectX 9 Fullscreen


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 f12dude   Members   -  Reputation: 121

Like
0Likes
Like

Posted 13 January 2013 - 10:53 PM

I have vsync enabled in my game. In windowed mode, input lag seems to be much less than compared to fullscreen mode. I've tried to pinpoint where this input lag is coming from while in fullscreen, but I just don't know where to look anymore.

 

This is my windows message loop:

 

do
	{
		MSG msg;
		while(PeekMessage(&msg,0,0,0,PM_REMOVE) > 0)
		{
			if(msg.message == WM_QUIT)
			{
				return false;
			}

			TranslateMessage( &msg );
			DispatchMessage( &msg );
		}
		
		if(m_bPaused)
		{	
			Sleep(20);
		}

	} while(m_bPaused);

	return true;

 

 

And this is how I init directx 9:

 

D3DPRESENT_PARAMETERS m_D3DParameters;

m_D3DParameters.BackBufferWidth            = width;
m_D3DParameters.BackBufferHeight           = height;
m_D3DParameters.BackBufferFormat           = D3DFMT_X8R8G8B8;
m_D3DParameters.BackBufferCount            = 1;
m_D3DParameters.MultiSampleType            = D3DMULTISAMPLE_NONE;
m_D3DParameters.MultiSampleQuality         = 0;
m_D3DParameters.SwapEffect                 = D3DSWAPEFFECT_DISCARD; 
m_D3DParameters.hDeviceWindow              = windowHandle;
m_D3DParameters.Windowed                   = false;
m_D3DParameters.EnableAutoDepthStencil     = true;
m_D3DParameters.AutoDepthStencilFormat     = D3DFMT_D24S8;
m_D3DParameters.Flags                      = 0;
m_D3DParameters.FullScreen_RefreshRateInHz = RefreshRate;
m_D3DParameters.PresentationInterval       = D3DPRESENT_INTERVAL_DEFAULT;

 

 



Sponsor:

#2 mhagain   Crossbones+   -  Reputation: 8136

Like
0Likes
Like

Posted 13 January 2013 - 11:42 PM

Try using D3DPRESENT_INTERVAL_ONE instead of D3DPRESENT_INTERVAL_DEFAULT - see the "Remarks" section at http://msdn.microsoft.com/en-us/library/windows/desktop/bb172585%28v=vs.85%29.aspx for more info on the difference between the two (specifically - if you're not calling timeBeginPeriod yourself then the lower system timer resolution may screw up your input timing too).


It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.


#3 f12dude   Members   -  Reputation: 121

Like
0Likes
Like

Posted 14 January 2013 - 12:51 AM

This does not seem to fix the lag I'm experiencing. For input, I'm using a combination of Raw Input for the mouse along with the keyboard messages from the windows msg queue.

Edit: It seems that creating the directx device with D3DCREATE_SOFTWARE_VERTEXPROCESSING, tends to reduce the input lag. Interesting...

Edited by f12dude, 14 January 2013 - 02:32 AM.


#4 AgentC   Members   -  Reputation: 1390

Like
0Likes
Like

Posted 14 January 2013 - 06:40 AM

I believe the lag is caused by Direct3D rendering frames ahead of time, which means that the actually displayed frames will seem to lag. In Direct3D9 itself, unlike Direct3D11 where the number of frames to render ahead can be altered, there is no good way to control this, except artificially reducing the run-ahead by executing a query and stalling by waiting for its result. I wouldn't necessarily recommend this.

 

See http://www.gamedev.net/topic/580048-dx9-vsync-lag/

 

Software vertex processing reducing the lag is likely caused by the CPU having more work to do, therefore it doesn't get that much ahead.

 

 


Every time you add a boolean member variable, God kills a kitten. Every time you create a Manager class, God kills a kitten. Every time you create a Singleton...

Urho3D (engine)  Hessian (C64 game project)





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS