private void DisposeShaders()
        {
            Ab3d.DirectX.DisposeHelper.DisposeAndNullify(ref _vertexShaderSharedResource);

            // This is the same as:
            if (_vertexShaderSharedResource != null)
            {
                _vertexShaderSharedResource.Dispose();
                _vertexShaderSharedResource = null;
            }

            Ab3d.DirectX.DisposeHelper.DisposeAndNullify(ref _inputLayoutSharedResource);
            Ab3d.DirectX.DisposeHelper.DisposeAndNullify(ref _pixelShaderSharedResource);
        }
        private void EnsureShaders(DXDevice dxDevice, bool usePerPointColor)
        {
            if (usePerPointColor)
            {
                if (_vertexShaderPerPointColorSharedResource == null)
                {
                    // InputLayoutType.Color3 will be supported in the next version of DXEngine. Then it will be possible to use:
                    var vertexLayoutDesc = InputElementFactory.GetInputElementsArray(InputLayoutType.Position | InputLayoutType.Normal | InputLayoutType.Color3);

                    _vertexShaderPerPointColorSharedResource = dxDevice.EffectsManager.GetVertexShader("ShadedPointCloudPerPointColor.vs",
                                                                                                       vertexLayoutDesc,
                                                                                                       out _inputLayoutPerPointColorSharedResource,
                                                                                                       throwExceptionIfNotFound: true);
                }
            }
            else
            {
                if (_vertexShaderSharedResource == null)
                {
                    var vertexLayoutDesc = InputElementFactory.GetInputElementsArray(InputLayoutType.Position | InputLayoutType.Normal);

                    _vertexShaderSharedResource = dxDevice.EffectsManager.GetVertexShader("ShadedPointCloud.vs",
                                                                                          vertexLayoutDesc,
                                                                                          out _inputLayoutSharedResource,
                                                                                          throwExceptionIfNotFound: true);
                }
            }

            if (_geometryShaderSharedResource == null)
            {
                _geometryShaderSharedResource = dxDevice.EffectsManager.GetGeometryShader("ShadedPointCloud.gs", throwExceptionIfNotFound: true);
            }

            if (_pixelShaderSharedResource == null)
            {
                _pixelShaderSharedResource = dxDevice.EffectsManager.GetPixelShader("ShadedPointCloud.ps", throwExceptionIfNotFound: true);
            }
        }