Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Diagnostics;
- using System.Windows.Forms;
- using SharpDX;
- using SharpDX.D3DCompiler;
- using SharpDX.Direct3D;
- using SharpDX.Direct3D11;
- using SharpDX.DXGI;
- using SharpDX.Windows;
- using Buffer = SharpDX.Direct3D11.Buffer;
- using Device = SharpDX.Direct3D11.Device;
- using MapFlags = SharpDX.Direct3D11.MapFlags;
- namespace MiniCube
- {
- internal static class Program
- {
- private static void Main()
- {
- var form = new RenderForm("SharpDX - MiniCube Direct3D11 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
- };
- var bdesc = new BufferDescription()
- {
- BindFlags = BindFlags.ShaderResource,
- CpuAccessFlags = CpuAccessFlags.None,
- OptionFlags = ResourceOptionFlags.BufferStructured,
- SizeInBytes = 16 * 4,
- StructureByteStride = 16,
- Usage = ResourceUsage.Default
- };
- //Create 4 dummy colors
- DataStream ds = new DataStream(16 * 4, true, true);
- ds.Write<Color4>(Color.Blue);
- ds.Write<Color4>(Color.Gray);
- ds.Write<Color4>(Color.Green);
- ds.Write<Color4>(Color.Yellow);
- ds.Position = 0;
- Device device;
- SwapChain swapChain;
- Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain);
- var context = device.ImmediateContext;
- var factory = swapChain.GetParent<Factory>();
- factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);
- // Compile Vertex and Pixel shaders
- var vertexShaderByteCode = ShaderBytecode.CompileFromFile("MiniCube.fx", "VS_B", "vs_4_0");
- var vertexShader = new VertexShader(device, vertexShaderByteCode);
- var pixelShaderByteCode = ShaderBytecode.CompileFromFile("MiniCube.fx", "PS_B", "ps_4_0");
- var pixelShader = new PixelShader(device, pixelShaderByteCode);
- var sbuffer = new Buffer(device, ds, bdesc);
- var srv = new ShaderResourceView(device, sbuffer);
- context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;
- context.VertexShader.Set(vertexShader);
- context.PixelShader.Set(pixelShader);
- context.VertexShader.SetShaderResource(5, srv);
- bool userResized = true;
- Texture2D backBuffer = null;
- RenderTargetView renderView = null;
- form.UserResized += (sender, args) => userResized = true;
- RenderLoop.Run(form, () =>
- {
- if (userResized)
- {
- Utilities.Dispose(ref backBuffer); Utilities.Dispose(ref renderView);
- swapChain.ResizeBuffers(desc.BufferCount, form.ClientSize.Width, form.ClientSize.Height, Format.Unknown, SwapChainFlags.None);
- backBuffer = Texture2D.FromSwapChain<Texture2D>(swapChain, 0);
- renderView = new RenderTargetView(device, backBuffer);
- context.Rasterizer.SetViewport(new Viewport(0, 0, form.ClientSize.Width, form.ClientSize.Height, 0.0f, 1.0f));
- context.OutputMerger.SetTargets(renderView);
- userResized = false;
- }
- context.ClearRenderTargetView(renderView, Color.Black);
- context.Draw(4, 0);
- swapChain.Present(0, PresentFlags.None);
- });
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment