initial commit
commit
dab4c57284
|
@ -0,0 +1,3 @@
|
||||||
|
.vs/
|
||||||
|
bin/
|
||||||
|
obj/
|
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "lib/RefreshCS"]
|
||||||
|
path = lib/RefreshCS
|
||||||
|
url = https://github.com/thatcosmonaut/RefreshCS.git
|
|
@ -0,0 +1,15 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
<Platforms>x64</Platforms>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<DefaultItemExcludes>$(DefaultItemExcludes);lib\**\*</DefaultItemExcludes>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="lib\RefreshCS\RefreshCS.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 16
|
||||||
|
VisualStudioVersion = 16.0.30717.126
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Campari", "Campari.csproj", "{55485ED3-E08A-4827-B7CF-5028287D4AE3}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RefreshCS", "lib\RefreshCS\RefreshCS.csproj", "{2EFA491B-EDAF-4983-A3E4-A24D014E4B6E}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{55485ED3-E08A-4827-B7CF-5028287D4AE3}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{55485ED3-E08A-4827-B7CF-5028287D4AE3}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{55485ED3-E08A-4827-B7CF-5028287D4AE3}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{55485ED3-E08A-4827-B7CF-5028287D4AE3}.Release|x64.Build.0 = Release|x64
|
||||||
|
{2EFA491B-EDAF-4983-A3E4-A24D014E4B6E}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{2EFA491B-EDAF-4983-A3E4-A24D014E4B6E}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{2EFA491B-EDAF-4983-A3E4-A24D014E4B6E}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{2EFA491B-EDAF-4983-A3E4-A24D014E4B6E}.Release|x64.Build.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {4F656977-F01D-4BBD-9E72-0FD6CD077717}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,52 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using RefreshCS;
|
||||||
|
|
||||||
|
namespace Campari
|
||||||
|
{
|
||||||
|
public class RefreshDevice : IDisposable
|
||||||
|
{
|
||||||
|
public IntPtr Handle { get; }
|
||||||
|
|
||||||
|
public bool IsDisposed { get; private set; }
|
||||||
|
|
||||||
|
public RefreshDevice(
|
||||||
|
Refresh.PresentationParameters presentationParameters,
|
||||||
|
bool debugMode
|
||||||
|
) {
|
||||||
|
Handle = Refresh.Refresh_CreateDevice(
|
||||||
|
ref presentationParameters,
|
||||||
|
(byte) (debugMode ? 1 : 0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (!IsDisposed)
|
||||||
|
{
|
||||||
|
if (disposing)
|
||||||
|
{
|
||||||
|
// TODO: dispose managed state (managed objects)
|
||||||
|
}
|
||||||
|
|
||||||
|
Refresh.Refresh_DestroyDevice(Handle);
|
||||||
|
IsDisposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
|
||||||
|
~RefreshDevice()
|
||||||
|
{
|
||||||
|
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
|
||||||
|
Dispose(disposing: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
|
||||||
|
Dispose(disposing: true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
using System;
|
||||||
|
using RefreshCS;
|
||||||
|
|
||||||
|
namespace Campari
|
||||||
|
{
|
||||||
|
public class Texture : IDisposable
|
||||||
|
{
|
||||||
|
public RefreshDevice Device { get; }
|
||||||
|
public IntPtr Handle { get; }
|
||||||
|
public uint Height { get; }
|
||||||
|
public uint Width { get; }
|
||||||
|
|
||||||
|
public bool IsDisposed { get; private set; }
|
||||||
|
|
||||||
|
public static Texture Load(RefreshDevice device, string path)
|
||||||
|
{
|
||||||
|
var pixels = Refresh.Refresh_Image_Load(path, out var width, out var height, out var channels);
|
||||||
|
IntPtr textureHandle = Refresh.Refresh_CreateTexture2D(
|
||||||
|
device.Handle,
|
||||||
|
Refresh.ColorFormat.R8G8B8A8,
|
||||||
|
(uint) width,
|
||||||
|
(uint) height,
|
||||||
|
1,
|
||||||
|
(uint) Refresh.TextureUsageFlagBits.SamplerBit
|
||||||
|
);
|
||||||
|
|
||||||
|
Refresh.TextureSlice textureSlice;
|
||||||
|
textureSlice.texture = textureHandle;
|
||||||
|
textureSlice.rectangle.x = 0;
|
||||||
|
textureSlice.rectangle.y = 0;
|
||||||
|
textureSlice.rectangle.w = width;
|
||||||
|
textureSlice.rectangle.h = height;
|
||||||
|
textureSlice.level = 0;
|
||||||
|
textureSlice.layer = 0;
|
||||||
|
textureSlice.depth = 0;
|
||||||
|
|
||||||
|
Refresh.Refresh_SetTextureData(
|
||||||
|
device.Handle,
|
||||||
|
ref textureSlice,
|
||||||
|
pixels,
|
||||||
|
(uint) (width * height * 4)
|
||||||
|
);
|
||||||
|
|
||||||
|
return new Texture(
|
||||||
|
device,
|
||||||
|
textureHandle,
|
||||||
|
(uint) width,
|
||||||
|
(uint) height
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Texture(RefreshDevice device, IntPtr handle, uint width, uint height)
|
||||||
|
{
|
||||||
|
Device = device;
|
||||||
|
Handle = handle;
|
||||||
|
Width = width;
|
||||||
|
Height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (!IsDisposed)
|
||||||
|
{
|
||||||
|
Refresh.Refresh_QueueDestroyTexture(Device.Handle, Handle);
|
||||||
|
IsDisposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
~Texture()
|
||||||
|
{
|
||||||
|
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
|
||||||
|
Dispose(disposing: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
|
||||||
|
Dispose(disposing: true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit c33e62b9e46f9c86c40fffe56bce461739b71bf8
|
Loading…
Reference in New Issue