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