|
|
发表于 2008-7-10 14:19:00
|
显示全部楼层
Re: Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂
cactusnb: Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?
就是说即使显卡不支持那样的纹理,程序也能运行不会出大的问题,不过是效果差了点而已?...
嗯。。看具体怎么设置D3DXCreateTextureFromFileEx的参数了
HRESULT D3DXCreateTextureFromFileEx(
LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile,
UINT Width,
UINT Height,
UINT MipLevels,
DWORD Usage,
D3DFORMAT Format,
D3DPOOL Pool,
DWORD Filter,
DWORD MipFilter,
D3DCOLOR ColorKey,
D3DXIMAGE_INFO * pSrcInfo,
PALETTEENTRY * pPalette,
LPDIRECT3DTEXTURE9 * ppTexture
);
影响这个的就是Width, Height, Filter这几个参数
1、如果Width,Height设置为0或者D3DX_DEFAULT,那么会直接把纹理扩大到2n次幂。
比如640*480就会变成1024*512,
还有如果这个情况下Filter参数为D3DX_FILTER_NONE,那么把纹理扩大之后,不会扩大纹理内容,也就是说在1024*512的纹理里面,只有从(0,0)-(640,480)的部分有内容,其他部分为透明。
如果Filter设置为其他值,就会按照指定的过滤方式将纹理内容一起放大到1024*512。
Filter设置为D3DX_DEFAULT 等同于D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER,会放大纹理
2、如果Width,Height设置为D3DX_DEFAULT_NONPOW2,又分两种情况:
a、如果显卡支持非2n次幂的纹理,那么创建出来的纹理则会按原来图片的大小;
b、如果显卡只能使用2n次幂的纹理,那么这个函数会失败。
3、Width,Height设置为具体的值,则会缩放纹理到指定的值,如果这个值不是2n次幂,并且显卡不支持非2n次幂的纹理,也会失败,否则则会按照Filter的值进行纹理内容进行缩放或保持原大小。
|
|