Skip to content

Commit

Permalink
Use the 3.0 branch for the 2.X website build (#2414)
Browse files Browse the repository at this point in the history
* Start of shifting files around for new website

* More work on multi-versioning

* Fix bad notes

* Delete the old website

* Fix paths for 2.X

* Delete Statiq, add a NUKE target for building the new site in 2.X, other tweaks

* Update the submodule in the 3.0 branch for the 2.X branch

* Apply suggestions from code review

Co-authored-by: Andrew Davis <curin@dbtgaming.com>

* Use a deploy key instead

---------

Co-authored-by: Andrew Davis <curin@dbtgaming.com>
  • Loading branch information
Perksey and curin authored Jan 24, 2025
1 parent 915c245 commit 46b388a
Show file tree
Hide file tree
Showing 170 changed files with 405 additions and 39,178 deletions.
41 changes: 14 additions & 27 deletions .github/workflows/publish-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,27 @@ on:
push:
branches:
- 'main'
paths:
- "documentation/**/*"
permissions:
contents: read
pages: write
id-token: write
jobs:
Build:
environment: github-pages
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET 5.0
uses: actions/setup-dotnet@v1
with:
dotnet-version: 5.0.401
- name: Setup .NET 6.0
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.201
- name: Setup .NET 7.0
uses: actions/setup-dotnet@v1
with:
dotnet-version: 7.0.102
- name: Run Statiq
run: dotnet run -c Release --project src/Website/Silk.NET.Statiq/Silk.NET.Statiq.csproj -- -l debug --nocache
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
path: "docs"
Deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: Build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
ref: "develop/3.0"
ssh-key: ${{ secrets.SILK_ACTIONS_DEPLOY_KEY }}
- run: |
git submodule update --init --recommend-shallow eng/submodules/silk.net-2.x
cd eng/submodules/silk.net-2.x
git fetch origin main
git checkout FETCH_HEAD
cd ../../..
git add eng/submodules/silk.net-2.x
git commit -m "Update Silk.NET 2.X submodule for website"
git push
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -481,3 +481,6 @@ src/Website/Silk.NET.Statiq/cache

# As much as I love Mac, really not interested in this litter.
**/.DS_Store

website/
version.txt
19 changes: 19 additions & 0 deletions .nuke/build.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
"type": "boolean",
"description": "If specified, ignores any generated solution present and builds the entire project"
},
"AndroidHomeValue": {
"type": "string",
"description": "Android home. Will be determined from dotnet if not provided"
},
"Configuration": {
"type": "string",
"description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)"
Expand Down Expand Up @@ -136,16 +140,28 @@
"type": "string"
}
},
"PullBaseSite": {
"type": "boolean",
"description": "When enabled, pulls the latest changes for local clone of the 3.0 branch to build the website. Automatically true if the local clone doesn't exist yet"
},
"Root": {
"type": "string",
"description": "Root directory during build execution"
},
"SiteBuildArgs": {
"type": "array",
"description": "Arguments for website generation on the 3.0 branch",
"items": {
"type": "string"
}
},
"Skip": {
"type": "array",
"description": "List of targets to be skipped. Empty list skips all dependencies",
"items": {
"type": "string",
"enum": [
"Angle",
"Assimp",
"BuildLibSilkDroid",
"Clean",
Expand Down Expand Up @@ -176,6 +192,7 @@
"ValidateSolution",
"Vkd3d",
"VulkanLoader",
"Website",
"Wgpu"
]
}
Expand All @@ -190,6 +207,7 @@
"items": {
"type": "string",
"enum": [
"Angle",
"Assimp",
"BuildLibSilkDroid",
"Clean",
Expand Down Expand Up @@ -220,6 +238,7 @@
"ValidateSolution",
"Vkd3d",
"VulkanLoader",
"Website",
"Wgpu"
]
}
Expand Down
2 changes: 2 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<Project>
</Project>
2 changes: 2 additions & 0 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<Project>
</Project>
33 changes: 0 additions & 33 deletions Silk.NET.sln
Original file line number Diff line number Diff line change
Expand Up @@ -446,12 +446,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenGL Demos", "OpenGL Demo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AndroidDemo", "examples\CSharp\OpenGL Demos\AndroidDemo\AndroidDemo.csproj", "{380468AD-B44D-456C-8DED-35467D11AC2F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Website", "Website", "{832251B9-B1A2-450A-8FB8-41F600CCA616}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Statiq", "src\Website\Silk.NET.Statiq\Silk.NET.Statiq.csproj", "{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Statiq.TableOfContents", "src\Website\Silk.NET.Statiq.TableOfContents\Silk.NET.Statiq.TableOfContents.csproj", "{507ED409-A2FD-43BB-AC7C-778B92BD40CF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.DXVA", "src\Microsoft\Silk.NET.DXVA\Silk.NET.DXVA.csproj", "{28D863B1-B60C-4C08-8661-EB820A5B78D2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Core.Win32Extras", "src\Core\Silk.NET.Core.Win32Extras\Silk.NET.Core.Win32Extras.csproj", "{3E30D674-9282-4297-AD1F-9B233A166308}"
Expand Down Expand Up @@ -2843,30 +2837,6 @@ Global
{380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x86.ActiveCfg = Release|Any CPU
{380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x86.Build.0 = Release|Any CPU
{380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x86.Deploy.0 = Release|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|x64.ActiveCfg = Debug|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|x64.Build.0 = Debug|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|x86.ActiveCfg = Debug|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|x86.Build.0 = Debug|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|Any CPU.Build.0 = Release|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|x64.ActiveCfg = Release|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|x64.Build.0 = Release|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|x86.ActiveCfg = Release|Any CPU
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|x86.Build.0 = Release|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|x64.ActiveCfg = Debug|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|x64.Build.0 = Debug|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|x86.ActiveCfg = Debug|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|x86.Build.0 = Debug|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|Any CPU.Build.0 = Release|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|x64.ActiveCfg = Release|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|x64.Build.0 = Release|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|x86.ActiveCfg = Release|Any CPU
{507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|x86.Build.0 = Release|Any CPU
{28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|x64.ActiveCfg = Debug|Any CPU
Expand Down Expand Up @@ -4000,9 +3970,6 @@ Global
{514DED00-4DA3-46D1-B2E8-10CE826CD52D} = {081E7761-B200-4DBF-8950-941464DECACE}
{2F547104-C74A-4A84-8980-D1B973CC40C1} = {6842A2C6-5C7B-42DD-9825-0EDE91BFEBF7}
{380468AD-B44D-456C-8DED-35467D11AC2F} = {2F547104-C74A-4A84-8980-D1B973CC40C1}
{832251B9-B1A2-450A-8FB8-41F600CCA616} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5}
{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F} = {832251B9-B1A2-450A-8FB8-41F600CCA616}
{507ED409-A2FD-43BB-AC7C-778B92BD40CF} = {832251B9-B1A2-450A-8FB8-41F600CCA616}
{28D863B1-B60C-4C08-8661-EB820A5B78D2} = {F2CF5D32-4B41-425E-B229-8FFC48F88063}
{3E30D674-9282-4297-AD1F-9B233A166308} = {0651C5EF-50AA-4598-8D9C-8F210ADD8490}
{C04680A3-C92A-4631-BD1E-8E4553A3F969} = {2F547104-C74A-4A84-8980-D1B973CC40C1}
Expand Down
69 changes: 69 additions & 0 deletions build/nuke/Build.Website.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Nuke.Common;
using Serilog;
using System.IO;
using System;
using System.Linq;
using Nuke.Common.Tooling;
using static Nuke.Common.IO.FileSystemTasks;
using static Nuke.Common.Tools.Git.GitTasks;

partial class Build
{
[Parameter
(
"When enabled, pulls the latest changes for local clone of the 3.0 branch to build the website. Automatically true if the local clone doesn't exist yet."
)]
readonly bool PullBaseSite;

[Parameter("Arguments for website generation on the 3.0 branch.")]
readonly string[]? SiteBuildArgs;

Check warning on line 22 in build/nuke/Build.Website.cs

View workflow job for this annotation

GitHub Actions / Build

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

Check warning on line 22 in build/nuke/Build.Website.cs

View workflow job for this annotation

GitHub Actions / Build

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

Check warning on line 22 in build/nuke/Build.Website.cs

View workflow job for this annotation

GitHub Actions / Build

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

Target Website => CommonTarget
(
x => x.Executes
(
() =>
{
string? path;

Check warning on line 30 in build/nuke/Build.Website.cs

View workflow job for this annotation

GitHub Actions / Build

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

Check warning on line 30 in build/nuke/Build.Website.cs

View workflow job for this annotation

GitHub Actions / Build

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

Check warning on line 30 in build/nuke/Build.Website.cs

View workflow job for this annotation

GitHub Actions / Build

The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.
if (!File.Exists(RootDirectory / "dir.log") || !Directory.Exists(path = File.ReadAllText(RootDirectory / "dir.log")))
{
Log.Information("3.0 clone not found, cloning...");
path = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(path);
Git($"clone \"https://github.com/dotnet/Silk.NET\" --depth 1 --branch develop/3.0 {path}");
File.WriteAllText(RootDirectory / "dir.log", path);
}
else if (PullBaseSite)
{
if (Directory.Exists($"{path}/eng/submodules/silk.net-2.x/documentation"))
{
Directory.Delete($"{path}/eng/submodules/silk.net-2.x/documentation", true);
}

if (File.Exists($"{path}/eng/submodules/silk.net-2.x/documentation/version.txt"))
{
File.Delete($"{path}/eng/submodules/silk.net-2.x/documentation/version.txt");
}

Git("pull", path);
}
else
{
Directory.Delete($"{path}/eng/submodules/silk.net-2.x/documentation", true);
}
CopyDirectoryRecursively(RootDirectory / "documentation", $"{path}/eng/submodules/silk.net-2.x/documentation");
File.WriteAllText($"{path}/eng/submodules/silk.net-2.x/documentation/version.txt", Git($"describe --tags --abbrev=0").First(x => x.Type == OutputType.Std).Text.Trim());
InheritedShell($"{(OperatingSystem.IsWindows() ? ".\\build.cmd" : "./build.sh")} website {string.Join(' ', (SiteBuildArgs ?? Enumerable.Empty<string>()).Select(x => $"--{x}"))}", path).AssertZeroExitCode();
if (Directory.Exists(RootDirectory / "website"))
{
Directory.Delete(RootDirectory / "website", true);
}

CopyDirectoryRecursively($"{path}/artifacts/docs", RootDirectory / "website");
}
)
);
}
5 changes: 4 additions & 1 deletion build/nuke/Silk.NET.NUKE.csproj.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_ANONYMOUSMETHOD_ON_SINGLE_LINE/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=4a98fdf6_002D7d98_002D4f5a_002Dafeb_002Dea44ad98c70c/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=f9fce829_002De6f4_002D4cb2_002D80f1_002D5497c44f51df/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
Expand All @@ -24,4 +26,5 @@
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
77 changes: 77 additions & 0 deletions documentation/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
title: "Welcome"
id: "index"
description: 'Get Started with Silk.NET'
slug: '/'
---

import DocCardList from '@theme/DocCardList';
import { useDocsSidebar } from '@docusaurus/plugin-content-docs/client'

# Welcome to Silk.NET!

## Getting Started

To get started, install the relevant NuGet packages. They all start with `Silk.NET`, and the next inner namespace after
that indicates the binding or High-Level Utility (HLU, e.g. Windowing or Input) that package belongs. Here' some example
commands to install such NuGet packages:

```bash
dotnet add package Silk.NET.Assimp
dotnet add package Silk.NET.Input
dotnet add package Silk.NET.Maths
dotnet add package Silk.NET.Direct2D
dotnet add package Silk.NET.Direct3D.Compilers
dotnet add package Silk.NET.Direct3D9
dotnet add package Silk.NET.Direct3D11
dotnet add package Silk.NET.Direct3D12
dotnet add package Silk.NET.DirectComposition
dotnet add package Silk.NET.DirectStorage
dotnet add package Silk.NET.DXGI
dotnet add package Silk.NET.DXVA
dotnet add package Silk.NET.XAudio
dotnet add package Silk.NET.XInput
dotnet add package Silk.NET.OpenAL
dotnet add package Silk.NET.OpenCL
dotnet add package Silk.NET.OpenGL
dotnet add package Silk.NET.OpenGL.Legacy
dotnet add package Silk.NET.OpenGLES
dotnet add package Silk.NET.OpenXR
dotnet add package Silk.NET.Shaderc
dotnet add package Silk.NET.SPIRV.Cross
dotnet add package Silk.NET.SPIRV.Reflect
dotnet add package Silk.NET.Vulkan
dotnet add package Silk.NET.WebGPU
dotnet add package Silk.NET.Windowing
```

If you don't know which API you'd like to start with, try OpenGL if you'd like to draw graphics - it's an old but tested
API that has universal compatibility on most platforms. It is succeeded by Vulkan, but there is a large jump in
difficulty thereafter. Alternatively, if you only care about Microsoft platforms, try Direct3D 11! Note that the same
caveat for Vulkan vs OpenGL applies to Direct3D 12 vs Direct3D 11.

If you can't decide on one for now, we maintain a "metapackage" that pulls in most of Silk.NET's core packages from all
bindings and High-Level Utilities (HLUs). You can install that as follows:

```bash
dotnet add package Silk.NET
```

As always, we're happy to help in our Discord server with whatever questions you have, no matter how far along you are!

## Find Documentation

Now that you've pulled in the APIs you would like to use, it's time to find documentation to follow. Most Silk.NET APIs
(other than our High-Level Utilities) map 1:1 directly into a native API signature that should be easily searchable by
its API name (e.g. `glGetString` becomes `GL.GetString` in Silk.NET). Note that these rules are not consistent and it is expected
that you have at least some familiarity with how the native API is structured.

Of course, there are some bindings for which we have our own introductory documentation for, which presents a good
jumping-off point for new users to Silk.NET - regardless of whether you've used the native API before (e.g. with C/C++)
or you've never seen anything about it before! To that end, you can find our own documentation indexed below or
throughout this site.

<DocCardList items={useDocsSidebar().items.filter((e) => e.label != "Welcome")} />

Have fun! We always look forward to seeing what people can create with Silk.NET and would love to hear how you get on in
[our Discord server](https://discord.gg/DTHHXRt).
Loading

0 comments on commit 46b388a

Please sign in to comment.