glFlush () занимает очень много времени на окне с прозрачным фоном - PullRequest
3 голосов
/ 24 января 2011

Я использовал код из Как создать контекст рендеринга OpenGL с прозрачным фоном? , чтобы создать окно с прозрачным фоном. Моя проблема в том, что частота кадров очень низкая - у меня около 20 кадров в секунду, даже когда я рисую один квад (сделанный из 2 треугольников). Я попытался выяснить, почему и glFlush () занимает около 0,047 секунд. У тебя есть идеи почему? То же самое отображается в окне, у которого нет прозрачного фона при 6000 к / с (когда я убираю ограничение 60 к / с). Также требуется одно ядро ​​до 100%. Я тестирую его на Q9450 @ 2.66 ГГц с ATI Radeon 4800, используя Win7.

1 Ответ

3 голосов
/ 24 января 2011

Я думаю, что вы не можете получить хорошие результаты таким образом, в приведенном примере есть следующий код

void draw(HDC pdcDest)
{
    assert(pdcDIB);
    verify(BitBlt(pdcDest, 0, 0, w, h, pdcDIB, 0, 0, SRCCOPY));
}

BitBlt - это функция, выполняемая на процессоре, тогда как функции OpenGL выполняются графическим процессором. Таким образом, отображаемые данные из графического процессора для сканирования обратно в основную память, и, по сути, пропускная способность между графическим процессором и центральным процессором несколько ограничена (даже в большей степени, потому что данные возвращаются туда, как только BitBlt'ed).

Если вам действительно нужно прозрачное окно с отображаемым содержимым, вы можете взглянуть на Direct2D и / или Direct3D, возможно, есть какой-то способ сделать это без потери производительности при перемещении данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...