DX11创建纹理 : DirectXTex

备注 :用了一下微软的这个开源代码,执行到:

ScopedObject<IWICBitmapDecoder> decoder;  
	HRESULT hr = pWIC->CreateDecoderFromFilename( fileName, 0, GENERIC_READ, WICDecodeMetadataCacheOnDemand, &decoder );

的时候就终止了,没有获取到相应的解码器decoder指向null,可是我有可以打开tga格式的文件的软件,这是否证明我有解码器呢?由于对解码这块不是很了解,果断不挣扎,暂时放弃这种方式。

现在创建纹理是使用:

D3DX11CreateShaderResourceViewFromFile(m_pd3dDevice, L"Lightning\\c001_07.dds", NULL, NULL, &mTexture, NULL);

 这种方式的话就必须把其他格式的文件转换为dds文件。附件附上一个转换格式的软件,很小很好用。

总结:网上很多人都在困惑DX11获取纹理的方法,最好当然是什么格式的文件都支持比较好,这样也程序也显得健壮一些。但是,事情总不能像想的那么美满,暂时使用格式转换的方式解决。如果有路过的高手,请指点一下,谢谢!

 

正文:

对于3D渲染来说,纹理是一个极为常见的东西,而且一般图形格式的文件都可以作为纹理文件,在DX9和DX10的时候创建纹理是一个比较简单的操作。但是到DX11突然这种快捷就没了,D3DX淘汰也就算了,关键是D3DX里面没有支持11的纹理创建,想用淘汰货都用不了。

从这个现象其实可以看出微软的意图,过去的版本里微软或许比较在意用户的快捷,从而提供了很多快捷的方式。但是,这些快捷从某种意义上阻止了性能的提升,从而想使用DX做出更高性能的渲染引擎时,常常因为暴露的接口而变的隔靴搔痒。出于这些原因,微软在DX11以及以后的版本开始放权,这种放权导致D3DX的淘汰,也影响了包括效果框架,纹理加载之类的一系列的功能。纹理加载搬迁至DirectXTex 里面,它与效果框架一样,以一种开源代码块的方式,让用户自己组织加载纹理的工具类。

 

ID3D11Device :: CreateTexture2D 方法只能创建DDS格式的纹理,其他格式的纹理需要自己实现一个工具类。

 

通用文件创建纹理:

1.调用CoCreateInstance创建成像工厂接口(IWICImagingFactory)的。CoCreateInstance是一个通用的创建单例的方法。第一步简单理解就是创建一个IWICImagingFactory对象。

2.调用IWICImagingFactory :: CreateDecoderFromFilename的方法来创建一个IWICBitmapDecoder对象从图像文件名 ​​。创建一个位图解码器。

3.呼叫的IWICBitmapDecoder :: GetFrame方法的帧的图像检索IWICBitmapFrameDecode接口。获取位图的某一帧图像。

4.调用IWICBitmapSource :: GetPixelFormat方法(IWICBitmapFrameDecode接口继承来自IWICBitmapSource)获得的图像的像素格式。这里获取的像素格式最终会映射成DXGI的像素格式。

5.根据此表的像素格式转换到DXGI_FORMAT类型:

WIC像素格式 等效DXGI_FORMAT
GUID_WICPixelFormat128bppRGBAFloat DXGI_FORMAT_R32G32B32A32_FLOAT
GUID_WICPixelFormat64bppRGBAHalf DXGI_FORMAT_R16G16B16A16_FLOAT
GUID_WICPixelFormat64bppRGBA DXGI_FORMAT_R16G16B16A16_UNORM
GUID_WICPixelFormat32bppRGBA DXGI_FORMAT_R8G8B8A8_UNORM
GUID_WICPixelFormat32bppBGRA DXGI_FORMAT_B8G8R8A8_UNORM(DXGI 1.1)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值