2016-10-26 2 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; 
    } 
関連する問題