private void PrepareLocalSpriteBufferData(DX11RenderContext context) { //make sure arrays are big enough EnsureArraySize(ref this.FBufferSpritesPosition, FTotalSpritesPositionCount); EnsureArraySize(ref this.FBufferSpritesSize, FTotalSpritesSizeCount); EnsureArraySize(ref this.FBufferSpritesColor, FTotalSpritesColorCount); var descriptions = FMainBuffer.SpritesDescriptions; var geoIndex = 0; var posIndex = 0; var sizeIndex = 0; var colIndex = 0; foreach (var desc in descriptions) { //null geometry var geometry = desc.GetGeometry(context); //assign drawer var nullGeometry = (DX11NullGeometry)geometry.ShallowCopy(); var drawer = new DX11NullInstancedDrawer(); drawer.VertexCount = desc.SpriteCount; drawer.InstanceCount = 1; nullGeometry.AssignDrawer(drawer); geometry = nullGeometry; this.FSpritesGeometryOutput[geoIndex++][context] = geometry; CopyToLocalBuffer(desc.Positions, FBufferSpritesPosition, ref posIndex); CopyToLocalBuffer(desc.Sizes, FBufferSpritesSize, ref sizeIndex); CopyToLocalBuffer(desc.Colors, FBufferSpritesColor, ref colIndex); } }
public DX11NullGeometry NullDrawer(NullGeometry settings) { DX11NullInstancedDrawer drawer = new DX11NullInstancedDrawer(); drawer.VertexCount = Math.Max(settings.VertexCount, 1); drawer.InstanceCount = Math.Max(settings.InstanceCount, 1); DX11NullGeometry geom = new DX11NullGeometry(this.device, drawer); geom.Topology = settings.Topology; geom.InputLayout = new InputElement[0]; geom.HasBoundingBox = false; return(geom); }
public void Update(DX11RenderContext context) { for (int i = 0; i < this.FOutput.SliceCount; i++) { if (this.FInvalidate || !this.FOutput[i].Contains(context)) { if (this.FOutput[i].Contains(context)) { this.FOutput[i].Dispose(context); } DX11NullInstancedDrawer drawer = new DX11NullInstancedDrawer(); drawer.VertexCount = Math.Max(this.FInVertexCount[i], 1); drawer.InstanceCount = Math.Max(this.FInInstanceCount[i], 1); DX11NullGeometry geom = new DX11NullGeometry(context, drawer); geom.Topology = this.FInTopology[i]; geom.InputLayout = new InputElement[0]; geom.HasBoundingBox = false; this.FOutput[i][context] = geom; } } }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); RenderForm form = new RenderForm("Kinect Simple point cloud view sample"); RenderDevice device = new RenderDevice(SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport | DeviceCreationFlags.Debug); RenderContext context = new RenderContext(device); DX11SwapChain swapChain = DX11SwapChain.FromHandle(device, form.Handle); VertexShader vertexShader = ShaderCompiler.CompileFromFile <VertexShader>(device, "ColoredPointCloudView.fx", "VS"); PixelShader pixelShader = ShaderCompiler.CompileFromFile <PixelShader>(device, "ColoredPointCloudView.fx", "PS"); DX11NullInstancedDrawer nulldrawer = new DX11NullInstancedDrawer(); nulldrawer.VertexCount = Consts.DepthWidth; nulldrawer.InstanceCount = Consts.DepthHeight; DX11NullGeometry nullGeom = new DX11NullGeometry(device, nulldrawer); nullGeom.Topology = SharpDX.Direct3D.PrimitiveTopology.PointList; KinectSensor sensor = KinectSensor.GetDefault(); sensor.Open(); cbCamera camera = new cbCamera(); camera.Projection = Matrix.PerspectiveFovLH(1.57f * 0.5f, 1.3f, 0.01f, 100.0f); camera.View = Matrix.Translation(0.0f, 0.0f, 2.0f); camera.Projection.Transpose(); camera.View.Transpose(); ConstantBuffer <cbCamera> cameraBuffer = new ConstantBuffer <cbCamera>(device); cameraBuffer.Update(context, ref camera); bool doQuit = false; bool uploadCamera = false; bool uploadRgb = false; CameraRGBFrameData cameraFrame = new CameraRGBFrameData(); DynamicCameraRGBTexture cameraTexture = new DynamicCameraRGBTexture(device); DepthToColorFrameData depthToColorFrame = new DepthToColorFrameData(); DynamicDepthToColorTexture depthToColorTexture = new DynamicDepthToColorTexture(device); KinectSensorDepthFrameProvider provider = new KinectSensorDepthFrameProvider(sensor); provider.FrameReceived += (sender, args) => { cameraFrame.Update(sensor.CoordinateMapper, args.DepthData); depthToColorFrame.Update(sensor.CoordinateMapper, args.DepthData); uploadCamera = true; }; //Get coordinate map + rgb ColorRGBAFrameData colorFrame = new ColorRGBAFrameData(); DynamicColorRGBATexture colorTexture = new DynamicColorRGBATexture(device); KinectSensorColorRGBAFrameProvider colorProvider = new KinectSensorColorRGBAFrameProvider(sensor); colorProvider.FrameReceived += (sender, args) => { colorFrame = args.FrameData; uploadRgb = true; }; form.KeyDown += (sender, args) => { if (args.KeyCode == Keys.Escape) { doQuit = true; } }; RenderLoop.Run(form, () => { if (doQuit) { form.Dispose(); return; } if (uploadCamera) { cameraTexture.Copy(context.Context, cameraFrame); depthToColorTexture.Copy(context.Context, depthToColorFrame); uploadCamera = false; } if (uploadRgb) { colorTexture.Copy(context.Context, colorFrame); uploadRgb = false; } context.RenderTargetStack.Push(swapChain); context.Context.ClearRenderTargetView(swapChain.RenderView, SharpDX.Color.Black); context.Context.VertexShader.Set(vertexShader); context.Context.PixelShader.Set(pixelShader); context.Context.VertexShader.SetShaderResource(0, cameraTexture.ShaderView); context.Context.VertexShader.SetShaderResource(1, colorTexture.ShaderView); context.Context.VertexShader.SetShaderResource(2, depthToColorTexture.ShaderView); context.Context.VertexShader.SetSampler(0, device.SamplerStates.LinearClamp); context.Context.VertexShader.SetConstantBuffer(0, cameraBuffer.Buffer); nullGeom.Bind(context, null); nullGeom.Draw(context); context.RenderTargetStack.Pop(); swapChain.Present(0, SharpDX.DXGI.PresentFlags.None); }); swapChain.Dispose(); context.Dispose(); device.Dispose(); cameraBuffer.Dispose(); cameraTexture.Dispose(); provider.Dispose(); pixelShader.Dispose(); vertexShader.Dispose(); sensor.Close(); colorTexture.Dispose(); colorProvider.Dispose(); depthToColorFrame.Dispose(); depthToColorTexture.Dispose(); }