Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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;
                }
            }
        }
Ejemplo n.º 4
0
        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();
        }