OpenGl: оптимизация
От: Vandalf  
Дата: 04.12.03 22:17
Оценка:
В моей программе выводится очень много 2D графики с альфа-составляющей, т.е. 10-20 картинок накладываются друг на друга. Все это дико тормозит (на GeForce2 fps падает до 10). Существует ли механизм, позволяющий решить подобную задачу с меньшими тормозами? Отказаться от подобного я не могу (ну специфическое приложение, где приходится поступать именно так)...

22.08.05 09:11: Перенесено модератором из 'Разработка игр' — Odi$$ey
Re: OpenGl: оптимизация
От: adontz Грузия http://adontz.wordpress.com/
Дата: 04.12.03 22:30
Оценка:
Здравствуйте, Vandalf, Вы писали:

V>В моей программе выводится очень много 2D графики с альфа-составляющей, т.е. 10-20 картинок накладываются друг на друга. Все это дико тормозит (на GeForce2 fps падает до 10). Существует ли механизм, позволяющий решить подобную задачу с меньшими тормозами? Отказаться от подобного я не могу (ну специфическое приложение, где приходится поступать именно так)...


Прямо на экран выводишь или есть какая-то буфферизация?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: OpenGl: оптимизация
От: HeaveN Россия  
Дата: 04.12.03 22:38
Оценка:
Здравствуйте, Vandalf, Вы писали:

V>В моей программе выводится очень много 2D графики с альфа-составляющей, т.е. 10-20 картинок накладываются друг на друга. Все это дико тормозит (на GeForce2 fps падает до 10). Существует ли механизм, позволяющий решить подобную задачу с меньшими тормозами? Отказаться от подобного я не могу (ну специфическое приложение, где приходится поступать именно так)...


А картинки выводишь битмапами или текстурированными полигонами?
Выводить надо полигонами, они намного быстрее обрабатываются.
<<RSDN@Home 1.1.2 beta 1 Localization Test>>
Нет такого закона, что человеку летать нельзя...
Re[2]: OpenGl: оптимизация
От: Vandalf  
Дата: 04.12.03 22:43
Оценка:
Здравствуйте, HeaveN, Вы писали:

HN>Здравствуйте, Vandalf, Вы писали:


V>>В моей программе выводится очень много 2D графики с альфа-составляющей, т.е. 10-20 картинок накладываются друг на друга. Все это дико тормозит (на GeForce2 fps падает до 10). Существует ли механизм, позволяющий решить подобную задачу с меньшими тормозами? Отказаться от подобного я не могу (ну специфическое приложение, где приходится поступать именно так)...


HN>А картинки выводишь битмапами или текстурированными полигонами?

HN>Выводить надо полигонами, они намного быстрее обрабатываются.

Вывожу примерно так:

glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2d(0, 0);
glVertex2d(x, y);
glTexCoord2d(1, 0);
glVertex2d(x + w, y);
glTexCoord2d(0, 1);
glVertex2d(x, y + h);
glTexCoord2d(1, 1);
glVertex2d(x + w, y + h);
glEnd();
Re[2]: OpenGl: оптимизация
От: HeaveN Россия  
Дата: 04.12.03 23:12
Оценка:
Здравствуйте, adontz, Вы писали:

A>Прямо на экран выводишь или есть какая-то буфферизация?


Ну, раз выводит полигонами, то это непринципиально для скорости...
<<RSDN@Home 1.1.2 beta 1 Localization Test>>
Нет такого закона, что человеку летать нельзя...
Re[3]: OpenGl: оптимизация
От: adontz Грузия http://adontz.wordpress.com/
Дата: 04.12.03 23:24
Оценка:
Здравствуйте, HeaveN, Вы писали:

A>>Прямо на экран выводишь или есть какая-то буфферизация?

HN>Ну, раз выводит полигонами, то это непринципиально для скорости...

Наложение частично прозрачных элементов связано с чтением из памяти, так что как раз имеет значание куда они рисуются. Чтение из видео памяти в разы медленнее записи. Наиболее корректно насколько я знаю. Рисовать всё это дело в текстуру а потом выводить один полигон (2 треугольника если прямоугольная область) с этой вот текстурой.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: OpenGl: оптимизация
От: HeaveN Россия  
Дата: 04.12.03 23:39
Оценка:
Здравствуйте, Vandalf, Вы писали:

V>Вывожу примерно так:

<покоцано>

Странно, должно работать достаточно быстро. Имхо, почти неважно то, используется ли альфа-канал или нет... на скорость это мало влияет. А в игрушках и несколько тысяч полигонов вполне приличный fps дают. Проблемы могут быть две:

1) полигоны текстуры слишком большие...
2) не включается аппаратное ускорение, это могут косячить дрова. Такая проблема обсуждалась здесь
Автор:
Дата: 07.10.03
. Я потом с тем человеком пообщался в привате и он прислал свой проект. Когда я его запустил, то на Riva TNT2 (у него GF2) получил 396 fps, при тех условиях, когда он получал 55. В такой ситуации я обычно запускаю Quake 3, чтобы проверить работоспособность драйвера.
<<RSDN@Home 1.1.2 beta 1 Localization Test>>
Нет такого закона, что человеку летать нельзя...
Re[4]: OpenGl: оптимизация
От: HeaveN Россия  
Дата: 05.12.03 22:58
Оценка:
Здравствуйте, adontz, Вы писали:

A>Наложение частично прозрачных элементов связано с чтением из памяти, так что как раз имеет значание куда они рисуются. Чтение из видео памяти в разы медленнее записи. Наиболее корректно насколько я знаю. Рисовать всё это дело в текстуру а потом выводить один полигон (2 треугольника если прямоугольная область) с этой вот текстурой.


