view README.md @ 132:25fe4972ef9c

add: support for smooth swapchain-recreation
author Sam <sam@basx.dev>
date Thu, 20 Apr 2023 01:00:48 +0700
parents ff345f9e4eb7
children c1a9a988b9e3
line wrap: on
line source

Semicongine
===========

Hi there

This is a very simplistic little game engine, mainly trying to wrap around vulkan and the operating system's windowing, input and audio system.
I am using the last programming language you will ever need, [Nim](https://nim-lang.org/)

Building
--------

Requires Nim to be installed and ```glslangValidator``` to be downloaded to the
directory of the main compilation file (e.g. into ```examples/``` in order to
compile the examples). It can be downloaded at
https://github.com/KhronosGroup/glslang/releases/.

Run ```nim help``` to see a list of available build commands.

Roadmap
-------

Still tons to do. Making render pipeline and scenegraph somewhat compatible
seems like it will require quite a bit more of work. Also, audio might require
quite a bit of work, no experience there.

Rendering:

- [x] Vertex attributes, vertex data
- [x] Shaders (allow for predefined and custom shaders)
- [x] Uniforms
- [x] Per-instance vertex attributes (required to be able to draw scene graph)
- [x] Fixed framerate
- [x] Instanced drawing (currently can use instance attributes, but we only support a single instance per draw call)
- [ ] Textures
- [ ] Depth buffering
- [ ] Mipmaps 
- [ ] Multisampling 

Asset handling:
- [ ] Mesh files (Wavefront OBJ, MTL) (use something from sketchfab for testing, https://sketchfab.com/)
- [ ] Image files (BMP RGB + BMP Graysscale for transparency)
- [ ] Audio files (AU)

Other (required for alpha release):
- [x] Config files ala \*.ini files (use std/parsecfg)
- [x] Mouse/Keyboard input handling
  - [x] X11
  - [x] Win32
- [ ] Enable/disable hardware cursor
- [ ] Fullscreen mode + switch between modes
- [ ] Input-mapping configuration
- [ ] Audio playing (Alsa, Windows Waveform API?)
- [ ] Telemetry

Advanced features (very low priority):
- [ ] Allow multipel Uniform blocks?
- [ ] Text rendering
- [ ] Animation system
- [ ] Sprite system
- [ ] Particle system
- [ ] Query and display rendering information from Vulkan
- [ ] Game controller input handling

Quality improvments:

- [x] Better scenegraph API
- [x] Better rendering pipeline API

Build-system:
- [x] move all of Makefile to config.nims