Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 29. červen 2011, 19:46:16 Předmět: GL_INVALID_ENUM v SwapBuffers ? |
|
|
Nazdar,
mám tu jednu prekérní situaci, projekt mi sundává ovladače na ATI a už z toho začínám být nešťastnej, takže situace je následující.
Několikrát jsem debugoval v gDEBUGeru a dostal sem že chyba je GL_INVALID_ENUM a podle něj a call stacku je v SwapBuffers(), což mi připadne jako blbost, když je to čistě wokenní fce pokud se nepletu.
Tuto chybu dostanu jenom jednou a to v 7mým frámu, když krokuju. Kód jsem si procházel 100x a prostě nic jsem nenašel, když pozvypínám veškerej rendering ve vláknech, tak ta chyba je tam furt.
Jakmile zakomentuju SwapBuffers, tak to sice nespadne ale problém je že nejde render nečekaně
HDC co mi leze do SwapBuffers se nemění, podle toho co jsem se díval.
Dokázal by mi někdo říct co jsem po*ral?
Dík, šedivím z toho :/ |
|
Návrat nahoru |
|
 |
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 29. červen 2011, 19:58:17 Předmět: |
|
|
Bude to znít obligátně, ale...
Kód?
Jinak GL_INVALID_ENUM je docela nestandardní error, nemělo být tak těžké kouknout se do man pages a zjistit, které funkce ho mohou evokovat. _________________ For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++. |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 29. červen 2011, 20:04:39 Předmět: |
|
|
ajaj vole, ty seš chytrej hoď si do googlu invalid enum a vyber mi funkci co to dělá ono v renderu se jich volá docela víc který to můžou bejt.
Kód, no, budeš se probírat 150 fajlama kterejm nerozumíš?
kdybych tušil kde to je, tak nepíšu semka hele pár takovejhle chybiček jsem už zažil ale debugger mě rovnou hodil na místo kde to krešlo, tady ne-e :/
a konkrétně mě zajímá, jestli už to někomu je*alo na tom swapu  |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 29. červen 2011, 20:56:47 Předmět: |
|
|
Po tom co sem zazil s ATI driverama tak tam klidne muze byt i bug... |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 29. červen 2011, 21:55:01 Předmět: |
|
|
skusit iny system s inou kartou. ono to fakt moze byt bug v ovladacoch. ono nech robis cokolvek tak by sa ti neamo dat sundat ovladac. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 29. červen 2011, 22:42:49 Předmět: |
|
|
Ja som nakoniec s CL/GL dopadol tak, ze som mal za KAZDOU funkciou getError :] Takze sa uisti, ze sa ti neposere nejake volanie uz predtym.
Ci je to ATI, ci NVIDIA, skus inu verziu driveru, spravaju sa dost casto odlisne
A ked sme pri tom... urcite by sa neoplatilo komplet vsetko renderovat do textur(y) a potom rucne swapnut do widgetu/obrazovky/suboru/siete/kamkolvek? Takyto rucny blit sotva bude uzkym hrdlom... Chapete, co myslim? Predpokladam, ze sa to nerobi cisto z dovodu, ze to predsa len bude kusocek pomalsie nez priame kreslenie...
(Asi som zdeformovany "offline" rasterizatorom z prace, par desiatok ci stoviek milisekund hore dole nikomu ani nepozdvihne obocie ) _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 30. červen 2011, 03:56:33 Předmět: |
|
|
jo, zapoměl jsem napsat že se to objevuje v gDEBUGeru aji na NV, takže je to nějaká pitchovina v kódu, ale NV má aspoň ovladače který hnedka nekrešnou. Problém je ten, že zakomentuju celej render - nechám jenom while s swapbuffers, všechny vlákna a chyba nezmizí. Jakmile se zbavím swapbuffers tak to jde, ale myslím si že to bude jenom odkaz na nějakou předchozí chybu, co to způsobuje .. je to rozbitý  |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 30. červen 2011, 06:14:04 Předmět: |
|
|
skus zakomentovat cely render a nechaj iba tie swap buffers. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 30. červen 2011, 09:04:51 Předmět: |
|
|
Zkus se ještě podívat na vytváření okna, na takové ty wgl funkce. A pokud je používáš, zkus místo SwapBuffers dát (aspoň provizorně) wglSwapLayerBuffers (nebo jak se to jmenuje).
A zkusil bych to na chvíli bez gDEBuggeru. A to takhle (před swap zavolat getError naprázdno):
kód: |
glGetError()
SwapBuffers(hdc);//nebo wglSwapLayerBuffers
err = glGetError();
if (err... |
_________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 30. červen 2011, 12:34:23 Předmět: |
|
|
nou: celej render jsem zakomentoval, dokud tam není SwapBuffers tak to jede v pohodě jinak invalid enum
semo: zkoušel jsem obě varianty, změna žádná, chyba se nevypsala žádná, na ATI lag při swapu bufferu.
tady je zdroják initu wokna, protože chyba musí bejt tady asi :/
http://nopaste.ceske-hry.cz/223347
kontroloval jsem si to, ale třeba jsem si něčeho nevšiml :/ |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 30. červen 2011, 12:53:02 Předmět: |
|
|
Tyjo, proč si nezmínil, že používáš multithreading? To pak může dělat všelijaký pohádkový chyby.
Zkus klasiku bez threadů:
kód: |
while (!exit)
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Render();
SwapBuffers();
}
|
A ještě sem si všim, že na zprávu WM_ERASEBKGND děláš nějaký strašný harakiri, nevím sice co to má dělat, ale zkus místo toho jen return 0. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 30. červen 2011, 13:06:19 Předmět: |
|
|
jo, o MT jsem se krapet zapoměl zmínit, já blb
v klasické smyččce to nepadne.
ten erasebg se vykreslí jenom když to zamrzne
takže co rozhodí multithreadovanej render, že nejde když fungoval? Toť otázka teda WTF |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 30. červen 2011, 13:16:19 Předmět: |
|
|
To ti povím, co rozhodí :-) Různý windows message dělají něco s oknem...do toho přijde SwapBuffers s druhýho threadu a dělá opět něco s oknem. Takže tu máme dva thready, který můžou dělat v jeden a ten samej čas nějakou operaci s jednou věcí. Nevíme sice co přesně je špatně, ale pokud tam nebudeš mít nějaký synchronizační prvky pro thready, tak se budeš dočkávat podobných radostí.
Nevím, proč chceš druhý thread na kreslení, jediný použitelný případ co mě napadá je, když chceš kreslit do okna i během tažení (i to se dá obejít, ale neni to dokonalý). Thready bych doporučil použít na něco lepšího (nějaké delší výpočty, animace, ...). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 30. červen 2011, 13:33:35 Předmět: |
|
|
Presne tak, kreslit takto ad-hoc z viacerych vlaken je fakt vrazda a budes mat problemy to oddebugovat. Urcite by som nechal kreslit jedine vlakno a ostatne by boli na nieco ine. Ale v kazdom pripade nech len jedno jedine vlakno (a to bude hlavne vlakno, ktore okno vytvori) manipuluje s oknom a kontextami, atd. To sa ti velmi osvedci, ak budes musiet pouzit frameworky ako Qt, kde je dost vynutena prislusnost roznych objektov k vlaknam, ktore ich vytvoria. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 30. červen 2011, 14:44:23 Předmět: |
|
|
OpenGL nejde používat z více vláken zároveň. Pro thread-safety je fakt lepší, aby správa okna i OpenGL běželo pod jedním vláknem (ono to stejně ani jinak funkční udělat nejde). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
|