c++ - How to load texture from file with transparent background in DirectX -
recently i've picked book , started learn game programming direct3d , directx. it's been pretty far, problem can't load texture file backbuffer transparent background color.
here source code initialize direct3d
bool init_direct3d(hwnd hwnd,int width,int height,bool fullscreen) { // initialize direct3d object d3d = direct3dcreate9(d3d_sdk_version); if(d3d==null) { messagebox(null,text("fail initialize direct3d object"),text("error"),mb_iconerror); return false; } // initialize direct3d presentation parameter d3dpresent_parameters d3dpp; zeromemory(&d3dpp,sizeof(d3dpp)); d3dpp.windowed = !fullscreen; d3dpp.swapeffect = d3dswapeffect_copy; d3dpp.backbufferformat = d3dfmt_a8r8g8b8; d3dpp.backbuffercount = 1; d3dpp.backbufferwidth = width; d3dpp.backbufferheight = height; d3dpp.hdevicewindow = hwnd; d3dpp.enableautodepthstencil = true; d3dpp.autodepthstencilformat = d3dfmt_d16; d3dpp.presentationinterval = d3dpresent_interval_immediate; d3d->createdevice(d3dadapter_default,d3ddevtype_hal,hwnd,d3dcreate_software_vertexprocessing,&d3dpp,&d3ddev); if(d3ddev == null) { messagebox(null,text("fail initialize direct3d device"),text("error"),mb_iconerror); return false; } d3ddev->setrenderstate(d3drs_alphablendenable,true); d3ddev->setrenderstate(d3drs_blendop, d3dblendop_add); d3ddev->setrenderstate(d3drs_srcblend, d3dblend_srcalpha); d3ddev->setrenderstate(d3drs_destblend, d3dblend_invsrcalpha); // direct3d backbuffer d3ddev->getbackbuffer(0,null,d3dbackbuffer_type_mono,&backbuffer); if(backbuffer == null) { messagebox(null,text("fail direct3d backbuffer"),text("error"),mb_iconerror); return false; } return true; }
and here code loading texture
lpdirect3dtexture9 loadtexture(char *filename,d3dcolor transcolor) { lpdirect3dtexture9 texture = null; d3dximage_info texture_info; hresult result; // image info result = d3dxgetimageinfofromfile(filename,&texture_info); if(result != d3d_ok) return null; // create texture result = d3dxcreatetexturefromfileex(d3ddev,filename,texture_info.width,texture_info.height,1,d3dpool_default,d3dfmt_unknown, d3dpool_default,d3dx_default,d3dx_default,transcolor,null,null,&texture); if(result != d3d_ok) return null; return texture; }
and how render screen
// start render if(d3ddev->beginscene()) { d3ddev->stretchrect(back,null,backbuffer,null,d3dtexf_none); sprite_handler->begin(d3dxsprite_alphablend); d3dxvector3 position((float)doki.x,(float)doki.y,0.0f); sprite_handler->draw(doki_img,&rect,null,&position,d3dcolor_xrgb(255,255,255)); sprite_handler->end(); d3ddev->endscene(); } d3ddev->present(null,null,null,null);
what did wrong?
Comments
Post a Comment