Guest User

Untitled

a guest
Nov 14th, 2013
803
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.08 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3. using System.Windows.Forms;
  4.  
  5. using SharpDX;
  6. using SharpDX.D3DCompiler;
  7. using SharpDX.Direct3D;
  8. using SharpDX.Direct3D11;
  9. using SharpDX.DXGI;
  10. using SharpDX.Windows;
  11. using Buffer = SharpDX.Direct3D11.Buffer;
  12. using Device = SharpDX.Direct3D11.Device;
  13. using MapFlags = SharpDX.Direct3D11.MapFlags;
  14.  
  15. namespace MiniCube
  16. {
  17.     internal static class Program
  18.     {
  19.         private static void Main()
  20.         {
  21.             var form = new RenderForm("SharpDX - MiniCube Direct3D11 Sample");
  22.             var desc = new SwapChainDescription()
  23.             {
  24.                 BufferCount = 1,
  25.                 ModeDescription =
  26.                     new ModeDescription(form.ClientSize.Width, form.ClientSize.Height,
  27.                                         new Rational(60, 1), Format.R8G8B8A8_UNorm),
  28.                 IsWindowed = true,
  29.                 OutputHandle = form.Handle,
  30.                 SampleDescription = new SampleDescription(1, 0),
  31.                 SwapEffect = SwapEffect.Discard,
  32.                 Usage = Usage.RenderTargetOutput
  33.             };
  34.  
  35.             var bdesc = new BufferDescription()
  36.             {
  37.                 BindFlags = BindFlags.ShaderResource,
  38.                 CpuAccessFlags = CpuAccessFlags.None,
  39.                 OptionFlags = ResourceOptionFlags.BufferStructured,
  40.                 SizeInBytes = 16 * 4,
  41.                 StructureByteStride = 16,
  42.                 Usage = ResourceUsage.Default
  43.             };
  44.  
  45.             //Create 4 dummy colors
  46.             DataStream ds = new DataStream(16 * 4, true, true);
  47.             ds.Write<Color4>(Color.Blue);
  48.             ds.Write<Color4>(Color.Gray);
  49.             ds.Write<Color4>(Color.Green);
  50.             ds.Write<Color4>(Color.Yellow);
  51.             ds.Position = 0;
  52.  
  53.             Device device;
  54.             SwapChain swapChain;
  55.             Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain);
  56.             var context = device.ImmediateContext;
  57.             var factory = swapChain.GetParent<Factory>();
  58.             factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);
  59.  
  60.             // Compile Vertex and Pixel shaders
  61.             var vertexShaderByteCode = ShaderBytecode.CompileFromFile("MiniCube.fx", "VS_B", "vs_4_0");
  62.             var vertexShader = new VertexShader(device, vertexShaderByteCode);
  63.  
  64.             var pixelShaderByteCode = ShaderBytecode.CompileFromFile("MiniCube.fx", "PS_B", "ps_4_0");
  65.             var pixelShader = new PixelShader(device, pixelShaderByteCode);
  66.  
  67.             var sbuffer = new Buffer(device, ds, bdesc);
  68.             var srv = new ShaderResourceView(device, sbuffer);
  69.  
  70.             context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;
  71.             context.VertexShader.Set(vertexShader);
  72.             context.PixelShader.Set(pixelShader);
  73.  
  74.             context.VertexShader.SetShaderResource(5, srv);
  75.  
  76.             bool userResized = true;
  77.             Texture2D backBuffer = null;
  78.             RenderTargetView renderView = null;
  79.             form.UserResized += (sender, args) => userResized = true;
  80.  
  81.             RenderLoop.Run(form, () =>
  82.             {
  83.                 if (userResized)
  84.                 {
  85.                     Utilities.Dispose(ref backBuffer); Utilities.Dispose(ref renderView);
  86.                     swapChain.ResizeBuffers(desc.BufferCount, form.ClientSize.Width, form.ClientSize.Height, Format.Unknown, SwapChainFlags.None);
  87.                     backBuffer = Texture2D.FromSwapChain<Texture2D>(swapChain, 0);
  88.                     renderView = new RenderTargetView(device, backBuffer);
  89.                     context.Rasterizer.SetViewport(new Viewport(0, 0, form.ClientSize.Width, form.ClientSize.Height, 0.0f, 1.0f));
  90.                     context.OutputMerger.SetTargets(renderView);
  91.                     userResized = false;
  92.                 }
  93.                 context.ClearRenderTargetView(renderView, Color.Black);
  94.                 context.Draw(4, 0);
  95.                 swapChain.Present(0, PresentFlags.None);
  96.             });
  97.         }
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment