sungiant / sge

Simple graphics experiments built with Vulkan.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool



SGE
simple graphics engine

| Features | Examples | Releases |
| Roadmap | Getting started


CI Issues License

Features

SGE has a minimal feature set - you could think of it as being something like ShaderToy running against Vulkan for desktop environments with direct control in C++ over shader input data.

  • Easily author compute shader based rendering demos.
  • Configurable input data: push constants, and uniform buffers.
  • Windows support (Vulkan)
  • OSX support (Metal via MoltenVK)
  • Cross platform input device support: keyboard, mouse, gamepad.
  • Cross platform desktop window management: fullscreen, resize, title, console, dpi.
  • Easy to access and to hook into ImGui.
  • Built in debugging overlays.
  • Modular design.
  • Minimal codebase, ~10,000 lines total (including platform code).
  • Nominal dependencies (OS, Vulkan, ImGui).

Rationale

  • Experiment with Vulkan.

Examples

Releases

Current

  • v0.0.0 - Pre-release (unpatched, dev branch, work-in-progress)

Upcoming

  • v0.1.0 - Initial release

Roadmap

0.1.0 - Remaining tasks

  • Complete dynamic csg tree SBO implementation.
  • Replace ray tracing example (right now there is a familiar placeholder to help explain [this issue][molten_vk_sbo_issue] - now resolved).
  • Clean separation between host, engine, runtime, and app.

Backlog

  • Linux host implementation.
  • Compute shader input/output textures to be user configurable (formats selection, depth write option).
  • User control over multiple parallel compute pipelines.
  • Runtime 3D drawing api.
  • Engine post processing.
  • Engine update and render loops on separate threads.
  • Runtime shader compilation via glslang runtime integration.

Nice to have

  • Managed user windows.
  • All logging (engine and user) routed via single system. Remove Win32 console. Log visualisation extension, log to disk extension.
  • Gizmo extension made clickable.
  • Improve VK allocation logic (calculate exact amount needed on GPU for entire app lifetime, use a single allocation).
  • Fixed size container and string types.

Getting started

Prerequisite software

Environment setup: Windows

  • It may be nessasary to update gen.py to specify the specific version of Visual Studio being targetted.

Example PowerShell configuration:

$env:VULKAN_SDK="C:\VulkanSDK\1.2.131.2"

Environment setup: OSX

Example Fish configuration:

set -x VULKAN_SDK_PATH /Users/sungiant/sdks/vulkansdk-macos-1.2.131.1
set -x VULKAN_SDK $VULKAN_SDK_PATH/macOS
set -x VK_LAYER_PATH $VULKAN_SDK/etc/vulkan/explicit_layer.d
set -x VK_ICD_FILENAMES $VULKAN_SDK/etc/vulkan/icd.d/MoltenVK_icd.json
set -x MOLTEN_VK $VULKAN_SDK_PATH/MoltenVK/
set -x MVK_CONFIG_LOG_LEVEL 2
set -x MVK_CONFIG_TRACE_VULKAN_CALLS 0
set -x MVK_ALLOW_METAL_FENCES 1
set -x MVK_ALLOW_METAL_EVENTS 1
set -gx DYLD_LIBRARY_PATH $DYLD_LIBRARY_PATH $VULKAN_SDK/lib
set -gx PATH $PATH $VULKAN_SDK/bin

Notes

  • Releases of Molten VK before version 1.2.148 contain a blocking issue for some of the examples in this project, described here.
  • When running via XCode Vulkan calls can fail due to environment variables being inaccessible; opening XCode with open -a xcode can fix the issue.

Environment setup: Linux

Work in progress!

Building

To build SGE and it's associated examples:

  • Compile the shaders: python3 res.py
  • Generate IDE project files: python3 gen.py
  • Open the project in your IDE. Build. Run an example.

Alternatives

License

SGE is licensed under the MIT License; you may not use this software except in compliance with the License.

About

Simple graphics experiments built with Vulkan.

License:MIT License


Languages

Language:C++ 87.6%Language:C 10.1%Language:Objective-C++ 1.7%Language:CMake 0.4%Language:Python 0.1%Language:GLSL 0.0%Language:Shell 0.0%