Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MOGRE 1.8.1+;WPF(C#)-当用户更改分辨率或计算机进入睡眠状态时,后台缓冲区无效_C#_Wpf_Ogre_Ogre3d_D3dimage - Fatal编程技术网

MOGRE 1.8.1+;WPF(C#)-当用户更改分辨率或计算机进入睡眠状态时,后台缓冲区无效

MOGRE 1.8.1+;WPF(C#)-当用户更改分辨率或计算机进入睡眠状态时,后台缓冲区无效,c#,wpf,ogre,ogre3d,d3dimage,C#,Wpf,Ogre,Ogre3d,D3dimage,我正在使用Mogre1.8.1在WPF应用程序中嵌入3D模型。我遇到了一个问题,当用户更改分辨率或他们的计算机进入睡眠状态时。我相信这是因为渲染系统正在尝试绘制一个它无法再访问的曲面 我不确定该怎么办;我曾尝试使用dispose方法杀死MOGRE并稍后重新启动它(通过捕获windows事件),但遇到内存泄漏。MOGRE库中包含的暂停渲染方法似乎也不起作用。有人对如何规避这个问题有什么想法吗 注释 你可以在这里找到我正在运行的示例。主要区别在于我使用的是1.8.1.dll而不是->,但两者都存在

我正在使用Mogre1.8.1在WPF应用程序中嵌入3D模型。我遇到了一个问题,当用户更改分辨率或他们的计算机进入睡眠状态时。我相信这是因为渲染系统正在尝试绘制一个它无法再访问的曲面

我不确定该怎么办;我曾尝试使用dispose方法杀死MOGRE并稍后重新启动它(通过捕获windows事件),但遇到内存泄漏。MOGRE库中包含的暂停渲染方法似乎也不起作用。有人对如何规避这个问题有什么想法吗

注释

  • 你可以在这里找到我正在运行的示例。主要区别在于我使用的是1.8.1.dll而不是->,但两者都存在错误
  • OgreImage.cs是问题发生的地方

感谢您的帮助。

设备丢失时会发生此错误,因此您必须在函数RenderFrame()中添加控件

这是我的ReInitRenderTarget()函数

protectedvoid ReInitRenderTarget()受保护
{
DetachRenderTarget(真、假);
DisposeRenderTarget();
_纹理=TextureManager.Singleton.CreateManual(
“OgreImageSource RenderTarget”,
ResourceGroupManager.DEFAULT\u资源\u组\u名称,
TextureType.TEX_类型_2D,
(uint)ViewportSize.Width,(uint)ViewportSize.Height,
0,Mogre.PixelFormat.PF_R8G8B8A8,
(int)TextureUsage.TU_RENDERTARGET);/,null,false,8);
_renTarget=_texture.GetBuffer().GetRenderTarget();
_重新加载RenderTargetTime=0;
int viewportCount=ViewportDefinitions.Length;
视口=新视口[视口计数];
对于(int i=0;i
//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;
        }
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;
    }