本文整理汇总了C#中SlimDX.Direct3D11.Buffer.Dispose方法的典型用法代码示例。如果您正苦于以下问题:C# Buffer.Dispose方法的具体用法?C# Buffer.Dispose怎么用?C# Buffer.Dispose使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SlimDX.Direct3D11.Buffer
的用法示例。
在下文中一共展示了Buffer.Dispose方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PrefixSumArray
public UnorderedAccessView PrefixSumArray(Buffer constantBuffer, UnorderedAccessView trisCountUAV)
{
int arrayLength = trisCountUAV.Description.ElementCount;
int batchSize = trisCountUAV.Description.ElementCount / arrayLength;
if (!IsPowerOfTwo(trisCountUAV.Description.ElementCount))
throw new Exception("Input array length is not power of two.");
Buffer buffer = new Buffer(graphicsDevice, new BufferDescription()
{
BindFlags = BindFlags.UnorderedAccess,
CpuAccessFlags = CpuAccessFlags.None,
OptionFlags = ResourceOptionFlags.StructuredBuffer,
Usage = ResourceUsage.Default,
SizeInBytes = Marshal.SizeOf(typeof(int)) * trisCountUAV.Description.ElementCount,
StructureByteStride = Marshal.SizeOf(typeof(int))
});
UnorderedAccessView bufferUAV = new UnorderedAccessView(graphicsDevice, buffer);
Buffer output = new Buffer(graphicsDevice, new BufferDescription()
{
BindFlags = BindFlags.UnorderedAccess,
CpuAccessFlags = CpuAccessFlags.None,
OptionFlags = ResourceOptionFlags.StructuredBuffer,
Usage = ResourceUsage.Default,
SizeInBytes = Marshal.SizeOf(typeof(int)) * trisCountUAV.Description.ElementCount,
StructureByteStride = Marshal.SizeOf(typeof(int))
});
UnorderedAccessView outputUAV = new UnorderedAccessView(graphicsDevice, output);
DirectComputeConstantBuffer constantBufferContainer = new DirectComputeConstantBuffer()
{
PrefixSize = 4 * threadBlockSize,
PrefixN = (batchSize * arrayLength) / (4 * threadBlockSize),
PrefixArrayLength = arrayLength / (4 * threadBlockSize)
};
DataBox data = graphicsDevice.ImmediateContext.MapSubresource(constantBuffer, MapMode.WriteDiscard, MapFlags.None);
data.Data.Write<DirectComputeConstantBuffer>(constantBufferContainer);
graphicsDevice.ImmediateContext.UnmapSubresource(constantBuffer, 0);
Vector3 gridDim = new Vector3((batchSize * arrayLength) / (4 * threadBlockSize), 1, 1);
Vector3 gridDimShared2 = new Vector3((int)Math.Ceiling(((batchSize * arrayLength) / (4 * threadBlockSize)) / (double)threadBlockSize), 1, 1);
graphicsDevice.ImmediateContext.ComputeShader.Set(computeScanExclusiveShared);
graphicsDevice.ImmediateContext.ComputeShader.SetConstantBuffer(constantBuffer, 0);
graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(trisCountUAV, 2);
graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(outputUAV, 3);
graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(bufferUAV, 4);
graphicsDevice.ImmediateContext.Dispatch((int)gridDim.X, (int)gridDim.Y, (int)gridDim.Z);
graphicsDevice.ImmediateContext.ComputeShader.Set(computeScanExclusiveShared2);
graphicsDevice.ImmediateContext.Dispatch((int)gridDimShared2.X, (int)gridDimShared2.Y, (int)gridDimShared2.Z);
graphicsDevice.ImmediateContext.ComputeShader.Set(computeUniformUpdate);
graphicsDevice.ImmediateContext.Dispatch((int)gridDim.X, (int)gridDim.Y, (int)gridDim.Z);
buffer.Dispose();
bufferUAV.Dispose();
return outputUAV;
}
示例2: Main
static void Main()
{
var form = new RenderForm("SlimDX - MiniTri Direct3D 11 Sample");
var desc = new SwapChainDescription()
{
BufferCount = 1,
ModeDescription = new ModeDescription(form.ClientSize.Width, form.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
IsWindowed = true,
OutputHandle = form.Handle,
SampleDescription = new SampleDescription(1, 0),
SwapEffect = SwapEffect.Discard,
Usage = Usage.RenderTargetOutput
};
Device device;
SwapChain swapChain;
Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain);
device.Factory.SetWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);
Texture2D backBuffer = Texture2D.FromSwapChain<Texture2D>(swapChain, 0);
var renderView = new RenderTargetView(device, backBuffer);
var bytecode = ShaderBytecode.CompileFromFile("MiniTri.fx", "fx_5_0", ShaderFlags.None, EffectFlags.None);
var effect = new Effect(device, bytecode);
var technique = effect.GetTechniqueByIndex(0);
var pass = technique.GetPassByIndex(0);
var layout = new InputLayout(device, pass.Description.Signature, new[] {
new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0),
new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 16, 0)
});
var stream = new DataStream(3 * 32, true, true);
stream.WriteRange(new[] {
new Vector4(0.0f, 0.5f, 0.5f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f),
new Vector4(0.5f, -0.5f, 0.5f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f),
new Vector4(-0.5f, -0.5f, 0.5f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f)
});
stream.Position = 0;
var vertices = new SlimDX.Direct3D11.Buffer(device, stream, new BufferDescription()
{
BindFlags = BindFlags.VertexBuffer,
CpuAccessFlags = CpuAccessFlags.None,
OptionFlags = ResourceOptionFlags.None,
SizeInBytes = 3 * 32,
Usage = ResourceUsage.Default
});
stream.Dispose();
device.ImmediateContext.OutputMerger.SetTargets(renderView);
device.ImmediateContext.Rasterizer.SetViewports(new Viewport(0, 0, form.ClientSize.Width, form.ClientSize.Height, 0.0f, 1.0f));
MessagePump.Run(form, () =>
{
device.ImmediateContext.ClearRenderTargetView(renderView, Color.Black);
device.ImmediateContext.InputAssembler.InputLayout = layout;
device.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
device.ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, 32, 0));
for (int i = 0; i < technique.Description.PassCount; ++i)
{
pass.Apply(device.ImmediateContext);
device.ImmediateContext.Draw(3, 0);
}
swapChain.Present(0, PresentFlags.None);
});
bytecode.Dispose();
vertices.Dispose();
layout.Dispose();
effect.Dispose();
renderView.Dispose();
backBuffer.Dispose();
device.Dispose();
swapChain.Dispose();
}
示例3: Generate
//.........这里部分代码省略.........
UnorderedAccessView offsetsUAV = new UnorderedAccessView(graphicsDevice, offsetsBuffer);
Buffer trisCountBuffer = new Buffer(graphicsDevice, new BufferDescription()
{
BindFlags = BindFlags.UnorderedAccess,
CpuAccessFlags = CpuAccessFlags.None,
OptionFlags = ResourceOptionFlags.StructuredBuffer,
Usage = ResourceUsage.Default,
SizeInBytes = Marshal.SizeOf(typeof(int)) * nearestCount,
StructureByteStride = Marshal.SizeOf(typeof(int))
});
UnorderedAccessView trisCountUAV = new UnorderedAccessView(graphicsDevice, trisCountBuffer);
graphicsDevice.ImmediateContext.ClearUnorderedAccessView(trisCountUAV, new int[] { 0, 0, 0, 0 });
graphicsDevice.ImmediateContext.ComputeShader.Set(computeMarchingCubesCases);
graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(offsetsUAV, 1);
graphicsDevice.ImmediateContext.ComputeShader.SetUnorderedAccessView(trisCountUAV, 2);
graphicsDevice.ImmediateContext.Dispatch((int)gridDimD.X, (int)gridDimD.Y, (int)gridDimD.Z);
UnorderedAccessView prefixSumsUAV = prefixScan.PrefixSumArray(constantBuffer, trisCountUAV);
int lastTrisCount = DirectComputeBufferHelper.CopyBuffer<int>(graphicsDevice, trisCountBuffer, nearestCount - 1, 1)[0];
int lastPrefixSum = DirectComputeBufferHelper.CopyBuffer<int>(graphicsDevice, prefixSumsUAV.Resource, nearestCount - 1, 1)[0];
int totalVerticesCount = (lastTrisCount + lastPrefixSum) * 3;
if (totalVerticesCount > 0)
{
if (container.Geometry != null)
container.Geometry.Dispose();
container.VertexCount = totalVerticesCount;
container.Geometry = new Buffer(graphicsDevice, new BufferDescription()
{
BindFlags = BindFlags.VertexBuffer,
CpuAccessFlags = CpuAccessFlags.None,
OptionFlags = ResourceOptionFlags.None,
SizeInBytes = Marshal.SizeOf(typeof(VoxelMeshVertex)) * totalVerticesCount,
Usage = ResourceUsage.Default
});
Buffer verticesBuffer = new Buffer(graphicsDevice, new BufferDescription()
{
BindFlags = BindFlags.UnorderedAccess,
CpuAccessFlags = CpuAccessFlags.None,
OptionFlags = ResourceOptionFlags.StructuredBuffer,
Usage = ResourceUsage.Default,
SizeInBytes = Marshal.SizeOf(typeof(VoxelMeshVertex)) * totalVerticesCount,
StructureByteStride = Marshal.SizeOf(typeof(VoxelMeshVertex))
});
UnorderedAccessView verticesUAV = new UnorderedAccessView(graphicsDevice, verticesBuffer);
constantBufferContainer = new DirectComputeConstantBuffer()
{
Width = width,
Height = height,
Depth = depth,
NearestWidth = nearestW,
NearestHeight = nearestH,
NearestDepth = nearestD
示例4: Main
static void Main(string[] args)
{
const int elementCount = 16;
const int bufferSizeInBytes = elementCount * sizeof(float);
D3D.Device device = new D3D.Device(D3D.DriverType.Hardware, D3D.DeviceCreationFlags.Debug);
// The input to the computation will be a constant buffer containing
// integers (in floating point representation) from 1 to numberOfElements,
// inclusive. The compute shader itself will double these values and write
// them to the output buffer.
D3D.BufferDescription inputBufferDescription = new D3D.BufferDescription
{
BindFlags = D3D.BindFlags.ConstantBuffer,
CpuAccessFlags = D3D.CpuAccessFlags.Write,
OptionFlags = D3D.ResourceOptionFlags.None,
SizeInBytes = bufferSizeInBytes,
StructureByteStride = sizeof(float),
Usage = D3D.ResourceUsage.Dynamic,
};
D3D.Buffer inputBuffer = new D3D.Buffer(device, inputBufferDescription);
DataBox input = device.ImmediateContext.MapSubresource(inputBuffer, 0, bufferSizeInBytes, D3D.MapMode.WriteDiscard, D3D.MapFlags.None);
for (int value = 1; value <= elementCount; ++value)
input.Data.Write((float)value);
device.ImmediateContext.UnmapSubresource(inputBuffer, 0);
// A staging buffer is used to copy data between the CPU and GPU; the output
// buffer (which gets the computation results) cannot be mapped directly.
D3D.BufferDescription stagingBufferDescription = new D3D.BufferDescription
{
BindFlags = D3D.BindFlags.None,
CpuAccessFlags = D3D.CpuAccessFlags.Read,
OptionFlags = D3D.ResourceOptionFlags.StructuredBuffer,
SizeInBytes = bufferSizeInBytes,
StructureByteStride = sizeof(float),
Usage = D3D.ResourceUsage.Staging,
};
D3D.Buffer stagingBuffer = new D3D.Buffer(device, stagingBufferDescription);
// The output buffer itself, and the view required to bind it to the pipeline.
D3D.BufferDescription outputBufferDescription = new D3D.BufferDescription
{
BindFlags = D3D.BindFlags.UnorderedAccess | D3D.BindFlags.ShaderResource,
OptionFlags = D3D.ResourceOptionFlags.StructuredBuffer,
SizeInBytes = bufferSizeInBytes,
StructureByteStride = sizeof(float),
Usage = D3D.ResourceUsage.Default,
};
D3D.Buffer outputBuffer = new D3D.Buffer(device, outputBufferDescription);
D3D.UnorderedAccessViewDescription outputViewDescription = new D3D.UnorderedAccessViewDescription
{
ElementCount = elementCount,
Format = DXGI.Format.Unknown,
Dimension = D3D.UnorderedAccessViewDimension.Buffer
};
D3D.UnorderedAccessView outputView = new D3D.UnorderedAccessView(device, outputBuffer, outputViewDescription);
// Compile the shader.
ShaderBytecode computeShaderCode = ShaderBytecode.CompileFromFile("BasicComputeShader.hlsl", "main", "cs_4_0", ShaderFlags.None, EffectFlags.None);
D3D.ComputeShader computeShader = new D3D.ComputeShader(device, computeShaderCode);
device.ImmediateContext.ComputeShader.Set(computeShader);
device.ImmediateContext.ComputeShader.SetUnorderedAccessView(outputView, 0);
device.ImmediateContext.ComputeShader.SetConstantBuffer(inputBuffer, 0);
// Compute shaders execute on multiple threads at the same time. Those execution
// threads are grouped; Dispatch() indicates how many groups in the X, Y and Z
// dimension will be utilized. The shader itself specified how many threads per
// group (also in X, Y and Z dimensions) to use via the [numthreads] attribute.
// In this sample, one thread group will be used with 16 threads, each thread
// will process one element of the input data.
device.ImmediateContext.Dispatch(1, 1, 1);
device.ImmediateContext.CopyResource(outputBuffer, stagingBuffer);
DataBox output = device.ImmediateContext.MapSubresource(stagingBuffer, 0, sizeof(float) * elementCount, D3D.MapMode.Read, D3D.MapFlags.None);
Console.Write("Results:");
for (int index = 0; index < elementCount; ++index)
Console.Write(" {0}", output.Data.Read<float>());
device.ImmediateContext.UnmapSubresource(outputBuffer, 0);
Console.WriteLine();
computeShader.Dispose();
outputView.Dispose();
outputBuffer.Dispose();
stagingBuffer.Dispose();
inputBuffer.Dispose();
device.Dispose();
}
示例5: TestManagedDXDevice
private static void TestManagedDXDevice()
{
Device device;
SwapChain swapChain;
ShaderSignature inputSignature;
VertexShader vertexShader;
PixelShader pixelShader;
var form = new RenderForm("Tutorial 3: Simple Triangle");
var description = new SwapChainDescription()
{
BufferCount = 2,
Usage = Usage.RenderTargetOutput,
OutputHandle = form.Handle,
IsWindowed = true,
ModeDescription = new ModeDescription(0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm),
SampleDescription = new SampleDescription(1, 0),
Flags = SwapChainFlags.AllowModeSwitch,
SwapEffect = SwapEffect.Discard
};
Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, description, out device, out swapChain);
// create a view of our render target, which is the backbuffer of the swap chain we just created
RenderTargetView renderTarget;
using (var resource = Resource.FromSwapChain<Texture2D>(swapChain, 0))
renderTarget = new RenderTargetView(device, resource);
// setting a viewport is required if you want to actually see anything
var context = device.ImmediateContext;
var viewport = new Viewport(0.0f, 0.0f, form.ClientSize.Width, form.ClientSize.Height);
context.OutputMerger.SetTargets(renderTarget);
context.Rasterizer.SetViewports(viewport);
// load and compile the vertex shader
using (var bytecode = ShaderBytecode.CompileFromFile("triangle.fx", "VShader", "vs_4_0", ShaderFlags.None, EffectFlags.None))
{
inputSignature = ShaderSignature.GetInputSignature(bytecode);
vertexShader = new VertexShader(device, bytecode);
}
// load and compile the pixel shader
using (var bytecode = ShaderBytecode.CompileFromFile("triangle.fx", "PShader", "ps_4_0", ShaderFlags.None, EffectFlags.None))
pixelShader = new PixelShader(device, bytecode);
// create test vertex data, making sure to rewind the stream afterward
var vertices = new DataStream(12 * 3, true, true);
vertices.Write(new Vector3(0.0f, 0.5f, 0.5f));
vertices.Write(new Vector3(0.5f, -0.5f, 0.5f));
vertices.Write(new Vector3(-0.5f, -0.5f, 0.5f));
vertices.Position = 0;
// create the vertex layout and buffer
var elements = new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0) };
var layout = new InputLayout(device, inputSignature, elements);
var vertexBuffer = new SlimDX.Direct3D11.Buffer(device, vertices, 12 * 3, ResourceUsage.Default, BindFlags.VertexBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0);
// configure the Input Assembler portion of the pipeline with the vertex data
context.InputAssembler.InputLayout = layout;
context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertexBuffer, 12, 0));
// set the shaders
context.VertexShader.Set(vertexShader);
context.PixelShader.Set(pixelShader);
// prevent DXGI handling of alt+enter, which doesn't work properly with Winforms
using (var factory = swapChain.GetParent<Factory>())
factory.SetWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAltEnter);
// handle alt+enter ourselves
form.KeyDown += (o, e) =>
{
if (e.Alt && e.KeyCode == Keys.Enter)
swapChain.IsFullScreen = !swapChain.IsFullScreen;
};
// handle form size changes
form.UserResized += (o, e) =>
{
renderTarget.Dispose();
swapChain.ResizeBuffers(2, 0, 0, Format.R8G8B8A8_UNorm, SwapChainFlags.AllowModeSwitch);
using (var resource = Resource.FromSwapChain<Texture2D>(swapChain, 0))
renderTarget = new RenderTargetView(device, resource);
context.OutputMerger.SetTargets(renderTarget);
};
MessagePump.Run(form, () =>
{
// clear the render target to a soothing blue
context.ClearRenderTargetView(renderTarget, new Color4(0.5f, 0.5f, 1.0f));
// draw the triangle
context.Draw(3, 0);
swapChain.Present(0, PresentFlags.None);
});
// clean up all resources
//.........这里部分代码省略.........