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