那天我偶然看到一个使用Rust编写的游戏引擎(其实是我刻意找的,就是这么自虐),瞬间有了操起来玩玩的兴致,可还没让小妮给爷笑一个就先被它折腾的换了内核。怎么回事,且听我慢慢说。

下载Bevy项目尝试运行实例游戏,报错了:

tianlang@tianlang:rust$ git clone https://github.com/bevyengine/bevy
正克隆到 'bevy'...
remote: Enumerating objects: 292, done.
remote: Counting objects: 100% (292/292), done.
remote: Compressing objects: 100% (231/231), done.
remote: Total 29614 (delta 126), reused 161 (delta 60), pack-reused 29322
接收对象中: 100% (29614/29614), 32.77 MiB | 157.00 KiB/s, 完成.
处理 delta 中: 100% (18934/18934), 完成.

tianlang@tianlang:rust$ cd bevy/

tianlang@tianlang:bevy$ cargo run --example breakout
...
Compiling ab_glyph v0.2.10
error: failed to run custom build command for `libudev-sys v0.1.4`

Caused by:
  process didn't exit successfully: `/data/code/github/rust/bevy/target/debug/build/libudev-sys-ee6a5de081f0ae93/build-script-build` (exit code: 101)
  --- stdout
  cargo:rerun-if-env-changed=LIBUDEV_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=LIBUDEV_STATIC
  cargo:rerun-if-env-changed=LIBUDEV_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR

--- stderr
  thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "`\"pkg-config\" \"--libs\" \"--cflags\" \"libudev\"` did not exit successfully: exit code: 1\n--- stderr\nPackage libudev was not found in the pkg-config search path.\nPerhaps you should add the directory containing `libudev.pc\'\nto the PKG_CONFIG_PATH environment variable\nNo package \'libudev\' found\n"', /home/tianlang/.cargo/registry/src/github.com-1ecc6299db9ec823/libudev-sys-0.1.4/build.rs:38:41
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: build failed

查看bevy官方文档是没有安装系统依赖,我使用的ubuntu18,执行安装命令:

sudo apt-get install pkg-config libx11-dev libasound2-dev libudev-dev

sudo apt-get install clang

安装完成后,可以正常编译示例,但运行失败:

tianlang@tianlang:bevy$ cargo run --example breakout
    Finished dev [unoptimized + debuginfo] target(s) in 0.13s
     Running `target/debug/examples/breakout`
thread 'main' panicked at 'Unable to query surface formats: ERROR_UNKNOWN', /home/tianlang/.cargo/registry/src/github.com-1ecc6299db9ec823/gfx-backend-vulkan-0.7.0/src/window.rs:315:10
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Mar 30 22:08:25.706 ERROR gpu_descriptor::allocator: `DescriptorAllocator` is dropped while some descriptor sets were not deallocated
Mar 30 22:08:25.706 ERROR gpu_alloc::block: Memory block wasn't deallocated
Mar 30 22:08:25.706 ERROR gpu_alloc::block: Memory block wasn't deallocated
段错误

从错误信息看是Vulcan出了问题,执行vulkaninfo确认下,果然这小子有异常:

$vulkaninfo
/build/vulkan-tools-136mCR/vulkan-tools-1.1.126.0+dfsg1/vulkaninfo/vulkaninfo.h:803: failed with UNKNOWN_VkResult
段错误

$dmsg

[ 2016.528891] nvidia-modeset: Version mismatch: nvidia.ko(460.67) nvidia-modeset.ko(460.56)
[ 2016.933217] PKCS#7 signature not signed with a trusted key
[ 2016.935729] nvidia-modeset: Version mismatch: nvidia.ko(460.67) nvidia-modeset.ko(460.56)
[ 2017.344852] PKCS#7 signature not signed with a trusted key
[ 2017.346405] nvidia-modeset: Version mismatch: nvidia.ko(460.67) nvidia-modeset.ko(460.56)
[ 2017.460432] vulkaninfo[6255]: segfault at 6b6e696c678d ip 00007f703abf8fd0 sp 00007ffc7ba2c218 error 4 in libpthread-2.27.so[7f703abef000+1a000]
[ 2223.351496] traps: vulkaninfo[7640] general protection ip:7f568663ffd0 sp:7ffc4afb7b68 error:0 in libpthread-2.27.so[7f5686636000+1a000]

从dmsg错误信息猜测应该是跟库不匹配有关,重新下载vulcan sdk  参照博客安装.还是一样的错误,涛声依旧.

看来得放大招了,升级内核吧.由于我用的elementary os是基于ubuntu18开发的可以参考这里升级内核,原来的内核是:

$ uname -r
4.15.0-36-generic

升级后:

tianlang@tianlang$ uname -r
5.4.0-71-generic

重启后再次执行vulkaninfo显示信息与从前大不一样,执行vkcube竟然能看到传说中的正方体了:

