private async void DisableRenderer() { if (_imageEx == null || VisibilityAnimation.GetVisible(Scene) == false) { return; } try { VisibilityAnimation.SetVisible(Scene, false); await Task.Delay(500); if (Model.Renderer != null) { Model.Renderer.Dispose(); Model.Renderer = null; } CompositionTarget.Rendering -= OnRendering; Scene.Source = null; _imageEx.Lock(); _imageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, IntPtr.Zero); _imageEx.Unlock(); _imageEx = null; } catch (Exception e) { MessageBox.Show(e.ToString()); } }
private async Task DisableRenderer() { if (_loaded) { await EnableRenderer(); return; } if (_imageEx == null) { return; } try { DisposeHelper.Dispose(ref _renderer); CompositionTargetEx.Rendering -= OnRendering; Scene.Source = null; _imageEx.Lock(); _imageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, IntPtr.Zero); _imageEx.Unlock(); _imageEx = null; } catch (Exception e) { MessageBox.Show(e.ToString()); } }
private void EnableRenderer(bool cameraHigher) { try { if (_imageEx != null) { return; } var renderer = new DarkKn5ObjectRenderer(Model.Car); renderer.SelectSkin(null); renderer.Initialize(); renderer.SetCameraHigher = cameraHigher; SetRendererSize(renderer); renderer.Draw(); Model.Renderer = renderer; _imageEx = new D3DImageEx(); Scene.Source = _imageEx; _setCount = 0; _lastTarget = IntPtr.Zero; CompositionTarget.Rendering += OnRendering; VisibilityAnimation.SetVisible(Scene, true); } catch (Exception e) { MessageBox.Show(e.ToString()); } }
private void Window_Loaded(object sender, RoutedEventArgs e) { if (_enableOverlay) { _d3DImageEx = new D3DImageEx(); _D3D11Scene = new D3D11TestScene(1920, 1080); d3dScene.Source = _d3DImageEx; /* Set the backbuffer, which is a ID3D11Texture2D pointer */ var renderTarget = _D3D11Scene.GetRenderTarget(); var backBuffer = _d3DImageEx.CreateBackBuffer(D3DResourceTypeEx.ID3D11Texture2D, renderTarget); _d3DImageEx.Lock(); _d3DImageEx.SetBackBuffer(D3DResourceType.IDirect3DSurface9, backBuffer, _enableSoftwareFallback); _d3DImageEx.Unlock(); _playback = new Playback(IntPtr.Zero, _enableOverlay); _playback.OnDrawSignalReceived += VideoSink_OnBeginDraw; CompositionTarget.Rendering += CompositionTarget_Rendering; } else { var windowHandle = new WindowInteropHelper(System.Windows.Application.Current.MainWindow).Handle; _playback = new Playback(windowHandle, _enableOverlay); } }
void Window1_Loaded(object sender, RoutedEventArgs e) { // The unloaded method is not working, so we attach to the parent window closing event the code to Destroy the resources Window.GetWindow(this).Closing += (s1, e1) => RenderControl_Closed(s1, e1); // We can use any resolution, because the OnResize event will be fired and the right dimensions will be set int anyWidth = 640; int anyHeight = 480; // For WPF we need to create a DX9RenderTarget. backBufferRenderTarget = editorEngine.CreateDX9SharedRenderTarget(renderName + ".DX9BackBuffer", anyWidth, anyHeight); // We need a View for Each RenderTarget. A View is the sum of a ViewPort, a RenderTarget and a DepthStencil // We do not need a DepthStencil for the Backbuffer has it's only used to copy the contents of the Render to a DX9 shader resource backBufferView = editorEngine.RenderViews.Create(backBufferRenderTarget); // We do not need to use the Depth because when all the render is ready, the renderview is copied to the backbufferview backBufferView.State.DepthEnabled = false; // When a resize of this control happens, i need to recreate this view onResizeMethods.Add((w, h) => backBufferView.Resize(w, h)); // The RenderTarget used for rendering renderRenderTarget = editorEngine.RenderTargets.Create(renderName, anyWidth, anyHeight); renderView = editorEngine.RenderViews.Create(renderRenderTarget); renderView.DepthStencil = editorEngine.DepthStencils.Create(new StringBuilder("MainDepthStencil"), renderView.RenderTarget.Width, renderView.RenderTarget.Height); // When a resize of this control happens, i need to recreate this view onResizeMethods.Add((w, h) => renderView.Resize(w, h)); /* Create a new D3DImageEx class */ m_d3DImageEx = new D3DImageEx(); /* Set our image's source to our D3DImage9Ex */ d3dScene.Source = m_d3DImageEx; /* Set the backbuffer, which is a ID3D10Texture2D pointer */ m_d3DImageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D10Texture2D, backBufferRenderTarget.Texture.InternalTexture2D.GetTexturePtr()); OnInitializeRender(); // Create the timer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = TimeSpan.FromMilliseconds(33); dispatcherTimer.Start(); // Add the OnDraw event for this control CompositionTarget.Rendering += CompositionTarget_Rendering; }
public DXPlotterElement() { this.image = new Image(); this.d3dImage = new D3DImageEx(); this.image.Source = d3dImage; this.Content = image; SizeChanged += BufferSizeChanged; }
void MainWindow_Loaded(object sender, RoutedEventArgs e) { /* Create a new D3DImageEx class */ m_d3DImageEx = new D3DImageEx(); /* Set our image's source to our D3DImage9Ex */ d3dScene.Source = m_d3DImageEx; /* Create a new D3DTest scene */ m_d3D11Scene = new ManagedGlyphlet(); m_d3D11Scene.Initialize(); /* Set the backbuffer, which is a ID3D10Texture2D pointer */ m_d3DImageEx.SetBackBufferEx(m_d3D11Scene.GetRenderTarget()); CompositionTarget.Rendering += CompositionTarget_Rendering; }
private void Window_Loaded(object sender, RoutedEventArgs e) { if (_enableOverlay) { _d3DImageEx = new D3DImageEx(); d3dScene.Source = _d3DImageEx; _D3D11Scene = new D3D11TestScene(); /* Set the backbuffer, which is a ID3D11Texture2D pointer */ var renderTarget = _D3D11Scene.GetRenderTarget(); _d3DImageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, renderTarget); CompositionTarget.Rendering += CompositionTarget_Rendering; Playback playback = new Playback(renderTarget, _enableOverlay); playback.OnDrawSignalReceived += VideoSink_OnBeginDraw; } else { var windowHandle = new WindowInteropHelper(System.Windows.Application.Current.MainWindow).Handle; Playback playback = new Playback(windowHandle, _enableOverlay); } }
private async Task EnableRenderer() { if (!_loaded) { await DisableRenderer(); return; } try { _carId = ValuesStorage.Storage.GetObject <JObject>("__QuickDrive_Main")?.GetStringValueOnly("CarId") ?? @"abarth500"; var car = CarsManager.Instance.GetById(_carId); if (_imageEx != null || car == null) { return; } Progress.IsActive = true; var panoramaBg = new Uri("pack://application:,,,/Content Manager;component/Assets/Img/ShowroomPanoramaExample.jpg", UriKind.Absolute); var renderer = new DarkKn5ObjectRenderer(CarDescription.FromDirectory(car.Location, car.AcdData)) { WpfMode = true, UseMsaa = false, VisibleUi = false, TryToGuessCarLights = false, LoadCarLights = false, AnyGround = true, BackgroundColor = System.Drawing.Color.FromArgb(0x444444), BackgroundBrightness = 1f, LightBrightness = 0f, AmbientDown = System.Drawing.Color.FromArgb(0x444444), AmbientUp = System.Drawing.Color.FromArgb(0xffffff), AmbientBrightness = 4f, Light = Vector3.Normalize(new Vector3(-0.1f, 10, -0.1f)), ShadowMapSize = 512, EnableShadows = false, AutoRotate = false, AutoAdjustTarget = false, UseDof = true, UseAccumulationDof = true, AccumulationDofApertureSize = 0f, AccumulationDofIterations = 20, AccumulationDofBokeh = false, UseFxaa = false, UseSslr = true, UseAo = false, UseDither = true, MaterialsReflectiveness = 1.5f, UseCustomReflectionCubemap = true, CustomReflectionCubemap = Application.GetResourceStream(panoramaBg)?.Stream.ReadAsBytesAndDispose(), CubemapAmbientWhite = false, CubemapAmbient = 0.6f, }; var data = car.AcdData; if (data != null) { var carBasic = data.GetIniFile("car.ini")["BASIC"]; _carLength = carBasic.GetVector3F("INERTIA").ToVector3().Z; var suspensions = data.GetIniFile("suspensions.ini"); var suspensionsBasic = suspensions["BASIC"]; var go = carBasic.GetVector3F("GRAPHICS_OFFSET").ToVector3(); var center = suspensionsBasic.GetFloat("WHEELBASE", 2.5f) * suspensionsBasic.GetFloat("CG_LOCATION", 0.5f); _carOffset = new Vector3(go.X, go.Y - suspensions["REAR"].GetFloat("BASEY", 0.25f), go.Z + center); _lookAt = new Vector3(go.X, go.Y - suspensions["FRONT"].GetFloat("BASEY", 0.25f), go.Z + center); } await Task.Run(() => renderer.Initialize()); renderer.SetCameraHigher = false; SetRendererSize(renderer); if (renderer.CarNode != null) { // renderer.SelectSkin(car.SelectedSkin?.Id); renderer.CarNode.BrakeLightsEnabled = true; renderer.CarNode.CockpitLrActive = true; renderer.CarNode.CurrentLod = renderer.CarNode.LodsCount > 1 ? 1 : 0; } await Task.Run(() => renderer.Draw()); _renderer = renderer; _imageEx = new D3DImageEx(); Scene.Source = _imageEx; _setCount = 0; _lastTarget = IntPtr.Zero; CompositionTargetEx.Rendering += OnRendering; UpdateCamera(); } catch (Exception e) { NonfatalError.Notify("Can’t display chase camera preview", e); } finally { Progress.IsActive = false; } }