自制游戏引擎之shader预编译

这篇具有很好参考价值的文章主要介绍了自制游戏引擎之shader预编译。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

shader预编译为二进制,在程序运行时候加载,可以提升性能,节省启动时间.

1. 采用google shaderc预编译与加载shader

1.1 下载代码 https://github.com/google/shaderc

自制游戏引擎之shader预编译,游戏设计,游戏引擎
third_party文件里需要放依赖的第三方
因为电脑访问google的问题,无法通过shaderc-2023.4\utils\git-sync-deps脚本自动下载第三方,手动下载
https://codeload.github.com/KhronosGroup/SPIRV-Tools/zip/refs/tags/v2023.3.rc1
https://codeload.github.com/KhronosGroup/SPIRV-Headers/zip/refs/tags/sdk-1.3.250.1
https://codeload.github.com/KhronosGroup/glslang/zip/refs/tags/sdk-1.3.250.1
自制游戏引擎之shader预编译,游戏设计,游戏引擎

1.2 配置

用CMake (cmake-gui)构建shaderc,生成vs工程
别忘了配置第三方库目录
自制游戏引擎之shader预编译,游戏设计,游戏引擎

1.3 编译

vs编译shaderc,得到头文件和库
自制游戏引擎之shader预编译,游戏设计,游戏引擎
自制游戏引擎之shader预编译,游戏设计,游戏引擎
所有的库都是MDD的动态库
自制游戏引擎之shader预编译,游戏设计,游戏引擎

2. 在引擎里引入shaderc

2.1 在CmakeLists.txt增加头文件和库

自制游戏引擎之shader预编译,游戏设计,游戏引擎
自制游戏引擎之shader预编译,游戏设计,游戏引擎
shaderc提供了两种方式引用,

  • 直接用libshaderc_combined,这是一个静态库
  • 用glslang, OSDependent, OGLCompiler,shaderc_util, SPIRV, HLSL, SPIRV-Tools, and SPIRV-Tools-opt.

2.2 源码修改

openGLShader.cppCompileOrGetOpenGLBinaries会判断是否有cache文件,没有就生成shader bin文件,有就加载bin文件.
自制游戏引擎之shader预编译,游戏设计,游戏引擎

shaderc::SpvCompilationResult module = compiler.CompileGlslToSpv(source_text, Utils::GLShaderStageToShaderC(stage), m_FilePath.c_str(), options);

CreateProgram会根据bin文件创建shader,跳过了编译的过程.

glShaderBinary(1, &shaderID, GL_SHADER_BINARY_FORMAT_SPIR_V, spirv.data(), spirv.size() * sizeof(uint32_t));
glSpecializeShader(shaderID, "main", 0, nullptr, nullptr);
glAttachShader(program, shaderID);

自制游戏引擎之shader预编译,游戏设计,游戏引擎文章来源地址https://www.toymoban.com/news/detail-536353.html

3. 性能

  • 直接编译shader代码的方式,每个shader消耗20ms
  • 初次编译shader生成bin文件的方式,每个shader消耗2000ms
  • 直接加载shader bin文件的方式,每个shader消耗5ms
    自制游戏引擎之shader预编译,游戏设计,游戏引擎

到了这里,关于自制游戏引擎之shader预编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Overload游戏引擎细节分析】画场景栅格的Shader分析

    Overload引擎地址: GitHub - adriengivry/Overload: 3D Game engine with editor 一、栅格绘制基本原理 Overload Editor启动之后,场景视图中有栅格线,这个在很多软件中都有。刚开始我猜测它应该是通过绘制线实现的。阅读代码发现,这个栅格的几何网格只有两个三角形面片组成的正方形,使

    2024年02月07日
    浏览(41)
  • 游戏引擎的cpu/gpu粒子系统设计思想

    网上有很多篇粒子系统源码解析,但是只是简单的接口罗列,没有从最原理出发去讲清楚粒子系统的来龙去脉,我将从粒子系统的本质去讲清楚它的设计理念,当理解了它的理念以后,很多粒子遇到的问题就会迎刃解决了,这篇文章主讲粒子的实现和一些框架级的优化方式,

    2024年02月12日
    浏览(52)
  • pygame自制小游戏

    pygame——游戏视频 简单的来写一个pygame小游戏,我的画面比较卡哇伊各位可以自己换图片哈。 就是一个最基本的pygame小游戏,可以控制人物,攻击敌人,打到敌人使敌人消失,如果敌人到达边缘仍然没有被消灭,游戏就会失败。 1.鼠标移动人物跟随移动,播放背景音乐,可以摁下

    2024年02月11日
    浏览(48)
  • 【Unity自制手册】游戏基础API大全

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :UnityUI篇实战 相关专栏: ⭐【软件设计师高频考点暴击】 ####👨‍💻👍1,MathF类的静态变量 ✅ Math和MathF的区别 : mathf是unity封装的类它

    2024年02月09日
    浏览(47)
  • 【毕业论文】| 基于Unity3D引擎的冒险游戏的设计与实现

    📢博客主页:肩匣与橘 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 肩匣与橘 编写,首发于 CSDN 🙉 📢生活依旧是美好而又温柔的,你也是✨  基于Unity3D引擎的冒险游戏的设计与实现 📢前言 摘要 Abstract 1 绪论 1.1 选题背景 1.2 研究目的及意义 2 开发工具

    2024年02月05日
    浏览(66)
  • Python pyglet 自制3D引擎入门(二) -- 绘制立体心形,动画和相机控制

    Python作为目前较广泛的编程语言, 用于制作3D游戏可谓得心应手。本文讲解使用Python pyglet库自制简易3D引擎的方法技巧。 上篇:Python pyglet 自制3D引擎入门(一) – 绘制几何体、创建3D场景 先放效果图: pyglet.window 部分用于实现窗口操作, pyglet.gl 以及 pyglet.gl.glu 模块包含了OpenGL的

    2024年02月10日
    浏览(41)
  • Python自制“超级马里奥”小游戏

    ✅作者简介:华为开发者联盟优质内容创作者、CSDN内容合伙人、GitHub专业技术人员🏆 📃个人主页:北雨·寒冰~ 的CSDN博客 🔥系列专栏:PyGame 💬个人格言:书山有路勤为径,学海无涯苦作舟   前言 看效果 1.基础设置(tools部分) 2.设置背景音乐以及场景中的文字(setup部

    2024年01月25日
    浏览(45)
  • OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像

       之前验证了OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果,由于现在普遍都是容器化部署,所以还是验证下Docker镜像打包是否可行,因为最终部署还是会上到K8S,所以这步必须要验证一下。    提前安装好 docker 和 docker-compose ,安装 docker-compose 是为了简化容器启动

    2023年04月20日
    浏览(49)
  • 设计模式学习笔记 - 设计模式与范式 -行为型:8.状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

    本章学习状态模式。在实际的开发中,状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。从这一点上看,它有点像我们之前讲到的组合模式。 状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。不过,状态机的实现方式

    2024年04月10日
    浏览(47)
  • 【Cocos 3d】从零开始自制3d出租车小游戏

    本文很长,建议收藏食用。 课程来源: 游戏开发教程 | 零基础也可以用18堂课自制一款3D小游戏 | Cocos Creator 3D 中文教程(合集)p1~p6 简介: 资源下载:https://github.com/cocos-creator/tutorial-taxi-game 适合学习人群:本教程假定你对编程有一定的了解,ts,js 学习过其中之一。 如果不

    2024年02月02日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包