2015-09-08 3 views
3

ошибка, я получаю «Необработанное исключение„OpenTK.Graphics.GraphicsContextException“типа произошло в OpenTK.dllOpenTK.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 вокруг всего проекта. Как только я отключу этот метод от запуска, ошибка не появляется. Если он включен, он будет работать в течение нескольких секунд перед сбоем, иногда окно станет черным. Я уже проверял, может ли это быть зациклировано чем-то, что заставило его что-то перегрузить, но это когда-либо когда-либо вызывалось.

Я использую пустые ключи, которые представляют собой графическую библиотеку для Monogame на основе WPF, хотя это, похоже, не вызывает никаких проблем. Я открыт для изменений, сделанных для того, чтобы нарисовать квадрат, хотя я хотел бы знать, что вызывает эту проблему, поэтому, если это произойдет в будущем, я смогу справиться с этим.

ответ

1

Из вашего кода трудно сказать, я думаю, мне нужно увидеть гораздо больше; но это ошибка, которая обычно возникает из двух разных функций, обращающихся к одному и тому же объекту из вашего менеджера контента.

Например, на экране загрузки у вас может быть один спрайт загрузки потоков и добавление их в менеджер контента, а другой поток - рисование спрайта. Они оба обращаются к менеджеру контента и сталкиваются с этим сбоем.

Рассмотрите возможность использования замков или еще лучше: monitor.enter/monitor.exit для защиты доступа к любым функциям в вашем TextureManager

monitor.enter может иметь время ожидания, так что вы можете иметь его повторить попытку немного.

Смежные вопросы