Хорошо, поэтому я столкнулся с некоторыми проблемами с потоками с OpenGL в Windows. Я использую С# .NET для переноса GL. У меня Windows7 x64.
Итак, я попробовал два разных теста. В каждом тесте я визуализирую нетекстурированный четырехугольник (также известный как два треугольника). Судя по тому, что я могу сказать, сбой ЦП, похоже, связан с SwapBuffers.
Однопоточный тест (отлично работает)::
{
Draw stuff;
SwapBuffers;
Sleep(15);
}
Тест RenderingThread (это съедает весь мой процессор):
{
Draw stuff;
SwapBuffers;
//glFinish(); //<< If used this seems to make the CPU usage normal
Sleep(15);
}
Я знаю, что этот пример упрощен, но реальный вопрос заключается в том, почему OpenGL высасывает весь мой процессор при вызове SwapBuffers в другом потоке, отличном от того, в котором работает поток графического интерфейса Windows ?? И почему glFinish() исправляет это? Все говорят не использовать glFinish, поэтому я не уверен, что я делаю неправильно, или OpenGL просто отстой в Windows...?
Я запускаю тот же тест на OSX, процессор кажется нормальным. Я запускаю тот же тест с D3D9 и D3D10 в Windows, процессор работает нормально. Не тестировал на Linux, так как мой L-box не работает.