学习SDK,在d3d11中进行简单的三角形绘制,以此熟悉Direct11的绘制流程。此文参考上一篇的Directx11的基本Demo。
相对Directx11的basic demo,在Directx11中绘制一个三角形,初始化的工作主要是在InitDevice()中1:创建一个顶点着色器Vertex Shader;2:描述我们自己的顶点格式D3D11_INPUT_ELEMENT_DESC;3:创建像素着色器Pixel Shader;4:描述,创建存储我们要绘制的顶点的buffer并绑定其到pipeline。
然后在Render部分1:指定我们要调用的像素着色器和顶点着色器;2:调用Draw()。
下面来详细描述其在InitDevice()中的初始化工作。
HRESULT InitDevice()
{
//======================
//之前讨论的InitDevice的基本初始化工作,主要利用D3D11CreateDeviceAndSwapChain()创建IDXGISwapChain,ID3D11Device,ID3D11DeviceContext;
……………………………………………………
//=======================
//下面开始初始化基本顶点绘制的工作。/
//(1)创建一个顶点着色器
//(1.1)先通过函数D3DX11CompileFromFile()编译fx文件中的vertex shader代码,将编译好的二进制代码存在ID3DBlob*中。
ID3DBlob* vErrorBlob;
ID3DBlob* pVSBlob = NULL;
hr = D3DX11CompileFromFile( L"Basic.fx", NULL, NULL, "VS", "vs_4_0",
dwShaderFlags, 0, NULL, &pVSBlob, &vErrorBlob, NULL );
//(1.2)通过ID3D11Device::CreateVertexShader(),利用编译好的shader代码创建vertex shader。
hr = g_pd3dDevice->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &g_pVertexShader );