GameFromScratch · 游戏开发技术· 来源· Mike·· 3 小时前AI 评分35
Brutal C# 游戏开发框架发布大量示例代码
Brutal Gets A Bit Less Brutal
正文 · AI 翻译
本月早些时候,残酷的 C# 游戏开发框架 发布 为免费开源。Brutal 的核心原则之一是其不易使用。事实上,这正是其名称的来源:
该名称是一种警告。
BRUTAL 旨在供希望自行做出架构决策并准备构建和维护其游戏所需系统的经验丰富的程序员使用。其范围经过刻意聚焦。团队优先考虑面向高要求游戏的底层功能,所有贡献均根据这一目的进行评估。
然而,在发布时情况确实如此:Brutal 发布时没有任何文档和示例。什么都没有。要了解任何内容,你基本上必须深入代码并自行摸索。如今嘛……仍然没有文档,但现在有了示例……事实上有很多示例。
| 示例 | 它展示了什么 |
|---|---|
| HelloCore.cs | 平台检测、ByteSize/ElementCount 算术运算以及 Ptr<T> |
| HelloMemory.cs | 使用Mem分配和释放非托管内存,并使用PtrOwner<T>拥有指针 |
| HelloCollections.cs | NativeList<T>,一种由非托管内存支持的动态列表 |
| HelloStrings.cs | 使用String8和StringBuilder<byte>处理UTF-8文本,它们旨在避免内存分配 |
| HelloNumerics.cs | 使用 float3 和 float4x4 进行向量和矩阵基础操作 |
| HelloMaths.cs | Random 扩展:范围、形状内的点和随机方向 |
| HelloConcurrency.cs | 使用 JobScheduler 在工作线程上运行作业 |
| HelloLogging.cs | 使用默认和命名类别记录到控制台 |
| HelloLocalization.cs | 带有命名变量的本地化字符串,以及替换翻译内容 |
窗口化和用户界面
| 示例 | 它展示了什么 |
|---|---|
| HelloGlfw.cs | 一个空的 GLFW 窗口 |
| HelloSdl.cs | 一个带有渲染器的 SDL 窗口,用于绘制填充矩形 |
| HelloSdlImage.cs | 使用 Sdl.Image 将生成的图像保存为 PNG 并重新加载 |
| HelloSdlTtf.cs | 使用 Sdl.Ttf 将文本渲染到表面,如果不传入字体则使用系统字体 |
| HelloImGui.cs | Dear ImGui 在 GLFW 和 OpenGL 后端上显示一些文本、按钮和滑块 |
| HelloImGuiFreeType.cs | 使用 FreeType 构建 ImGui 字体图集,无需窗口 |
| HelloImPlot.cs | 使用 ImPlot 在一个无头帧中绘制正弦波 |
| HelloImGuiAbstractions.cs | 游戏内控制台:注册 [TerminalAction] 命令并运行命令行 |
| HelloImGuiExtensions.cs | ImGuiEx 控件直接绑定到 C# 枚举 |
| HelloNativeFileDialog.cs | 操作系统的原生文件选择器 |
| HelloNotCurses.cs | 使用 notcurses 在终端中显示彩色文本(请在真实终端中运行) |
图形
| 示例 | 它展示了什么 |
|---|---|
| HelloOpenGl.cs | 使用 OpenGL 的彩色三角形 |
| HelloVulkan.cs | 创建 Vulkan 实例、列出 GPU 及其队列族,并创建设备 |
| HelloVulkanAbstractions.cs | Vulkan.Abstractions 设置辅助函数,以及由 C# 结构体构建的顶点输入布局 |
| HelloVulkanVma.cs | 创建 VMA 分配器和映射缓冲区,向其写入数据并读回 |
| HelloShaderC.cs | 使用 shaderc 将 GLSL 编译为 SPIR-V |
| HelloSlang.cs | 编译 Slang 到 SPIR-V |
| HelloRenderMesh.cs | 生成程序化球体网格 |
纹理与资源
| 示例 | 它展示了什么 |
|---|---|
| HelloStb.cs | 使用 stb_image 编写和读取 PNG |
| HelloTexture.cs | 纹理格式描述符,填充 GenericTexture,并使用 TextureWriter 和 TextureLoader 将其保存和加载为 PNG 和 KTX2 |
| HelloKtx.cs | 创建、写入和加载 KTX2 纹理 |
| HelloGli.cs | 具有完整mip链的纹理,以DDS格式保存和加载(使用GLI) |
| HelloGltf.cs | 解析一个微小的内联glTF,读取其顶点数据并将其重新保存输出 |
| HelloMeshOptimizer.cs | 使用meshoptimizer对三角形进行重排序以优化顶点缓存 |
音频
| 示例 | 它展示了什么 |
|---|---|
| HelloOpenAl.cs | 使用 OpenAL 播放生成的音调 |
| HelloSdlMixer.cs | 使用 Sdl.Mixer 播放生成的音调 |
| HelloFmod.cs | 使用 FMOD 播放音调。FMOD 的原生库未打包,因此你需要拥有自己的授权副本 |
物理引擎
| 示例 | 它展示了什么 |
|---|---|
| HelloBox2D.cs | 使用 Box2D 将盒子掉落至地面并打印其落点位置 |
| HelloJolt.cs | 使用 Jolt Physics 将盒子掉落至地面并打印其落点位置 |
网络通信
| 示例 | 它展示了什么 |
|---|---|
| HelloRakNet.cs | 一个 RakNet 服务器和客户端通过本地主机连接并发送消息 |
诊断信息
| 示例 | 它展示了什么 |
|---|---|
| HelloMonitorHost.cs | 启动 Monitor 看门狗并将日志写入文件 |
| HelloRenderDoc.cs | 检查 RenderDoc 的内置 API 是否已加载(Windows 和 Linux) |
| HelloRenderDocImGui.cs | 使用 Dear ImGui 绘制 RenderDoc 控制面板,无头模式 |
演示
| 示例 | 展示内容 |
|---|---|
| DemoVulkan.cs | 使用 Vulkan、Vulkan.Abstractions 辅助类、由 VMA 分配的顶点缓冲区以及通过 ShaderC 编译的着色器绘制的彩色三角形 |
| DemoGltfViewer.cs | 加载带有节点变换的 glTF 场景,使用 meshoptimizer 进行优化,并通过 OpenGL 绘制光照效果。传入你自己的 .gltf 或 .glb,否则将构建一个环面结。 |
| DemoTexturedQuad.cs | 将多级渐远纹理写入 KTX2 格式,重新加载后通过 OpenGL 在地板上绘制,每个 mip 级别带有不同的色调。 |
| DemoImGui.cs | Dear ImGui 结合 FreeType 字体和 ImPlot 图表,运行于 GLFW 和 OpenGL 之上。 |
| DemoSdl.cs | 使用 Sdl.Image(PNG 保存和加载)、Sdl.Mixer(空格键时发出哔声)和 Sdl.Ttf(文本,如果你传入字体)的 SDL 窗口 |
| DemoRenderDoc.cs | 按下 F12 时使用 RenderDoc 捕获帧的 OpenGL 三角形(Windows 和 Linux) |
| DemoBox2D.cs | 使用 Box2D 让箱子掉落到地面,并用 OpenGL 绘制 |
| DemoJolt.cs | 使用 Jolt Physics 让箱子落到地面上,并用 OpenGL 进行 3D 绘制 |
更棒的是,还有一个由社区创建的示例可用,它展示了一个完整的 Vulkan 渲染器实现,用于创建 3D 模型加载器。
关键链接
在下面的视频中,我们将深入体验新的样本,并确定 Brutal 框架的使用究竟有多残酷!
来源:GameFromScratch · 游戏开发技术 · gamefromscratch.com
