Directx 11 Begin Drawing

今天了解了渲染管线流程

1. Input Assembler (IA) Stage2. Vertex Shader (VS) Stage3. Hull Shader (HS) Stage4. Tesselator Shader (TS) Stage5. Domain Shader (DS) Stage6. Geometry Shader (GS) Stage7. Stream Output (SO) Stage8. Rasterizer (RS) Stage9. Pixel Shader (PS) Stage10. Output Merger (OM) Stage


下面记录一下几个比较重要的概念

是顶点着色器和像素着色器(两个都是利用效果文件 用HLSL语言来编写)

使用步骤:

step1:从效果文件中编译着色器

HRESULT WINAPI D3DX11CompileFromFile(
            LPCSTR pSrcFile,
            CONST D3D10_SHADER_MACRO* pDefines, 
            LPD3D10INCLUDE pInclude,
            LPCSTR pFunctionName, 
            LPCSTR pProfile, 
            UINT Flags1, 
            UINT Flags2, 
            ID3DX11ThreadPump* pPump, 
            ID3D10Blob** ppShader, 
            ID3D10Blob** ppErrorMsgs, 
            HRESULT* pHResult);
这个函数输出一个ppshader 并不是真正的着色器,而是一个缓冲区

Step2:创建着色器

利用缓冲区创建着色器

Step3:设置着色器


Input (Vertex) Layout

这个说先要借助
D3D11_INPUT_ELEMENT_DESC

Input Layout是用来描述输入到shader中的数据组成(是最终进入到shader中的数据部分

就是程序中的顶点结构体到shader中的对应关系

Setting the Primitive Topology


设置顶点拓扑  这个是告诉IA(绘制的第一阶段)我们发送的顶点是什么类型。比如有点,三角形,线条

这个决定了我们的顶点如何结合。


D3D11初始化过程:

先填充backbufferDesc结构,然后填充SwpChainDesc结构

然后创建DeviceandSwapChain

通过GetBuffer方法得到SwapChain的BackBuffer

将BackBuffer设置成RenderTargetView

到现在BackBuffer就没有用了(我猜是RenderTargetView指向了BackBuffer的内存,所以不需要BackBuffer指针了,因为在D3D11中不能直接使用BackBuffer来渲染)

接着设置VS和PS

首先从效果文件中编译

编译得到一个保存着色器的缓存区

利用缓存区来创建着色器

将创建好的着色器绑定到渲染管线上

设置顶点缓存

填充顶点数组

填充VertBufferDesc  其中有一项是说明绑定到顶点缓存的

利用顶点数组来生成顶点数据:D3D11_SUBRESOURCE_DATA

利用Device方法来生成缓存

将生成的缓存设置成IA阶段的顶点缓存

输入布局Layout

利用从效果文件中编译得到的着色器缓存来创建Layout

然后将Layout添加到IA阶段中

Viewport(RS阶段)



viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
viewport.Width = Width;
viewport.Height = Height;


d3d11DevCon->RSSetViewports(1, &viewport);

猜你喜欢

转载自blog.csdn.net/qq_40947718/article/details/79379986
今日推荐