• Advertisement
Sign in to follow this  

DirectX 9 sprite problem after changing window size

This topic is 2257 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