.[ ČeskéHry.cz ].
GLSL - Barevný klíč?

 
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
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 1. leden 2012, 00:11:12    Předmět: GLSL - Barevný klíč? Odpovědět s citátem

Zdravím,

je možné přes GLSL přepsat jen určité pixely podle zvolené barvy? Vím že gl_FragColor je jen pro zápis (a posléze i čtení), ale jak získat tu původní barvu pixelu? Z GLSL přeci framebuffer číst nejde, ne?

Renderuju do textůry, a potřeboval bych právě přepsat jen některé pixely, podle barvy, něco jako stencil...

Díky moc.

PS: Šťastný nový rok 2012 Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



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

PříspěvekZaslal: 1. leden 2012, 02:05:02    Předmět: Odpovědět s citátem

no asi by to aj slo. ale potrebujes OpenGL 4.2 alebo teda DX11 kartu.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 1. leden 2012, 03:54:05    Předmět: Odpovědět s citátem

Aha, ale já si zatím vystačím s verzí 2.1 Smile Taky chci aby to běželo na starších mašinách, takže to nepřipadá v úvahu. A nějaká jiná možnost tu není?

Asi hloupá otázka, ale nešlo by třeba "nějak" tu texturu (do které renderuju) přiřadit některému sampleru? Rolling Eyes
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 1. leden 2012, 09:47:07    Předmět: Odpovědět s citátem

Tohle řeším přes dvě textury... jedna aktivní (kam se renderuje) a druhá neaktivní (odkud se čte)... pokaždé překopíruju neaktivní do aktivní, s tím že udělám změny podle toho, co chci.. pak přehodím pointery aktivní / neaktivní a jedu znova.
Bindovat texturu do které se píše jako sampler myslím jde ve smyslu že to nespadne, ale výsledek není zaručen. Tzn. může se to chovat různě
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 1. leden 2012, 17:45:49    Předmět: Odpovědět s citátem

A co použít ten stencil? (Za předpokladu že můžeš mít Depth-Stencil depth buffer v render targetu)

1. Vymaž stencil na 0 a nekresli do color bufferu
2. Nabinduj pixel shader, který na barvách neprošlých podmínkou provede texkill (discard)
3. Vykresli fullscreen quad a zvedni stencil na 1 pouze tam kde projde (e.g. tedy kde se vykreslí pixel)
4. Teď začni kreslit do color bufferu
5. Nabinduj tvůj shader a pouze kde je stencil = 1 vykresli co chceš

Mělo by to takto fungovat (možná jsem někde na něco zapomněl - psal jsem to v rychlosti).

Jinak ideálně bys to mohl udělat asi přes OpenCL (kde by to bylo velmi snadné) - ale předpokládám že neplánuješ podporu OpenCL.
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 1. leden 2012, 23:49:56    Předmět: Odpovědět s citátem

perry napsal:
Bindovat texturu do které se píše jako sampler myslím jde ve smyslu že to nespadne, ale výsledek není zaručen. Tzn. může se to chovat různě

Jde to za pomoci GL_NV_texture_barrier. Podle mě je to na tento případ přesně určené. Dá se pomocí toho udělat i blending v shaderu...

Samozřejmě i bez toho je možno předpovědět, kdy to bude/nebude fungovat. Zejména při nabindování FBO první kreslící operace vůbec nepotřebuje texture barrier, pokud se každý pixel zapíše jen jednou a na odpovídajících pozicích.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 2. leden 2012, 04:42:52    Předmět: Odpovědět s citátem

perry: Těch textůr můžu mít i stovky, a kopírováním skoro každé textůry v jednom snímku bych to akorád pohřbil Smile

Vilem Otte: To je dobrý nápad, tak bych to mohl i udělat, jen nevím jestli většině bude karta podporovat GL_DEPTH24_STENCIL8_EXT. Budu to muset asi risknout... A OpenCL se mi používat zatím nechce, dělám totiž standalone knihovnu, bez jakýchkoliv prerequisites. A ještě k tomu jsem si zatím na OpenCL moc nešáhnul Very Happy

Marek: O tom rozšíření vím, ale bohužel ho moje karta nepodporuje, takže to nebudu ani zkoušet.

Myslíš že bych to mohl udělat i bez té bariery? Potřebuju ve shaderu přečíst z fbo pixel který se bude přepisovat, a podle jeho barvy ho buď přepíšu a nebo discardnu.

Budu vlastně jen jednou číst a jen jednou zapisovat. Je to velice jednoduchý shader, a jen jeden průchod.

Zkusím to, a dám vědět... Rolling Eyes
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 2. leden 2012, 05:39:35    Předmět: Odpovědět s citátem

Zdá se že to běží bez problémů, doufám jen že to není nějaká haluz u mojí karty. Při nejhorším, když to bude dělat problémy, zkusím tu metodu s použitím stencil bufferu.

Takže díky všem moc za pomoc Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 2. leden 2012, 13:01:25    Předmět: Odpovědět s citátem

Jo, bude to fungovat i bez bariéry. Ovšem doporučuju udělat maximálně jednu kreslící operaci, když je to nabindovaný zároveň jako framebuffer a textura.

OpenGL ve skutečnosti nedefinuje, jak se to má chovat, ale někteří moc dobře víme, jak to pod kapotou chodí. Wink

Ta texturová bariéra dělá akorát to, že vyprázdní texturovou cache a cache framebufferu, aby následující kreslící operace četla přímo z paměti a ne z cache. Kdyby tam ta bariéra nebyla, mohlo by se stát, že při čtení textury v druhém průchodu bys dostal pixely ještě ze stavu před prvním průchodem (protože by od té doby zůstaly v texturové cache).
_________________
AMD Open Source Graphics Driver Developer
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
Strana 1 z 1

 
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