Skip to content

Commit c0b2168

Browse files
committed
Added FreeType
1 parent 51f1e77 commit c0b2168

File tree

213 files changed

+168847
-116641
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

213 files changed

+168847
-116641
lines changed

AudioTest/Program.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// See https://aka.ms/new-console-template for more information
2+
using Hexa.NET.X3DAudio;
23
using Hexa.NET.XAudio2;
34
using HexaGen.Runtime.COM;
5+
using System.Numerics;
46
using XAudioTest;
57

68
unsafe
@@ -13,6 +15,17 @@
1315
ComPtr<IXAudio2MasteringVoice> master = default;
1416
audio.CreateMasteringVoice(ref master, 2, 192000, 0, null, null, AudioStreamCategory.GameMedia).ThrowIf();
1517

18+
uint channelMask;
19+
master.GetChannelMask(&channelMask);
20+
21+
X3DAudioHandle handle = new();
22+
X3DAudio.X3DAudioInitialize(channelMask, X3DAudio.X3DAudio_SPEED_OF_SOUND, &handle).ThrowIf();
23+
24+
for (int i = 0; i < 20; i++)
25+
{
26+
Console.WriteLine(handle.Data[i]);
27+
}
28+
1629
var fs = File.OpenRead("CantinaBand60.wav");
1730

1831
XAudio2WaveAudioStream stream = new(fs)
@@ -27,6 +40,22 @@
2740
stream.Initialize(source);
2841
source.Start(0, 0).ThrowIf();
2942

43+
X3DAudioListener listener = new(Vector4.UnitZ, Vector4.UnitY, Vector4.Zero, Vector4.Zero);
44+
45+
X3DAudioEmitter emitter = new(null, Vector4.UnitZ, Vector4.UnitY, Vector4.Zero, Vector4.Zero);
46+
float* channelAzu = stackalloc float[waveFormat.Channels + 32];
47+
emitter.PChannelAzimuths = channelAzu;
48+
emitter.ChannelCount = 1;
49+
emitter.CurveDistanceScaler = emitter.DopplerScaler = 1;
50+
var pos = emitter.Position;
51+
52+
X3DAudioDspSettings settings = default;
53+
float* matrix = stackalloc float[waveFormat.Channels + 32];
54+
settings.SrcChannelCount = 1;
55+
settings.DstChannelCount = waveFormat.Channels;
56+
settings.PMatrixCoefficients = matrix;
57+
X3DAudio.X3DAudioCalculate(&handle, &listener, &emitter, X3DAudio.X3DAudio_CALCULATE_MATRIX | X3DAudio.X3DAudio_CALCULATE_DOPPLER | X3DAudio.X3DAudio_CALCULATE_LPF_DIRECT | X3DAudio.X3DAudio_CALCULATE_REVERB, &settings);
58+
3059
bool running = true;
3160
while (running)
3261
{

ConsoleApp/ConsoleApp.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
88
</PropertyGroup>

D3D11Test/Application.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,23 @@
55
public static class Application
66
{
77
private static SDLWindow mainWindow;
8+
private static readonly Dictionary<uint, SDLWindow> idToWindow = new();
89
private static DXGIAdapter adapter;
910
private static D3D11DeviceManager deviceManager;
11+
private static IApp app;
1012

1113
public static SDLWindow MainWindow => mainWindow;
1214

1315
public static DXGIAdapter Adapter => adapter;
1416

1517
public static D3D11DeviceManager DeviceManager => deviceManager;
1618

19+
public static IApp App => app;
20+
1721
public static void Run(SDLWindow window)
1822
{
1923
mainWindow = window;
24+
idToWindow.Add(window.Id, window);
2025

2126
PlatformInit();
2227

@@ -25,17 +30,28 @@ public static void Run(SDLWindow window)
2530

2631
private static void PlatformInit()
2732
{
33+
Console.WriteLine("SDL2 Init");
34+
2835
SDL.SDLSetHint(SDL.SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1");
2936
SDL.SDLInit(SDL.SDL_INIT_EVENTS | SDL.SDL_INIT_VIDEO);
3037

38+
Console.WriteLine("SDL2 Init ... Done");
39+
3140
adapter = new(true);
3241
deviceManager = new(adapter, true);
42+
43+
app = new D3D11App();
3344
}
3445

3546
private static void PlatformRun()
3647
{
3748
SDLEvent sdlEvent = default;
3849
bool exiting = false;
50+
51+
app.Init(mainWindow, deviceManager, adapter);
52+
53+
Console.WriteLine("Entering Message Loop");
54+
3955
while (!exiting)
4056
{
4157
SDL.SDLPumpEvents();
@@ -61,14 +77,25 @@ private static void PlatformRun()
6177
exiting = true;
6278
}
6379
}
80+
if (idToWindow.TryGetValue(windowEvent.WindowID, out var window))
81+
{
82+
window.ProcessEvent(windowEvent);
83+
}
6484
break;
6585
}
6686
}
87+
88+
app.Render();
6789
}
6890

91+
Console.WriteLine("Exiting Message Loop");
92+
93+
Console.WriteLine("Cleanup");
94+
app.Dispose();
6995
deviceManager.Dispose();
7096
adapter.Dispose();
7197

98+
Console.WriteLine("Exit");
7299
SDL.SDLQuit();
73100
}
74101
}

