dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Immediate vs retained mode, DLs and VBOs...

 
dev.gamez.lv Forum Index -> OpenGL
View previous topic :: View next topic  
Author Message
programmer



Joined: 15 Sep 2006
Posts: 71
Location: Latvija, Limbaži

PostPosted: Thu Sep 30, 2010 12:28 am    Post subject: Immediate vs retained mode, DLs and VBOs...

Sveiki, biedri!

Vai triviālas ģeometrijas renderēšanā, izmantojot VBO, iegūst reālu labumu salīdzinot ar immediate mode? Ar triviālu ģeometriju es domāju ko tādu kā vienkāršu GUI sistēmu, kur katram vidžetam ir savs texturēts quads.

Man šķiet mazliet smieklīga doma katram vidžetam veidot savu VBO, kurā noglabāt 4 vertexus..

Jautājums tāpēc, ka OpenGL jaunajā specifikācijā immediate mode un display listi ir novecojuši.. un cik es saprotu, tad uz tā vairs nevajadzētu stutēt turpmāko OpenGL aplikāciju kodu.

Tad kādas ir iespējas, lai renderētu kaut ko īpaši triviālu? VBO nekļūst par lieku overheadu?

Paldies!
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Thu Sep 30, 2010 2:00 am    Post subject:

Ja VBO šķiet pārāk sarežģīts (var, btw, lietot tikai vienu VBO visam, ko zīmē), var lietot arī vertex'u masīvus (apmēram tas pats, kas VBO, tikai bez bufferu funkcijām un ar absolūtajiem datu pointer'iem).
Nav gan tikpat ērti kā Direct3D DrawPrimitiveUP (tāpat ļoti daudz funkciju izsaukumu), bet var lieliski iztikt ar to, kas ir, it īpaši, ja lietoti tiek tikai viena veida vertex'i.
VBO variants gan varētu būt par dažām mikrosekundēm ātrāks, bet vertex'u masīvu variantu būs vieglāk implementēt..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Sep 30, 2010 9:15 am    Post subject: Re: Immediate vs retained mode, DLs and VBOs...

programmer wrote:
Man šķiet mazliet smieklīga doma katram vidžetam veidot savu VBO, kurā noglabāt 4 vertexus..

Katram widgetam to nevajag darīt.
Vajag viena GUI skrīta renderēšanai salasīt visu vertexus/texcoordus/vēl-ko-citu-tev-tur vajag vienā VBO. Un tad to visu zīmēt vienā batchā.

Bet nu neviens tev neliedz izmantot compability profilu un izmantot jebkuru deprecated funkcionalitāti. Nvidia tieši to arī rekomendē.

Vēl ņem vērā arī, ka, citiem OpenGL varientiem, piemēram, OpenGL ES, tādu lietu kā immediate modes vispār nav (kā arī display listu). Tur ir tikai vertex pointeri/buferi. Tas arī ir iemesls kāpēc no tiem izvairīties - ja nu nākotnē portēsi savu spēli uz iOS vai Android'u?
Back to top
View user's profile Send e-mail
programmer



Joined: 15 Sep 2006
Posts: 71
Location: Latvija, Limbaži

PostPosted: Thu Sep 30, 2010 10:42 am    Post subject:

Paldies par atbilēm.

snake5 wrote:
Ja VBO šķiet pārāk sarežģīts (var, btw, lietot tikai vienu VBO visam, ko zīmē), var lietot arī vertex'u masīvus (apmēram tas pats, kas VBO, tikai bez bufferu funkcijām un ar absolūtajiem datu pointer'iem).

VBO nešķiet pārāk sarežģīts. Es jau sliecos uz tā izmantošanu. Vienīgās šaubas radās par to, vai tas tiešām šājā gadījumā būtu labs variants, jo es neesmu paspējis iedziļināties tā iekšējos darbības principos.

snake5 wrote:
VBO variants gan varētu būt par dažām mikrosekundēm ātrāks, bet vertex'u masīvu variantu būs vieglāk implementēt..

Tiešām? Droši vien ne visos scenārijos.. Vispār ir iespējams arī scenārijs, kurā immediate mode vai DL būs ražīgāki par VBO?

