教程地址
Tutorial 4: Buffers, Shaders, and HLSL
学习记录
这一篇文章,我们将继续完善 CGraphics 的框架类,我们将为框架加上 CShader 类。这个类的目的是封装着色器的部分内容,我们在之前的三角形教程中已经用过了 HLSL ,所以这一篇不会很困难。
这个类完善后,我们的框架将会更新为:

首先我们来看看这个类的声明:
1 | class CShader { |
构造方法和析构方法就是初始化和最后的删除:
1 | CShader::CShader() { |
在 Initialize() 方法中我们直接调用 InitializeShader() 方法,所以直接来看这个:
1 | bool CShader::InitializeShader(ID3D11Device* device, HWND hwnd, PCHAR vsFilePath, PCHAR psFilePath) { |
(这段代码我们之前见过的,所以就不仔细讲了)
OutShaderErrorMessage() 如下:
1 | void CShader::OutputShaderErrorMessage(ID3D10Blob* errorMessage, HWND hwnd, PCHAR fileName) const { |
在这里我们将编译出错的出错信息打印到 log.txt 里。
之后,我们使用 CShader::SetShaderParameters 方法来填充 mMatrixBuffer 。
1 | bool CShader::SetShaderParameters(ID3D11DeviceContext* deviceContext, D3DXMATRIX world, D3DXMATRIX view, D3DXMATRIX projection) const { |
最后在 RenderShader() 里绘制:
1 | void CShader::RenderShader(ID3D11DeviceContext* deviceContext, const int indexCount) const { |
在我们对外的 Render() 接口里调用 SetShaderParameters 和 RenderShader :
1 | bool CShader::Render(ID3D11DeviceContext* deviceContext, const int index, const D3DXMATRIX world, const D3DXMATRIX view, const D3DXMATRIX projection) const { |
这样我们的 CShaper 类就搞定了,这个类的内容我们之前的代码里都说过,所以这里比较简单。现在可以去更新上层的 CGraphics 类了。
仍然是在声明里创建指针对象,在初始化方法里初始化:
1 | CShader *mShader_{}; |
在 CGraphics::RenderGraphics 方法里,我们调用这个渲染:
1 | bool CGraphics::RenderGraphics(const float r , const float g , const float b , const float a) { |
由于我们还没有完成 CCamera 和 CModel ,所以我们在 CShader 对象的接口里的矩阵参数暂时置空。