RHI 封装
图形api命令我们划分为资源管理(显存、内存的handle)与command。
思考:
所有的图形后端实现 interface 接口,GraphicsContext 作为资源管理类,可以create这些接口。而具体create什么则有各个后端对应的GraphicsContext所决定。当然 GraphicsContext 也作为渲染上下文,对应的绑定都由它完成。
command 则由 command list 所承接,命令都可以在 command list 创建,最后被执行。
难点
ogl和dx11有些差别,例如layout,ogl是需要有对应的vertex array,再去指定这个vertex array中的layout;而dx11则是把layout直接绑定到context,并且这个layout和vertex shader相关;同时在最后draw的时候ogl需要vertex array,而dx11不需要。
解决方法:
我们可以把这些封装到一个Pipeline类中,mesh中只存pipeline、vertex buffer和index buffer
对OpenGL的Pipeline类,我们去生成一个vertex array,并且根据这个layout进行处理;对dx11的Pipeline类,我们去根据vertex shader生成一个d3d11的inputlayout。
参考:
https://github.com/dtrajko/MoravaEngine/blob/master/MoravaEngine/src/H2M/Renderer/PipelineH2M.h
Last updated