D3D11Test/D3D11App.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
namespace D3D11Test
2+
{
3+
using Hexa.NET.D3D11;
4+
using HexaGen.Runtime.COM;
5+
using System.Numerics;
6+
7+
public unsafe class D3D11App : IApp
8+
{
9+
private ComPtr<ID3D11Device5> device;
10+
private ComPtr<ID3D11DeviceContext4> context;
11+
private SDLWindow window;
12+
private DXGISwapChain swapChain;
13+
private D3D11DeviceManager deviceManager;
14+
private bool resized = false;
15+
16+
public void Init(SDLWindow window, D3D11DeviceManager manager, DXGIAdapter adapter)
17+
{
18+
Console.WriteLine("App Init");
19+
this.window = window;
20+
swapChain = adapter.CreateSwapChain(manager, window);
21+
deviceManager = manager;
22+
device = manager.Device;
23+
context = manager.Context;
24+
window.Resized += WindowResized;
25+
}
26+
27+
private void WindowResized(ResizedEventArgs obj)
28+
{
29+
resized = true;
30+
}
31+
32+
public void Render()
33+
{
34+
if (resized)
35+
{
36+
swapChain.Resize(window.Width, window.Height);
37+
resized = false;
38+
}
39+
40+
Vector4 color = new(0.2f, 0.4f, 0.6f, 1);
41+
context.ClearRenderTargetView(swapChain.RTV, (float*)&color);
42+
43+
swapChain.Present(1, 0);
44+
}
45+
46+
public void Dispose()
47+
{
48+
swapChain.Dispose();
49+
}
50+
}
51+
}

D3D11Test/D3D11DeviceManager.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public unsafe class D3D11DeviceManager : IDisposable
1515

