OpenGL в Windows использует тонны ЦП, когда SwapBuffers вызывается в RenderThread

Хорошо, я столкнулся с некоторыми проблемами с потоками 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 не работает.

6
задан zezba9000 14 May 2011 в 16:14
поделиться