HEngine
  • 引擎编译
  • 未来工作
  • 使用文档
    • 代码规范
    • Shader规范
    • config 配置
  • Python脚本系统
    • 技术分析
    • 使用api
  • Cpp脚本系统
    • 技术分析
  • 技术文档 & 心得体会
    • 数学
      • 坐标系、UV与深度范围
      • 行主序 与 列主序
    • 路径管理
    • 构建系统
    • 自定义资源格式
    • UI
      • undo/redo
      • 分辨率处理
    • ECS 系统
    • 插件系统
    • 数学库
    • Ref Counted
    • 音频
    • ChatGPT
    • Mesh、Vertex 等组织关系
    • 编辑器热更新方案
    • Profile
    • NLP
    • RenderDoc
    • CodeGen与反射系统
    • 安装包
    • 物理引擎
      • PhysX集成
      • Bullet集成
    • 动画
  • 图形后端
    • 坐标系差异
    • Feature差异
    • RHI 封装
    • Shader与Constant Buffer
    • DX12
    • Vulkan
    • Render Graph
    • 渲染整体架构
  • 图形Feature
    • 毛发
    • 鼠标拾取
    • 实例化渲染
  • Shader
    • Shader 交叉编译
    • Shader Toy
    • Shader 热更新
    • PBR
  • 打包
    • 打包
  • Bug 记录 & 解决过程
    • 闪退记录汇总
    • 导入图片显示混乱
    • D3D下glfw+imgui失效
  • 其他资料
    • 总结集合
Powered by GitBook
On this page
  1. 图形后端

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/4280c37e4b1941ca6f3c975002ee9bd4f96e72c6/MoravaEngine/src/Hazel/Renderer/Pipeline.h

https://github.com/dtrajko/MoravaEngine/blob/master/MoravaEngine/src/H2M/Renderer/PipelineH2M.h

PreviousFeature差异NextShader与Constant Buffer

Last updated 2 years ago