1616
public D3D11DeviceManager(DXGIAdapter adapter, bool debug)
1717
{
18+
Console.WriteLine("D3D11 Init");
1819
D3DFeatureLevel[] levelsArr = new D3DFeatureLevel[]
1920
{
2021
D3DFeatureLevel.Level111,
@@ -47,6 +48,8 @@ public D3D11DeviceManager(DXGIAdapter adapter, bool debug)
4748
{
4849
device.QueryInterface(out this.debug);
4950
}
51+
52+
Console.WriteLine("D3D11 Init ... Done");
5053
}
5154

5255
public D3DFeatureLevel Level { get; }

D3D11Test/D3D11Test.csproj

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19-
<None Update="SDL2d.dll">
20-
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
21-
</None>
22-
<None Update="SDL2d.pdb">
19+
<None Update="SDL2.dll">
2320
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
2421
</None>
2522
</ItemGroup>

D3D11Test/DXGIAdapter.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using Hexa.NET.DXGI;
55
using HexaGen.Runtime;
66
using HexaGen.Runtime.COM;
7-
using System.Diagnostics;
87
using System.Runtime.InteropServices;
98
using System.Text;
109

@@ -26,6 +25,8 @@ public unsafe class DXGIAdapter : IDisposable
2625

2726
public DXGIAdapter(bool debug)
2827
{
28+
Console.WriteLine("DXGI Init");
29+
2930
if (debug)
3031
{
3132
DXGI.DXGIGetDebugInterface1(0, out dxgiDebug);
@@ -46,6 +47,8 @@ public DXGIAdapter(bool debug)
4647

4748
adapter = GetHardwareAdapter();
4849
this.debug = debug;
50+
51+
Console.WriteLine("DXGI Init Done");
4952
}
5053

5154
public ComPtr<IDXGIFactory7> Factory => factory;
@@ -106,13 +109,13 @@ public void PumpDebugMessages()
106109
string msg = Encoding.UTF8.GetString(MemoryMarshal.CreateReadOnlySpanFromNullTerminated(message->PDescription));
107110

108111
if (message->Producer == DXGI_DEBUG_DX)
109-
Trace.WriteLine($"DX {Convert(message->Severity)}: {msg} [ {Convert(message->Category)} ]");
112+
Console.WriteLine($"DX {Convert(message->Severity)}: {msg} [ {Convert(message->Category)} ]");
110113
if (message->Producer == DXGI_DEBUG_DXGI)
111-
Trace.WriteLine($"DXGI {Convert(message->Severity)}: {msg} [ {Convert(message->Category)} ]");
114+
Console.WriteLine($"DXGI {Convert(message->Severity)}: {msg} [ {Convert(message->Category)} ]");
112115
if (message->Producer == DXGI_DEBUG_APP)
113-
Trace.WriteLine($"APP {Convert(message->Severity)}: {msg} [ {Convert(message->Category)} ]");
116+
Console.WriteLine($"APP {Convert(message->Severity)}: {msg} [ {Convert(message->Category)} ]");
114117
if (message->Producer == DXGI_DEBUG_D3D11)
115-
Trace.WriteLine($"D3D11 {Convert(message->Severity)}: {msg} [ {Convert(message->Category)} ]");
118+
Console.WriteLine($"D3D11 {Convert(message->Severity)}: {msg} [ {Convert(message->Category)} ]");
116119

117120
Free(message);
118121
}
@@ -143,12 +146,13 @@ public DXGISwapChain CreateSwapChain(D3D11DeviceManager manager, SDLWindow windo
143146
{
144147
Windowed = 1,
145148
RefreshRate = new DxgiRational(0, 1),
146-
Scaling = Silk.NET.DXGI.ModeScaling.Unspecified,
147-
ScanlineOrdering = Silk.NET.DXGI.ModeScanlineOrder.Unspecified,
149+
Scaling = DxgiModeScaling.Unspecified,
150+
ScanlineOrdering = DxgiModeScanlineOrder.Unspecified,
148151
};
149152

150-
ComPtr<IDXGIOutput> output = default;
151-
factory.CreateSwapChainForHwnd((IUnknown*)manager.Device, Hwnd, &desc, &fullscreenDesc, (IDXGIOutput*)null, out ComPtr<IDXGISwapChain2> swapChain);
153+
factory.CreateSwapChainForHwnd((IUnknown*)manager.Device.Handle, Hwnd, &desc, &fullscreenDesc, (IDXGIOutput*)null, out ComPtr<IDXGISwapChain1> swapChain);
154+
155+
return new DXGISwapChain(manager, swapChain, desc);
152156
}
153157

154158
private ComPtr<IDXGIAdapter4> GetHardwareAdapter()

D3D11Test/DXGISwapChain.cs

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,71 @@
11
namespace D3D11Test
22
{
3+
using Hexa.NET.D3D11;
34
using Hexa.NET.DXGI;
45
using HexaGen.Runtime.COM;
56

6-
public class DXGISwapChain
7+
public unsafe class DXGISwapChain : IDisposable
78
{
89
private readonly D3D11DeviceManager manager;
9-
private ComPtr<IDXGISwapChain2> swapChain;
1010
private readonly DxgiSwapChainDesc1 desc;
11+
private ComPtr<IDXGISwapChain1> swapChain;
12+
private bool disposedValue;
1113

12-
public DXGISwapChain(D3D11DeviceManager manager, ComPtr<IDXGISwapChain2> swapChain, DxgiSwapChainDesc1 desc)
14+
private ComPtr<ID3D11Texture2D> backbuffer;
15+
private ComPtr<ID3D11RenderTargetView> rtv;
16+
17+
public DXGISwapChain(D3D11DeviceManager manager, ComPtr<IDXGISwapChain1> swapChain, DxgiSwapChainDesc1 desc)
1318
{
19+
Console.WriteLine("SwapChain Init");
20+
1421
this.manager = manager;
1522
this.swapChain = swapChain;
1623
this.desc = desc;
24+
25+
swapChain.GetBuffer(0, out backbuffer);
26+
manager.Device.CreateRenderTargetView((ID3D11Resource*)backbuffer.Handle, null, out rtv);
27+
28+
Console.WriteLine("SwapChain Init ... Done");
29+
}
30+
31+
public ComPtr<ID3D11RenderTargetView> RTV => rtv;
32+
33+
public ComPtr<ID3D11Texture2D> Backbuffer => backbuffer;
34+
35+
public void Present(uint syncInterval, uint flags)
36+
{
37+
swapChain.Present(syncInterval, flags);
38+
}
39+
40+
public void Resize(int width, int height)
41+
{
42+
Console.WriteLine($"SwapChain Resize");
43+
rtv.Release();
44+
backbuffer.Release();
45+
46+
swapChain.ResizeBuffers(desc.BufferCount, (uint)width, (uint)height, desc.Format, desc.Flags);
47+
48+
swapChain.GetBuffer(0, out backbuffer);
49+
manager.Device.CreateRenderTargetView((ID3D11Resource*)backbuffer.Handle, null, out rtv);
50+
Console.WriteLine($"SwapChain Resize ... Done");
51+
}
52+
53+
protected virtual void Dispose(bool disposing)
54+
{
55+
if (!disposedValue)
56+
{
57+
rtv.Dispose();
58+
backbuffer.Dispose();
59+
swapChain.Dispose();
60+
disposedValue = true;
61+
}
62+
}
63+
64+
public void Dispose()
65+
{
66+
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
67+
Dispose(disposing: true);
68+
GC.SuppressFinalize(this);
1769
}
1870
}
1971
}

D3D11Test/IApp.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace D3D11Test
2+
{
3+
public interface IApp
4+
{
5+
public void Init(SDLWindow window, D3D11DeviceManager manager, DXGIAdapter adapter);
6+
7+
public void Render();
8+
9+
public void Dispose();
10+
}
11+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"profiles": {
3+
"D3D11Test": {
4+
"commandName": "Project",
5+
"nativeDebugging": true
6+
}
7+
}
8+
}

0 commit comments

Comments
 (0)