Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Dr.Sid
Založen: 11. 04. 2008 Příspěvky: 9
|
Zaslal: 1. květen 2008, 23:26:56 Předmět: OpenGL - modifikace vertex bufferu problem ? |
|
|
Problem:
kreslim oblohu pres skydome, coz je vicemene polokoule s barvou definovanou ve vrcholech, bez textury, bez osvetleni.
Barva ve vrcholech se cas od casu prepocita.
Kreslim to asi takhle (v nejvic obecnem pripade, mam i verzi s VBO, ta problemy necini):
glInterleavedArrays(GL_C4UB_V3F,0,color_vertices);
glDrawElements(GL_TRIANGLES,index_count,GL_UNSIGNED_SHORT,indices);
mno u mne na nVidia 7300go to je zcela neprustrelne. U kamose na integrovanem intelu to spadne jakmile do toho bufferu color_vertices podruhe zapisu. To teda zatim delam kazdy frame. Mam teorii ze on to vyuziva asynchrone, ostatne OpenGL ma otevreny samostatny thread, to je videt .. a ze dojde k nejake kolizi. To si myslim proto ze se bezne stane ze na prvnim vykreslenem snimku nejsou vsechny objekty videt, jenom nektere, aniz bych se o neco takoveho snazil (to dela i u mne) a samozrejme pouzivam doublebuffering.
V helpech jsem nic o to ze by to bylo asynchroni nebo ze bych si mel davat na praci s tim bufferem majzl nenasel.
Nejaky napad ? |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 2. květen 2008, 02:32:26 Předmět: |
|
|
To může být cokoliv.
Zkoušels použít normální vertex arrays? (glColorPointer, glVertexPointer) _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Dr.Sid
Založen: 11. 04. 2008 Příspěvky: 9
|
Zaslal: 2. květen 2008, 11:03:27 Předmět: |
|
|
Tak jsem zacal psat verzi bez interleaved arrays .. a uvedomil jsem si to. Teda jeste jsem nemel sanci to na tom Intelu zkusit, ale problem je na 80% tento:
Interleaved arrays zapinaji prislusne client states automaticky. Pokud pouzije interleaved array s normalou a UV na objekty, a pak jenom vrchol a barvu, a nijak si s client states nelamu hlavu, zjevne se dostavam do nejake oblasti kde chovani neni zaruceno.
Jakmile jsem pouzil cisty glColorPointer a glVertexPointer hned mi to zacalo delat blbosti i na nVidii, protoze z vykreslovani objektu zustaly zaple client states pro normaly a UV (coz se da overit).
Spravne bych mel v takovem pripade zjevne pouzit glPushClientAttrib a glPopClientAttrib, byt teda v MSDN na to nikdo nepoukazuje, i to ze Interleaved arrays zapinaji client states je jasne a overitelne, ale nikde napsane.
PS: ano, nejspis to nema nic spolecneho s editaci toho bufferu. |
|
Návrat nahoru |
|
|
Dr.Sid
Založen: 11. 04. 2008 Příspěvky: 9
|
Zaslal: 2. květen 2008, 14:15:54 Předmět: |
|
|
Tak tim to neni .. to vypadalo nadejne
Cisty arrays padaji taky. Zkoumam dal. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 2. květen 2008, 18:33:48 Předmět: |
|
|
Pokud vertex arrays padají a nepoužíváš VBO, pak máš nejspíš chybu ve svém kódu. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Dr.Sid
Založen: 11. 04. 2008 Příspěvky: 9
|
Zaslal: 2. květen 2008, 22:54:39 Předmět: |
|
|
Jojo .. vypada to tak .. zatim odvolavam poplach a sypu si popel na hlavu.
Ale taky porad nevim .. dam vam pak vedet. On je to opruz to ladit pres logy u nekoho v Americe
Zrovna jsem dosel k tomu ze se mi prepise ten index buffer a naraz se v nem objevi hodnoty ukazujici mimo spravny rozsah. Jenom jsem zatim neprisel na to kdy se to stane, ale uz jsem dost blizko. Pritom si tak davam pozor na tyhle veci, autopointery, vsecko automaticky, vsecko oasertovany az na pudu .. to zas bude blbost |
|
Návrat nahoru |
|
|
|