| Module | Core library | describe |
|---|---|---|
runtime | - | Core modules |
runtime/cgpu | - | Core submodules, cross-platform Graphics API for modern GPU platforms |
runtime/sugoi | - | Core submodule, a truly data-driven programming ECS object model |
runtime/math | RealtimeMath | Core submodules, math library |
runtime/io | - | Core submodules, synchronous/asynchronous I/O services |
runtime/task | FiberTaskingLib, marl | Core submodule, a compute-intensive task system based on coroutine |
runtime/binary | - | Core submodule, binary serialization |
runtime/platform | - | Core submodule, system interface |
runtime/resource | - | Core submodules, asynchronous resource management |
runtime/type | - | Core submodule, providing rtti-related functions |
runtime/lua | lua, luau | Core submodule, using lua as glue language |
SkrScene | - | Scene module, scene resource management |
SkrRenderer | - | Renderer module, rendering resource management, drive rendering pipeline |
SkrImgui | imgui | Runtime UI for debugging |
SkrRenderGraph | - | Render Graph based on CGPU |
SkrLive2d | live2d | Live2d rendering backend |
SkrInputSystem | gaininput | The upper package of input |
SkrAnim | ozz-animation | Animation resource management, basic functions of animation computing |
devtime/tweak | - | Provides lightweight constant heat replacement solutions |
devtime/inspect | - | Provides runtime variable state visualization |
SkrToolCore | - | Manage and drive resource baking processes |
SkrAnimTool | ozz-animation | Import and bake animation related resources |
SkrGLTFTool | cgltf | Import the gltf model and bake it |
SkrTextureCompiler | ISPCTextureCompressor | Import and bake maps |
SkrShaderCompiler | - | Import and bake material-related resources |
codegen | libtooling, mako-template | Provide code generation |
| Platform | CI(Dev) |
|---|---|
| Platform | D3D12 | D3D11 | Vulkan | Metal |
|---|---|---|---|---|
| Windows | ✔️ | ✔️ | N/A | |
| macOS | N/A | N/A | ✔️ | ❗ |
| Platform | PNG | JPEG | BMP | ICO | EXR | TGA |
|---|---|---|---|---|---|---|
| Windows | libpng(v1.5.2) | libjpeg-turbo | ❗ | ❗ | ❗ | ❗ |
| macOS | libpng(v1.5.27) | libjpeg-turbo | ❗ | ❗ | ❗ | ❗ |
ECS-based multiplayer game and server.
Next-generation CGPU graphical interface using StateBuffer. Abandon the concept of PSO and use StateBuffer as the state description of the graphics pipeline. Traditional graphics pipeline APIs often use PSO, which packages all pipeline states and shader ISA and uploads them to the GPU as a whole:
StateBuffer consists of a series of StateChunks, each StateChunk describes a graphic pipeline state, and StateBuffer describes the complete state of the graphic pipeline through a combination of StateChunks. Compared to the full Flush of PSO, StateBuffer can prepare StatePackets in the drawing site and push the state switch to the GPU's status register group when DrawCall is generated.
StateBuffer can greatly alleviate memory bloat problems caused by explosions in pipeline and shader combinations, and PSO will exacerbate this problem instead.
WIP...
The GUI's RenderTree layer has the functions of typography and rendering of Render Objects. Supports basic primitives, textures, color brushes and text paragraphs.
Example of a program that integrates the Cubism Native SDK and uses Render Graph for efficient drawing of Live2D models.
The Live2D model combines multiple source data types, and all data types are loaded and parsed asynchronously. The entire model loading process combines hard disk reading, memory streaming to video memory, file decompression streaming to video memory, and direct upload of files to video memory. Demo ensures that all types of I/O operations remain bandwidth efficient, during which the main thread that initiates the request has no pauses or overhead. The unprocessed Live2D model contains dozens of small-size JSON files, several medium-size model vertex files, and two 4K PNG maps that need to be decoded, forming the I/O pipeline profile chart in the figure below.
Shipping Build's final rendering frame count can easily break thousands of frames, which is more than ten times the official Cubism example benchmark.
This demo shows how to use RenderGraph for Deferred rendering, where the lighting calculation part is two implementations: ComputeShdaer and PixelShader. The actual lighting shading effect has not been completed in the demo, and the focus is on verifying the feasibility of the delay process. This demo also shows how to use a custom Profiler to profile the execution details of RenderGraph.
This demo shows how to use RenderGraph for triangle rendering.
This demo demonstrates how to use texture sampling in CGPU, and demo also demonstrates how to enable Static/Immutable Samplers in CGPU.
We ended up abandoning the results that we had explored. Abandoning does not mean that these technologies are poor or unavailable, but that we selectively abandoned them after comprehensive consideration.
This is a multi-backend triangle drawing demo.
Compile with the following command
> xmake l setup.lua
> xmake f -m debug -c
> xmake
Tips:
/build and .xmake folders and try again. If there is any further problem, please be sure to report issues?xmake f -m debug -c -v at the interrupt;xrepo remove --all -y can be used to clean the wrongly installed repository and then rebuild it. It is recommended to use vscode + clangd as the editing environment, and use the command xmake project -k compile_commands to generate the data set required by clangd