Ejemplo n.º 1
0
        private void BringMarkerGeometryIntoDeviceBuffers(D3D10OverlayContext overlayGeometry)
        {
            Device device = _cachedDevice;

            if (device == null || device.IsDisposed)
            {
                return;
            }

            // ------------------  Triangle buffer ------------------------------------
            {
                var buf = (PositionColorIndexedTriangleBuffer)overlayGeometry.PositionColorIndexedTriangleBuffers;

                var vertexBuffer = Buffer.Create <float>(device, buf.VertexStream, new BufferDescription()
                {
                    BindFlags      = BindFlags.VertexBuffer,
                    CpuAccessFlags = CpuAccessFlags.None,
                    OptionFlags    = ResourceOptionFlags.None,
                    SizeInBytes    = buf.VertexStreamLength,
                    Usage          = ResourceUsage.Default
                });

                var indexBuffer = Buffer.Create <int>(device, buf.IndexStream, new BufferDescription()
                {
                    BindFlags      = BindFlags.IndexBuffer,
                    CpuAccessFlags = CpuAccessFlags.None,
                    OptionFlags    = ResourceOptionFlags.None,
                    SizeInBytes    = buf.IndexStreamLength,
                    Usage          = ResourceUsage.Default
                });
                var indexCount = buf.TriangleCount * 3;

                var devBuffer = new VertexAndIndexDeviceBufferNoMaterial(vertexBuffer: vertexBuffer, vertexCount: buf.VertexCount, indexBuffer: indexBuffer, indexCount: indexCount);

                var oldBuffer = System.Threading.Interlocked.Exchange(ref _markerGeometryTriangleDeviceBuffer, devBuffer);
                oldBuffer?.Dispose();
            }

            // ------------------  Line list buffer ------------------------------------
            {
                var buf = (PositionColorLineListBuffer)overlayGeometry.PositionColorLineListBuffer;

                var vertexBuffer = Buffer.Create <float>(device, buf.VertexStream, new BufferDescription()
                {
                    BindFlags      = BindFlags.VertexBuffer,
                    CpuAccessFlags = CpuAccessFlags.None,
                    OptionFlags    = ResourceOptionFlags.None,
                    SizeInBytes    = buf.VertexStreamLength,
                    Usage          = ResourceUsage.Default
                });


                var oldBuffer = System.Threading.Interlocked.Exchange(
                    ref _markerGeometryLineListBuffer,
                    new VertexBufferNoMaterial(vertexBuffer: vertexBuffer, vertexCount: buf.VertexCount));
                Disposer.RemoveAndDispose(ref oldBuffer);
            }
        }
Ejemplo n.º 2
0
        private void DrawPositionColorIndexedTriangleBufferNoMaterial(Device device, VertexAndIndexDeviceBufferNoMaterial deviceBuffers, Matrix worldViewProj)
        {
            int layoutNumber = 1;

            device.InputAssembler.InputLayout       = _renderLayouts[layoutNumber].VertexLayout;
            device.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.TriangleList;

            device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(deviceBuffers.VertexBuffer, 32, 0));
            device.InputAssembler.SetIndexBuffer(deviceBuffers.IndexBuffer, Format.R32_UInt, 0);

            _renderLayouts[layoutNumber].Pass.Apply();
            device.DrawIndexed(deviceBuffers.IndexCount, 0, 0);
        }
Ejemplo n.º 3
0
		private void DrawPositionColorIndexedTriangleBufferNoMaterial(Device device, VertexAndIndexDeviceBufferNoMaterial deviceBuffers, Matrix worldViewProj)
		{
			int layoutNumber = 1;
			device.InputAssembler.InputLayout = _renderLayouts[layoutNumber].VertexLayout;
			device.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.TriangleList;

			device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(deviceBuffers.VertexBuffer, 32, 0));
			device.InputAssembler.SetIndexBuffer(deviceBuffers.IndexBuffer, Format.R32_UInt, 0);

			_renderLayouts[layoutNumber].pass.Apply();
			device.DrawIndexed(deviceBuffers.IndexCount, 0, 0);
		}
Ejemplo n.º 4
0
		private void BringOverlayGeometryIntoDeviceBuffers(D3D10OverlayContext overlayGeometry)
		{
			Device device = _hostDevice;
			if (device == null)
				return;

			// ------------------  Triangle buffer ------------------------------------
			{
				var buf = (PositionColorIndexedTriangleBuffer)overlayGeometry.PositionColorIndexedTriangleBuffers;

				var vertexBuffer = Buffer.Create<float>(device, buf.VertexStream, new BufferDescription()
				{
					BindFlags = BindFlags.VertexBuffer,
					CpuAccessFlags = CpuAccessFlags.None,
					OptionFlags = ResourceOptionFlags.None,
					SizeInBytes = buf.VertexStreamLength,
					Usage = ResourceUsage.Default
				});

				var indexBuffer = Buffer.Create<int>(device, buf.IndexStream, new BufferDescription()
				{
					BindFlags = BindFlags.IndexBuffer,
					CpuAccessFlags = CpuAccessFlags.None,
					OptionFlags = ResourceOptionFlags.None,
					SizeInBytes = buf.IndexStreamLength,
					Usage = ResourceUsage.Default
				});
				var indexCount = buf.TriangleCount * 3;

				var devBuffer = new VertexAndIndexDeviceBufferNoMaterial { VertexBuffer = vertexBuffer, VertexCount = buf.VertexCount, IndexBuffer = indexBuffer, IndexCount = indexCount };

				var oldBuffer = System.Threading.Interlocked.Exchange(ref _overlayGeometryTriangleDeviceBuffer, devBuffer);

				oldBuffer?.RemoveAndDispose();
			}

			// ------------------  Line list buffer ------------------------------------
			{
				var buf = (PositionColorLineListBuffer)overlayGeometry.PositionColorLineListBuffer;

				var vertexBuffer = Buffer.Create<float>(device, buf.VertexStream, new BufferDescription()
				{
					BindFlags = BindFlags.VertexBuffer,
					CpuAccessFlags = CpuAccessFlags.None,
					OptionFlags = ResourceOptionFlags.None,
					SizeInBytes = buf.VertexStreamLength,
					Usage = ResourceUsage.Default
				});

				var devBuffer = new VertexBufferNoMaterial { VertexBuffer = vertexBuffer, VertexCount = buf.VertexCount };

				var oldBuffer = System.Threading.Interlocked.Exchange(ref _overlayGeometryLineListBuffer, devBuffer);

				oldBuffer?.RemoveAndDispose();
			}
		}