I'm trying to load compressed images to a sprite object with C++,
using a LPD3DXSPRITE and the D3DXCreateTextureFromFileEx() function
to load it and of course D3DXGetImageInfoFromFile() to get some info,
but I don't know how to go about it.
How do I decompress them before loading them to memory and then to sprite?
Can I load images using another method, one which I have yet to discover?
This should be possible, maybe I'm going about this the wrong way.
I remember Warcraft3 have some .mpq files, which, I'm guessing, also
are compressed images as well as models, and they obviously knew
how to do this. :P
LPDIRECT3D9 d3d = NULL;
D3DPRESENT_PARAMETERS d3dpp;
LPDIRECT3DDEVICE9 d3ddev;
LPD3DXSPRITE spr;
D3DXIMAGE_INFO img_info;
LPDIRECT3DTEXTURE9 texture;
HWND hWnd;
void LoadD3D(){
if(FAILED(d3d = Direct3DCreate9(D3D_SDK_VERSION))){
MessageBox(NULL, "Failed to create D3D interface. Possible cause(s): Resolution; wrong window dimensions", "Error", MB_OK);
PostQuitMessage(0);
}
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferWidth = GetSystemMetrics(SM_CXSCREEN);
d3dpp.BackBufferHeight = GetSystemMetrics(SM_CYSCREEN);
d3dpp.hDeviceWindow = hWnd;
d3dpp.Windowed = FALSE;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
if(FAILED(d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
GetGameWindow()->Handle(),
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,
&d3ddev)))
{
MessageBox(NULL, "Failed to create a D3D device.", "Error", MB_OK);
PostQuitMessage(0);
}
d3ddev->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(50,50,50));
d3ddev->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
if(FAILED(D3DXCreateSprite(d3ddev, &d3dspt))){
MessageBox(NULL, "Failed to create a sprite interface.", "Error", MB_OK);
PostQuitMessage(0);
}
LoadExample();
}
void LoadExample()
{
ZeroMemory(img_info, sizeof(D3DXIMAGE_INFO));
D3DXGetImageInfoFromFile("sometexture.png", img_info);
D3DXCreateTextureFromFileEx(d3ddev,
"sometexture.png",
img_info->Width,
img_info->Height,
img_info->MipLevels,
NULL,
D3DFMT_A8R8G8B8,
D3DPOOL_MANAGED,
D3DX_DEFAULT,
D3DX_DEFAULT,
D3DCOLOR_XRGB(255,0,255),
img_info,
NULL,
texture);
}
void DrawThatShit(){
RECT rc;
SetRect(&rc, 0,0,img_info->Width, img_info->Height);
d3ddev->BeginScene();
d3dspt->Begin(D3DXSPRITE_ALPHABLEND);
d3dspt->Draw(texture, &rc, NULL, &D3DXVECTOR3(0,0,0), D3DCOLOR_XRGB(255,255,255));
d3dspt->End();
d3ddev->EndScene();
}