OpenGL: рисование квадрата 1920 * 1080 = -5000 кадров в секунду? - PullRequest
0 голосов
/ 15 октября 2010

Я что-то здесь не так делаю?

Я рисую четырехугольник по всему экрану с помощью glRectf( -1, -1, 1, 1 )

. В прямом направлении FPS моей программы снижается примерно на 5000.

  • Что происходит?

Это моя инициализация OpenGL:

  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();
  glViewport( 0, 0, width, height );
  glOrtho( 1, -1, 1, -1, 1, -1 );
  glMatrixMode( GL_MODELVIEW );
  glDisable( GL_DEPTH_TEST );

Ответы [ 2 ]

6 голосов
/ 16 октября 2010

1920x1080 - это много пикселей. 7-11 кадров в секунду кажется довольно быстрым для фрагмента кода, предложенного Трэвисом Г:

for (int i = 0; i < 1000; ++i)
    glRectf(-1, -1, 1, 1);

Давайте посчитаем:

1920 *1080* 1000 * 11 пикселей / 1 секунда = 22,8 Гпикс / с

В Википедии есть таблицы с заголовками для карт ATI здесь: http://en.wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units и для карт nVidia здесь: http://en.wikipedia.org/wiki/Comparison_of_Nvidia_graphics_processing_units

Я предполагаю, что у вас Radeon HD 5850 только потому, что они популярны и цифры соответствуют (у 5850, по-видимому, скорость заполнения составляет 23 Гп / с)

2 голосов
/ 15 октября 2010

Если glRectf(-1, -1, 1, 1) - единственное, что вы делаете, то вы испытываете тяжелый случай преждевременного фрейтажа частоты кадров. Шон Харгривз очень хорошо об этом рассказывает в своем блоге .

Дело в том, что требуется довольно много времени, чтобы раскрутить графический конвейер и нарисовать рамку. По сравнению с не рисованием чего-либо (как я подозреваю, что вы делаете), частота кадров упадет на огромную величину, поскольку выполнение что-нибудь намного дороже, чем ничего .

Чтобы проверить мою гипотезу, попробуйте:

for (int i = 0; i < 1000; ++i)
    glRectf(-1, -1, 1, 1);

Тогда посмотрите, изменится ли ваша частота кадров вообще. Это, вероятно, не будет.

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