Jump to content
  • Advertisement
Sign in to follow this  
sevko

DirectX 9 sprite problem after changing window size

This topic is 2459 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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[j].Open*30*Square[j].Type;
drawRect.right=drawRect.left+29;
drawRect.top=30*Square[j].Status;
drawRect.bottom=drawRect.top+29;
gSprite->Draw(gTexture,&drawRect,NULL,&Square[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);
}

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!