Войти
ПрограммированиеФорумОбщее

Асинхронная загрузка текстур OpenGL раскачивает Frame Rate (2 стр)

Страницы: 1 2
#15
22:24, 14 дек. 2013

innuendo
> асинхронно PBO ?
нет в pixel unpack buffer, это пример texture streaming из сэмплов на http://www.g-truc.net/


#16
4:08, 15 дек. 2013

/A\
> нет в pixel unpack buffer,

Это PBO ?

#17
5:12, 15 дек. 2013

/A\
>>я еще видел пример загрузки текстуры в буфер, а потом уже биндится буфер и вызывается glTexImage, хотя в чем профит такого способа не понял)
Используя PBO можно данные из файла грузить в отдельном потоке в память которая находится на видяхе(PBO buffer). А потом основной GL поток создаст текстуру и заинициализирует ее используя данные PBO. Но так как PBO данные лежат в видеопамяти то системная шина никак не будет задействована и соответственно будет некий буст. Еще теоретически драйвер должен эту операцию сделать асинхронной, тоесть данные будут перетекать из PBO в текстуру постепенно.
По мне так возни многовато со всем этим, и не факт что драйвер разрулит все хорошо.

#18
11:01, 15 дек. 2013

innuendo
> Это PBO ?
да, я сначала перепутал с pbuffer из wgl ))


Arxon
ясно

#19
11:07, 15 дек. 2013

/A\
> > Это PBO ?
> да, я сначала перепутал

Про шину не скажу. А смысл pbo в том, что мапишь текстуру на буфер и пишешь просто в память, а заполнение текстуры уже асинхронно идёт.
Смотри примеры в спеке PBO

#20
21:21, 16 дек. 2013

у меня на андроиде фпс если и раскачивается то в пределах 2-3. гружу текстуру 512х512. она грузится где-то 30-40 раз в секунду при том что между загрузками стоит sleep(20)
дополнительной синхронизации нет.
суть теста.
в одном потоке делаю
загружаю текстуру в битмап, потом glGenTexture и glDrawArrays с ней
во втором glTexImage2D sleep(20)

#21
22:05, 16 дек. 2013

Pushkoff
> загружаю текстуру в битмап, потом glGenTexture и glDrawArrays с ней
> во втором glTexImage2D sleep(20)

ресурсы текстурок случайно не через rc рулятся ? :)

#22
1:24, 17 дек. 2013

innuendo
> ресурсы текстурок случайно не через rc рулятся ? :)
как ты мог подумать, я вообще на яве пишу

#23
8:00, 17 дек. 2013

Pushkoff
> > ресурсы текстурок случайно не через rc рулятся ? :)
> как ты мог подумать, я вообще на яве пишу

Выкрутился :) Ну а если не на яве ?

#24
9:37, 17 дек. 2013

innuendo
> Выкрутился :) Ну а если не на яве ?
я пишу тестовую апликуху, мне ничем управлять не нужно.

#25
9:51, 17 дек. 2013

Pushkoff
> я пишу тестовую апликуху, мне ничем управлять не нужно.

Ну а если бы писал реальное приложение на GL/GLES - использовал бы rc или нет ?

#26
10:52, 17 дек. 2013

innuendo
> Ну а если бы писал реальное приложение на GL/GLES - использовал бы rc или нет ?
зависит от ситуации.

#27
10:58, 17 дек. 2013

Pushkoff
> > Ну а если бы писал реальное приложение на GL/GLES - использовал бы rc или нет
> > ?
> зависит от ситуации.

Ситуация сложная :)

#28
15:12, 10 янв. 2014

Крч innuendo прав

Баг у Intel-a если в одном потоке делать drawInstancing в другом glLinkProgram - прога падает в дровах.

Баг под линукосм - Если удалить поток в котором использовался контекст а потом сам контекст - падает. Если сначала удалить контекст а потом поток - не падает!

Баг под виндой - изза двойной буфферизации и/или изза кривых дров, если удалить ресурс в одном потоке который был отправлен на рендер в другом( после present ) прога падает - glFinish после Present выручает

Конечно все эти баги можно обойти - на Intel добавить Mutex, под линуксом поменять очередь, под виндой юзать glFinish

Выводы - м да... В общем то не плохо, оно работает даже на iOS, и действительно компиляция шейдеров к примеру вообще не откладывает отпечаток на времени рендера, и текстурки проходят ПОЧТИ не заметно, но выпукать проект на таких птичьих гарантиях увы нельзя, ибо вообще не предсказуемо как может сойтись конфигурация компа - и сколько потенцеальных багов еще заложено в дровах


ПО ЭТОМУ - 1 контекст, 2 потока. Один поток для логики игры, другой для рендера - т.е. все команды gl только в одном отдельном потоке - обязательно! в ОТДЕЛЬНОМ - если вы планируете выпускать игру для iOS!

Страницы: 1 2
ПрограммированиеФорумОбщее

Тема в архиве.