bubu wrote:
Vajag viena GUI skrīta renderēšanai salasīt visu vertexus/texcoordus/vēl-ko-citu-tev-tur vajag vienā VBO.

Tas jau skan labāk. Varētu dot pāris idejas, kā to darīt, ja GUI ir veidots vidžetu hierarhijā?

bubu wrote:
Bet nu neviens tev neliedz izmantot compability profilu un izmantot jebkuru deprecated funkcionalitāti. Nvidia tieši to arī rekomendē.

Par Nvidia es tieši lasīju, ka viņi negrasās izravēt tā sauktās "deprecated" fīčas, jo nav jēgas atbrīvoties no pilnīgi funkcionālām lietām. Kā es sapratu, tad viņu display listu implementācija esot īpaši optimizēta. Bet kā ir ar citiem, piem. ATI? Uz compatibility mode vienmēr var paļauties?

Vēl pieskaroties display listiem.. tie, atšķirībā no VA un VBO piedāvā iespēju saglabā arī atsevišķus stāvokļus. Stāvokļu kompilēšana listos vispār dod kaut kādu performance gain?

bubu wrote:
Vēl ņem vērā arī, ka, citiem OpenGL varientiem, piemēram, OpenGL ES, tādu lietu kā immediate modes vispār nav (kā arī display listu). Tur ir tikai vertex pointeri/buferi. Tas arī ir iemesls kāpēc no tiem izvairīties - ja nu nākotnē portēsi savu spēli uz iOS vai Android'u?

To biju palaidis garām.
Nedaudz offtopics, bet kā ir ar portēšanu uz androīda? Varu paturēt lielāko daļu c++ koda nemainīgu, izmantojot NDK, un uzrakstīt java aktiviāti ar SDK? Esmu dzirdējis, ka androīdā iekļautais libstdc++ radot ne mazums problēmas portēšanā.
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Thu Sep 30, 2010 2:39 pm    Post subject:

Quote:
Vispār ir iespējams arī scenārijs, kurā immediate mode vai DL būs ražīgāki par VBO?

Tas ir funkciju izsaukumu skaita un OpenGL implementācijas jautājums. Bet it kā nevajadzētu būt - viņi dara apmēram vienu un to pašu darbu.
Quote:
Tas jau skan labāk. Varētu dot pāris idejas, kā to darīt, ja GUI ir veidots vidžetu hierarhijā?

