2010-10-14 3 views
0

Я делаю что-то неправильно здесь?OpenGL: Рисунок 1920 * 1080 quad = -5000 FPS?

Я рисую четверной на весь экран с glRectf(-1, -1, 1, 1)

Per Rect ФПС моей программы идут вниз примерно 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); 
+1

Это большой квадроцикл. Чего вы пытаетесь достичь? – ChrisF

+0

Это общий тест - мне придется нарисовать несколько квадратов одинакового размера за кадр; Например: фон, рельеф, объекты в игре – Rax

+0

Какова ваша реализация OpenGL? – Stringer

ответ

2

Если glRectf(-1, -1, 1, 1) это единственное, что вы делаете, то вы испытываете плохой случай преждевременной частоты кадров Freakout. Shawn Hargreaves очень красиво одевается на his blog.

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

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

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

Затем посмотреть, если ваши изменения с частотой кадров на всех. Вероятно, это не так.

+0

Я серьезно испытал это, прямо сейчас. Я получаю от 7 до 11 FPS. Я не шучу! – Rax

+0

Кроме того, я тестировал рисование маленьких и средних полигонов, а также квадроциклы раньше - заметного изменения скорости FPS нет. Однако, поскольку площадь покрытия на экране становится больше 50%, FPS начинает снижаться на 1000 на 10% площади. – Rax

+0

Я предполагаю, что ваши проблемы с производительностью по-прежнему лежат вне чертежа. Возможно, добавьте еще какой-нибудь код в свой вопрос? –

6

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

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

Давайте делать математику:

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

в Википедии есть таблицы фигур заголовка для 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 Gpix/s fillrate)

Смежные вопросы