Jump to content

  • Log In with Google      Sign In   
  • Create Account

DirectX 9 sprite problem after changing window size


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
No replies to this topic

#1 sevko   Members   -  Reputation: 100

Like
0Likes
Like

Posted 20 February 2012 - 10:49 AM

Hi. I'm making a minesweeper programme using directx with WinApi to draw the tiles. I've noticed that when i resize the window the sprites resize with it automaticly. So the problem I have is when the difficulty is changed the window size changes accordingly. And after I change the window size it looks like this:
http://shrani.najdi....ctxhalfsize.jpg
This makes sense because of the auto resize with the window resize so I decided I would just reinitialise DirectX so that the changed handle would be used to create the new D3D device. But when i reinitialise it it renders this:
http://shrani.najdi....einitialise.jpg
Just a black screen. Nor the Render or Initialise directx function return any errors. How could I fix this?

Render function
void Board::Render(){
RECT drawRect;
HRESULT hr=gD3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
if (FAILED(hr)){
  return;
}

hr=gD3dDevice->BeginScene();
if (SUCCEEDED(hr)){
  gSprite->Begin(D3DXSPRITE_ALPHABLEND);
  for (int i=0;i<Visina[NastavljenaTezavnost];i++)
   for (int j=0;j<Sirina[NastavljenaTezavnost];j++){
	drawRect.left=Square[i][j].Open*30*Square[i][j].Type;
	drawRect.right=drawRect.left+29;
	   drawRect.top=30*Square[i][j].Status;
	drawRect.bottom=drawRect.top+29;
	gSprite->Draw(gTexture,&drawRect,NULL,&Square[i][j].Pos,0xFFFFFFFF);
  }
  gSprite->End();
  gD3dDevice->EndScene();
  gD3dDevice->Present(NULL,NULL,NULL,NULL);
}
}

Initialise Direct X function
bool InitialiseDirectX(HWND hWnd)
{
gD3dObject=Direct3DCreate9(D3D_SDK_VERSION);
if (gD3dObject==NULL)
  return FALSE;

D3DPRESENT_PARAMETERS presParams;
ZeroMemory(&presParams,sizeof(presParams));
presParams.Windowed=TRUE;
presParams.SwapEffect=D3DSWAPEFFECT_DISCARD;
presParams.BackBufferFormat=D3DFMT_UNKNOWN;
presParams.BackBufferCount=1;

HRESULT hr=gD3dObject->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,
  D3DCREATE_HARDWARE_VERTEXPROCESSING, &presParams, &gD3dDevice);
if (FAILED(hr))
{
processing so fall back to software:
  hr=gD3dObject->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,
   D3DCREATE_SOFTWARE_VERTEXPROCESSING, &presParams, &gD3dDevice);
  if (FAILED(hr))
   return FALSE;
}
return TRUE;
}

Part of the function where I change the window size according to the difficulty
if(Square[WindowSizeY][WindowSizeX].Type == 10 && Square[WindowSizeY][WindowSizeX].Status!=1)
		if(MessageBox(g_hWnd, "Poraz", "LOOLOL", MB_OK)){
			CreateBoard();
			CreateInstances();
			SetWindowPos(g_hWnd, HWND_TOP, 0, 0, (30*g_Board->Sirina[g_Board->NastavljenaTezavnost])+(2*SirinaRoba)+60,
			   		  (30*g_Board->Visina[g_Board->NastavljenaTezavnost])+VisinaRoba+VisinaKapsna+120, SWP_NOMOVE | SWP_NOREPOSITION);
			SetWindowPos(g_hWnd_junior, HWND_TOP, 0, 0, (30*g_Board->Sirina[g_Board->NastavljenaTezavnost]),
			   		  (30*g_Board->Visina[g_Board->NastavljenaTezavnost]), SWP_NOMOVE | SWP_NOREPOSITION);
			if (gD3dObject){
				gD3dObject->Release();
				gD3dObject = NULL;
			}
			if (gD3dDevice){
				gD3dDevice->Release();
				gD3dDevice = NULL;
			}
			InitialiseDirectX(g_hWnd_junior);		
		}


Sponsor:



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