Пример #1
0
        private void BringOverlayGeometryIntoDeviceBuffers(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 oldBuffer = System.Threading.Interlocked.Exchange(
                    ref _overlayGeometryTriangleDeviceBuffer,
                    new VertexAndIndexDeviceBufferNoMaterial(vertexBuffer: vertexBuffer, vertexCount: buf.VertexCount, indexBuffer: indexBuffer, indexCount: indexCount));
                Disposer.RemoveAndDispose(ref oldBuffer);
            }

            // ------------------  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 _overlayGeometryLineListBuffer,
                    new VertexBufferNoMaterial(vertexBuffer: vertexBuffer, vertexCount: buf.VertexCount));

                oldBuffer?.Dispose();
            }
        }
Пример #2
0
        private bool _isDisposed = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!_isDisposed)
            {
                if (disposing)
                {
                    _altaxoDrawingGeometry?.Dispose();
                    _altaxoDrawingGeometry = null;
                    _altaxoMarkerGeometry?.Dispose();
                    _altaxoMarkerGeometry = null;
                    _altaxoOverlayGeometry?.Dispose();
                    _altaxoOverlayGeometry = null;
                    _altaxoCamera          = null;
                    _altaxoLightSettings   = null;
                }

                if (null != _cachedDevice)
                {
                    Detach();
                }

                _isDisposed = true;
            }
        }
Пример #3
0
 public void SetOverlayGeometry(D3D10OverlayContext overlayGeometry)
 {
     _altaxoOverlayGeometry = overlayGeometry;
     BringOverlayGeometryIntoDeviceBuffers(overlayGeometry);
 }
Пример #4
0
 internal void SetMarkerGeometry(D3D10OverlayContext markerGeometry)
 {
     _altaxoMarkerGeometry = markerGeometry;
     BringMarkerGeometryIntoDeviceBuffers(markerGeometry);
 }