add SetTextureData to ResourceUploader
							parent
							
								
									fe31e23ccc
								
							
						
					
					
						commit
						22bcd2e471
					
				| 
						 | 
					@ -51,7 +51,7 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
		/// <summary>
 | 
							/// <summary>
 | 
				
			||||||
		/// Creates a 2D Texture from compressed image data to be uploaded.
 | 
							/// Creates a 2D Texture from compressed image data to be uploaded.
 | 
				
			||||||
		/// </summary>
 | 
							/// </summary>
 | 
				
			||||||
		public Texture CreateTexture2D(Span<byte> compressedImageData)
 | 
							public Texture CreateTexture2DFromCompressed(Span<byte> compressedImageData)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			ImageUtils.ImageInfoFromBytes(compressedImageData, out var width, out var height, out var _);
 | 
								ImageUtils.ImageInfoFromBytes(compressedImageData, out var width, out var height, out var _);
 | 
				
			||||||
			var texture = Texture.CreateTexture2D(Device, width, height, TextureFormat.R8G8B8A8, TextureUsageFlags.Sampler);
 | 
								var texture = Texture.CreateTexture2D(Device, width, height, TextureFormat.R8G8B8A8, TextureUsageFlags.Sampler);
 | 
				
			||||||
| 
						 | 
					@ -62,14 +62,14 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
		/// <summary>
 | 
							/// <summary>
 | 
				
			||||||
		/// Creates a 2D Texture from a compressed image stream to be uploaded.
 | 
							/// Creates a 2D Texture from a compressed image stream to be uploaded.
 | 
				
			||||||
		/// </summary>
 | 
							/// </summary>
 | 
				
			||||||
		public Texture CreateTexture2D(Stream compressedImageStream)
 | 
							public Texture CreateTexture2DFromCompressed(Stream compressedImageStream)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			var length = compressedImageStream.Length;
 | 
								var length = compressedImageStream.Length;
 | 
				
			||||||
			var buffer = NativeMemory.Alloc((nuint) length);
 | 
								var buffer = NativeMemory.Alloc((nuint) length);
 | 
				
			||||||
			var span = new Span<byte>(buffer, (int) length);
 | 
								var span = new Span<byte>(buffer, (int) length);
 | 
				
			||||||
			compressedImageStream.ReadExactly(span);
 | 
								compressedImageStream.ReadExactly(span);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var texture = CreateTexture2D(span);
 | 
								var texture = CreateTexture2DFromCompressed(span);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			NativeMemory.Free(buffer);
 | 
								NativeMemory.Free(buffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,10 +79,10 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
		/// <summary>
 | 
							/// <summary>
 | 
				
			||||||
		/// Creates a 2D Texture from a compressed image file to be uploaded.
 | 
							/// Creates a 2D Texture from a compressed image file to be uploaded.
 | 
				
			||||||
		/// </summary>
 | 
							/// </summary>
 | 
				
			||||||
		public Texture CreateTexture2D(string compressedImageFilePath)
 | 
							public Texture CreateTexture2DFromCompressed(string compressedImageFilePath)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			var fileStream = new FileStream(compressedImageFilePath, FileMode.Open, FileAccess.Read);
 | 
								var fileStream = new FileStream(compressedImageFilePath, FileMode.Open, FileAccess.Read);
 | 
				
			||||||
			return CreateTexture2D(fileStream);
 | 
								return CreateTexture2DFromCompressed(fileStream);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/// <summary>
 | 
							/// <summary>
 | 
				
			||||||
| 
						 | 
					@ -132,8 +132,7 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
						Depth = 1
 | 
											Depth = 1
 | 
				
			||||||
					};
 | 
										};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					var resourceOffset = CopyDataAligned(byteBuffer, (uint) levelSize, Texture.TexelSize(format));
 | 
										SetTextureData(textureSlice, byteSpan);
 | 
				
			||||||
					TextureUploads.Add((textureSlice, resourceOffset));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
					NativeMemory.Free(byteBuffer);
 | 
										NativeMemory.Free(byteBuffer);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					@ -154,11 +153,11 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
		public void SetTextureDataFromCompressed(TextureSlice textureSlice, Span<byte> compressedImageData)
 | 
							public void SetTextureDataFromCompressed(TextureSlice textureSlice, Span<byte> compressedImageData)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			var pixelData = ImageUtils.GetPixelDataFromBytes(compressedImageData, out var _, out var _, out var sizeInBytes);
 | 
								var pixelData = ImageUtils.GetPixelDataFromBytes(compressedImageData, out var _, out var _, out var sizeInBytes);
 | 
				
			||||||
 | 
								var pixelSpan = new Span<byte>((void*) pixelData, (int) sizeInBytes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								SetTextureData(textureSlice, pixelSpan);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var resourceOffset = CopyDataAligned((void*) pixelData, sizeInBytes, Texture.TexelSize(textureSlice.Texture.Format));
 | 
					 | 
				
			||||||
			ImageUtils.FreePixelData(pixelData);
 | 
								ImageUtils.FreePixelData(pixelData);
 | 
				
			||||||
 | 
					 | 
				
			||||||
			TextureUploads.Add((textureSlice, resourceOffset));
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public void SetTextureDataFromCompressed(TextureSlice textureSlice, Stream compressedImageStream)
 | 
							public void SetTextureDataFromCompressed(TextureSlice textureSlice, Stream compressedImageStream)
 | 
				
			||||||
| 
						 | 
					@ -177,6 +176,23 @@ namespace MoonWorks.Graphics
 | 
				
			||||||
			SetTextureDataFromCompressed(textureSlice, fileStream);
 | 
								SetTextureDataFromCompressed(textureSlice, fileStream);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/// <summary>
 | 
				
			||||||
 | 
							/// Prepares upload of pixel data into a TextureSlice.
 | 
				
			||||||
 | 
							/// </summary>
 | 
				
			||||||
 | 
							public void SetTextureData<T>(TextureSlice textureSlice, Span<T> data) where T : unmanaged
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var elementSize = Marshal.SizeOf<T>();
 | 
				
			||||||
 | 
								var dataLengthInBytes = (uint) (elementSize * data.Length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								uint resourceOffset;
 | 
				
			||||||
 | 
								fixed (T* dataPtr = data)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									resourceOffset = CopyDataAligned(dataPtr, dataLengthInBytes, Texture.TexelSize(textureSlice.Texture.Format));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								TextureUploads.Add((textureSlice, resourceOffset));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/// <summary>
 | 
							/// <summary>
 | 
				
			||||||
		/// Uploads all the data corresponding to the created resources.
 | 
							/// Uploads all the data corresponding to the created resources.
 | 
				
			||||||
		/// </summary>
 | 
							/// </summary>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue