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(); } }
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; } }
public void SetOverlayGeometry(D3D10OverlayContext overlayGeometry) { _altaxoOverlayGeometry = overlayGeometry; BringOverlayGeometryIntoDeviceBuffers(overlayGeometry); }
internal void SetMarkerGeometry(D3D10OverlayContext markerGeometry) { _altaxoMarkerGeometry = markerGeometry; BringMarkerGeometryIntoDeviceBuffers(markerGeometry); }