教程地址
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
对象的接口里的矩阵参数暂时置空。