ona/readme.md

97 lines
4.1 KiB
Markdown
Raw Normal View History

2023-02-18 04:34:40 +01:00
# Ona
![Screenshot of Ona rendering a CRT display distrotion effect on the default texture](promo/effects.png)
2023-02-18 04:34:40 +01:00
## Table of Contents
1. [Overview](#overview)
1. [Goals](#goals)
1. [Technical Details](#technical-details)
1. [Requirements](#requirements)
1. [Building](#building)
2024-07-25 15:26:39 +02:00
1. [Packaging](#packaging)
2023-02-18 04:34:40 +01:00
## Overview
2023-02-20 14:41:33 +01:00
Ona is a straightforward game engine with the aim of staying reasonably lightweight through a modular architecture.
2023-02-18 04:34:40 +01:00
Ona is also the Catalan word for "wave".
## Goals
2023-04-19 01:34:06 +02:00
* Fully-featured two-dimensional raster and vector rendering capabilities.
2023-02-18 04:34:40 +01:00
2023-05-28 14:52:16 +02:00
* Support major computer gaming ecosystems; Namely Microsoft Windows, SteamOS, Unix-like systems, and the web.
2023-02-18 04:34:40 +01:00
2023-04-19 01:34:06 +02:00
* Minimize external dependencies.
2023-02-18 04:34:40 +01:00
2023-05-28 14:52:16 +02:00
* Provide utilities for handling rendering but otherwise leave the higher-level game logic and data structuring to the programmer.
2023-02-18 04:34:40 +01:00
2024-06-20 23:16:49 +02:00
* Enforce an architecture that makes non-interdependent logic trivially parallelizable.
2024-06-20 23:16:29 +02:00
2023-02-18 04:34:40 +01:00
## Technical Details
### Requirements
Ona currently depends the following third-party tools to build it:
* Platform support for SDL2 at version 2.0.20 installed via the standard shared binary format redistributable.
* SPIR-V shader compilation system utilities available from the system path, namely `glslangValidator`.
2023-04-19 01:34:06 +02:00
* Zig compiler toolchain.
2023-02-18 04:34:40 +01:00
As the project evolves, dependencies on libraries external to the project codebase will be minimized or removed outright to meet the goals of the project as closely as possible.
### Building
After the repository has finished cloning, you will then want to also clone all Git submodule dependencies via the `git submodule update --init --recursive` command. If you are using a Git front-end, this may be a menu option or is handled *automagically*, it varies depending on the front-end.
Once all third-party tools and dependencies are satisfied, navigate to the root project folder and run `zig build demos` to build the demo executables. The resulting binaries will be placed in `/demos` with a name respective to the source file it was built from.
To experiment without creating your own Zig project, you can create a new uniquely named source file in this directory and the `zig build demos` step will (re)build it along with everything else.
The unit testing suite for the engine modules (`src/ona`, `src/gfx`, etc.) may be built and ran via `zig build tests`.
Tests are ran by our continuous integration host so should these shouldn't fail locally without user intervention. If they do, feel free to report an issue via my email linked in my Sauce Control bio or through any other means of public communication I have.
### Packaging
**Note** that consuming Ona as a package requires it be downloaded manually, either through the releases page or by cloning, and referencing as a local dependency. This is due to the repository using Git submodules to reference third-party code.
To reduce the amount of setup work, a [project template is provided](https://sauce.pizzawednes.day/kayomn/ona-template) that will open a window and show the default texture on the middle of the screen. If you decide to use this project, the steps below can be skipped.
2. Create a new Zig project if you have not already.
3. Create a `build.zig.zon` accompanying your `build.zig` if you do not already have one.
4. Your `build.zig.zon` should, at minimum, contain the following dependency listed in the dependencies section:
```zig
.{
.dependencies = .{
.ona = .{ .path = "path/to/ona/repo" },
},
}
```
5. Add a package declaration for Ona to your `build.zig` and add the relevant modules to your application.
```zig
const ona_dependency = b.dependency("ona", .{
.target = target,
.optimize = optimize,
});
const app = b.addExecutable(.{
.name = "My Ona App",
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/main.zig"),
});
app.root_module.addImport("ona", ona_dependency.module("ona"));
app.root_module.addImport("gfx", ona_dependency.module("gfx"));
app.root_module.addImport("hid", ona_dependency.module("hid"));
b.installArtifact(app);
```
6. Create a `main.zig` containing a valid Ona app declaration.
7. Run `zig build` to build your new game application.