.[ ČeskéHry.cz ].
Shader Model 3/4
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
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 8. září 2009, 08:19:31    Předmět: Shader Model 3/4 Odpovědět s citátem

Zdravím,

narazil jsem na problém s Shader Modelem 4. Celou dobu jsem svou aplikaci psal pro SM3 na sedmičkové řadě NVidia, v minulém týdnu jsem ale aplikaci vyzkoušel na několika řadách NVidie s Shader Modelem 4 a zjistil jsem, že se mi chová jinak předávání hodnot přes uniform proměnné, přesněji pole uniformních proměnných.

Před renderováním modelu si do shaderu nacpu aktuální transformace kostí, abych je pak v shaderu aplikoval k modelu. Problém je, že na Shader modelu 3 mi to běží v pohodě, ale na Shader modelu 4 se pravděpodobně předají transformace kostí jen na poprvé a dále se pak již v gpu neupdatují.

Nevíte někdo o nějaké optimalizaci sm čtyřky, která by toto mohlo způsobovat?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
am!go



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 8. září 2009, 10:11:25    Předmět: Odpovědět s citátem

Měl by jsi uvést, jestli používáš DX9 nebo OGL a co máš za OS.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 8. září 2009, 10:18:34    Předmět: Odpovědět s citátem

am!go napsal:
Měl by jsi uvést, jestli používáš DX9 nebo OGL a co máš za OS.


Zkoušel jsem to na windows XP, Windows Vista a Windows Seven (primárně Windows Seven). Jedná se o OpenGL, GLSL.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
am!go



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 8. září 2009, 11:09:28    Předmět: Odpovědět s citátem

Na OpenGL bohužel moc odborník nejsem a pro shadery jsem u něj používal vždycky Cg, nicméně..

U SM4 se hodnoty už neposílaj po jedný, ale najednou v constant bufferech (jenom textury snad pořád posílají po jedný). Cg cbuffery s OGL v pohodě podporuje, ale i tak je to docela zásah do kódu tvý aplikace. S GLSL jsem nikdy nedělal, takže nevím jak to přesně řeší.
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: 8. září 2009, 13:47:07    Předmět: Odpovědět s citátem

a to si prepisal na SH4 alebo si len apliaciu ktora bezu na geforce 7 pustil na geforce 8 a uz nefunguje?
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 8. září 2009, 20:22:06    Předmět: Odpovědět s citátem

Constant (uniform) buffery nejsou v OpenGL povinné ani v SM4.0. Dále, v OpenGL se myslím SM přímo neurčuje, určuje se jenom GLSL verze (1.3 a víc je SM4.0, constant buffery má ale až 1.4).
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 8. září 2009, 23:15:46    Předmět: Odpovědět s citátem

nou napsal:
a to si prepisal na SH4 alebo si len apliaciu ktora bezu na geforce 7 pustil na geforce 8 a uz nefunguje?

Nikde nenastavuji pro jakej SM je aplikace určena. Ona aplikace na GeForce 8xxx a víš funguje, jen se jinak chová předávání uniform proměnných.

Eosie napsal:
Constant (uniform) buffery nejsou v OpenGL povinné ani v SM4.0. Dále, v OpenGL se myslím SM přímo neurčuje, určuje se jenom GLSL verze (1.3 a víc je SM4.0, constant buffery má ale až 1.4).

Asi jsem sto let za opicema, ale jak se nastavuje u OpenGL kterou verzi GLSL chci použít? Tohle mě asi nějak přeskočilo.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
JohnyDog



Založen: 17. 08. 2007
Příspěvky: 66

PříspěvekZaslal: 8. září 2009, 23:21:37    Předmět: Odpovědět s citátem

klapauciusk napsal:

Asi jsem sto let za opicema, ale jak se nastavuje u OpenGL kterou verzi GLSL chci použít? Tohle mě asi nějak přeskočilo.

na zacatku shaderu
kód:
#version 140

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 9. září 2009, 08:32:48    Předmět: Odpovědět s citátem

#version 140 by som prilis neodporucal kedze to nie je pisane pre shader4. skor by som nechal tak mala by to byt potom verzia 1.10. popripade by som pouzil len #version 120

a len tak mimochodom. ako nastavujes uniform polia?
vertex shader
kód:

uniform vec4 bone[10];


kód:

float bone[40];
GLint loc = glGetUniformLocation(shader, "bone");
glUniform4fv(loc, 10, bone);//pozor 10 nie 40

_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 9. září 2009, 08:55:38    Předmět: Odpovědět s citátem

Díky moc, hledal jsem to porad v aplikaci:-/

nou napsal:
ako nastavujes uniform polia?
vertex shader
kód:

uniform vec4 bone[10];


kód:

float bone[40];
GLint loc = glGetUniformLocation(shader, "bone");
glUniform4fv(loc, 10, bone);//pozor 10 nie 40


Jj, takto pole predavam. Mam v shaderu pole o velikosti sto prvku a v aplikaci si hlidam, aby jich tam neslo vic. Do pole pak také neindexuji určitě špatně.

Jdu vyzkoušet tu verzi, snad to je tím, díky. Stejně by mě zajímalo jak se tohle v glsl 1.4 resi:-/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 9. září 2009, 13:10:13    Předmět: Odpovědět s citátem

Tak jsem narazil na problém, že když na tvrdo nadefinuji verzi 120, přijdu o podporu celých číslel předávaných přes uniform.

Nedoporučil by mi někdo literaturu, kde jsou řešeny problémy kompatibility mezi jednotlivými GLSL verzemi a omezení jednotlivých verzí.?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 9. září 2009, 15:38:40    Předmět: Odpovědět s citátem

Celá čísla jsou jenom v SM4.0, tedy v GLSL 1.3 a výš.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 9. září 2009, 17:32:45    Předmět: Odpovědět s citátem

Eosie napsal:
Celá čísla jsou jenom v SM4.0, tedy v GLSL 1.3 a výš.


Do teď jsem aplikaci dělal na NVIDIA QForce Quatro 1500M, která je založena na sedmičkové řadě a tam mi celá čísla v GLSL fungují, tedy do okamžiku než přesně nadefinuji verzi shaderů.
Začínám být čím dál tím víc zmaten. Smile No řídit shader FLOATama, místo INTama je to nejmenší Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



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

PříspěvekZaslal: 9. září 2009, 17:56:09    Předmět: Odpovědět s citátem

Na starších myslím můžeš mít int na vstupu a indexovat s ním pole ve vertex shaderu, ale nemáš tam pro něj aritmetické instrukce. S intem se dá pak pracovat jen během překladu (tedy psát takový kód, který závisí jen na literálech).
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
klapauciusk



Založen: 08. 08. 2007
Příspěvky: 76

PříspěvekZaslal: 13. září 2009, 14:17:27    Předmět: Odpovědět s citátem

Chtěl bych všem poděkovat. Problém kompatibility jednotlivých verzí opravdu vyřešilo přesné určení verze:

kód:
#version 120


Přišel jsem sice o podporu celých čísel předávaných přes attribute, ale podpora celých čísel v shaderech zůstala, takže stačí jen předávat intové parametry přes float a pak jej v shaderu zkonvertovat na int.

Podpora celých čísel je krom atributů v GLSL 1.2 plná, takže např. přes uniform jdou předávat. Podpora aritmetických operací a konverzí s intama je v GLSL 1.2 taktéž plná.


Naposledy upravil klapauciusk dne 13. září 2009, 15:17:25, celkově upraveno 1 krát
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