Спорить не буду, не пробовал.
Но приведу такой пример из моего древнего простенького проектика. Там на фоне 3D-леталки выводился 2D текст, методом из Quake3. Когда каждый символ — это полигон с наложенной текстурой. В тех местах, где у символа нет пикселей используется прозрачность, чтобы картинка на заднем плане была видна. В разрешении 800x600 все это чудо давало ~200 fps. Символов на экране было чуть больше сотни. Правда размер полигонов небольшой и текстурка на кождом что-то вроде 8х8 или 8х16 была. Если текст не выводить, то fps возрастал кадров на 10-15. Система: Celeron 667, RIVA TNT2 Ultra 32MB, WinXP Pro, остальные параметры, имхо, не важны. Так что я думаю, если даже текстуры и полигоны достаточно большие, такого падения fps, как Vandalf'а быть не должно.

Тут точно косяк с аппаратным ускорением OpenGL. (Кстати если по какой-то причине оно у меня отрубалось, прога давала 1-2 fps и кучу глюков).
<<RSDN@Home 1.1.2 beta 1 Localization Test>>
Нет такого закона, что человеку летать нельзя...
Re[5]: OpenGl: оптимизация
От: adontz Грузия http://adontz.wordpress.com/
Дата: 05.12.03 23:02
Оценка:
Здравствуйте, HeaveN, Вы писали:

HN>Тут точно косяк с аппаратным ускорением OpenGL. (Кстати если по какой-то причине оно у меня отрубалось, прога давала 1-2 fps и кучу глюков).


Вообще я так и не понял как определить есть ли аппаратное ускорение на OpenGL программно. С DX гораздо проще в этом смысле.
A journey of a thousand miles must begin with a single step © Lau Tsu
OpenGl: оптимизация
От: HeaveN Россия  
Дата: 06.12.03 00:29
Оценка: 42 (2)
#Имя: FAQ.mmedia.opengl.optimization
Здравствуйте, adontz, Вы писали:

A>Вообще я так и не понял как определить есть ли аппаратное ускорение на OpenGL программно. С DX гораздо проще в этом смысле.


int pixelformat;
PIXELFORMATDESCRIPTOR pfd;
bool bHardwareAccelerated;

// здесь записываем в pfd те параметры, которые должен иметь нужный нам pixelformat
// ......

// далее подбирается нужный формат или наиболее похожий
if ((pixelformat = ChoosePixelFormat (hDC, &pfd)) == 0)
{
    // не смогли подобрать формат, выходим
    return false;
}

// устанавливаем выбранный формат
if (SetPixelFormat (hDC, pixelformat, &pfd) == FALSE )
{
    // не смогли установить, выходим
    return false;
}

// получаем описание установленного формата
DescribePixelFormat (hDC, pixelformat, sizeof (pfd), &pfd );

// проверяем состояние флага PFD_GENERIC_ACCELERATED
if (!(pfd.dwFlags & PFD_GENERIC_ACCELERATED))
{
    // аппаратное ускорение используется
    bHardwareAccelerated = true;
}
else
{
    // аппаратное ускорение неиспользуется
    bHardwareAccelerated = false;
}


В общем-то ничего хитрого. Согласен, что в DX немного проще, но я не люблю DX, потому что еще пока не особо дружу с COM
<<RSDN@Home 1.1.2 beta 1 Localization Test>>
Нет такого закона, что человеку летать нельзя...
Re[7]: OpenGl: оптимизация
От: adontz Грузия http://adontz.wordpress.com/
Дата: 06.12.03 01:36
Оценка:
Здравствуйте, HeaveN, Вы писали:

A>>Вообще я так и не понял как определить есть ли аппаратное ускорение на OpenGL программно. С DX гораздо проще в этом смысле.


HN>
HN>



HN>В общем-то ничего хитрого. Согласен, что в DX немного проще, но я не люблю DX, потому что еще пока не особо дружу с COM

У DX другое преимущество. Я могу ЯВНО отказатся от использования ускорения. На глюкавых драйверах незаменимая вешь. Правда вот все более или менее сложные/новые механизмы надо использовать на свой страх и риск. Сколько раз уже переключал на OGL рендеринг игрушки for GeForce only.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: OpenGl: оптимизация
От: EyeGem Россия https://vk.com/enginya
Дата: 06.12.03 15:59
Оценка:
Здравствуйте, Vandalf, Вы писали:

V>В моей программе выводится очень много 2D графики с альфа-составляющей, т.е. 10-20 картинок накладываются друг на друга. Все это дико тормозит (на GeForce2 fps падает до 10). Существует ли механизм, позволяющий решить подобную задачу с меньшими тормозами? Отказаться от подобного я не могу (ну специфическое приложение, где приходится поступать именно так)...


Попробуй использовать ALPHA TEST (проверка альфы перед реальным ALPHA BLENDING'ом т.е. если f(альфа)=false, то блендинга не будет и скорость возрастет).
... << RSDN@Home 1.1 beta 2 >>
^__^
Re[7]: OpenGl: оптимизация
От: HeaveN Россия  
Дата: 06.12.03 19:19
Оценка:
Здравствуйте, HeaveN, Вы писали:

<покоцано>

Существенное замечание. Некоторые драйверы не выставляют флаг PFD_GENERIC_ACCELERATED. Вместо этого используется флаг PFD_GENERIC_FORMAT, который говорит о том, что используется софтварная поддержка OpenGL.
<<RSDN@Home 1.1.2 beta 1 Localization Test>>
Нет такого закона, что человеку летать нельзя...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.