Rust游戏引擎Bevy初探
那天我偶然看到一个使用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初探相关推荐
- 基于Bevy游戏引擎和FPGA的双人游戏
资源下载地址:https://download.csdn.net/download/sheziqiong/85931377 资源下载地址:https://download.csdn.net/downl ...
- Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...
- 【Rust日报】2023-01-07 shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏
shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏 shura是rust编写的一个安全,快速并且跨平台的游戏框架.shura使用一个2D组件系统.场景管理和group系统帮你管理一个大型游戏 ...
- Godot3游戏引擎入门之零一:【翻译】为什么要选择 Godot 引擎
前言 本文作为我的 Godot 系列文章的第二篇,是一篇翻译文作为 Godot 的优点说明吧,虽然文章发布于去年,但还是很有借鉴意义,翻译的不是很好请海涵! :smile: 作者简介:Rock Mil ...
- 如何制作自己的C++游戏引擎
你想了解更多关于游戏引擎的知识.并自己来写一个吗? 这可是非常牛皮的一件事.为了帮助你学习,这里有一些C++库和依赖项的推荐,可以帮助你快速上手. 游戏开发一直是我的学生学习更高级计算机科学主题的好帮 ...
- 游戏引擎开发技术栈总结(自用)
一:XX上一个2d游戏引擎up的总结 1.不做移动端 2.曲率引擎大佬 3.编辑器用的是electron开发的 4.3d渲染可以考虑three.js 5.长远计划学习C++,rust, 小引擎用js+ ...
- 如何从零开始用 C++ 开发一款游戏引擎?
原文链接:https://hackernoon.com/build-a-game-engine-from-scratch-in-c 游戏开发一直很能激励学生学习高级计算机科学.可能有些人认为游戏是孩子 ...
- 《HTML5游戏编程核心技术与实战》——第1章 游戏和HTML5初探1.1 网页游戏和HTML5...
本节书摘来自异步社区<HTML5游戏编程核心技术与实战>一书中的第1章,第1.1节,作者: 向峰 更多章节内容可以访问云栖社区"异步社区"公众号查看. 第1章 游戏和H ...
- 0909期即将上市:游戏引擎启示录
本期封面报道:游戏引擎启示录 镜之边缘.生化骑兵.最后的神迹.战争机器等游戏大作是如何制作的?Social Game的背后由什么来支撑?网页游戏引擎的结构是什么样子?零世界最核心的理念是什么?本期特别 ...
- unity游戏引擎_Unity游戏引擎指南:如何开始使用最受欢迎的游戏引擎
unity游戏引擎 Unity游戏开发 (Game Development with Unity) Unity is a cross-platform game engine developed by ...
最新文章
- 智慧少年队显示服务器异常,六大智慧少年是什么梗,六大智慧少年其它五个
- SQL Server 数据库崩溃后的恢复之法
- 【错误记录】Android Studio 编译信息输出乱码
- parent winform 位置_winform 弹出窗体指定位置
- CentOS7下用jdk1.7编译hadoop-2.7.1全过程详解
- TensorFlow2-自编码器
- 老是说我编译版本不够_海思3518E编译环境搭建
- 搜索NLP行业模型和轻量化客户定制
- Spark 报错 DROP TABLE IF EXISTS should not show AnalysisException
- 因开源协议“大打出手”,AWS 宣布创建 Elasticsearch、Kibana 分支
- 自定义ContentProvider
- python语言程序设计实践教程实验八答案_Python程序设计实践教程
- 成功GET一款高大上又不显俗的Linux时间锁屏软件-GLUQLO
- 灾难性的洪水帮助塑造了火星上的独特景观
- Unity3D_Util_Editor_显示RectTransform的世界坐标和相对坐标
- android和平精英安装目录,和平精英文件目录在哪里 本体及安装包位置
- 服务器系统可以备份,服务器操作系统可以备份吗
- ViewPager、Fragment和TabLayout实现切页效果
- Flash报表控件(FusionCharts) 使用
- javascript 区号与城市的对应信息