不容易啊!趁胜追击再运行下bevy示例,也终于正常了.

哎呦,这运行界面是不是跟我们的Rust课程里的乒乓球游戏有些许相似,收工!!!

Rust游戏引擎Bevy初探相关推荐

  1. 基于Bevy游戏引擎和FPGA的双人游戏

    资源下载地址:https://download.csdn.net/download/sheziqiong/85931377 资源下载地址:https://download.csdn.net/downl ...

  2. Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

    一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...

  3. 【Rust日报】2023-01-07 shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏

    shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏 shura是rust编写的一个安全,快速并且跨平台的游戏框架.shura使用一个2D组件系统.场景管理和group系统帮你管理一个大型游戏 ...

  4. Godot3游戏引擎入门之零一:【翻译】为什么要选择 Godot 引擎

    前言 本文作为我的 Godot 系列文章的第二篇,是一篇翻译文作为 Godot 的优点说明吧,虽然文章发布于去年,但还是很有借鉴意义,翻译的不是很好请海涵! :smile: 作者简介:Rock Mil ...

  5. 如何制作自己的C++游戏引擎

    你想了解更多关于游戏引擎的知识.并自己来写一个吗? 这可是非常牛皮的一件事.为了帮助你学习,这里有一些C++库和依赖项的推荐,可以帮助你快速上手. 游戏开发一直是我的学生学习更高级计算机科学主题的好帮 ...

  6. 游戏引擎开发技术栈总结(自用)

    一:XX上一个2d游戏引擎up的总结 1.不做移动端 2.曲率引擎大佬 3.编辑器用的是electron开发的 4.3d渲染可以考虑three.js 5.长远计划学习C++,rust, 小引擎用js+ ...

  7. 如何从零开始用 C++ 开发一款游戏引擎?

    原文链接:https://hackernoon.com/build-a-game-engine-from-scratch-in-c 游戏开发一直很能激励学生学习高级计算机科学.可能有些人认为游戏是孩子 ...

  8. 《HTML5游戏编程核心技术与实战》——第1章 游戏和HTML5初探1.1 网页游戏和HTML5...

    本节书摘来自异步社区<HTML5游戏编程核心技术与实战>一书中的第1章,第1.1节,作者: 向峰 更多章节内容可以访问云栖社区"异步社区"公众号查看. 第1章 游戏和H ...

  9. 0909期即将上市:游戏引擎启示录

    本期封面报道:游戏引擎启示录 镜之边缘.生化骑兵.最后的神迹.战争机器等游戏大作是如何制作的?Social Game的背后由什么来支撑?网页游戏引擎的结构是什么样子?零世界最核心的理念是什么?本期特别 ...

  10. unity游戏引擎_Unity游戏引擎指南:如何开始使用最受欢迎的游戏引擎

    unity游戏引擎 Unity游戏开发 (Game Development with Unity) Unity is a cross-platform game engine developed by ...

最新文章

  1. 智慧少年队显示服务器异常,六大智慧少年是什么梗,六大智慧少年其它五个
  2. SQL Server 数据库崩溃后的恢复之法
  3. 【错误记录】Android Studio 编译信息输出乱码
  4. parent winform 位置_winform 弹出窗体指定位置
  5. CentOS7下用jdk1.7编译hadoop-2.7.1全过程详解
  6. TensorFlow2-自编码器
  7. 老是说我编译版本不够_海思3518E编译环境搭建
  8. 搜索NLP行业模型和轻量化客户定制
  9. Spark 报错 DROP TABLE IF EXISTS should not show AnalysisException
  10. 因开源协议“大打出手”,AWS 宣布创建 Elasticsearch、Kibana 分支
  11. 自定义ContentProvider
  12. python语言程序设计实践教程实验八答案_Python程序设计实践教程
  13. 成功GET一款高大上又不显俗的Linux时间锁屏软件-GLUQLO
  14. 灾难性的洪水帮助塑造了火星上的独特景观
  15. Unity3D_Util_Editor_显示RectTransform的世界坐标和相对坐标
  16. android和平精英安装目录,和平精英文件目录在哪里 本体及安装包位置
  17. 服务器系统可以备份,服务器操作系统可以备份吗
  18. ViewPager、Fragment和TabLayout实现切页效果
  19. Flash报表控件(FusionCharts) 使用
  20. javascript 区号与城市的对应信息

热门文章

  1. idea2019 换背景
  2. 【Windows无法修复问题】“启动修复”无法修复你的电脑解决方法
  3. ubuntu18.04两台电脑ntp时间同步
  4. DataX 异构数据源离线同步
  5. C语言中空白字符与空字符的区别
  6. BZOJ 1189 HNOI2007 紧急疏散evacuate
  7. python mysqldb insert_Python MySQLdb 插入数据
  8. 【计算机网络】思科实验(3):使用三层交换机实现跨VLAN间的通信
  9. 简历中的star法则
  10. 项目管理助力组织赢在VUCA时代