From c60c4992f6e2c3b1bfd32d942251acfe39d33c43 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sat, 21 May 2022 16:32:28 -0400 Subject: [PATCH] Add some missing wiki content back to the README The GitHub links also now point to sourcehut. --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8a92313..0b1b531 100644 --- a/README.md +++ b/README.md @@ -10,22 +10,64 @@ of several years of my own graphics programming work :-) Here is a selection of screenshots that provides a good sense of the graphical capabilities of Prism: -![pcss](misc/pcss.png?raw=true) -![sponza](misc/sponza.png?raw=true) +![pcss](misc/pcss.png) +![sponza](misc/sponza.png) -![buddha](misc/buddha.png?raw=true) -![custom models](misc/custom%20models.png?raw=true) +![buddha](misc/buddha.png) +![custom models](misc/custom%20models.png) The sibenik, sponza and buddha models shown are from the [McGuire Computer Graphics Archive](https://casual-effects.com/data/), any other models shown are created by me. ## Features -You can view a more comprehensive list of features [here](https://github.com/redstrate/prism/wiki/List-of-Features). +* Custom cross platform high-level graphics API + * Backends available: + * Vulkan + * Metal + * DX12 + * Rendering is consistent regardless of platform or API used! + * Where older or underperforming GPUs are supported (for example, an Apple TV 4K, or a Thinkpad X230), the engine supports disabling expensive features like IBL or point light shadows and has other scalability options. + * Shaders are written in GLSL, and compiled to the required shader language offline and/or at runtime using SPIRV-Cross and glslang. +* Other advanced rendering techniques + * Real-time physically based rendering including using scene probes for image-based lighting. + * Skinned mesh support with animation. + * PCSS or PCF for softer shadows, supported on every type of light. + * Automatic eye adaption with exposure using compute kernels. +* Custom window management API + * main() and other platform-specific tidbits are abstracted, for easy support of non-desktop platforms like mobile devices. + * HiDPI support included and enabled by default! + * If available on the platform, multiple windows are supported as well! This is leveraged by Dear ImGui for multiple viewport support. + * Support for querying whether or not the platform is in light/dark mode (where supported). Currently, this only switches between the light/dark imgui themes. +* Dear ImGui used for debug/editor UIs + * Uses the experimental docking/viewport branch! + * Automatic DPI scaling on fonts for crisp rendering when the window is in a HiDPI environment. + * Custom ImGui backend is built on top the GFX api and other platform agnostic systems. + * Plenty of custom widgets available for easily creating debug tools, see [imgui_stdlib.h](https://git.sr.ht/~redstrate/prism/tree/master/item/extern/imgui/include/imgui_stdlib.h) and [imgui_utility.hpp](https://git.sr.ht/~redstrate/prism/tree/master/item/engine/core/include/imgui_utility.hpp)! +* Entity-Component system for modular object building + * No runtime polymorphism is involved and it leverages the native C++ type system, [components are kept as simple structs](https://git.sr.ht/~redstrate/prism/tree/master/item/engine/core/include/components.hpp). +* Asset management + * Custom model file format for super fast model loading and small file sizes. + * Includes a custom Blender addon for easy exporting! + * Assets are referenced from disk, and only loaded once - and are unloaded once they are no longer referenced. + * Thumbnails are created automatically by the editor and stored on disk until further use. +* Custom math library + * Quaternions, matrices, vectors, rays, and more are available! + * Infinite perspective matrices are available and used by default. +* Custom editors supporting scene, cutscene, material authoring + * Multidocument workflow similar to UE4. + * Undo/redo system. + * Transform handles for easy object manipulation. ## Building -There are instructions for Windows, Linux, and macOS targets in the [wiki](https://github.com/redstrate/prism/wiki). + +Prism will build out of the box in CMake, but on some platforms (like Windows) you will have to point to some of the +dependencies yourself. There is an example app provided in `example/`. If you want to build the tooling or the example, use the CMake options `BUILD_EXAMPLE` and `BUILD_TOOLS` respectively. +### Combating slow compile times/linking times +Unfortunately Prism is built upon tons of statically linked libraries, and GCC's linker is notoriously slow for this task. If possible, +use Clang and your build times will dramatically increase. + ## Usage The ideal way to use it is by letting prism take over your main() and implementing an app_main() instead, (and using `add_platform_executable` in CMake) but I'm working on letting developers use the engine as a regular library too.