-
运用ECC p256曲线规范实现渲染带纹理的立方体算法
资源介绍
4.4 渲染带纹理的立方体
4.4.1 着色器资源视图
纹理与顶点缓存、索引缓存一样需要绑定到 GPU 上才能使用,所以先要再 HLSL 代码中
(参看 Tutorial07.fx)定义一个纹理类型资源,代码如下所示:
Texture2D txDiffuse : register( t0 );
纹理资源的语义用 register(tN), 其中 t 表示纹理,N 为寄存器的编号,由于只使用一
张纹理,所以 N 为 0。
在 C++代码中定义一个着色器资源视图 ID3D11ShaderResourceView 类型的变量,用
它来存储被加载到内存的 dds 图片。变量声明方式如下所示:
ID3D11ShaderResourceView* g_pTextureRV = nullptr;
从硬盘加载一个 dds 图片到内存可以通过调用 CreateDDSTextureFromFile 函数来实
现,它有 4 个参数。第一个参数 ID3D11Device 类型,它是创建资源和枚举一个显卡性能的
DirectX3D 渲染设备指针;第二个参数字符串类型,它是要加载的 dds 图片文件路径;第三
个参数本例不使用,所有为空(nullptr);第四个参数是 ID3D11ShaderResourceView 类
型的引用,传入前面定义的着色器资源视图变量 g_pTextureRV 的应用即可。加载一个 dds
图片的代码如下所示:
HRESULT hr = CreateDDSTextureFromFile(pd3dDevice, L"ship.dds", nullptr,
&g_pTextureRV);
if (FAILED(hr))
return hr;
dds 图片加载到了内存以后,还需要在程序运行期间,每一帧渲染前,通过调用函数
ID3D11DeviceContext:: PSSetShaderResources 将这个着色器视图资源绑定到 GPU 上。
该函数有 3 个参数,第一个参数为图像处理器(GPU)的资源视图寄存器输入槽,本例只有
一个资源视图,只需要一个输入槽,因此这个参数设为 0;第二个参数为资源视图的个数,
本列只有一个资源视图,设为 1;第三个参数为所有资源视图的指针地址。绑定着色器视图
资源的具体代码如下所示:
pd3dImmediateContext->PSSetShaderResources(0, 1, &g_pTextureRV);
程序退出前,要记得释放这个着色器视图资源,释放太资源的代码如下所示:
SAFE_RELEASE(g_pTextureRV);