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