.[ ČeskéHry.cz ].
Zamrznutí aplikace v renderu
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
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

PříspěvekZaslal: 21. prosinec 2010, 09:58:18    Předmět: Zamrznutí aplikace v renderu Odpovědět s citátem

Zdarec,

potýkám se s problémem, že na některých ATI (4870 a vejš (10 > catalyst - na 9kovym se to nestavalo)) mi vytuhne render hnedka v začátku, z přechodu loadingu do vykresleni. U NV je to v pohodě, evidentně mi to vykreje driver, ale na ATI je to problem.

App jsem debugoval přes gDEBUg a ten nenašel nic, potom přes glslDevil a ten mi hlásí INVALID OPERATION hned po glDrawElements(...) -> viz http://nopaste.ceske-hry.cz/223221, kod renderu http://nopaste.ceske-hry.cz/223222, gDEBUG log http://nopaste.ceske-hry.cz/223219

Jelikož v dokumentaci se píše, že tuhle to háže jenom když je glDrawElements mezi glBegin a glEnd a taky

citace:
GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to an
enabled array or the element array and the buffer object's data store is currently mapped.

Pravděpodobně to bude ta 2há volba, ale já si kapánek nevím rady co s tím. Podle toho co jsem pochopil, tak odpojuju VBO který se ještě používá? Nemělo by to na sebe počkat? Opravdu to nechápu. Setkal jste se někdo s tím?

Jo, okno je multithreadovany, ale v případě renderu už je všechno načtený když se do něj přechází.
Ještě jeden takovej postřeh, gDEBUG mi háže chyby že používám funkce od VBO/FBO v jiným kontextu než jsem je inicializoval. Je to potenciální možnost že se mi ty pointery v 2hým vlákně ztratí?
A taky to sundá celej catalyst, asi tak, že v 7čkách se wokna přepnou na chvíli na ten integrovanej ovladač.

Asi jsem kouzelík, nechápu to.
Sorry za tak strašnej chaos.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1823

PříspěvekZaslal: 21. prosinec 2010, 10:38:01    Předmět: Odpovědět s citátem

S tymi vlaknami velmi opatrne. Ja odporucam vsetky OpenGL prikazy vzdy vykonavat len v jedinom (hlavnom) vlakne. Aj za cenu nejakeho zaobalenia a vlastnej fronty... A kontexty by nemali vadit, ak su spravne nasharovane. Tiez to ale neodporucam Smile

Co sa tyka invalid operation, tak GL errory sa "kumuluju" tym stylom, ze ti tam ostane vzdy prvy Very Happy Tj az zavolas glGetError, dostanes prvy error, pretoze dalsie potencialne errory ho uz neprepisali. Hned potom mozes zavolat dalsiu GL funkciu a ta ti vygeneruje error a ten ostane az kym nezavolas glGetError zase.

Napis si makro, ktore bude volat a spracovavat glGetError po kazdom GL prikaze, ci skupine prikazov a narvi to uplne vsade, hlavne do problemovych oblasti. A uvidis, kde je problem. Tie debuggovacie nastroje podla mna robia nieco podobne...

Posrat OpenGL a zhodit driver ci Win nie je zase az take zlozite, nic si z toho nerob Twisted Evil
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. prosinec 2010, 10:41:31    Předmět: Odpovědět s citátem

ok pcmaster, pohnuli jsme se dal, ten invalid uz se nedeje, zakladni pricinou toho ze to vytuhne je zavolani glUseProgramObjectARB(), ale jsem si 100% jistej ze ty pointery dostavam, zkusim to ziskani tech ptr dat do jednoho vlakna a uvidim. Asi to opengl neni tak thread safe jak jsem si myslel :/

EDIT: ziskavani pointeru pres wglGetProcAddress jsem rozhazel prakticky vsude kde to slo a vysledek je stejnej. Takze asi tema vice vlaknama to nebude.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1823

PříspěvekZaslal: 21. prosinec 2010, 10:58:02    Předmět: Odpovědět s citátem

OpenGL nie je VOBEC thread safe. Tie funkcie nie su ani thread-safe, ani re-entrant, ani nic!

wglGetProcAddress nemusis pouzivat. Odporucam nieco ako GLEE ci GLFW, co ti ulahci nacitanie vsetkeho. A nebudes musiet vsade zbytocne pisat ARB Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. prosinec 2010, 11:00:18    Předmět: Odpovědět s citátem

DPC, dik, momentalne mam jakejsi glew? asi, zkusim to predelat a uvidime..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1823

PříspěvekZaslal: 21. prosinec 2010, 11:04:06    Předmět: Odpovědět s citátem

GLEW som myslel Very Happy GLFW je ine Smile GLEW je OK.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. prosinec 2010, 11:11:50    Předmět: Odpovědět s citátem

ok ok, tedka mi nekdo reknite, proc, kdyz nelokalizuju uniformy tak to jede? Kurva uz, 100vka segfaultu je lepsi nez toto :/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1823

PříspěvekZaslal: 21. prosinec 2010, 11:16:33    Předmět: Odpovědět s citátem

Klud Very Happy Skus resetnut komp. Aspon s NV ovladacmi je to obcas fakt nutne. A pre istotu si niekam daj nejake nv/ati example exe, ktore vzdy pusti, aby si si overil, ci ti este funguju vsetky veci -- na NV obcas nefunguju Very Happy