Ejot cauri zīmēšanas funkcijām sapildi RAM bufferi (vertex'u vektoru vai ko tādu), pārnes informāciju uz GL bufferi (VRAM) un zīmē.
Quote:
Uz compatibility mode vienmēr var paļauties?

Jāstrādā būtu. Bet cik ātri - neviens negarantēs. Bet nav problēmu ar vertex'u masīviem strādāt. Wink
Quote:
Stāvokļu kompilēšana listos vispār dod kaut kādu performance gain?

Ar VA/VBO neko daudz nedos. Ja ir doma lietot "compatibility mode" un immediate mode zīmēšanu, tad kaut ko varētu dot.
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Sep 30, 2010 3:31 pm    Post subject:

programmer wrote:
Tiešām? Droši vien ne visos scenārijos.. Vispār ir iespējams arī scenārijs, kurā immediate mode vai DL būs ražīgāki par VBO?

Uz Nvidia tas ir gandrīz vienmēr - DL ir vai nu ekvivalenti, vai mikrosekundes ātrāki par VBO. Tas tāpēc, ka draiveris optimizē tavu sabāzto stafu iekš DL. VBO tas optimizē mazāk, jo šis jau nezin - varbūt vēlāk tu gribēsi dabūt datus atpakaļ. Par ATI - tieši pretēji. Viņi DL neoptimizē.

Quote:
Bet kā ir ar citiem, piem. ATI? Uz compatibility mode vienmēr var paļauties?

Jā vari. ATI jau nesāks tagad rakstīt tādu draiveri uz kuru neviena vecā spēle (Quake3/Doom4/utt) neies. Tā ka compability mode nekur nemirs. Vienīgais, kas var notikt - šie var izdomāt nerakstīt jauno videokaršu fīčas compability profilā, bet tikai corē.

Quote:
Stāvokļu kompilēšana listos vispār dod kaut kādu performance gain?

Teorētiski - jā. Praktiski nenozīmīgi maz. Daudz vairāk ieguvumu būs no VBO lejouta / tekstūru formātu / šeideru optimizēšanas.

Quote:
Nedaudz offtopics, bet kā ir ar portēšanu uz androīda? Varu paturēt lielāko daļu c++ koda nemainīgu, izmantojot NDK, un uzrakstīt java aktiviāti ar SDK?

Jā, tieši tā vari darīt. Ar STL nav problēmas. Ir neoficiālais ports, kurā ir iekļauts pilnvērtīgs C++ - RTTI, Exceptioni, STL. Pats to izmantoju darbā Androīdam netriviāla projekta (ne spēles) kompilēšanai, kurš izmanto visādas netriviālas C++ lietas - STL/RTTI/dynamic_cast. Viss strādā bez problēmām. Reku links: http://www.crystax.net/android/ndk.php
Back to top
View user's profile Send e-mail
programmer



Joined: 15 Sep 2006
Posts: 71
Location: Latvija, Limbaži

PostPosted: Thu Sep 30, 2010 4:12 pm    Post subject:

Nu tās lietas ir skaidrākas. Paldies! Smile Mēģināšu lietot VBO.

Tikai vēl viena lieta.. kur varētu atrast konkrētu info par to, kurus GL paplašinājumus kuru modeļu videokartes nodorošina?

Vai arī var vienkārši vadīties pēc videokartes specifikācijā norādītās OpenGL versijas? Es saprotu tā, ka videokarte, kuras specifikācijā ir norādīta viena OpenGL versija, tomēr var spēt nodrošināt jaunākas OpenGL versijas funkcionalitāti caur paplašinājumiem. Tā ir?

Tas neoficiālais NDK ports izskatās labs, būs kaut kad jāpaspēlējas.
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Sep 30, 2010 6:30 pm    Post subject:

Tādu infu skaties ar šo te tūli: http://www.realtech-vr.com/glview/

Var vadīties arī pēc norādītās versijas. Tik citreiz notiek tā - kad videokarti laiž ražošanā pēdējā/jaunākā GL versija ir X. Pēc gada izlaiž GL versiju Y, un izrādās tā videokarte supportē arī šo versiju, jo vajadzēja tai tikai jaunāku draiveri uzrakstī.

Piemēram, ATI HD2xxx/3xxx kartēm uz kārbas rakstīts, ka tās supportē GL 2.1 versiju. Taču ar pašiem jaunākajiem draiveriem tās supportē GL 3.3 versiju. Tas nozīmē, ka tām vari vai nu lietot core/compatibility 3.3 profilu, vai arī 2.1 versiju + paplašinājumus.

Neoficiālais NDK ir izveidots no oficiālā NDK sourcēm. Kad Crystalx NDK vēl nebija taisījis, tad es to pats darīju. Tb nokačāju oficiālā NDK sources, pamainīju build konifgu, lai eneiblotu STL, RTTI un Exceptionus, un uzbildoju to. Sanāca pilnīgs drop in repleisments oficiālajam NDK. CrystalX ir izdarījis tieši to pašu. Es viņam NDK meiling-listēs ~gadu atpakaļ konsultēju kā to pareizāk izdarīt :)
Back to top
View user's profile Send e-mail
programmer



Joined: 15 Sep 2006
Posts: 71
Location: Latvija, Limbaži

PostPosted: Thu Sep 30, 2010 9:43 pm    Post subject:

Tas, šķiet, ir tieši tas, ko meklēju. Paldies!

bubu wrote:
Es viņam NDK meiling-listēs ~gadu atpakaļ konsultēju kā to pareizāk izdarīt Smile

Nez kāpēc, bet tas mani nemaz nepārsteidz.. Very Happy Šķiet, ka tev ir ļoti daudz pieredzes visādās lietās.
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> OpenGL All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group