SGE
simple graphics engine
|
Features |
Examples |
Releases |
|
Roadmap |
Getting started
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).
- Experiment with Vulkan.
- v0.0.0 - Pre-release (unpatched, dev branch, work-in-progress)
- v0.1.0 - Initial release
- 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.
- 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.
- 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.
- 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"
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
- 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.
Work in progress!
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.
SGE is licensed under the MIT License; you may not use this software except in compliance with the License.