Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация OpenGL приложений [Delphi, Windows]


3DMax ©   (2006-05-10 03:12:00) 

Здравствуйте господа кодеры! Я недавно начал изучать OpenGL и стал вопрос оптимизации. Расскажите пожалуйста какие есть способы ускорения работы OGL? Дает ли прирост производительности использование glDrawArrays?


3DMax   (2006-05-13 01:28:00) [1]


> XProger ©   (12.05.06 01:48) [9]

У меня не получается наложить текстуру на объект через VBO, на одни треугольники ложится, другие остаются нетекстурироваными. При использовании VertexArrays все работает.


qTorus   (2006-05-12 15:59:00) [2]

Спасибо за совет, ancara ©, только вот геометрия у меня изменяется в каждом кадре. Попробую VertexArrays, может оно и побыстрее будет...


ancara   (2006-05-12 15:45:00) [3]


> Именно так и делаю.

Зря, не делай так, юзай DisplayLists для начала, возможно на них остановишься.
Будет желание, разберись с VBO, возможно в твоем случае он даст существенный прирост...

> FPS зависит от размеров полигонов не меньше, чем от их кол-
> ва?

FPS вообще странная штука, иногда от погоды зависит :)).

Насчет Display Lists, если не знаешь что это и с чем едят, то вкратце так:
Для начала отводишь переменную под номер дисплейного списка:
var
 ListID: integer;

затем просишь OpenGL выделить тебе один  (пока один) идентификатор:
 ListID := glGenLists(1);
затем в какой нибудь специальной процедуре строишь этот список, готовишь геометрию:
  glNewList(ListID, GL_COMPILE);
    //здесь твои вызовы glVertex, glNormal и прочие манипуляции....
  glEndList;

а в рендере, в каждом кадре просто вызываешь этот заранее подготовленный список:
 glCallList(ListID);
А если геометрия изменилась - вызвал опять процедуру "сборки дисплейного списка" и вперед!

P.S. Приношу извинения автору ветки, за то что мы тут оффтоп развели, просто qTorus'у надо было в отдельной ветке про тормозА спросить....


qTorus   (2006-05-12 15:23:00) [4]


> Или может между glBegin и glEnd вызываешь glVertex?

Именно так и делаю.
Повернул плоскость - fps вырос в разы. Действительно, мал fillrate. Значит выходит, что FPS зависит от размеров полигонов не меньше, чем от их кол-ва?


ancara   (2006-05-12 14:19:00) [5]


>qTorus

Ты бы код чтоль привел...
Что используешь? DisplayLists, VertexArrays?
Или может между glBegin и glEnd вызываешь glVertex?
А fillrate проверить просто: поверни свою плоскость боком к камере, чтоб она типа в линию превратилась, и посмотри: если fps заметно вырос - то это fillrate...


antonn   (2006-05-12 08:57:00) [6]

antonn ©   (12.05.06 7:37) [11]
fillrect

т.е. fillrate :)


XProger   (2006-05-12 08:37:00) [7]

qTorus, необходимо обновить драйвера к видеокарте


antonn   (2006-05-12 07:37:00) [8]

fillrect у видеокарты мал:)


qTorus   (2006-05-12 02:00:00) [9]

При прорисовке около 500 треугольников на плоскости (за один кадр) (использую GL_TRIANGLES) начинаются тормоза. Система поддерживает аппаратное ускорение при данном формате пиксела. Не подскажете, в чём причина торможения?


XProger   (2006-05-12 01:48:00) [10]

http://xproger.mirgames.ru/?id=2#Land


3DMax   (2006-05-12 01:36:00) [11]

Дайте plz ссылочку на демку VBO. С VertexArrays у меня все получилось, а вот при выводе через VBO полно артефактов.


XProger   (2006-05-11 18:23:00) [12]

3DMax, суть - геометрия хранится в памяти видеокарты (аналогично текстурам), следовательно при каждой отрисовке не передаётся по шине.


ancara   (2006-05-11 11:34:00) [13]

>А что такое VBO?
GL_ARB_vertex_buffer_object


3DMax   (2006-05-11 02:23:00) [14]


> XProger ©

А что такое VBO?


Sniper17   (2006-05-10 17:30:00) [15]

расширения которые помогут:
Буфер для быстрого вывода на экрам больших массивов треугольников
GL_ARB_vertex_buffer_object для ATI аналог GL_ATI_vertex_array_object

Отсечение лишней геометрии
GL_HP_occlusion_test
GL_NV_occlusion_query

Частицы выводить при помощи GL_ARB_point_sprite


XProger   (2006-05-10 17:15:00) [16]

А если ещё и Blur реализовать 1 текстурой... ;)


grouzd[E]v   (2006-05-10 17:01:00) [17]

А если по заголовку - еще списки (много много списков)  и отсечение невидимых граней. Ну и биндинг текстур (вдруг есть такие как я, создающие текстуры в каждом кадре =)

---
... we are walking on a thin line and you better avoid the risk ...


XProger   (2006-05-10 07:31:00) [18]

Даёт. А ещё больший прирост даёт использование VBO совместно с glDrawElements и GL_TRIANGLE_STRIP


Наверх

Титульная страница Поиск, карта сайта Написать письмо