| Module | Bibliothèque de base | décrire |
|---|---|---|
runtime | - | Modules de base |
runtime/cgpu | - | Sous-modules de base, API graphique multiplateforme pour les plates-formes GPU modernes |
runtime/sugoi | - | Sous-module central, un modèle d'objet ECS véritablement basé sur les données |
runtime/math | RealTimemath | Sous-modules de base, bibliothèque mathématique |
runtime/io | - | Sous-modules de base, services d'E / S synchrones / asynchrones |
runtime/task | Fibertaskinglib, marl | Sous-module de base, un système de tâches à forte intensité de calcul basé sur la coroutine |
runtime/binary | - | Sous-module de base, sérialisation binaire |
runtime/platform | - | Sous-module de base, interface système |
runtime/resource | - | Sous-modules de base, gestion des ressources asynchrones |
runtime/type | - | Sous-module central, offrant des fonctions liées à RTTI |
runtime/lua | Lua, Luau | Sous-module de base, en utilisant Lua comme langue de colle |
SkrScene | - | Module de scène, gestion des ressources de scène |
SkrRenderer | - | Module de rendu, rendu Gestion des ressources, pipeline de rendu de lecteur |
SkrImgui | imgui | UI d'exécution pour le débogage |
SkrRenderGraph | - | Rendre le graphique basé sur CGPU |
SkrLive2d | live2d | Backend de rendu en live2d |
SkrInputSystem | gagner | Le paquet supérieur d'entrée |
SkrAnim | animation ozz | Gestion des ressources d'animation, fonctions de base de l'informatique d'animation |
devtime/tweak | - | Fournit des solutions de remplacement de chaleur constantes légères |
devtime/inspect | - | Fournit une visualisation de l'état variable d'exécution |
SkrToolCore | - | Gérer et conduire les processus de cuisson des ressources |
SkrAnimTool | animation ozz | Ressources liées aux animations d'importation et de cuisson |
SkrGLTFTool | cgltf | Importez le modèle GLTF et faites-le cuire |
SkrTextureCompiler | IspcTextureCompressor | Cartes d'importation et de cuisson |
SkrShaderCompiler | - | Importer et cuire des ressources liées aux matériaux |
codegen | libtooling, mako-template | Fournir une génération de code |
| Plate-forme | CI (dev) |
|---|---|
| Plate-forme | D3d12 | D3d11 | Vulkan | Métal |
|---|---|---|---|---|
| Fenêtre | ✔️ | ✔️ | N / A | |
| macos | N / A | N / A | ✔️ | ❗ |
| Plate-forme | PNG | Jpeg | BMP | ICO | Exr | TGA |
|---|---|---|---|---|---|---|
| Fenêtre | libpng (v1.5.2) | libjpeg-turbo | ❗ | ❗ | ❗ | ❗ |
| macos | libpng (v1.5.27) | libjpeg-turbo | ❗ | ❗ | ❗ | ❗ |
Jeu multijoueur basé sur ECS et serveur.
Interface graphique CGPU de nouvelle génération à l'aide de StateBuffer. Abandonnez le concept de PSO et utilisez StateBuffer comme description de l'état du pipeline graphique. Les API traditionnelles de pipeline graphique utilisent souvent PSO, qui emballe tous les états de pipeline et le shader ISA et les télécharge dans le GPU dans son ensemble:
StateBuffer se compose d'une série de STATECHUNKS, chaque Statechunk décrit un état de pipeline graphique et StateBuffer décrit l'état complet du pipeline graphique à travers une combinaison de statechunks. Comparée à la pleine lutte de PSO, StateBuffer peut préparer les paquets d'état dans le site de dessin et pousser l'interrupteur d'état au groupe de registre d'état du GPU lorsque DrawCall est généré.
StateBuffer peut considérablement atténuer les problèmes de ballonnement de la mémoire causés par les explosions dans les combinaisons de pipeline et de shaders, et PSO exacerbera ce problème à la place.
WIP ...
La couche RenderTree de l'interface graphique a les fonctions de typographie et de rendu d'objets de rendu. Prend en charge les primitives de base, les textures, les pinceaux de couleurs et les paragraphes de texte.
Exemple d'un programme qui intègre le SDK natif du cubisme et utilise un graphique de rendu pour un dessin efficace des modèles Live2D.
Le modèle Live2D combine plusieurs types de données source, et tous les types de données sont chargés et analysés de manière asynchrone. L'ensemble du processus de chargement du modèle combine la lecture du disque dur, le streaming de la mémoire vers la mémoire vidéo, le streaming de décompression des fichiers vers la mémoire vidéo et le téléchargement direct de fichiers vers la mémoire vidéo. La démo garantit que tous les types d'opérations d'E / S restent efficaces dans la bande passante, au cours de laquelle le fil principal qui initie la demande n'a ni pause ni surcharge. Le modèle LIVE2D non transformé contient des dizaines de fichiers JSON de petite taille, plusieurs fichiers de sommet de modèle de taille moyenne et deux cartes PNG 4K qui doivent être décodées, formant le tableau de profil de pipeline d'E / S dans la figure ci-dessous.
Le nombre de cadres de rendu final de Shipping Build peut facilement rompre des milliers d'images, ce qui est plus de dix fois l'exemple de référence officielle du cubisme.
Cette démo montre comment utiliser Rendergraph pour le rendu différé, où la pièce de calcul d'éclairage est deux implémentations: CompuShDaer et PixeShader. L'effet d'ombrage d'éclairage réel n'a pas été achevé dans la démo, et l'accent est mis sur la vérification de la faisabilité du processus de retard. Cette démo montre également comment utiliser un profileur personnalisé pour profiler les détails d'exécution de RenderGraph.
Cette démo montre comment utiliser Rendergraph pour le rendu du triangle.
Cette démo montre comment utiliser l'échantillonnage de texture dans le CGPU, et la démo montre également comment permettre des échantillonneurs statiques / immuables dans CGPU.
Nous avons fini par abandonner les résultats que nous avions explorés. L'abandon ne signifie pas que ces technologies sont pauvres ou indisponibles, mais que nous les avons abandonnées sélectivement après une considération complète.
Ceci est une démo de dessin triangle multi-backend.
Compiler avec la commande suivante
> xmake l setup.lua
> xmake f -m debug -c
> xmake
Conseils:
/build .xmake version peut provoquer des interruptions Codegen ou des problèmes incomplets. S'il y a d'autres problèmes, assurez-vous de signaler les problèmes?xmake f -m debug -c -v à l'interruption;xrepo remove --all -y peut être utilisé pour nettoyer le référentiel à tort installé, puis le reconstruire. Il est recommandé d'utiliser VScode + Clangd comme environnement d'édition et utiliser la commande xmake project -k compile_commands pour générer l'ensemble de données requis par Clangd