运行几秒钟后,OpenTK.Graphics.GraphicsContextException

本文关键字:OpenTK Graphics GraphicsContextException 几秒 运行 | 更新日期: 2023-09-27 18:11:42

我得到的错误是"类型'OpenTK.Graphics的未处理异常。GraphicsContextException'发生在OpenTK.dll

附加信息:未能使上下文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的一夫一妻制的GUI库,尽管这似乎没有引起任何问题。我是开放的改变,以绘制一个正方形,虽然我想知道是什么原因导致这个问题,所以如果它出现在未来我可以处理它。

运行几秒钟后,OpenTK.Graphics.GraphicsContextException

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

例如

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

考虑使用锁或更好的:monitor。输入/monitor。退出以保护对TextureManager中任何功能的访问

monitor.enter可以有一个超时时间,所以您可以让它重试一个位