More generaton and handle Graphics.Direct2D.Common.json generation + more D3D11 helpers.

This commit is contained in:
Amer Koleci
2022-09-13 10:14:17 +02:00
parent 563c4b5e27
commit 2213a0a78f
12 changed files with 1647 additions and 28 deletions

View File

@@ -20,7 +20,9 @@ public static class Program
"Graphics.Direct3D11.json", "Graphics.Direct3D11.json",
"Graphics.Direct3D12.json", "Graphics.Direct3D12.json",
"Graphics.Direct3D.Dxc.json", "Graphics.Direct3D.Dxc.json",
"Graphics.Direct2D.Common.json",
//"Graphics.Imaging.json", //"Graphics.Imaging.json",
//"Graphics.DirectWrite.json",
}; };
private static readonly Dictionary<string, string> s_csNameMappings = new() private static readonly Dictionary<string, string> s_csNameMappings = new()
@@ -75,6 +77,15 @@ public static class Program
{ "Graphics.Direct3D.D3DVECTOR", "Vector3" }, { "Graphics.Direct3D.D3DVECTOR", "Vector3" },
{ "Graphics.Direct3D.D3DMATRIX", "Matrix4x4" }, { "Graphics.Direct3D.D3DMATRIX", "Matrix4x4" },
{ "Graphics.Direct2D.Common.D2D_MATRIX_3X2_F", "Matrix3x2" },
{ "Graphics.Direct2D.Common.D2D_MATRIX_4X3_F", "Matrix4x3" },
{ "Graphics.Direct2D.Common.D2D_MATRIX_4X4_F", "Matrix4x4" },
{ "Graphics.Direct2D.Common.D2D_MATRIX_5X4_F", "Matrix5x4" },
{ "Graphics.Direct2D.Common.D2D_POINT_2F", "System.Drawing.PointF" },
{ "Graphics.Direct2D.Common.D2D_VECTOR_2F", "Vector2" },
{ "Graphics.Direct2D.Common.D2D_VECTOR_3F", "Vector3" },
{ "Graphics.Direct2D.Common.D2D_VECTOR_4F", "Vector4" },
{ "Graphics.Direct2D.Common.D2D_SIZE_F", "System.Drawing.SizeF" },
// TODO: Understand those -> // TODO: Understand those ->
{ "Foundation.RECT", "RawRect" }, { "Foundation.RECT", "RawRect" },
@@ -488,6 +499,14 @@ public static class Program
"SourceNot2D", "SourceNot2D",
"DestinationNot2D", "DestinationNot2D",
"CreateFence", "CreateFence",
"SynchronizedChannel",
"DecoderBeginFrame",
"VideoProcessorGetStreamMirror",
"BackbufferNotSupported",
"DimensionsTooLarge",
"InvalidMipLevel",
"ColorMatrix",
"StencilOp",
}; };
private static readonly HashSet<string> s_preserveCaps = new(StringComparer.OrdinalIgnoreCase) private static readonly HashSet<string> s_preserveCaps = new(StringComparer.OrdinalIgnoreCase)
@@ -516,6 +535,9 @@ public static class Program
"D3D", "D3D",
"D3D11", "D3D11",
"D3D12", "D3D12",
"D2D",
"D2D1",
"DWRITE",
}; };
@@ -610,6 +632,9 @@ public static class Program
"D3D10", "D3D10",
"D3D11", "D3D11",
"D3D12", "D3D12",
"D2D",
"D2D1",
"DWRITE",
}; };
private static readonly HashSet<string> s_ignoredParts = new(StringComparer.OrdinalIgnoreCase) private static readonly HashSet<string> s_ignoredParts = new(StringComparer.OrdinalIgnoreCase)
@@ -734,6 +759,7 @@ public static class Program
} }
// Generate docs // Generate docs
//DocGenerator.Generate(new[] { "DWRITE" }, Path.Combine(outputPath, "DirectWrite.xml"));
//DocGenerator.Generate(new[] { "D3D" }, Path.Combine(outputPath, "Direct3D.xml")); //DocGenerator.Generate(new[] { "D3D" }, Path.Combine(outputPath, "Direct3D.xml"));
//DocGenerator.Generate(new[] { "DXGI" }, Path.Combine(outputPath, "Dxgi.xml")); //DocGenerator.Generate(new[] { "DXGI" }, Path.Combine(outputPath, "Dxgi.xml"));
//DocGenerator.Generate(new[] { "D3D11" }, Path.Combine(outputPath, "Direct3D11.xml")); //DocGenerator.Generate(new[] { "D3D11" }, Path.Combine(outputPath, "Direct3D11.xml"));
@@ -965,7 +991,8 @@ public static class Program
foreach (ApiType structType in api.Types.Where(item => item.Kind.ToLowerInvariant() == "struct")) foreach (ApiType structType in api.Types.Where(item => item.Kind.ToLowerInvariant() == "struct"))
{ {
if (structType.Name.StartsWith("D3DX11") || if (structType.Name.StartsWith("D3DX11") ||
structType.Name.StartsWith("CD3D11")) structType.Name.StartsWith("CD3D11") ||
structType.Name == "D2D_COLOR_F")
{ {
continue; continue;
} }
@@ -1298,6 +1325,11 @@ public static class Program
writer.WriteLine("[StructLayout(LayoutKind.Explicit)]"); writer.WriteLine("[StructLayout(LayoutKind.Explicit)]");
} }
if (structType.Name == "D2D_MATRIX_3X2_F")
{
}
using (writer.PushBlock($"public partial struct {csTypeName}")) using (writer.PushBlock($"public partial struct {csTypeName}"))
{ {
int fieldIndex = 0; int fieldIndex = 0;
@@ -1409,6 +1441,9 @@ public static class Program
{ {
writer.WriteLine("[FieldOffset(0)]"); writer.WriteLine("[FieldOffset(0)]");
} }
fieldValueName = CleanupName(fieldValueName);
writer.WriteLine($"public {unsafePrefix}{fieldTypeName} {fieldValueName};"); writer.WriteLine($"public {unsafePrefix}{fieldTypeName} {fieldValueName};");
} }
@@ -1661,6 +1696,8 @@ public static class Program
} }
} }
parameterName = CleanupName(parameterName);
argumentBuilder.Append(parameterType).Append(' ').Append(parameterName); argumentBuilder.Append(parameterType).Append(' ').Append(parameterName);
//if (isOptional == true) //if (isOptional == true)
//{ //{
@@ -1761,6 +1798,16 @@ public static class Program
return typeName.Replace(api + ".", ""); return typeName.Replace(api + ".", "");
} }
private static string CleanupName(string name)
{
if (name == "string")
{
return "@string";
}
return name;
}
private static string GetDataTypeName(string typeName, out string prefix) private static string GetDataTypeName(string typeName, out string prefix)
{ {
prefix = typeName; prefix = typeName;

View File

@@ -0,0 +1,485 @@
// ------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Diagnostics.CodeAnalysis;
#if !NET6_0_OR_GREATER
using MemoryMarshal = Win32.MemoryMarshal;
#endif
namespace Win32.Graphics.Direct2D.Common;
public static partial class Apis
{
}
#region Enums
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_ALPHA_MODE"]/*' />
/// <unmanaged>D2D1_ALPHA_MODE</unmanaged>
public enum AlphaMode : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_ALPHA_MODE::D2D1_ALPHA_MODE_UNKNOWN"]/*' />
/// <unmanaged>D2D1_ALPHA_MODE_UNKNOWN</unmanaged>
Unknown = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_ALPHA_MODE::D2D1_ALPHA_MODE_PREMULTIPLIED"]/*' />
/// <unmanaged>D2D1_ALPHA_MODE_PREMULTIPLIED</unmanaged>
Premultiplied = 1,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_ALPHA_MODE::D2D1_ALPHA_MODE_STRAIGHT"]/*' />
/// <unmanaged>D2D1_ALPHA_MODE_STRAIGHT</unmanaged>
Straight = 2,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_ALPHA_MODE::D2D1_ALPHA_MODE_IGNORE"]/*' />
/// <unmanaged>D2D1_ALPHA_MODE_IGNORE</unmanaged>
Ignore = 3,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FIGURE_BEGIN"]/*' />
/// <unmanaged>D2D1_FIGURE_BEGIN</unmanaged>
public enum FigureBegin : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FIGURE_BEGIN::D2D1_FIGURE_BEGIN_FILLED"]/*' />
/// <unmanaged>D2D1_FIGURE_BEGIN_FILLED</unmanaged>
Filled = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FIGURE_BEGIN::D2D1_FIGURE_BEGIN_HOLLOW"]/*' />
/// <unmanaged>D2D1_FIGURE_BEGIN_HOLLOW</unmanaged>
Hollow = 1,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FIGURE_END"]/*' />
/// <unmanaged>D2D1_FIGURE_END</unmanaged>
public enum FigureEnd : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FIGURE_END::D2D1_FIGURE_END_OPEN"]/*' />
/// <unmanaged>D2D1_FIGURE_END_OPEN</unmanaged>
Open = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FIGURE_END::D2D1_FIGURE_END_CLOSED"]/*' />
/// <unmanaged>D2D1_FIGURE_END_CLOSED</unmanaged>
Closed = 1,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_PATH_SEGMENT"]/*' />
/// <unmanaged>D2D1_PATH_SEGMENT</unmanaged>
[Flags]
public enum PathSegment : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_PATH_SEGMENT::D2D1_PATH_SEGMENT_NONE"]/*' />
/// <unmanaged>D2D1_PATH_SEGMENT_NONE</unmanaged>
None = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_PATH_SEGMENT::D2D1_PATH_SEGMENT_FORCE_UNSTROKED"]/*' />
/// <unmanaged>D2D1_PATH_SEGMENT_FORCE_UNSTROKED</unmanaged>
ForceUnstroked = 1,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_PATH_SEGMENT::D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN"]/*' />
/// <unmanaged>D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN</unmanaged>
ForceRoundLineJoin = 2,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FILL_MODE"]/*' />
/// <unmanaged>D2D1_FILL_MODE</unmanaged>
public enum FillMode : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FILL_MODE::D2D1_FILL_MODE_ALTERNATE"]/*' />
/// <unmanaged>D2D1_FILL_MODE_ALTERNATE</unmanaged>
Alternate = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_FILL_MODE::D2D1_FILL_MODE_WINDING"]/*' />
/// <unmanaged>D2D1_FILL_MODE_WINDING</unmanaged>
Winding = 1,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BORDER_MODE"]/*' />
/// <unmanaged>D2D1_BORDER_MODE</unmanaged>
public enum BorderMode : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BORDER_MODE::D2D1_BORDER_MODE_SOFT"]/*' />
/// <unmanaged>D2D1_BORDER_MODE_SOFT</unmanaged>
Soft = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BORDER_MODE::D2D1_BORDER_MODE_HARD"]/*' />
/// <unmanaged>D2D1_BORDER_MODE_HARD</unmanaged>
Hard = 1,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE"]/*' />
/// <unmanaged>D2D1_BLEND_MODE</unmanaged>
public enum BlendMode : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_MULTIPLY"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_MULTIPLY</unmanaged>
Multiply = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_SCREEN"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_SCREEN</unmanaged>
Screen = 1,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_DARKEN"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_DARKEN</unmanaged>
Darken = 2,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_LIGHTEN"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_LIGHTEN</unmanaged>
Lighten = 3,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_DISSOLVE"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_DISSOLVE</unmanaged>
Dissolve = 4,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_COLOR_BURN"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_COLOR_BURN</unmanaged>
ColorBurn = 5,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_LINEAR_BURN"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_LINEAR_BURN</unmanaged>
LinearBurn = 6,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_DARKER_COLOR"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_DARKER_COLOR</unmanaged>
DarkerColor = 7,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_LIGHTER_COLOR"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_LIGHTER_COLOR</unmanaged>
LighterColor = 8,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_COLOR_DODGE"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_COLOR_DODGE</unmanaged>
ColorDodge = 9,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_LINEAR_DODGE"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_LINEAR_DODGE</unmanaged>
LinearDodge = 10,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_OVERLAY"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_OVERLAY</unmanaged>
Overlay = 11,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_SOFT_LIGHT"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_SOFT_LIGHT</unmanaged>
SoftLight = 12,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_HARD_LIGHT"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_HARD_LIGHT</unmanaged>
HardLight = 13,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_VIVID_LIGHT"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_VIVID_LIGHT</unmanaged>
VividLight = 14,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_LINEAR_LIGHT"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_LINEAR_LIGHT</unmanaged>
LinearLight = 15,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_PIN_LIGHT"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_PIN_LIGHT</unmanaged>
PinLight = 16,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_HARD_MIX"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_HARD_MIX</unmanaged>
HardMix = 17,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_DIFFERENCE"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_DIFFERENCE</unmanaged>
Difference = 18,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_EXCLUSION"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_EXCLUSION</unmanaged>
Exclusion = 19,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_HUE"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_HUE</unmanaged>
Hue = 20,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_SATURATION"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_SATURATION</unmanaged>
Saturation = 21,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_COLOR"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_COLOR</unmanaged>
Color = 22,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_LUMINOSITY"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_LUMINOSITY</unmanaged>
Luminosity = 23,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_SUBTRACT"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_SUBTRACT</unmanaged>
Subtract = 24,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BLEND_MODE::D2D1_BLEND_MODE_DIVISION"]/*' />
/// <unmanaged>D2D1_BLEND_MODE_DIVISION</unmanaged>
Division = 25,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COLORMATRIX_ALPHA_MODE"]/*' />
/// <unmanaged>D2D1_COLORMATRIX_ALPHA_MODE</unmanaged>
public enum ColorMatrixAlphaMode : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COLORMATRIX_ALPHA_MODE::D2D1_COLORMATRIX_ALPHA_MODE_PREMULTIPLIED"]/*' />
/// <unmanaged>D2D1_COLORMATRIX_ALPHA_MODE_PREMULTIPLIED</unmanaged>
Premultiplied = 1,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COLORMATRIX_ALPHA_MODE::D2D1_COLORMATRIX_ALPHA_MODE_STRAIGHT"]/*' />
/// <unmanaged>D2D1_COLORMATRIX_ALPHA_MODE_STRAIGHT</unmanaged>
Straight = 2,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_TURBULENCE_NOISE"]/*' />
/// <unmanaged>D2D1_TURBULENCE_NOISE</unmanaged>
public enum TurbulenceNoise : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_TURBULENCE_NOISE::D2D1_TURBULENCE_NOISE_FRACTAL_SUM"]/*' />
/// <unmanaged>D2D1_TURBULENCE_NOISE_FRACTAL_SUM</unmanaged>
FractalSum = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_TURBULENCE_NOISE::D2D1_TURBULENCE_NOISE_TURBULENCE"]/*' />
/// <unmanaged>D2D1_TURBULENCE_NOISE_TURBULENCE</unmanaged>
Turbulence = 1,
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE</unmanaged>
public enum CompositeMode : uint
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_SOURCE_OVER"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_SOURCE_OVER</unmanaged>
SourceOver = 0,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_DESTINATION_OVER"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_DESTINATION_OVER</unmanaged>
DestinationOver = 1,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_SOURCE_IN"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_SOURCE_IN</unmanaged>
SourceIn = 2,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_DESTINATION_IN"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_DESTINATION_IN</unmanaged>
DestinationIn = 3,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_SOURCE_OUT"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_SOURCE_OUT</unmanaged>
SourceOut = 4,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_DESTINATION_OUT"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_DESTINATION_OUT</unmanaged>
DestinationOut = 5,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_SOURCE_ATOP"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_SOURCE_ATOP</unmanaged>
SourceAtop = 6,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_DESTINATION_ATOP"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_DESTINATION_ATOP</unmanaged>
DestinationAtop = 7,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_XOR"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_XOR</unmanaged>
Xor = 8,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_PLUS"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_PLUS</unmanaged>
Plus = 9,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_SOURCE_COPY"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_SOURCE_COPY</unmanaged>
SourceCopy = 10,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY</unmanaged>
BoundedSourceCopy = 11,
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COMPOSITE_MODE::D2D1_COMPOSITE_MODE_MASK_INVERT"]/*' />
/// <unmanaged>D2D1_COMPOSITE_MODE_MASK_INVERT</unmanaged>
MaskInvert = 12,
}
#endregion Enums
#region Structs
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COLOR_F"]/*' />
/// <unmanaged>D2D1_COLOR_F</unmanaged>
public partial struct ColorF
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COLOR_F::r"]/*' />
public float r;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COLOR_F::g"]/*' />
public float g;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COLOR_F::b"]/*' />
public float b;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_COLOR_F::a"]/*' />
public float a;
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_PIXEL_FORMAT"]/*' />
/// <unmanaged>D2D1_PIXEL_FORMAT</unmanaged>
public partial struct PixelFormat
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_PIXEL_FORMAT::format"]/*' />
public Graphics.Dxgi.Common.Format format;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_PIXEL_FORMAT::alphaMode"]/*' />
public AlphaMode alphaMode;
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_POINT_2U"]/*' />
/// <unmanaged>D2D_POINT_2U</unmanaged>
public partial struct Point2u
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_POINT_2U::x"]/*' />
public uint x;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_POINT_2U::y"]/*' />
public uint y;
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_F"]/*' />
/// <unmanaged>D2D_RECT_F</unmanaged>
public partial struct RectF
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_F::left"]/*' />
public float left;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_F::top"]/*' />
public float top;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_F::right"]/*' />
public float right;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_F::bottom"]/*' />
public float bottom;
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_U"]/*' />
/// <unmanaged>D2D_RECT_U</unmanaged>
public partial struct RectU
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_U::left"]/*' />
public uint left;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_U::top"]/*' />
public uint top;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_U::right"]/*' />
public uint right;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_RECT_U::bottom"]/*' />
public uint bottom;
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_SIZE_U"]/*' />
/// <unmanaged>D2D_SIZE_U</unmanaged>
public partial struct SizeU
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_SIZE_U::width"]/*' />
public uint width;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D_SIZE_U::height"]/*' />
public uint height;
}
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BEZIER_SEGMENT"]/*' />
/// <unmanaged>D2D1_BEZIER_SEGMENT</unmanaged>
public partial struct BezierSegment
{
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BEZIER_SEGMENT::point1"]/*' />
public System.Drawing.PointF point1;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BEZIER_SEGMENT::point2"]/*' />
public System.Drawing.PointF point2;
/// <include file='../Direct2D.xml' path='doc/member[@name="D2D1_BEZIER_SEGMENT::point3"]/*' />
public System.Drawing.PointF point3;
}
#endregion Structs
#region COM Types
/// <include file='../Direct2D.xml' path='doc/member[@name="ID2D1SimplifiedGeometrySink"]/*' />
/// <unmanaged>ID2D1SimplifiedGeometrySink</unmanaged>
[Guid("2cd9069e-12e2-11dc-9fed-001143a055f9")]
[NativeTypeName("struct ID2D1SimplifiedGeometrySink : IUnknown")]
[NativeInheritance("IUnknown")]
public unsafe partial struct ID2D1SimplifiedGeometrySink
{
public static ref readonly Guid IID_ID2D1SimplifiedGeometrySink
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get
{
ReadOnlySpan<byte> data = new byte[] {
0x9E, 0x06, 0xD9, 0x2C,
0xE2, 0x12,
0xDC, 0x11,
0x9F,
0xED,
0x00,
0x11,
0x43,
0xA0,
0x55,
0xF9
};
Debug.Assert(data.Length == Unsafe.SizeOf<Guid>());
return ref Unsafe.As<byte, Guid>(ref MemoryMarshal.GetReference(data));
}
}
public static Guid* NativeGuid => (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in IID_ID2D1SimplifiedGeometrySink));
public void** lpVtbl;
/// <inheritdoc cref="IUnknown.QueryInterface" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(0)]
public HResult QueryInterface([NativeTypeName("const IID &")] Guid* riid, void** ppvObject)
{
return ((delegate* unmanaged[Stdcall]<IUnknown*, Guid*, void**, int>)(lpVtbl[0]))((IUnknown*)Unsafe.AsPointer(ref this), riid, ppvObject);
}
/// <inheritdoc cref="IUnknown.AddRef" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(1)]
[return: NativeTypeName("ULONG")]
public uint AddRef()
{
return ((delegate* unmanaged[Stdcall]<IUnknown*, uint>)(lpVtbl[1]))((IUnknown*)Unsafe.AsPointer(ref this));
}
/// <inheritdoc cref="IUnknown.Release" />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(2)]
[return: NativeTypeName("ULONG")]
public uint Release()
{
return ((delegate* unmanaged[Stdcall]<IUnknown*, uint>)(lpVtbl[2]))((IUnknown*)Unsafe.AsPointer(ref this));
}
/// <include file='../Direct2D.xml' path='doc/member[@name="ID2D1SimplifiedGeometrySink::SetFillMode"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(3)]
public void SetFillMode(FillMode fillMode)
{
((delegate* unmanaged[Stdcall]<ID2D1SimplifiedGeometrySink*, FillMode, void>)(lpVtbl[3]))((ID2D1SimplifiedGeometrySink*)Unsafe.AsPointer(ref this), fillMode);
}
/// <include file='../Direct2D.xml' path='doc/member[@name="ID2D1SimplifiedGeometrySink::SetSegmentFlags"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(4)]
public void SetSegmentFlags(PathSegment vertexFlags)
{
((delegate* unmanaged[Stdcall]<ID2D1SimplifiedGeometrySink*, PathSegment, void>)(lpVtbl[4]))((ID2D1SimplifiedGeometrySink*)Unsafe.AsPointer(ref this), vertexFlags);
}
/// <include file='../Direct2D.xml' path='doc/member[@name="ID2D1SimplifiedGeometrySink::BeginFigure"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(5)]
public void BeginFigure(System.Drawing.PointF* startPoint, FigureBegin figureBegin)
{
((delegate* unmanaged[Stdcall]<ID2D1SimplifiedGeometrySink*, System.Drawing.PointF*, FigureBegin, void>)(lpVtbl[5]))((ID2D1SimplifiedGeometrySink*)Unsafe.AsPointer(ref this), startPoint, figureBegin);
}
/// <include file='../Direct2D.xml' path='doc/member[@name="ID2D1SimplifiedGeometrySink::AddLines"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(6)]
public void AddLines(System.Drawing.PointF** points, uint pointsCount)
{
((delegate* unmanaged[Stdcall]<ID2D1SimplifiedGeometrySink*, System.Drawing.PointF**, uint, void>)(lpVtbl[6]))((ID2D1SimplifiedGeometrySink*)Unsafe.AsPointer(ref this), points, pointsCount);
}
/// <include file='../Direct2D.xml' path='doc/member[@name="ID2D1SimplifiedGeometrySink::AddBeziers"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(7)]
public void AddBeziers(BezierSegment* beziers, uint beziersCount)
{
((delegate* unmanaged[Stdcall]<ID2D1SimplifiedGeometrySink*, BezierSegment*, uint, void>)(lpVtbl[7]))((ID2D1SimplifiedGeometrySink*)Unsafe.AsPointer(ref this), beziers, beziersCount);
}
/// <include file='../Direct2D.xml' path='doc/member[@name="ID2D1SimplifiedGeometrySink::EndFigure"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(8)]
public void EndFigure(FigureEnd figureEnd)
{
((delegate* unmanaged[Stdcall]<ID2D1SimplifiedGeometrySink*, FigureEnd, void>)(lpVtbl[8]))((ID2D1SimplifiedGeometrySink*)Unsafe.AsPointer(ref this), figureEnd);
}
/// <include file='../Direct2D.xml' path='doc/member[@name="ID2D1SimplifiedGeometrySink::Close"]/*' />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
[VtblIndex(9)]
public HResult Close()
{
return ((delegate* unmanaged[Stdcall]<ID2D1SimplifiedGeometrySink*, int>)(lpVtbl[9]))((ID2D1SimplifiedGeometrySink*)Unsafe.AsPointer(ref this));
}
}
#endregion Com Types

View File

@@ -6407,10 +6407,10 @@ public enum MessageId : int
ReleasedecoderbufferNotlocked = 3145783, ReleasedecoderbufferNotlocked = 3145783,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM</unmanaged>
DecoderbeginframeNullParam = 3145784, DecoderBeginFrameNullParam = 3145784,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD</unmanaged>
DecoderbeginframeHazard = 3145785, DecoderBeginFrameHazard = 3145785,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM</unmanaged>
DecoderendframeNullParam = 3145786, DecoderendframeNullParam = 3145786,
@@ -7370,7 +7370,7 @@ public enum MessageId : int
Videoprocessorgetstreamcolorspace1NullParam = 3146104, Videoprocessorgetstreamcolorspace1NullParam = 3146104,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM</unmanaged>
VideoprocessorgetstreammirrorNullParam = 3146105, VideoProcessorGetStreamMirrorNullParam = 3146105,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM</unmanaged>
RecommendvideodecoderdownsamplingNullParam = 3146106, RecommendvideodecoderdownsamplingNullParam = 3146106,
@@ -7553,7 +7553,7 @@ public enum MessageId : int
JpegDecodeNotSupported = 3146169, JpegDecodeNotSupported = 3146169,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE</unmanaged>
JpegDecodeDimensionstoolarge = 3146170, JpegDecodeDimensionsTooLarge = 3146170,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS</unmanaged>
JpegDecodeInvalidComponents = 3146171, JpegDecodeInvalidComponents = 3146171,
@@ -7574,7 +7574,7 @@ public enum MessageId : int
JpegDecodeInvalidSubresource = 3146176, JpegDecodeInvalidSubresource = 3146176,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL</unmanaged>
JpegDecodeInvalidmiplevel = 3146177, JpegDecodeInvalidMipLevel = 3146177,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX</unmanaged>
JpegDecodeEmptydestbox = 3146178, JpegDecodeEmptydestbox = 3146178,
@@ -7649,7 +7649,7 @@ public enum MessageId : int
JpegDecodeUnsupporteddsttextureusage = 3146201, JpegDecodeUnsupporteddsttextureusage = 3146201,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED</unmanaged>
JpegDecodeBackbuffernotsupported = 3146202, JpegDecodeBackbufferNotSupported = 3146202,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS</unmanaged>
JpegDecodeUnsupprtedcopyflags = 3146203, JpegDecodeUnsupprtedcopyflags = 3146203,
@@ -7685,10 +7685,10 @@ public enum MessageId : int
JpegEncodeInvalidSubresource = 3146213, JpegEncodeInvalidSubresource = 3146213,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL</unmanaged>
JpegEncodeInvalidmiplevel = 3146214, JpegEncodeInvalidMipLevel = 3146214,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE</unmanaged>
JpegEncodeDimensionstoolarge = 3146215, JpegEncodeDimensionsTooLarge = 3146215,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGENCODE_HAZARD"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGENCODE_HAZARD"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGENCODE_HAZARD</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGENCODE_HAZARD</unmanaged>
JpegEncodeHazard = 3146216, JpegEncodeHazard = 3146216,
@@ -7703,7 +7703,7 @@ public enum MessageId : int
JpegEncodeUnsupportedsrctextureusage = 3146219, JpegEncodeUnsupportedsrctextureusage = 3146219,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED</unmanaged>
JpegEncodeBackbuffernotsupported = 3146220, JpegEncodeBackbufferNotSupported = 3146220,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY</unmanaged>
CreateQueryOrPredicateUnsupportedcontextttypeforquery = 3146221, CreateQueryOrPredicateUnsupportedcontextttypeforquery = 3146221,
@@ -7787,7 +7787,7 @@ public enum MessageId : int
Videoprocessorgetstreamcolorspace1InvalidStream = 3146247, Videoprocessorgetstreamcolorspace1InvalidStream = 3146247,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_INVALIDSTREAM"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_INVALIDSTREAM"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_INVALIDSTREAM</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_INVALIDSTREAM</unmanaged>
VideoprocessorgetstreammirrorInvalidStream = 3146248, VideoProcessorGetStreamMirrorInvalidStream = 3146248,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATE_FENCE"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATE_FENCE"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_CREATE_FENCE</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_CREATE_FENCE</unmanaged>
CreateFence = 3146249, CreateFence = 3146249,
@@ -7799,13 +7799,13 @@ public enum MessageId : int
DestroyFence = 3146251, DestroyFence = 3146251,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATE_SYNCHRONIZEDCHANNEL"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATE_SYNCHRONIZEDCHANNEL"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_CREATE_SYNCHRONIZEDCHANNEL</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_CREATE_SYNCHRONIZEDCHANNEL</unmanaged>
CreateSynchronizedchannel = 3146252, CreateSynchronizedChannel = 3146252,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_LIVE_SYNCHRONIZEDCHANNEL"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_LIVE_SYNCHRONIZEDCHANNEL"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_LIVE_SYNCHRONIZEDCHANNEL</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_LIVE_SYNCHRONIZEDCHANNEL</unmanaged>
LiveSynchronizedchannel = 3146253, LiveSynchronizedChannel = 3146253,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DESTROY_SYNCHRONIZEDCHANNEL"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DESTROY_SYNCHRONIZEDCHANNEL"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DESTROY_SYNCHRONIZEDCHANNEL</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DESTROY_SYNCHRONIZEDCHANNEL</unmanaged>
DestroySynchronizedchannel = 3146254, DestroySynchronizedChannel = 3146254,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATEFENCE_INVALIDFLAGS"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATEFENCE_INVALIDFLAGS"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_CREATEFENCE_INVALIDFLAGS</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_CREATEFENCE_INVALIDFLAGS</unmanaged>
CreateFenceInvalidFlags = 3146255, CreateFenceInvalidFlags = 3146255,
@@ -7817,22 +7817,22 @@ public enum MessageId : int
NegotiatecryptosessionkeyexchangemtNotSupported = 3146259, NegotiatecryptosessionkeyexchangemtNotSupported = 3146259,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_COMPONENT_COUNT"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_COMPONENT_COUNT"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_COMPONENT_COUNT</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_COMPONENT_COUNT</unmanaged>
DecoderbeginframeInvalidHistogramComponentCount = 3146260, DecoderBeginFrameInvalidHistogramComponentCount = 3146260,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_COMPONENT"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_COMPONENT"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_COMPONENT</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_COMPONENT</unmanaged>
DecoderbeginframeInvalidHistogramComponent = 3146261, DecoderBeginFrameInvalidHistogramComponent = 3146261,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_SIZE"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_SIZE"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_SIZE</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_SIZE</unmanaged>
DecoderbeginframeInvalidHistogramBufferSize = 3146262, DecoderBeginFrameInvalidHistogramBufferSize = 3146262,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_USAGE"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_USAGE"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_USAGE</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_USAGE</unmanaged>
DecoderbeginframeInvalidHistogramBufferUsage = 3146263, DecoderBeginFrameInvalidHistogramBufferUsage = 3146263,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_MISC_FLAGS"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_MISC_FLAGS"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_MISC_FLAGS</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_MISC_FLAGS</unmanaged>
DecoderbeginframeInvalidHistogramBufferMiscFlags = 3146264, DecoderBeginFrameInvalidHistogramBufferMiscFlags = 3146264,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_OFFSET"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_OFFSET"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_OFFSET</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_DECODERBEGINFRAME_INVALID_HISTOGRAM_BUFFER_OFFSET</unmanaged>
DecoderbeginframeInvalidHistogramBufferOffset = 3146265, DecoderBeginFrameInvalidHistogramBufferOffset = 3146265,
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATE_TRACKEDWORKLOAD"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_MESSAGE_ID::D3D11_MESSAGE_ID_CREATE_TRACKEDWORKLOAD"]/*' />
/// <unmanaged>D3D11_MESSAGE_ID_CREATE_TRACKEDWORKLOAD</unmanaged> /// <unmanaged>D3D11_MESSAGE_ID_CREATE_TRACKEDWORKLOAD</unmanaged>
CreateTrackedworkload = 3146266, CreateTrackedworkload = 3146266,
@@ -8571,7 +8571,7 @@ public partial struct Box
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_DEPTH_STENCILOP_DESC"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_DEPTH_STENCILOP_DESC"]/*' />
/// <unmanaged>D3D11_DEPTH_STENCILOP_DESC</unmanaged> /// <unmanaged>D3D11_DEPTH_STENCILOP_DESC</unmanaged>
public partial struct DepthStencilopDescription public partial struct DepthStencilOpDescription
{ {
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_DEPTH_STENCILOP_DESC::StencilFailOp"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_DEPTH_STENCILOP_DESC::StencilFailOp"]/*' />
public StencilOp StencilFailOp; public StencilOp StencilFailOp;
@@ -8609,10 +8609,10 @@ public partial struct DepthStencilDescription
public byte StencilWriteMask; public byte StencilWriteMask;
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_DEPTH_STENCIL_DESC::FrontFace"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_DEPTH_STENCIL_DESC::FrontFace"]/*' />
public DepthStencilopDescription FrontFace; public DepthStencilOpDescription FrontFace;
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_DEPTH_STENCIL_DESC::BackFace"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_DEPTH_STENCIL_DESC::BackFace"]/*' />
public DepthStencilopDescription BackFace; public DepthStencilOpDescription BackFace;
} }
/// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_RENDER_TARGET_BLEND_DESC"]/*' /> /// <include file='../Direct3D11.xml' path='doc/member[@name="D3D11_RENDER_TARGET_BLEND_DESC"]/*' />

View File

@@ -7043,7 +7043,7 @@ public partial struct Box
/// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCILOP_DESC"]/*' /> /// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCILOP_DESC"]/*' />
/// <unmanaged>D3D12_DEPTH_STENCILOP_DESC</unmanaged> /// <unmanaged>D3D12_DEPTH_STENCILOP_DESC</unmanaged>
public partial struct DepthStencilopDescription public partial struct DepthStencilOpDescription
{ {
/// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCILOP_DESC::StencilFailOp"]/*' /> /// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCILOP_DESC::StencilFailOp"]/*' />
public StencilOp StencilFailOp; public StencilOp StencilFailOp;
@@ -7081,10 +7081,10 @@ public partial struct DepthStencilDescription
public byte StencilWriteMask; public byte StencilWriteMask;
/// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC::FrontFace"]/*' /> /// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC::FrontFace"]/*' />
public DepthStencilopDescription FrontFace; public DepthStencilOpDescription FrontFace;
/// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC::BackFace"]/*' /> /// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC::BackFace"]/*' />
public DepthStencilopDescription BackFace; public DepthStencilOpDescription BackFace;
} }
/// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC1"]/*' /> /// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC1"]/*' />
@@ -7110,10 +7110,10 @@ public partial struct DepthStencilDescription1
public byte StencilWriteMask; public byte StencilWriteMask;
/// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC1::FrontFace"]/*' /> /// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC1::FrontFace"]/*' />
public DepthStencilopDescription FrontFace; public DepthStencilOpDescription FrontFace;
/// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC1::BackFace"]/*' /> /// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC1::BackFace"]/*' />
public DepthStencilopDescription BackFace; public DepthStencilOpDescription BackFace;
/// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC1::DepthBoundsTestEnable"]/*' /> /// <include file='../Direct3D12.xml' path='doc/member[@name="D3D12_DEPTH_STENCIL_DESC1::DepthBoundsTestEnable"]/*' />
public Bool32 DepthBoundsTestEnable; public Bool32 DepthBoundsTestEnable;

View File

@@ -0,0 +1,198 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
using System.Globalization;
using System.Text;
namespace Win32.Graphics.Direct2D.Common;
/// <summary>
/// Describes a 4-by-3 floating point matrix.
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public readonly struct Matrix4x3 : IEquatable<Matrix4x3>, IFormattable
{
/// <summary>
/// Value at row 1 column 1.
/// </summary>
public readonly float M11;
/// <summary>
/// Value at row 1 column 2.
/// </summary>
public readonly float M12;
/// <summary>
/// Value at row 1 column 3.
/// </summary>
public readonly float M13;
/// <summary>
/// Value at row 2 column 1.
/// </summary>
public readonly float M21;
/// <summary>
/// Value at row 2 column 2.
/// </summary>
public readonly float M22;
/// <summary>
/// Value at row 2 column 3.
/// </summary>
public readonly float M23;
/// <summary>
/// Value at row 3 column 1.
/// </summary>
public readonly float M31;
/// <summary>
/// Value at row 3 column 2.
/// </summary>
public readonly float M32;
/// <summary>
/// Value at row 3 column 3.
/// </summary>
public readonly float M33;
/// <summary>
/// Value at row 4 column 1.
/// </summary>
public readonly float M41;
/// <summary>
/// Value at row 4 column 2.
/// </summary>
public readonly float M42;
/// <summary>
/// Value at row 4 column 3.
/// </summary>
public readonly float M43;
/// <summary>
/// Initializes a new instance of the <see cref="Matrix3x3"/> struct.
/// </summary>
/// <param name="value">The value that will be assigned to all components.</param>
public Matrix4x3(float value)
{
M11 = M12 = M13 =
M21 = M22 = M23 =
M31 = M32 = M33 =
M41 = M42 = M43 = value;
}
/// <summary>
/// Initializes a new instance of the <see cref="Matrix4x3"/> struct.
/// </summary>
/// <param name="m11">The value to assign at row 1 column 1 of the Matrix4x3.</param>
/// <param name="m12">The value to assign at row 1 column 2 of the Matrix4x3.</param>
/// <param name="m13">The value to assign at row 1 column 3 of the Matrix4x3.</param>
/// <param name="m21">The value to assign at row 2 column 1 of the Matrix4x3.</param>
/// <param name="m22">The value to assign at row 2 column 2 of the Matrix4x3.</param>
/// <param name="m23">The value to assign at row 2 column 3 of the Matrix4x3.</param>
/// <param name="m31">The value to assign at row 3 column 1 of the Matrix4x3.</param>
/// <param name="m32">The value to assign at row 3 column 2 of the Matrix4x3.</param>
/// <param name="m33">The value to assign at row 3 column 3 of the Matrix4x3.</param>
/// <param name="m41">The value to assign at row 4 column 1 of the Matrix4x3.</param>
/// <param name="m42">The value to assign at row 4 column 2 of the Matrix4x3.</param>
/// <param name="m43">The value to assign at row 4 column 3 of the Matrix4x3.</param>
public Matrix4x3(
float m11, float m12, float m13,
float m21, float m22, float m23,
float m31, float m32, float m33,
float m41, float m42, float m43)
{
M11 = m11; M12 = m12; M13 = m13;
M21 = m21; M22 = m22; M23 = m23;
M31 = m31; M32 = m32; M33 = m33;
M41 = m41; M42 = m42; M43 = m43;
}
/// <summary>
/// Compares two <see cref="Matrix4x3"/> objects for equality.
/// </summary>
/// <param name="left">The <see cref="Matrix4x3"/> on the left hand of the operand.</param>
/// <param name="right">The <see cref="Matrix4x3"/> on the right hand of the operand.</param>
/// <returns>
/// True if the current left is equal to the <paramref name="right"/> parameter; otherwise, false.
/// </returns>
public static bool operator ==(Matrix4x3 left, Matrix4x3 right)
{
return (left.M11 == right.M11) && (left.M12 == right.M12) && (left.M13 == right.M13)
&& (left.M21 == right.M21) && (left.M22 == right.M22) && (left.M23 == right.M23)
&& (left.M31 == right.M31) && (left.M32 == right.M32) && (left.M33 == right.M33)
&& (left.M41 == right.M41) && (left.M42 == right.M42) && (left.M43 == right.M43);
}
/// <summary>
/// Compares two <see cref="Matrix4x3"/> objects for inequality.
/// </summary>
/// <param name="left">The <see cref="Matrix4x3"/> on the left hand of the operand.</param>
/// <param name="right">The <see cref="Matrix4x3"/> on the right hand of the operand.</param>
/// <returns>
/// True if the current left is unequal to the <paramref name="right"/> parameter; otherwise, false.
/// </returns>
public static bool operator !=(Matrix4x3 left, Matrix4x3 right)
{
return (left.M11 != right.M11) || (left.M12 != right.M12) || (left.M13 != right.M13)
|| (left.M21 != right.M21) || (left.M22 != right.M22) || (left.M23 != right.M23)
|| (left.M31 != right.M31) || (left.M32 != right.M32) || (left.M33 != right.M33)
|| (left.M41 != right.M41) || (left.M42 != right.M42) || (left.M43 != right.M43);
}
/// <inheritdoc/>
public override bool Equals(object? obj) => (obj is Matrix4x3 other) && Equals(other);
/// <inheritdoc/>
public bool Equals(Matrix4x3 other) => this == other;
/// <inheritdoc/>
public override int GetHashCode()
{
var hashCode = new HashCode();
{
hashCode.Add(M11);
hashCode.Add(M12);
hashCode.Add(M13);
hashCode.Add(M21);
hashCode.Add(M22);
hashCode.Add(M23);
hashCode.Add(M31);
hashCode.Add(M32);
hashCode.Add(M33);
hashCode.Add(M41);
hashCode.Add(M42);
hashCode.Add(M43);
}
return hashCode.ToHashCode();
}
/// <inheritdoc/>
public override string ToString() => ToString(format: null, formatProvider: null);
/// <inheritdoc />
public string ToString(string? format, IFormatProvider? formatProvider)
{
var separator = NumberFormatInfo.GetInstance(formatProvider).NumberGroupSeparator;
return new StringBuilder()
.Append('<')
.Append(M11.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M12.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M13.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M21.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M22.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M23.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M31.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M32.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M33.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M41.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M42.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M43.ToString(format, formatProvider))
.Append('>')
.ToString();
}
}

View File

@@ -0,0 +1,217 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
using System.Globalization;
using System.Text;
namespace Win32.Graphics.Direct2D.Common;
/// <summary>
/// Describes a 5-by-4 floating point matrix.
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public readonly struct Matrix5x4 : IEquatable<Matrix5x4>, IFormattable
{
/// <summary>
/// Value at row 1 column 1.
/// </summary>
public readonly float M11;
/// <summary>
/// Value at row 1 column 2.
/// </summary>
public readonly float M12;
/// <summary>
/// Value at row 1 column 3.
/// </summary>
public readonly float M13;
/// <summary>
/// Value at row 1 column 4.
/// </summary>
public readonly float M14;
/// <summary>
/// Value at row 2 column 1.
/// </summary>
public readonly float M21;
/// <summary>
/// Value at row 2 column 2.
/// </summary>
public readonly float M22;
/// <summary>
/// Value at row 2 column 3.
/// </summary>
public readonly float M23;
/// <summary>
/// Value at row 2 column 4.
/// </summary>
public readonly float M24;
/// <summary>
/// Value at row 3 column 1.
/// </summary>
public readonly float M31;
/// <summary>
/// Value at row 3 column 2.
/// </summary>
public readonly float M32;
/// <summary>
/// Value at row 3 column 3.
/// </summary>
public readonly float M33;
/// <summary>
/// Value at row 3 column 4.
/// </summary>
public readonly float M34;
/// <summary>
/// Value at row 4 column 1.
/// </summary>
public readonly float M41;
/// <summary>
/// Value at row 4 column 2.
/// </summary>
public readonly float M42;
/// <summary>
/// Value at row 4 column 3.
/// </summary>
public readonly float M43;
/// <summary>
/// Value at row 4 column 4.
/// </summary>
public readonly float M44;
/// <summary>
/// Value at row 5 column 1.
/// </summary>
public readonly float M51;
/// <summary>
/// Value at row 5 column 2.
/// </summary>
public readonly float M52;
/// <summary>
/// Value at row 5 column 3.
/// </summary>
public readonly float M53;
/// <summary>
/// Value at row 5 column 4.
/// </summary>
public readonly float M54;
/// <summary>
/// Compares two <see cref="Matrix5x4"/> objects for equality.
/// </summary>
/// <param name="left">The <see cref="Matrix5x4"/> on the left hand of the operand.</param>
/// <param name="right">The <see cref="Matrix5x4"/> on the right hand of the operand.</param>
/// <returns>
/// True if the current left is equal to the <paramref name="right"/> parameter; otherwise, false.
/// </returns>
public static bool operator ==(Matrix5x4 left, Matrix5x4 right)
{
return (left.M11 == right.M11) && (left.M12 == right.M12) && (left.M13 == right.M13) && (left.M14 == right.M14)
&& (left.M21 == right.M21) && (left.M22 == right.M22) && (left.M23 == right.M23) && (left.M24 == right.M24)
&& (left.M31 == right.M31) && (left.M32 == right.M32) && (left.M33 == right.M33) && (left.M34 == right.M34)
&& (left.M41 == right.M41) && (left.M42 == right.M42) && (left.M43 == right.M43) && (left.M44 == right.M44)
&& (left.M51 == right.M51) && (left.M52 == right.M52) && (left.M53 == right.M53) && (left.M54 == right.M54);
}
/// <summary>
/// Compares two <see cref="Matrix5x4"/> objects for inequality.
/// </summary>
/// <param name="left">The <see cref="Matrix5x4"/> on the left hand of the operand.</param>
/// <param name="right">The <see cref="Matrix5x4"/> on the right hand of the operand.</param>
/// <returns>
/// True if the current left is unequal to the <paramref name="right"/> parameter; otherwise, false.
/// </returns>
public static bool operator !=(Matrix5x4 left, Matrix5x4 right)
{
return (left.M11 != right.M11) || (left.M12 != right.M12) || (left.M13 != right.M13) || (left.M14 != right.M14)
|| (left.M21 != right.M21) || (left.M22 != right.M22) || (left.M23 != right.M23) || (left.M24 != right.M24)
|| (left.M31 != right.M31) || (left.M32 != right.M32) || (left.M33 != right.M33) || (left.M34 != right.M34)
|| (left.M41 != right.M41) || (left.M42 != right.M42) || (left.M43 != right.M43) || (left.M44 != right.M44)
|| (left.M51 != right.M51) || (left.M52 != right.M52) || (left.M53 != right.M53) || (left.M54 != right.M54);
}
/// <inheritdoc/>
public override bool Equals(object? obj) => (obj is Matrix5x4 other) && Equals(other);
/// <inheritdoc/>
public bool Equals(Matrix5x4 other) => this == other;
/// <inheritdoc/>
public override int GetHashCode()
{
var hashCode = new HashCode();
{
hashCode.Add(M11);
hashCode.Add(M12);
hashCode.Add(M13);
hashCode.Add(M14);
hashCode.Add(M21);
hashCode.Add(M22);
hashCode.Add(M23);
hashCode.Add(M24);
hashCode.Add(M31);
hashCode.Add(M32);
hashCode.Add(M33);
hashCode.Add(M34);
hashCode.Add(M41);
hashCode.Add(M42);
hashCode.Add(M43);
hashCode.Add(M44);
hashCode.Add(M51);
hashCode.Add(M52);
hashCode.Add(M53);
hashCode.Add(M54);
}
return hashCode.ToHashCode();
}
/// <inheritdoc/>
public override string ToString() => ToString(format: null, formatProvider: null);
/// <inheritdoc />
public string ToString(string? format, IFormatProvider? formatProvider)
{
var separator = NumberFormatInfo.GetInstance(formatProvider).NumberGroupSeparator;
return new StringBuilder()
.Append('<')
.Append(M11.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M12.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M13.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M14.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M21.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M22.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M23.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M24.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M31.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M32.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M33.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M34.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M41.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M42.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M43.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M44.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M51.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M52.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M53.ToString(format, formatProvider)).Append(separator).Append(' ')
.Append(M54.ToString(format, formatProvider))
.Append('>')
.ToString();
}
}

View File

@@ -0,0 +1,30 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
using Win32.Graphics.Dxgi.Common;
namespace Win32.Graphics.Direct2D.Common;
public partial struct PixelFormat
{
/// <summary>
/// An unkown <see cref="PixelFormat"/> with <see cref="Format"/> to <see cref="Format.Unknown"/> and <see cref="DCommon.AlphaMode"/> to <see cref="AlphaMode.Unknown"/>.
/// </summary>
public static readonly PixelFormat Unknown = new(Format.Unknown, AlphaMode.Unknown);
/// <summary>
/// A Premultiplied <see cref="PixelFormat"/> with <see cref="Format"/> to <see cref="Format.Unknown"/> and <see cref="DCommon.AlphaMode"/> to <see cref="AlphaMode.Premultiplied"/>.
/// </summary>
public static readonly PixelFormat Premultiplied = new(Format.Unknown, AlphaMode.Premultiplied);
/// <summary>
/// Initializes a new instance of the <see cref="PixelFormat"/> struct.
/// </summary>
/// <param name="format">The <see cref="Format"/> to use.</param>
/// <param name="alphaMode">A value that specifies whether the alpha channel is using pre-multiplied alpha, straight alpha, whether it should be ignored and considered opaque, or whether it is unknown.</param>
public PixelFormat(Format format, AlphaMode alphaMode)
{
this.format = format;
this.alphaMode = alphaMode;
}
}

View File

@@ -0,0 +1,31 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
namespace Win32.Graphics.Direct3D11;
public unsafe partial struct BufferDescription
{
/// <summary>
/// Initializes a new instance of the <see cref="BufferDescription"/> struct.
/// </summary>
/// <param name="byteWidth">The size in bytes.</param>
/// <param name="bindFlags">The bind flags.</param>
/// <param name="usage">The usage.</param>
/// <param name="cpuAccessFlags">The CPU access flags.</param>
/// <param name="miscFlags">The option flags.</param>
/// <param name="structureByteStride">The structure byte stride.</param>
public BufferDescription(uint byteWidth,
BindFlags bindFlags,
Usage usage = Usage.Default,
CpuAccessFlags cpuAccessFlags = CpuAccessFlags.None,
ResourceMiscFlags miscFlags = ResourceMiscFlags.None,
uint structureByteStride = 0)
{
ByteWidth = byteWidth;
BindFlags = bindFlags;
Usage = usage;
CPUAccessFlags = cpuAccessFlags;
MiscFlags = miscFlags;
StructureByteStride = structureByteStride;
}
}

View File

@@ -0,0 +1,101 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
using static Win32.Graphics.Direct3D11.Apis;
namespace Win32.Graphics.Direct3D11;
public unsafe partial struct DepthStencilDescription
{
/// <summary>
/// A built-in description with settings for not using a depth stencil buffer.
/// </summary>
public static readonly DepthStencilDescription None = new(false, DepthWriteMask.Zero);
/// <summary>
/// A built-in description with default settings for using a depth stencil buffer.
/// </summary>
public static readonly DepthStencilDescription Default = new(true, DepthWriteMask.All);
/// <summary>
/// A built-in description with settings for enabling a read-only depth stencil buffer.
/// </summary>
public static readonly DepthStencilDescription DepthRead = new(true, DepthWriteMask.Zero);
/// <summary>
/// A built-in description with settings for using a reverse depth stencil buffer.
/// </summary>
public static readonly DepthStencilDescription DepthReverseZ = new(true, DepthWriteMask.All, ComparisonFunc.GreaterEqual);
/// <summary>
/// A built-in description with settings for enabling a read-only reverse depth stencil buffer.
/// </summary>
public static readonly DepthStencilDescription DepthReadReverseZ = new(true, DepthWriteMask.Zero, ComparisonFunc.GreaterEqual);
/// <summary>
/// Initializes a new instance of the <see cref="DepthStencilDescription"/> struct.
/// </summary>
/// <param name="depthEnable">Enable depth testing.</param>
/// <param name="depthWriteMask">Identify a portion of the depth-stencil buffer that can be modified by depth data.</param>
/// <param name="depthFunc">A function that compares depth data against existing depth data. </param>
public DepthStencilDescription(bool depthEnable, DepthWriteMask depthWriteMask, ComparisonFunc depthFunc = ComparisonFunc.LessEqual)
{
DepthEnable = depthEnable;
DepthWriteMask = depthWriteMask;
DepthFunc = depthFunc;
StencilEnable = false;
StencilReadMask = (byte)D3D11_DEFAULT_STENCIL_READ_MASK;
StencilWriteMask = (byte)D3D11_DEFAULT_STENCIL_WRITE_MASK;
FrontFace = DepthStencilOpDescription.Default;
BackFace = DepthStencilOpDescription.Default;
}
/// <summary>
/// Initializes a new instance of the <see cref="DepthStencilDescription"/> struct.
/// </summary>
/// <param name="depthEnable">Specifies whether to enable depth testing. Set this member to <b>true</b> to enable depth testing.</param>
/// <param name="depthWriteEnable">Specifies a value that identifies a portion of the depth-stencil buffer that can be modified by depth data.</param>
/// <param name="depthFunc">A <see cref="ComparisonFunc"/> value that identifies a function that compares depth data against existing depth data.</param>
/// <param name="stencilEnable">Specifies whether to enable stencil testing. Set this member to <b>true</b> to enable stencil testing.</param>
/// <param name="stencilReadMask">Identify a portion of the depth-stencil buffer for reading stencil data.</param>
/// <param name="stencilWriteMask">Identify a portion of the depth-stencil buffer for writing stencil data.</param>
/// <param name="frontStencilFailOp"></param>
/// <param name="frontStencilDepthFailOp"></param>
/// <param name="frontStencilPassOp"></param>
/// <param name="frontStencilFunc"></param>
/// <param name="backStencilFailOp"></param>
/// <param name="backStencilDepthFailOp"></param>
/// <param name="backStencilPassOp"></param>
/// <param name="backStencilFunc"></param>
public DepthStencilDescription(
bool depthEnable,
bool depthWriteEnable,
ComparisonFunc depthFunc,
bool stencilEnable,
byte stencilReadMask,
byte stencilWriteMask,
StencilOp frontStencilFailOp,
StencilOp frontStencilDepthFailOp,
StencilOp frontStencilPassOp,
ComparisonFunc frontStencilFunc,
StencilOp backStencilFailOp,
StencilOp backStencilDepthFailOp,
StencilOp backStencilPassOp,
ComparisonFunc backStencilFunc)
{
DepthEnable = depthEnable;
DepthWriteMask = depthWriteEnable ? DepthWriteMask.All : DepthWriteMask.Zero;
DepthFunc = depthFunc;
StencilEnable = stencilEnable;
StencilReadMask = stencilReadMask;
StencilWriteMask = stencilWriteMask;
FrontFace.StencilFailOp = frontStencilFailOp;
FrontFace.StencilDepthFailOp = frontStencilDepthFailOp;
FrontFace.StencilPassOp = frontStencilPassOp;
FrontFace.StencilFunc = frontStencilFunc;
BackFace.StencilFailOp = backStencilFailOp;
BackFace.StencilDepthFailOp = backStencilDepthFailOp;
BackFace.StencilPassOp = backStencilPassOp;
BackFace.StencilFunc = backStencilFunc;
}
}

View File

@@ -0,0 +1,27 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
namespace Win32.Graphics.Direct3D11;
public unsafe partial struct DepthStencilOpDescription
{
/// <summary>
/// A built-in description with default values.
/// </summary>
public static readonly DepthStencilOpDescription Default = new(StencilOp.Keep, StencilOp.Keep, StencilOp.Keep, ComparisonFunc.Always);
/// <summary>
/// Initializes a new instance of the <see cref="DepthStencilOpDescription"/> struct.
/// </summary>
/// <param name="stencilFailOp">A <see cref="StencilOp"/> value that identifies the stencil operation to perform when stencil testing fails.</param>
/// <param name="stencilDepthFailOp">A <see cref="StencilOp"/> value that identifies the stencil operation to perform when stencil testing passes and depth testing fails.</param>
/// <param name="stencilPassOp">A <see cref="StencilOp"/> value that identifies the stencil operation to perform when stencil testing and depth testing both pass.</param>
/// <param name="stencilFunc">A <see cref="ComparisonFunc"/> value that identifies the function that compares stencil data against existing stencil data.</param>
public DepthStencilOpDescription(StencilOp stencilFailOp, StencilOp stencilDepthFailOp, StencilOp stencilPassOp, ComparisonFunc stencilFunc)
{
StencilFailOp = stencilFailOp;
StencilDepthFailOp = stencilDepthFailOp;
StencilPassOp = stencilPassOp;
StencilFunc = stencilFunc;
}
}

View File

@@ -0,0 +1,266 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
using System.Xml.Serialization;
using Win32.Graphics.Direct3D;
using Win32.Graphics.Dxgi.Common;
namespace Win32.Graphics.Direct3D11;
public unsafe partial struct ShaderResourceViewDescription
{
/// <summary>
/// Initializes a new instance of the <see cref="ShaderResourceViewDescription"/> struct.
/// </summary>
/// <param name="viewDimension">The <see cref="SrvDimension"/></param>
/// <param name="format">The <see cref="Format"/> to use or <see cref="Format.Unknown"/>.</param>
/// <param name="mostDetailedMip">Index of the most detailed mipmap level to use or first element for <see cref="SrvDimension.Buffer"/> or <see cref="SrvDimension.BufferExtended"/>.</param>
/// <param name="mipLevels">The maximum number of mipmap levels for the view of the texture or num elements for <see cref="SrvDimension.Buffer"/> or <see cref="SrvDimension.BufferExtended"/>.</param>
/// <param name="firstArraySlice">The index of the first texture to use in an array of textures or First2DArrayFace for <see cref="SrvDimension.TextureCubeArray"/>. </param>
/// <param name="arraySize">Number of textures in the array or num cubes for <see cref="SrvDimension.TextureCubeArray"/>. </param>
/// <param name="flags"><see cref="BufferExtendedSrvFlags"/> for <see cref="SrvDimension.BufferExtended"/>.</param>
public ShaderResourceViewDescription(
SrvDimension viewDimension,
Format format = Format.Unknown,
uint mostDetailedMip = 0,
uint mipLevels = unchecked((uint)-1),
uint firstArraySlice = 0,
uint arraySize = unchecked((uint)-1),
BufferExtendedSrvFlags flags = BufferExtendedSrvFlags.None)
{
Format = format;
ViewDimension = viewDimension;
Anonymous = default;
switch (viewDimension)
{
case SrvDimension.Buffer:
Anonymous.Buffer.FirstElement = mostDetailedMip;
Anonymous.Buffer.NumElements = mipLevels;
break;
case SrvDimension.Texture1D:
Anonymous.Texture1D.MostDetailedMip = mostDetailedMip;
Anonymous.Texture1D.MipLevels = mipLevels;
break;
case SrvDimension.Texture1DArray:
Anonymous.Texture1DArray.MostDetailedMip = mostDetailedMip;
Anonymous.Texture1DArray.MipLevels = mipLevels;
Anonymous.Texture1DArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture1DArray.ArraySize = arraySize;
break;
case SrvDimension.Texture2D:
Anonymous.Texture2D.MostDetailedMip = mostDetailedMip;
Anonymous.Texture2D.MipLevels = mipLevels;
break;
case SrvDimension.Texture2DArray:
Anonymous.Texture2DArray.MostDetailedMip = mostDetailedMip;
Anonymous.Texture2DArray.MipLevels = mipLevels;
Anonymous.Texture2DArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture2DArray.ArraySize = arraySize;
break;
case SrvDimension.Texture2DMs:
break;
case SrvDimension.Texture2DMsArray:
Anonymous.Texture2DMSArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture2DMSArray.ArraySize = arraySize;
break;
case SrvDimension.Texture3D:
Anonymous.Texture3D.MostDetailedMip = mostDetailedMip;
Anonymous.Texture3D.MipLevels = mipLevels;
break;
case SrvDimension.TextureCube:
Anonymous.TextureCube.MostDetailedMip = mostDetailedMip;
Anonymous.TextureCube.MipLevels = mipLevels;
break;
case SrvDimension.TextureCubeArray:
Anonymous.TextureCubeArray.MostDetailedMip = mostDetailedMip;
Anonymous.TextureCubeArray.MipLevels = mipLevels;
Anonymous.TextureCubeArray.First2DArrayFace = firstArraySlice;
Anonymous.TextureCubeArray.NumCubes = arraySize;
break;
case SrvDimension.BufferExtended:
Anonymous.BufferEx.FirstElement = mostDetailedMip;
Anonymous.BufferEx.NumElements = mipLevels;
BufferEx.Flags = flags;
break;
default:
break;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="ShaderResourceViewDescription"/> struct.
/// </summary>
/// <param name="buffer">Unused <see cref="ID3D11Buffer"/> </param>
/// <param name="format"></param>
/// <param name="firstElement"></param>
/// <param name="numElements"></param>
/// <param name="flags"></param>
public ShaderResourceViewDescription(
ID3D11Buffer* buffer,
Format format,
uint firstElement,
uint numElements,
BufferExtendedSrvFlags flags = BufferExtendedSrvFlags.None)
{
Format = format;
ViewDimension = SrvDimension.BufferExtended;
Anonymous = default;
Anonymous.BufferEx.FirstElement = firstElement;
Anonymous.BufferEx.NumElements = numElements;
Anonymous.BufferEx.Flags = flags;
}
public ShaderResourceViewDescription(
ID3D11Texture1D* texture,
bool isArray,
Format format = Format.Unknown,
uint mostDetailedMip = 0,
uint mipLevels = unchecked((uint)-1),
uint firstArraySlice = 0,
uint arraySize = unchecked((uint)-1))
{
ViewDimension = isArray ? SrvDimension.Texture1DArray : SrvDimension.Texture1D;
if (format == Format.Unknown
|| mipLevels == unchecked((uint)-1)
|| (arraySize == unchecked((uint)-1) && SrvDimension.Texture1DArray == ViewDimension))
{
Texture1DDescription textureDesc;
texture->GetDesc(&textureDesc);
if (format == Format.Unknown)
format = textureDesc.Format;
if (mipLevels == unchecked((uint)-1))
mipLevels = textureDesc.MipLevels - mostDetailedMip;
if (arraySize == unchecked((uint)-1))
arraySize = textureDesc.ArraySize - firstArraySlice;
}
Format = format;
Anonymous = default;
switch (ViewDimension)
{
case SrvDimension.Texture1D:
Anonymous.Texture1D.MostDetailedMip = mostDetailedMip;
Anonymous.Texture1D.MipLevels = mipLevels;
break;
case SrvDimension.Texture1DArray:
Anonymous.Texture1DArray.MostDetailedMip = mostDetailedMip;
Anonymous.Texture1DArray.MipLevels = mipLevels;
Anonymous.Texture1DArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture1DArray.ArraySize = arraySize;
break;
default:
break;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="ShaderResourceViewDescription"/> struct.
/// </summary>
/// <param name="texture"></param>
/// <param name="viewDimension"></param>
/// <param name="format"></param>
/// <param name="mostDetailedMip"></param>
/// <param name="mipLevels"></param>
/// <param name="firstArraySlice"></param>
/// <param name="arraySize"></param>
public ShaderResourceViewDescription(
ID3D11Texture2D* texture,
SrvDimension viewDimension,
Format format = Format.Unknown,
uint mostDetailedMip = 0,
uint mipLevels = unchecked((uint)-1),
uint firstArraySlice = 0,
uint arraySize = unchecked((uint)-1))
{
ViewDimension = viewDimension;
if (format == Format.Unknown
|| (mipLevels == unchecked((uint)-1) && viewDimension != SrvDimension.Texture2DMs && viewDimension != SrvDimension.Texture2DMsArray)
|| (arraySize == unchecked((uint)-1) && (SrvDimension.Texture2DArray == viewDimension || SrvDimension.Texture2DMsArray == viewDimension || SrvDimension.TextureCubeArray == viewDimension)))
{
Texture2DDescription textureDesc;
texture->GetDesc(&textureDesc);
if (format == Format.Unknown)
format = textureDesc.Format;
if (unchecked((uint)-1) == mipLevels)
mipLevels = textureDesc.MipLevels - mostDetailedMip;
if (unchecked((uint)-1) == arraySize)
{
arraySize = textureDesc.ArraySize - firstArraySlice;
if (viewDimension == SrvDimension.TextureCubeArray)
arraySize /= 6;
}
}
Format = format;
Anonymous = default;
switch (viewDimension)
{
case SrvDimension.Texture2D:
Anonymous.Texture2D.MostDetailedMip = mostDetailedMip;
Anonymous.Texture2D.MipLevels = mipLevels;
break;
case SrvDimension.Texture2DArray:
Anonymous.Texture2DArray.MostDetailedMip = mostDetailedMip;
Anonymous.Texture2DArray.MipLevels = mipLevels;
Anonymous.Texture2DArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture2DArray.ArraySize = arraySize;
break;
case SrvDimension.Texture2DMs:
break;
case SrvDimension.Texture2DMsArray:
Anonymous.Texture2DMSArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture2DMSArray.ArraySize = arraySize;
break;
case SrvDimension.TextureCube:
Anonymous.TextureCube.MostDetailedMip = mostDetailedMip;
Anonymous.TextureCube.MipLevels = mipLevels;
break;
case SrvDimension.TextureCubeArray:
Anonymous.TextureCubeArray.MostDetailedMip = mostDetailedMip;
Anonymous.TextureCubeArray.MipLevels = mipLevels;
Anonymous.TextureCubeArray.First2DArrayFace = firstArraySlice;
Anonymous.TextureCubeArray.NumCubes = arraySize;
break;
default:
break;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="ShaderResourceViewDescription"/> struct.
/// </summary>
/// <param name="texture"></param>
/// <param name="format"></param>
/// <param name="mostDetailedMip"></param>
/// <param name="mipLevels"></param>
public ShaderResourceViewDescription(
ID3D11Texture3D* texture,
Format format = Format.Unknown,
uint mostDetailedMip = 0,
uint mipLevels = unchecked((uint)-1))
{
ViewDimension = SrvDimension.Texture3D;
if (format == Format.Unknown || mipLevels == unchecked((uint)-1))
{
Texture3DDescription textureDesc;
texture->GetDesc(&textureDesc);
if (format == Format.Unknown)
format = textureDesc.Format;
if (mipLevels == unchecked((uint)-1))
mipLevels = textureDesc.MipLevels - mostDetailedMip;
}
Format = format;
Anonymous = default;
Anonymous.Texture3D.MostDetailedMip = mostDetailedMip;
Anonymous.Texture3D.MipLevels = mipLevels;
}
}

View File

@@ -0,0 +1,217 @@
// Copyright © Amer Koleci and Contributors.
// Licensed under the MIT License (MIT). See LICENSE in the repository root for more information.
using System.Xml.Serialization;
using Win32.Graphics.Dxgi.Common;
namespace Win32.Graphics.Direct3D11;
public unsafe partial struct UnorderedAccessViewDescription
{
/// <summary>
/// Initializes a new instance of the <see cref="UnorderedAccessViewDescription"/> struct.
/// </summary>
/// <param name="viewDimension">The <see cref="UavDimension"/></param>
/// <param name="format">The <see cref="Format"/> to use or <see cref="Format.Unknown"/>.</param>
/// <param name="mipSlice">The index of the mipmap level to use mip slice or FirstElement for BUFFER.</param>
/// <param name="firstArraySlice">The index of the first texture to use in an array of textures or NumElements for BUFFER or FirstWSlice for TEXTURE3D.</param>
/// <param name="arraySize">Number of textures in the array or WSize for TEXTURE3D.</param>
/// <param name="flags"><see cref="BufferUnorderedAccessViewFlags"/> options flags for the resource.</param>
public UnorderedAccessViewDescription(
UavDimension viewDimension,
Format format = Format.Unknown,
uint mipSlice = 0,
uint firstArraySlice = 0,
uint arraySize = unchecked((uint)-1),
BufferUavFlags flags = BufferUavFlags.None)
{
Format = format;
ViewDimension = viewDimension;
Anonymous = default;
switch (viewDimension)
{
case UavDimension.Buffer:
Anonymous.Buffer.FirstElement = mipSlice;
Anonymous.Buffer.NumElements = firstArraySlice;
Anonymous.Buffer.Flags = flags;
break;
case UavDimension.Texture1D:
Anonymous.Texture1D.MipSlice = mipSlice;
break;
case UavDimension.Texture1DArray:
Anonymous.Texture1DArray.MipSlice = mipSlice;
Anonymous.Texture1DArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture1DArray.ArraySize = arraySize;
break;
case UavDimension.Texture2D:
Anonymous.Texture2D.MipSlice = mipSlice;
break;
case UavDimension.Texture2DArray:
Anonymous.Texture2DArray.MipSlice = mipSlice;
Anonymous.Texture2DArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture2DArray.ArraySize = arraySize;
break;
case UavDimension.Texture3D:
Anonymous.Texture3D.MipSlice = mipSlice;
Anonymous.Texture3D.FirstWSlice = firstArraySlice;
Anonymous.Texture3D.WSize = arraySize;
break;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="UnorderedAccessViewDescription"/> struct.
/// </summary>
/// <param name="buffer"></param>
/// <param name="format"></param>
/// <param name="firstElement"></param>
/// <param name="numElements"></param>
/// <param name="flags"><see cref="BufferUnorderedAccessViewFlags"/> options flags for the resource.</param>
public UnorderedAccessViewDescription(
ID3D11Buffer* buffer,
Format format,
uint firstElement = 0,
uint numElements = 0,
BufferUavFlags flags = BufferUavFlags.None)
{
Format = format;
ViewDimension = UavDimension.Buffer;
Anonymous = default;
Anonymous.Buffer.FirstElement = firstElement;
Anonymous.Buffer.NumElements = numElements;
Anonymous.Buffer.Flags = flags;
}
/// <summary>
/// Initializes a new instance of the <see cref="UnorderedAccessViewDescription"/> struct.
/// </summary>
/// <param name="texture"></param>
/// <param name="isArray"></param>
/// <param name="format"></param>
/// <param name="mipSlice"></param>
/// <param name="firstArraySlice"></param>
/// <param name="arraySize"></param>
public UnorderedAccessViewDescription(
ID3D11Texture1D* texture,
bool isArray,
Format format = Format.Unknown,
uint mipSlice = 0,
uint firstArraySlice = 0,
uint arraySize = unchecked((uint)-1))
{
ViewDimension = isArray ? UavDimension.Texture1DArray : UavDimension.Texture1D;
if (format == Format.Unknown
|| (arraySize == unchecked((uint)-1) && (UavDimension.Texture1DArray == ViewDimension)))
{
Texture1DDescription textureDesc;
texture->GetDesc(&textureDesc);
if (format == Format.Unknown)
format = textureDesc.Format;
if (arraySize == unchecked((uint)-1))
arraySize = textureDesc.ArraySize - firstArraySlice;
}
Format = format;
Anonymous = default;
switch (ViewDimension)
{
case UavDimension.Texture1D:
Anonymous.Texture1D.MipSlice = mipSlice;
break;
case UavDimension.Texture1DArray:
Anonymous.Texture1DArray.MipSlice = mipSlice;
Anonymous.Texture1DArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture1DArray.ArraySize = arraySize;
break;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="UnorderedAccessViewDescription"/> struct.
/// </summary>
/// <param name="texture"></param>
/// <param name="viewDimension"></param>
/// <param name="format"></param>
/// <param name="mipSlice"></param>
/// <param name="firstArraySlice"></param>
/// <param name="arraySize"></param>
public UnorderedAccessViewDescription(
ID3D11Texture2D* texture,
UavDimension viewDimension,
Format format = Format.Unknown,
uint mipSlice = 0,
uint firstArraySlice = 0,
uint arraySize = unchecked((uint)-1))
{
ViewDimension = viewDimension;
if (format == Format.Unknown
|| (arraySize == unchecked((uint)-1) && (viewDimension == UavDimension.Texture2DArray)))
{
Texture2DDescription textureDesc;
texture->GetDesc(&textureDesc);
if (format == Format.Unknown)
format = textureDesc.Format;
if (arraySize == unchecked((uint)-1))
arraySize = textureDesc.ArraySize - firstArraySlice;
}
Format = format;
Anonymous = default;
switch (viewDimension)
{
case UavDimension.Texture2D:
Anonymous.Texture2D.MipSlice = mipSlice;
break;
case UavDimension.Texture2DArray:
Anonymous.Texture2DArray.MipSlice = mipSlice;
Anonymous.Texture2DArray.FirstArraySlice = firstArraySlice;
Anonymous.Texture2DArray.ArraySize = arraySize;
break;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="UnorderedAccessViewDescription"/> struct.
/// </summary>
/// <param name="texture"></param>
/// <param name="viewDimension"></param>
/// <param name="format"></param>
/// <param name="mipSlice"></param>
/// <param name="firstWSlice"></param>
/// <param name="wSize"></param>
public UnorderedAccessViewDescription(
ID3D11Texture3D* texture,
UavDimension viewDimension,
Format format = Format.Unknown,
uint mipSlice = 0,
uint firstWSlice = 0,
uint wSize = unchecked((uint)-1))
{
ViewDimension = viewDimension;
if (format == Format.Unknown || wSize == unchecked((uint)-1))
{
Texture3DDescription textureDesc;
texture->GetDesc(&textureDesc);
if (format == Format.Unknown)
format = textureDesc.Format;
if (wSize == unchecked((uint)-1))
wSize = textureDesc.Depth - firstWSlice;
}
Format = format;
Anonymous = default;
Anonymous.Texture3D.MipSlice = mipSlice;
Anonymous.Texture3D.FirstWSlice = firstWSlice;
Anonymous.Texture3D.WSize = wSize;
}
}