繁体   English   中英

几秒钟后运行OpenTK.Graphics.GraphicsContextException

[英]OpenTK.Graphics.GraphicsContextException after a few seconds of running

我得到的错误是“OpenTK.dll中发生了'OpenTK.Graphics.GraphicsContextException'类型的未处理异常

附加信息:无法使上下文131072成为当前。 错误:0“

我已经四处寻找,但是我无法找到导致它的原因,如果我想自己修复它,我不知道从哪里开始。 我认为导致它的代码是:

    public static Texture2D GetRectangle(int width, int height, Color colour, bool fill)
    {
        Color[] _rectangleData = new Color[width * height];
        Color _fillColour;
        if (fill)
        {
            _fillColour = colour;
        }
        else
        {
            _fillColour = Color.Transparent;
        }

        //create top
        for (int x = 0; x < width; x++)
        {
            _rectangleData[x] = colour;
        }
        //create sides
        for (int y = 1; y < height - 1; y++)
        {
            _rectangleData[y * width] = colour;
            for (int x = 1; x < width - 1; x++)
            {
                _rectangleData[y * width + x] = _fillColour;
            }
            _rectangleData[y * width + (width - 1)] = colour;
        }
        //create bottom
        for (int x = 0; x < width; x++)
        {
            _rectangleData[width * (height - 1) + x] = colour;
        }
        Texture2D texture = TextureManager.newTexture2D(width, height);
        texture.SetData(_rectangleData);
        return texture;
    }

我打电话给我做一个可以用来绘制网格的正方形。 它是静态的,因为它是我用来处理纹理的类的一部分,所以我没有在整个项目中传递graphicsDevice。 一旦我禁止运行此方法,就不会出现错误。 如果启用它,它将在崩溃前运行几秒钟,有时窗口将变黑。 我已经检查过它是否可能被导致它超载的东西所环绕,但它只被召唤过一次。

我正在使用空键,这是一个基于WPF的Monogame GUI库,虽然这似乎没有引起任何问题。 我愿意为了画一个正方形而做出改变,虽然我想知道是什么导致了这个问题,所以如果它在将来出现我可以处理它。

从你的代码中很难说,我想我需要看到更多; 但这是一个错误,通常发生在从内容管理器访问同一对象的两个不同函数中。

例如; 在加载屏幕上,您可能有一个线程加载精灵并将它们添加到内容管理器,另一个线程绘制加载精灵。 他们都访问内容管理器并碰撞到崩溃。

考虑使用锁或更好的: monitor.enter / monitor.exit来保护对TextureManager任何函数的TextureManager

monitor.enter可以有一个超时时间,所以你可以让它重试一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM