2016-10-26 11 views
0

MOGRE 1.8.1을 사용하여 3D 모델을 WPF 응용 프로그램에 포함시키고 있습니다. 사용자가 해상도를 변경하거나 컴퓨터가 절전 모드로 전환 될 때 the application crashes에 문제가 발생했습니다. 렌더링 시스템이 더 이상 액세스 할 수없는 서페이스를 그리려고하기 때문에 이것이라고 생각합니다.MOGRE 1.8.1 + WPF (C#) - 사용자가 해상도를 변경하거나 컴퓨터가 잠자기 상태가되었을 때 백 버퍼가 유효하지 않습니다.

나는 무엇을해야할지 잘 모르겠다. dispose 메소드를 사용하여 MOGRE를 죽이고 나중에 (Windows 이벤트를 잡음으로써) 재부팅을 시도했지만 메모리 누수가 발생했습니다. MOGRE 라이브러리에 포함 된 일시 중지 렌더 메소드가 작동하지 않는 것 같습니다. 누구든지이 문제를 우회하는 방법에 대한 아이디어가 있습니까?

노트

도움 주셔서 감사합니다.

답변

0

장치를 분실 할 때 함수 RenderFrame()

//WallPaper, CTRL + ALT + DEL, etc 
     if (this.isDeviceLost) 
     { 
      //Recreate the texture render 
      ReInitRenderTarget(); 

      //Restore device lost 
      _renderWindow._beginUpdate(); 
      _renderWindow._endUpdate(); 

      _reloadRenderTargetTime = -1; 
      this.isDeviceLost = false; 
     } 

에 컨트롤을 추가하기 때문에,이 오류가 발생 그리고 이것은() 함수 내 ReInitRenderTarget입니다

protected void ReInitRenderTarget() 
    { 
     DetachRenderTarget(true, false); 
     DisposeRenderTarget(); 

     _texture = TextureManager.Singleton.CreateManual(
      "OgreImageSource RenderTarget", 
      ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, 
      TextureType.TEX_TYPE_2D, 
      (uint)ViewportSize.Width, (uint)ViewportSize.Height, 
      0, Mogre.PixelFormat.PF_R8G8B8A8, 
      (int)TextureUsage.TU_RENDERTARGET);//, null, false, 8); 

     _renTarget = _texture.GetBuffer().GetRenderTarget(); 

     _reloadRenderTargetTime = 0; 

     int viewportCount = ViewportDefinitions.Length; 
     viewports = new Viewport[viewportCount]; 

     for (int i = 0; i < viewportCount; i++) 
     { 
      Viewport viewport; 
      ViewportDefinition vd = ViewportDefinitions[i]; 
      viewport = _renTarget.AddViewport(vd.Camera, zIndexCounter++, vd.Left, vd.Top, vd.Width, vd.Height); 
      viewport.BackgroundColour = vd.BackgroundColour; 
      viewports[i] = viewport; 
     } 

     var ev = ViewportsChanged; 
     if (ev != null) ev(); 

     viewportDefinitionsChanged = false; 
    }