Hazel游戏引擎(023-025)渲染器前准备讨论与维护

文中若有代码、术语等错误,欢迎指正

023.渲染介绍

  1. 渲染器基本上是指我们在屏幕上绘制图形的能力

    保真性,模拟现实世界

  2. GPU用来并行计算图形像素

  3. 与GPU交互需要图形接口API,OpenGl就是其中之一

  4. OpenGL较为简单

024.渲染架构

一句话:用抽象的类封装渲染图形API


025.渲染维护

ImGui无法找到函数定义解决

  • 原因

    扫描二维码关注公众号,回复: 15490602 查看本文章

    ImGui静态链接到Hazel.dll中,但是Hazel.dll有能力删除ImGui中没有导出的函数定义内容,因此如果在链接dll文件的exe文件使用ImGui的内容,就会链接错误。

    但区分:ImGui.lib静态链接到Hazel中,Hazel本身是可以直接使用ImGui的函数的(不需要将ImGui的函数定义导出Hazel才能使用)。

  • 解决方法1

    使用一个.def模块定义文件,其中列出了我们要从ImGui导出的所有函数

    但缺点是很麻烦

  • 解决方法2

    ImGui的函数前置都有一个宏定义,但是为空

    请添加图片描述

    Hazel项目重定义这个空宏定义为dll导出,与sandbox项目重定义这个宏定义为dll导入

    • Hazel

      IMGUI_API=__declspec(dllexport);

    • sandbox

      IMGUI_API=__declspec(dllimport);

    注意=周围不能有空格IMGUI_API = __declspec(dllimport);(错误写法)

    (经测试:Hazel项目不重定义这个宏为导出似乎也没关系,只需sandbox导入,测试错了吧)

  • 效果

    请添加图片描述

讨论:Hazel项目改不改为静态lib

  • dll

    • 优点
      • 热更新,更改引擎代码后只需重新编译dll,让多个测试项目不用重新编译能使用最新引擎代码
      • 让客户端的链接更容易
    • 缺点
      • dll很多警告
      • exe动态链接dll启动速度慢
  • lib

    所有链接都构建到exe文件中

需要考虑dll的优点在使用引擎的角度,引擎代码已经完成了就不需要热更新了,dll的热更新优点没有了

猜你喜欢

转载自blog.csdn.net/qq_34060370/article/details/131388707