Co je lokalizacia uniformov? Akoze prekladas nazvy na uniformach? Very Happy Very Happy Ok, vazne, ... hod glGetError za glUniformLocation a uvidis. Mas nabindovany program?
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. prosinec 2010, 11:22:52    Předmět: Odpovědět s citátem

Very Happy, kompl jsme resetovali, problem je jenom na ATI, NV nema problem. Schvalne aji nejaky dema jsme zkouseli ktery jely a mely podobny funkce. Debugujem to po siti, takze je to docela porod. Lokalizaci myslim
citace:
iUniformShadowMap = glGetUniformLocationARB(MenuPH, "ShadowMap");


Jakmile vsechny uniformy vykomentuju, tak program se nekousne a jede. Takze WTF? To ten novej catalyst nepobere glUniform1i? Uz to vazne nechapu xD
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1823

PříspěvekZaslal: 21. prosinec 2010, 11:28:22    Předmět: Odpovědět s citátem

A si si isty, ze ti to nehodi nijaky error?

Over si, ci ti glGetUniformLocation nevrati -1 (pripadne (uint)(-1)). Pretoze v tom pripade
a) dany uniform v shaderi nenasiel
b) dany uniform sice nasiel, ale pouziva ho len mrtvy kod, alebo sa nepouziva, tj sa nepouziva a ako keby tam nebol.

Ak je to -1, tak taky uniform nenaplnaj pomocou glUniform Very Happy A za kazdu funkciu daj glGetError! A hlavne daj glGetError aj pred cele toto kriticke miesto. A uplne vsade. Tj over si, ci ti to prejde bez akehokolvek erroru az sem. Stavim sa, ze neprejde Razz
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.


Naposledy upravil pcmaster dne 21. prosinec 2010, 11:30:42, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. prosinec 2010, 11:30:10    Předmět: Odpovědět s citátem

jaj, sorry, to jsem zapomel napsat, -1 nevraci ani jedna, to uz me napadlo. Ocekuju to tou glGetError() a napisu
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1823

PříspěvekZaslal: 21. prosinec 2010, 11:31:37    Předmět: Odpovědět s citátem

Tiez pozor na glUniform1i vs. glUniform1ui a podobne. Neodporucam ich nespravne kombinovat.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. prosinec 2010, 11:35:32    Předmět: Odpovědět s citátem

uniform1ui? ani neznam Very Happy uniform1i pouzivam jenom na poslani texturovaci jednotky pro sampler. Jeste kdyz jsme u toho, zatim to vsude v loadu vraci 0 ten glGetError(); jeste cekam na vysledky co to vraci pri renderu.

kód:
{
    glUseProgramObjectARB(MenuPH);
    glActiveTextureARB(GL_TEXTURE4_ARB);
    glBindTexture(GL_TEXTURE_2D, shadowMapID);
    glUniform1iARB(iUniformShadowMap, 4);
    glActiveTextureARB(GL_TEXTURE0_ARB);
    return;
}

void Shader::BindTextures(GLuint tex, GLuint normalTex, GLuint specularTex)
{
    glActiveTextureARB(GL_TEXTURE1_ARB);
    glBindTexture(GL_TEXTURE_2D, tex);
    glUniform1iARB(iUniformDiffuseMap, 1);
    glActiveTextureARB(GL_TEXTURE2_ARB);
    glBindTexture(GL_TEXTURE_2D, normalTex);
    glUniform1iARB(iUniformNormalMap, 2);
    glActiveTextureARB(GL_TEXTURE3_ARB);
    glBindTexture(GL_TEXTURE_2D, specularTex);
    glUniform1iARB(iUniformSpecularMap, 3);
    return;
}

void Shader::DisableMenuShader(void)
{
    glActiveTextureARB(GL_TEXTURE0_ARB);
    glUseProgramObjectARB(0);
    return;   
}
// binduju pri renderu
        glEnableVertexAttribArrayARB(menuLighting.iUniformTangent);
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, object[o].uTangentVBO);
        glVertexAttribPointerARB(menuLighting.iUniformTangent,  3, GL_FLOAT, 0,0, 0);
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
       
        glEnableVertexAttribArrayARB(menuLighting.iUniformBiTangent);
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, object[o].uBiTangentVBO);
        glVertexAttribPointerARB(menuLighting.iUniformBiTangent,  3, GL_FLOAT, 0,0, 0);
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
//a ukonceni tam mam ;)


EDIT, hmm spickovy, v renderu to takvy uplne vsude vraci 0 :/ :/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 21. prosinec 2010, 12:48:03    Předmět: Odpovědět s citátem

pcmaster napsal:
GLEW som myslel Very Happy GLFW je ine Smile GLEW je OK.

BTW: I GLFW má podporu pro extensions (glfwExtensionSupported, glfwGetProcAddress apod.), shodneme se však, že primární účel je kapánek jiný Smile

(GLFW je navíc fakt bezvadná věc, vyzkoušejte!)

Jsem si vědom toho, že tento příspěvek má k tématu nulovou informační hodnotu, ale to má 90% příspěvků na C-H, takže to snad nevadí Very Happy
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 21. prosinec 2010, 14:08:09    Předmět: Odpovědět s citátem

hmm, takze delaji to kombinace glGetUniformLocationARB a glUniform1iARB ktera pouziva to id lokace. Kdyz mam jenom jednu texturu tak to pokazde na ATI vrati 9ku a na Nvidii 0. Na Ati je dycky lag. Uz si zacinam myslet ze to snad musi bejt driver bug kua.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna