Skip to content

Commit

Permalink
Feature/c64 native opengl render (#93)
Browse files Browse the repository at this point in the history
* New C64 native OpenGL + shader render
Supports every current feature of the SkiaSharp renderer but is 10x-20x times faster. 
Also supports per raster line fine scrolling (configurable).
Currently only available for native application (Silk.NET OpenGL bindings does not yet work in Blazor WASM).
New Native app config option for selecting Renderer (SkiaSharp or OpenGL).

* Refactor namespace SkiaNative to SilkNetNative

* Refactor namespace SkiaWASM to WASM
  • Loading branch information
highbyte authored Nov 3, 2023
1 parent a5b66eb commit 65737e7
Show file tree
Hide file tree
Showing 119 changed files with 1,682 additions and 268 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ env:
VERSION_SUFFIX: "-alpha"
CONFIGURATION: "Release"

PROJECT_FILE: "src/apps/Highbyte.DotNet6502.App.SkiaWASM/Highbyte.DotNet6502.App.SkiaWASM.csproj"
PROJECT_FILE: "src/apps/Highbyte.DotNet6502.App.WASM/Highbyte.DotNet6502.App.WASM.csproj"
PROJECT_GH_PAGES_DIR: "app"
BUILD_OUTPUT_WORKING_DIR: "build"
GH_PAGES_WORKING_DIR: "ghpages"
Expand Down
8 changes: 4 additions & 4 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
"version": "0.2.0",
"configurations": [
{
"name": "SkiaNative app - .NET Core Launch",
"name": "SilkNetNative app - .NET Core Launch",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build skia native app",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.SkiaNative/bin/Debug/net7.0/Highbyte.DotNet6502.App.SkiaNative.dll",
"program": "${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.SilkNetNative/bin/Debug/net7.0/Highbyte.DotNet6502.App.SilkNetNative.dll",
"args": [],
"cwd": "${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.SkiaNative/bin/Debug/net7.0",
"cwd": "${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.SilkNetNative/bin/Debug/net7.0",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
"console": "integratedTerminal",
"stopAtEntry": false
Expand All @@ -21,7 +21,7 @@
"name": "Blazor WASM Skia app - Launch and Debug",
"type": "blazorwasm",
"request": "launch",
"cwd": "${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.SkiaWASM",
"cwd": "${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.WASM",
"url": "http://localhost:5000",
"browser": "chrome"
},
Expand Down
4 changes: 2 additions & 2 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.SkiaWASM/Highbyte.DotNet6502.App.SkiaWASM.csproj",
"${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.WASM/Highbyte.DotNet6502.App.WASM.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
Expand All @@ -55,7 +55,7 @@
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.SkiaNative/Highbyte.DotNet6502.App.SkiaNative.csproj",
"${workspaceFolder}/src/apps/Highbyte.DotNet6502.App.SilkNetNative/Highbyte.DotNet6502.App.SilkNetNative.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## A [6502 CPU](https://en.wikipedia.org/wiki/MOS_Technology_6502) emulator for .NET

[<img align="top" src="doc/Screenshots/SkiaWASM_C64.png" width="50%" height="50%" title="SkiaSharp rendering in a Blazor WASM browser host"/>](https://highbyte.se/dotnet-6502/app)<img align="top" src="doc/Screenshots/SkiaNative_Monitor.png" width="50%" height="50%" title="SkiaSharp rendering in a native SkiaSharp/Silk.NET host">
[<img align="top" src="doc/Screenshots/WASM_C64.png" width="50%" height="50%" title="SkiaSharp rendering in a Blazor WASM browser host"/>](https://highbyte.se/dotnet-6502/app)<img align="top" src="doc/Screenshots/SilkNetNative_Monitor.png" width="50%" height="50%" title="SkiaSharp rendering in a native SkiaSharp/Silk.NET host">

# Overview / purpose

Expand Down
2 changes: 1 addition & 1 deletion doc/APPS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
Emulator applications with user interfaces for running different [systems](SYSTEMS.md), using different [rendering input handling, and audio](RENDER_INPUT_AUDIO.md) techniques.

- [Blazor Web Assembly (WASM) with SkiaSharp renderer](APPS_SKIA_WASM.md)
- [Native cross-platform window via Silk.NET using with SkiaSharp renderer](APPS_SKIA_NATIVE.md)
- [Native cross-platform window via Silk.NET using with SkiaSharp renderer](APPS_SILKNET_NATIVE.md)
- [Native cross-platform window via SadConsole, using SadConsole renderer](APPS_SADCONSOLE.md)
- [Native cross-platform console monitor app](APPS_CONSOLE_MONITOR.md)
8 changes: 4 additions & 4 deletions doc/APPS_SKIA_NATIVE.md → doc/APPS_SILKNET_NATIVE.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<h1 align="center">Highbyte.DotNet6502.App.SkiaNative</h1>
<h1 align="center">Highbyte.DotNet6502.App.SilkNetNative</h1>

# Overview
<img src="Screenshots/SkiaNative_C64.png" width="50%" height="50%" title="SkiaSharp rendering in native Silk.NET host window">
<img src="Screenshots/SilkNetNative_C64.png" width="50%" height="50%" title="SkiaSharp rendering in native Silk.NET host window">

<img src="Screenshots/SkiaNative_Monitor.png" width="100%" height="100%" title="SkiaSharp rendering in native Silk.NET host window">
<img src="Screenshots/SilkNetNative_Monitor.png" width="100%" height="100%" title="SkiaSharp rendering in native Silk.NET host window">

# Features
Native cross-platform app written in .NET with a Window from Silk.NET, using a SkiaSharp renderer (from ```Highbyte.DotNet6502.Impl.Skia```) and a Silk.NET input handler (from ```Highbyte.DotNet6502.Impl.SilkNet```).
Native cross-platform app written in .NET with a Window from Silk.NET, using a SkiaSharp (from ```Highbyte.DotNet6502.Impl.Skia```) or a OpenGL (from ```Highbyte.DotNet6502.Impl.SilkNet```) renderer, with a Silk.NET input handler (from ```Highbyte.DotNet6502.Impl.SilkNet```).

Uses Silk.NET [ImGui extensions](https://www.nuget.org/packages/Silk.NET.OpenGL.Extensions.ImGui/) to render UI for interactive menu, monitor, and stats window.

Expand Down
12 changes: 6 additions & 6 deletions doc/APPS_SKIA_WASM.md → doc/APPS_WASM.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<h1 align="center">Highbyte.DotNet6502.App.SkiaWASM</h1>
<h1 align="center">Highbyte.DotNet6502.App.WASM</h1>

# Overview
<img align="top" src="Screenshots/SkiaWASM_C64.png" width="50%" height="50%" title="SkiaSharp rendering in a Blazor WASM browser host"><img align="top" src="Screenshots/SkiaWASM_Generic.png" width="50%" height="50%" title="SkiaSharp rendering in a Blazor WASM browser host">
<img align="top" src="Screenshots/WASM_C64.png" width="50%" height="50%" title="SkiaSharp rendering in a Blazor WASM browser host"><img align="top" src="Screenshots/WASM_Generic.png" width="50%" height="50%" title="SkiaSharp rendering in a Blazor WASM browser host">

<img src="Screenshots/SkiaWASM_Monitor.png" width="100%" height="100%" title="SkiaSharp rendering in a Blazor WASM browser host">
<img src="Screenshots/WASM_Monitor.png" width="100%" height="100%" title="SkiaSharp rendering in a Blazor WASM browser host">

A deployed version can be found here [https://highbyte.se/dotnet-6502/app](https://highbyte.se/dotnet-6502/app)

Expand Down Expand Up @@ -41,12 +41,12 @@ For system requirements, see details [here](DEVELOP.md#Requirements)
## Visual Studio 2022 (Windows)

Open solution ```dotnet-6502.sln```.
Set project ```Highbyte.DotNet6502.App.SkiaWASM``` as startup, and start with F5.
Set project ```Highbyte.DotNet6502.App.WASM``` as startup, and start with F5.

## From command line (Windows, Linux, Mac)
### Run Debug build
```
cd ./src/apps/Highbyte.DotNet6502.App.SkiaWASM
cd ./src/apps/Highbyte.DotNet6502.App.WASM
dotnet run
```
Open browser at http://localhost:5000.
Expand All @@ -57,7 +57,7 @@ Requires
- DotNet global tool "serve", install with ```dotnet tool install --global dotnet-serve```

```
cd ./src/apps/Highbyte.DotNet6502.App.SkiaWASM
cd ./src/apps/Highbyte.DotNet6502.App.WASM
if(Test-Path $publishDir) { del ./bin/Publish/ -r -force }
dotnet publish -c Release -o ./bin/Publish/
dotnet serve -o:$path --directory ./bin/Publish/wwwroot/
Expand Down
20 changes: 16 additions & 4 deletions doc/RENDER_INPUT_AUDIO.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ Rendering, input handling, and audio libraries

| App | Techniques | Implementation libraries | C64 | Generic |
| ------------------------------------ | ------------------------------------------- | --------------------------------------------- | :---: | :---: |
| `Highbyte.DotNet6502.App.SkiaWASM` | Render: `SkiaSharp.Blazor.View`,`OpenGL` | Render: `Highbyte.DotNet6502.Impl.Skia` | x | x |
| `Highbyte.DotNet6502.App.WASM` | Render: `SkiaSharp.Blazor.View`,`OpenGL` | Render: `Highbyte.DotNet6502.Impl.Skia` | x | x |
| | Input: `Blazor`,`ASP.NET`,`JavaScript` | Input: `Highbyte.DotNet6502.Impl.AspNet` | x | x |
| | Audio: `WebAudio API`, `Blazor JS interop` | Audio: `Highbyte.DotNet6502.Impl.AspNet` | x | |
| | | | | |
| `Highbyte.DotNet6502.App.SkiaNative` | Render: `Silk.NET`,`OpenGL`,`SkiaSharp` | Render: `Highbyte.DotNet6502.Impl.Skia` | x | x |
| `Highbyte.DotNet6502.App.SilkNetNative` | Render: `Silk.NET`,`OpenGL`,`SkiaSharp` | Render: `Highbyte.DotNet6502.Impl.Skia` | x | x |
| | | Render (OpenGL/shaders): `Highbyte.DotNet6502.Impl.SilkNet` | x | |
| | Input: `Silk.NET` | Input: `Highbyte.DotNet6502.Impl.SilkNet` | x | x |
| | Audio: - | Audio: - | | |
| | Audio: `NAudio` | Audio: `Highbyte.DotNet6502.Impl.NAudio` | x | |
| | | | | |
| `Highbyte.DotNet6502.App.SadConsole` | Render: `SadConsole` | Render: `Highbyte.DotNet6502.Impl.SadConsole` | x | x |
| | Input: `SadConsole` | Input: `Highbyte.DotNet6502.Impl.SadConsole` | x | x |
Expand All @@ -21,6 +22,7 @@ Rendering, input handling, and audio libraries

[```Highbyte.DotNet6502.Impl.Skia```](#HighbyteDotNet6502ImplSkia)
- Library with renderers implemented with the [```SkiaSharp```](https://github.com/mono/SkiaSharp) 2D drawing library. Can be used from both native and WASM applications.
- Note: alternative renderers using only OpenGL + shaders can be found in [```Highbyte.DotNet6502.Impl.SilkNet```](#HighbyteDotNet6502ImplSilkNet), see below.

## Renderer
### C64
Expand All @@ -44,11 +46,21 @@ Experimental (non-complete) emulation of C64 SID audio chip.

[```Highbyte.DotNet6502.Impl.SilkNet```](#HighbyteDotNet6502ImplSilkNet)
- InputHandlers implemented with the [```Silk.NET```](https://github.com/dotnet/Silk.NET) windowing library. Can be used from native applications.
- Renderers implemented with Silk.NET OpenGL bindings, together with custom shaders. Can be used from native applications.
## Renderer
### C64

## InputHandler
### C64
### Generic

# Library: Highbyte.DotNet6502.Impl.NAudio

[```Highbyte.DotNet6502.Impl.Naudio```](#HighbyteDotNet6502ImplNAudio)
- AudioHandlers implemented with [```NAudio```](https://github.com/naudio/NAudio) audio library using a custom `Silk.NET.OpenAL` provider for cross platform support. Can be used from native applications.
## AudioHandler
### C64

# Library: Highbyte.DotNet6502.Impl.SadConsole

[```Highbyte.DotNet6502.Impl.SadConsole```](#HighbyteDotNet6502ImplSadConsole)
Expand All @@ -60,4 +72,4 @@ Experimental (non-complete) emulation of C64 SID audio chip.

## InputHandler
### C64
### Generic
### Generic
36 changes: 18 additions & 18 deletions doc/SYSYEM_DIAGRAM.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
```mermaid
classDiagram
App_SkiaWASM
App_SkiaWASM --> SystemRunner
App_SkiaWASM --> System_C64
App_SkiaWASM --> Impl_Skia_C64
App_SkiaWASM --> Impl_AspNet_C64
App_SkiaWASM --> System_X
App_SkiaWASM --> Impl_Skia_X
App_SkiaWASM --> Impl_AspNet_X
App_SkiaWASM --> App_WASM_Monitor
App_WASM
App_WASM --> SystemRunner
App_WASM --> System_C64
App_WASM --> Impl_Skia_C64
App_WASM --> Impl_AspNet_C64
App_WASM --> System_X
App_WASM --> Impl_Skia_X
App_WASM --> Impl_AspNet_X
App_WASM --> App_WASM_Monitor
App_WASM_Monitor --> MonitorBase
App_SkiaNative
App_SkiaNative --> SystemRunner
App_SkiaNative --> System_C64
App_SkiaNative --> Impl_Skia_C64
App_SkiaNative --> Impl_SilkNet_C64
App_SkiaNative --> System_X
App_SkiaNative --> Impl_Skia_X
App_SkiaNative --> Impl_SilkNet_X
App_SkiaNative --> App_SilkNetImGui_Monitor
App_SilkNetNative
App_SilkNetNative --> SystemRunner
App_SilkNetNative --> System_C64
App_SilkNetNative --> Impl_Skia_C64
App_SilkNetNative --> Impl_SilkNet_C64
App_SilkNetNative --> System_X
App_SilkNetNative --> Impl_Skia_X
App_SilkNetNative --> Impl_SilkNet_X
App_SilkNetNative --> App_SilkNetImGui_Monitor
App_SilkNetImGui_Monitor --> MonitorBase
App_SadConsole
Expand Down
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
4 changes: 2 additions & 2 deletions dotnet-6502.sln
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Highbyte.DotNet6502.Impl.Si
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Highbyte.DotNet6502.Impl.Skia", "src\libraries\Highbyte.DotNet6502.Impl.Skia\Highbyte.DotNet6502.Impl.Skia.csproj", "{C0E90430-6187-4D64-B1A8-E0C1FEBB2DF7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Highbyte.DotNet6502.App.SkiaNative", "src\apps\Highbyte.DotNet6502.App.SkiaNative\Highbyte.DotNet6502.App.SkiaNative.csproj", "{B1320CAC-9AFC-4293-BF7F-8ACD14F5B4F1}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Highbyte.DotNet6502.App.SilkNetNative", "src\apps\Highbyte.DotNet6502.App.SilkNetNative\Highbyte.DotNet6502.App.SilkNetNative.csproj", "{B1320CAC-9AFC-4293-BF7F-8ACD14F5B4F1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Highbyte.DotNet6502.Monitor", "src\libraries\Highbyte.DotNet6502.Monitor\Highbyte.DotNet6502.Monitor.csproj", "{CC928CD4-726D-443F-B6C6-1149511AA4BE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App", "App", "{179A14B2-B918-4B64-8314-3551D83551D0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Highbyte.DotNet6502.App.SkiaWASM", "src\apps\Highbyte.DotNet6502.App.SkiaWASM\Highbyte.DotNet6502.App.SkiaWASM.csproj", "{5B5CB1AE-3633-4431-8919-7AA5DD2F37CE}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Highbyte.DotNet6502.App.WASM", "src\apps\Highbyte.DotNet6502.App.WASM\Highbyte.DotNet6502.App.WASM.csproj", "{5B5CB1AE-3633-4431-8919-7AA5DD2F37CE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Highbyte.DotNet6502.App.ConsoleMonitor", "src\apps\Highbyte.DotNet6502.App.ConsoleMonitor\Highbyte.DotNet6502.App.ConsoleMonitor.csproj", "{3E070BB0-52CD-4B6B-ADE0-723C4F1AA847}"
EndProject
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
using System.Diagnostics;
using System.Numerics;
using Highbyte.DotNet6502.App.SkiaNative.SystemSetup;
using Highbyte.DotNet6502.App.SilkNetNative.SystemSetup;
using Highbyte.DotNet6502.Systems;
using Highbyte.DotNet6502.Systems.Commodore64.Config;
using Microsoft.Extensions.Logging;

namespace Highbyte.DotNet6502.App.SkiaNative.ConfigUI;
namespace Highbyte.DotNet6502.App.SilkNetNative.ConfigUI;

public class SilkNetImGuiC64Config
{
Expand All @@ -17,6 +19,10 @@ public class SilkNetImGuiC64Config
private string? _basicRomFile;
private string? _chargenRomFile;

private int _selectedRenderer = 0;
private string[] _availableRenderers = Enum.GetNames<C64HostRenderer>();
private bool _openGLFineScrollPerRasterLineEnabled;

private bool _open;

public bool IsValidConfig
Expand Down Expand Up @@ -52,6 +58,9 @@ internal void Init()
_kernalRomFile = _config.HasROM(C64Config.KERNAL_ROM_NAME) ? _config.GetROM(C64Config.KERNAL_ROM_NAME).File! : "";
_basicRomFile = _config.HasROM(C64Config.KERNAL_ROM_NAME) ? _config.GetROM(C64Config.BASIC_ROM_NAME).File! : "";
_chargenRomFile = _config.HasROM(C64Config.KERNAL_ROM_NAME) ? _config.GetROM(C64Config.CHARGEN_ROM_NAME).File! : "";

_selectedRenderer = _availableRenderers.ToList().IndexOf(_hostConfig.Renderer.ToString());
_openGLFineScrollPerRasterLineEnabled = _hostConfig.SilkNetOpenGlRendererConfig.UseFineScrollPerRasterLine;
}

public void PostOnRender(string dialogLabel)
Expand Down Expand Up @@ -81,6 +90,25 @@ public void PostOnRender(string dialogLabel)
_config!.SetROM(C64Config.CHARGEN_ROM_NAME, _chargenRomFile);
}

// Renderer
ImGui.Text("Renderer:");
ImGui.SameLine();
ImGui.PushItemWidth(140);
if (ImGui.Combo("##renderer", ref _selectedRenderer, _availableRenderers, _availableRenderers.Length))
{
_hostConfig.Renderer = Enum.Parse<C64HostRenderer>(_availableRenderers[_selectedRenderer]);
}
ImGui.PopItemWidth();

// Renderer: OpenGL options
if (_hostConfig.Renderer == C64HostRenderer.SilkNetOpenGl)
{
if (ImGui.Checkbox("Fine scroll per raster line (experimental)", ref _openGLFineScrollPerRasterLineEnabled))
{
_hostConfig.SilkNetOpenGlRendererConfig.UseFineScrollPerRasterLine = _openGLFineScrollPerRasterLineEnabled;
}
}

// Joystick
ImGui.Text("Joystick:");
ImGui.SameLine();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using System.Numerics;
using Highbyte.DotNet6502.Systems.Generic.Config;

namespace Highbyte.DotNet6502.App.SkiaNative.ConfigUI;
namespace Highbyte.DotNet6502.App.SilkNetNative.ConfigUI;

public class SilkNetImGuiGenericComputerConfig
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
using Highbyte.DotNet6502.Impl.NAudio;
using Highbyte.DotNet6502.Impl.SilkNet;
using Highbyte.DotNet6502.Impl.Skia;
using Highbyte.DotNet6502.Monitor;
using Highbyte.DotNet6502.Systems;

namespace Highbyte.DotNet6502.App.SkiaNative;
namespace Highbyte.DotNet6502.App.SilkNetNative;

public class EmulatorConfig
{
Expand All @@ -22,7 +21,7 @@ public EmulatorConfig()
DefaultDrawScale = 3.0f;
}

public void Validate(SystemList<SkiaRenderContext, SilkNetInputHandlerContext, NAudioAudioHandlerContext> systemList)
public void Validate(SystemList<SilkNetRenderContextContainer, SilkNetInputHandlerContext, NAudioAudioHandlerContext> systemList)
{
if (!systemList.Systems.Contains(DefaultEmulator))
throw new Exception($"Setting {nameof(DefaultEmulator)} value {DefaultEmulator} is not supported. Valid values are: {string.Join(',', systemList.Systems)}");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Highbyte.DotNet6502.App.SkiaNative;
namespace Highbyte.DotNet6502.App.SilkNetNative;

public interface ISilkNetImGuiWindow
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Highbyte.DotNet6502.App.SkiaNative.Instrumentation.Stats;
using Highbyte.DotNet6502.App.SilkNetNative.Instrumentation.Stats;

namespace Highbyte.DotNet6502.App.SkiaNative.Stats;
namespace Highbyte.DotNet6502.App.SilkNetNative.Stats;

// Credit to instrumentation/stat code to: https://github.com/davidwengier/Trains.NET
public static class InstrumentationBag
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Highbyte.DotNet6502.App.SkiaNative.Instrumentation.Stats;
namespace Highbyte.DotNet6502.App.SilkNetNative.Instrumentation.Stats;

// Credit to instrumentation/stat code to: https://github.com/davidwengier/Trains.NET
public abstract class AveragedStat : IStat
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Highbyte.DotNet6502.App.SkiaNative.Instrumentation.Stats;
namespace Highbyte.DotNet6502.App.SilkNetNative.Instrumentation.Stats;

// Credit to instrumentation/stat code to: https://github.com/davidwengier/Trains.NET
public class DisposableCallback : IDisposable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Highbyte.DotNet6502.App.SkiaNative.Instrumentation.Stats;
namespace Highbyte.DotNet6502.App.SilkNetNative.Instrumentation.Stats;

public class ElapsedMillisecondsStat : AveragedStat
{
Expand Down
Loading

0 comments on commit 65737e7

Please sign in to comment.