|
Asylum:
Azt tudom, hogy a céges laptopon vista van, és támogatja a dx10-et, elindul rajta a diplomamunkám (lényegében GSre épül az egész), de az ez előtti gépemhez képest 40-50ezerszer lassabb. Az asztali gépem kb 40-50 fps-t produkál, a laptopon pedig 0.01-et.
Annak idején a konzulensem említett valami ilyesmit, hogy az, hogy fut egy GPU-n a dx10 az csak annyit jelent, hogy a driver támogatja, de nem feltétlenül van mögötte megfelelő mennyiségű művelet végző egység, akár még az is lehet, hogy szoftveresen emulálja a geometry shadert.
Ha gondolod, küldj mindkét változatból egy binárist, lefuttatom a gépemen és megmondom melyik milyen gyors.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Idézet Matzi :
Ezek szerint ráhibáztam, és tényleg nincs benne (illetve korlátozottan)?
Nem tudom...létezhet ilyen? Utánaolvasgattam és sehol nem említenek ilyen fake geometry shadert, azt viszont említik hogy általában lassú... Ha ez igaz akkor az én megoldásom (erre a konkrét problémára) kenterbe alázza...
|
|
|
Idézet Matzi :
a vistához meg a win7-hez kell a dx10. Vagyis a leggyengébb szutyoknak is támogatnia kell az utasításokat
nem.
|
|
|
Ezek szerint ráhibáztam, és tényleg nincs benne (illetve korlátozottan)?
Amúgy azért szokták ráírni, és ezzel együtt valami emulációt csinálni, mert speciel a vistához meg a win7-hez kell a dx10. Vagyis a leggyengébb szutyoknak is támogatnia kell az utasításokat, de az ugye nincs kikötve, hogy hány műveletvégző egység kell bele, vagy azoknak milyen teljesítményen kell üzemelnie. Annak idején ha jól emlékszem a vertex shader egységet szerették kispórolni a kártyákból, mert azt úgysem használja senki. Mondjuk nem hiszem, hogy csak az nVidiának lennének ilyen szériái.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
|
Egy gts250-ben nincs gs? Akkor milyen jogon irják rá a dx10-et?
ui.: utánaolvastam, már értem mért ezt a fost adták a garisok. Gyakorlatilag ugyanaz mint a 9800 gtx... Jolvan emberek, utoljára vettem nvidia kártyát.
|
|
|
Bizonyos helyzetekben működhet, de a annyira szemből-hátbaszúrós megoldás, hogy ennél a GS ezerszer jobb, és flexibilisebb. Az előfordulhat, hogy a te kártyádon nincs GS, a céges laptopmon sincs, csak emulálja, olyan is a sebessége. Az otthoni gépemben van, és kellően gyors.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Leküldök egy triangle stripet random értékekkel, de a w koordináta a vertex ID (ez addig tökjo amig tudod mit akarsz rajzolni). A konkrét geometria egy instance bufferbe van. A vertex shaderben pedig a vertex id alapján épitem össze ami kell; ha esetleg el akarok dobni egy háromszöget akkor kiadok egy degeneráltat.
|
|
|
Arra azért kíváncsi lennék, hogyan osztasz fel háromszögeket dx9 alatt, vagy hogyan dobod el őket úgy, hogy az eredményt nem kirajzolod, hanem több iteráción keresztül finomítod.
Visszatérve: tényleg érdekelne mit hackeltél, mert nekem tökéletesen működött a dolog, és jó is volt és gyors is volt.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Nem az a lényeg, hanem hogy a geometry shader lassabb mintha dx9 alatt hackelném össze (mert össze lehet).
|
|
|
Mégis mire használod? Mi az, amit nem lehet megcsinálni, te mégis megcsináltad?
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Következtetések levonása: a dx10 egy fail. Teszt "modellre" dx10 alatt 130 fps (geometry shadert kihasználva). DX9 alatt ugyanez majdnem 1000 (!!!!) fps úgy hogy a számolások a vertex shaderben történnek (érdekes mindenki azt hitte h dx9 alatt nemis lehet megcsinálni, én meg kihoztam gyorsabbra?? nonszensz).
Szerintem a következö a helyzet: a geometry shader nincs, vagy nagyon rosszul van párhuzamositva. Az ndiviás depth test bug pedig 100% driver hiba.
|
|
|
Komolyan emberek az eszem megáll már...dx10-el driver hiba, dx9-el a shader fordito optimalizál szarul...őrjitö... Tényleg az az egyetlen megoldás, hogy assemblyben kell programozni...nem lehet megbizni ezekben a microfos trágyalékben -.-
|
|
|
Nézd meg a lenti képet, már eleve ugy van...
A ps-ben számolom a depthet, a gs csak egy fake depthet ad ki, de komolyan ezt nem tudom elhinni... DX9 alatt faszán müködik. a REF-el faszán müködik. Ez a nyomorék kártya meg asziszi h az early z test a menő... asus fos...
|
|
|
Adj ki a ps- outputban depth-et, állítólag az tuti kikapcsolja.
|
|
|
Azt hiszem rájöttem miért nemmegy a depth test....early z testet csinál ez a nyomorék...
Hogy lehet ezt kikapcsolni?
|
|
|
Erről a depth test bugról egy kép: az a vicc, hogy csak néhány helyen nem müködik, máshol igen. Driver vagy vidkari hibára gyanakodtam de egy havernál is ilyen (máshol meg nem ilyen). A REF device-al nincs ilyen hiba. Mi okozhatja ezt?
http://people.inf.elte.hu/asylum/temp/nemdobjael.jpg
|
|
|
Emberek létezik az, hogy egy dx10-es progi instancinggal meg tökömtudja még mivel LASSABB mint a dx9-es???? Ráadásul ahhoz képest hogy a lényeg a geometry shaderben történik, nem az a lassu, mert anélkül is csak 140 fps-t bir kiszenvedni (kb. 5000 vonalra, de instancinggal!!!).
Meg fogok őrülni 
Nem tudtok valami dx10-es benchmark progit? Hogy lássam h mitöl lassu.
|
|
|
Megkerültem a problémát: a vertexbufferben egy egységprimitiv van, és két streamet használok: az egyikben a world transform, a másikban az emlitett egyéb cucc. Igy már müködik instancinggal (bár a vertexek száma igy igen nagy; kérdés, hogy a performance hogy birja majd).
De van egy komolyabb probléma ami nem oldodott meg: a geometry shaderben látszolak összevissza keverednek az inputok (legalábbis a PIX szerint). Ez mitöl lehet? Az a vicc, hogy a háromszögek mégis jol jelennek meg a képernyön (csak a lényeg jelenik meg rosszul...).
A következöképpen néz ki az átadódás:
Kód: kod
A probléma pedig az, hogy például a gs a pozicio helyébe megkapja pl. a w1-et, w4-nek meg nem kap semmit (pix szerint). Most agy a dx10 ilyen eszméletlen bugos, vagy a videokártyám szar (asus engts250). Ugyanis a depth test se müködik rendesen és nembirok rájönni h mért.
Megoldás: elkurtam a vertex layoutot. Ugyabár ha az alfa csatornát is használom akkor DXGI_FORMAT_R32G32B32A32_FLOAT -nak kell deklarálni külnben átirja az alfát 1-re. Solved.
ui.: a depth testes problémát még nem oldotta meg ez sem.
Ezt a hozzászólást Asylum módosította (2011.02.19 23:36 GMT+1 óra, ---)
|
|
|
Nem erre van kitalálva az instancing. Ez nem ms specifikus, szerinte az ogl sem tud ilyet, mert nem sok értelme van. Mellesleg a dx 10 igenis jó dolog, csomó tök jó dolgot meg lehet vele csinálni.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
De mért nem lehet?  Ez annyira jellemzö egyébként minden mikrofos cuccra...beujitanak valamit amiröl azt állitja mindenki h tökjo közben egy rakás xar...
|
|
|
Hmm... félreértettem a kérdést. Szerintem az instanceing nem tud ilyet később sem.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Szerintem dx9 alatt ilyet nem lehet instancing-al, de fölötte biztos.
|
|
|
Ehhez szerintem még nem éri meg instanceingot használni, de amúgy megoldható. Be kell állítani a két bemenetre az adatokat, beállítani a vertex típust, és utána kirajzoltatni vele. Ha kell, keresek kódot hozzá.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Látom mindenki vágja a DX10-et  Na sebaj, most olyan kérdés jön ami dx9-ben sem egyértelmü. Ugy akarok rajzolni, hogy amig az indexbufferben lépek 4-et, addig az instance bufferben csak 1-et. Tehát mind a 4 vertexhez az instance bufferböl ugyanaz a mátrix vagy akármi tartozzon.
Pl.:
Kód: v1 m1
v2 m1
v3 m1
v4 m1
v5 m2
v6 m2
v7 m2
v8 m2
stb. Kérdés: kell-e ehhez egyáltalán instancing, és ha kell akkor hogy a turoba kell felparaméterezni
|
|
|
Emberek kell valamit tudnom a DX10-es depth bufferről? LESS_EQUAL-ra van állitva és mégis 0.983 és 0.988 közül az utóbbit választja...wtf???!
ui.: közben rájöttem, hogy az lehet a gond hogy a pixel shaderből akarom irni a depthet, de ö közben kiszámolja rendesen is és felülirodik??
ui2.: vagy driver hiba...
Ezt a hozzászólást Asylum módosította (2011.02.18 22:51 GMT+1 óra, ---)
|
|
|
Megoldás:
Négy vertexet kell megadni, D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ -al. Például a, b, c, a ekkor b és c mint vonal fog leküldödni a gs-nek a-val mint szomszéd, tehát a sorrend ez lesz:
0 -> a
1 -> b
2 -> c
3 -> a (ez nem fog kelleni)
Kód: [maxvertexcount(3)]
void gs_main(
lineadj float4 pos[4] : SV_POSITION,
inout TriangleStream<gs_out> stream)
{
gs_out o1, o2, o3;
o1.pos = pos[0];
o1.color = float4(1, 0, 0, 1);
o2.pos = pos[1];
o2.color = float4(0, 1, 0, 1);
o3.pos = pos[2];
o3.color = float4(0, 0, 1, 1);
stream.Append(o1);
stream.Append(o2);
stream.Append(o3);
stream.RestartStrip();
}
|
|
|
Elkezdtem tanulni a DX10-et hát huhh...
Elsőnek valami olyasmit szeretnék, hogy egy pointlistböl geometry shaderrel épiteni egy háromszöget. Tehát a vetrex bufferben van három darab pont, ebből akarok egy háromszöget. Hogy lehet ezt megcsinálni?
|
|
|
Win Vistán ment gond nélkül 60fps-el.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
|
|
Azért megjegyezném, hogy a DX nem állapotgép, tehát nem kell elöbb beállitani a texturát, és utána a samplerstatet, nyugodtan lehet ez utóbbit inicalizáláskor is.
|
|
|
Hmm, még mindig pixelenként mozgatja, valószínűleg mást is állítani kéne... Valami ötlet?
|
|
|
Vmi ilyesmi?
Kód: D3Ddevice->SetTexture(0,ptexture);
D3Ddevice->SetSamplerState(0,D3DSAMP_MINFILTER , D3DTEXF_LINEAR);
D3Ddevice->SetSamplerState(0,D3DSAMP_MAGFILTER , D3DTEXF_LINEAR);
|
|
|
Ezt a hozzászólást bit.0x8000 módosította (2011.02.11 02:19 GMT+1 óra, ---)
|
|
|
Érdekes, nem értem, anno mintha működött volna... (közben megint textúrát cseréltem  )

Amúgy lehet, h abszolút nem itt van a gond: az számít, hogy nem rendertargetbe renderelek, hanem közvetlen a backbufferbe?
szerk.:
Inkább el sem mondom, h mi volt a baj...  Az a lényeg, h a D3DXSPRITE_ALPHABLEND jól működik!
Ezt a hozzászólást Pretender módosította (2011.01.26 21:03 GMT+1 óra, ---)
|
|
|
Nézd meg PIX-el, hogy mi történik a pixellel (mért dobja el a szint).
|
|
|
Láttam régebben volt itt probléma a spriteokkal. Eddig nekem működtek, de most nem adják magukat. Van egy alpha-s textúrám (többet is kipróbáltam már, a lentebbi "jessy.png" van bent épp  ) D3DXSprite-ot használok renderelésre. Ha azt mondom, hogy:
Kód: m_Game->GetSpriteBatch()->Begin(D3DXSPRITE_ALPHABLEND);
akkor konkrétan nem látszik a textúra. Ha 0 (NULL), akkor meg ugye nem alpha blendelt. Ez vajon miért lehet? 
A lentebbiekből kiindulva így ugyan működik:
Kód: m_Game->GetSpriteBatch()->Begin(0);
m_Game->GetDevice()->SetRenderState(D3DRS_ALPHATESTENABLE, true);
m_Game->GetDevice()->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
m_Game->GetDevice()->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
m_Game->GetDevice()->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
m_Game->GetDevice()->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
csak ez nekem nem a legszebb megoldásnak tűnik... (és nem is igazán jó, átlátszanak olyan dolgok is, amiknek nem kellene...  )
|
|
|
Detto ez a problémám volt, de ez még nem is lett volna gond, hogy felkerekíti kettőhatványra, hanem hogy valakinél ki is nyújtotta a textúrát, valakinél meg nem.. És mivel nálam mindig a legegyszerűbb megoldás a jó megoldás,  ezért nem a flagekkel bűvészkedek, hanem csakis kettőhatvány (és négyzetes) textúrákkal dolgozok..
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Akkor lesznek holtterek a textúrákban, aztán meg van oldva a probléma  Igen-igen, skálázási lehetőség is van, szóval a méret valóban teljesen mindegy
[off]ni, pont 4000 hsz-ed van  [/off]
|
|
|
Nem a rajzolás nem támogatja, magát a texturát nem tudja más méretben begyömöszölni a memoriájába. De megsúgom, hogy a spritejaidat lehet skálázni, szal a textura mérete nem releváns (a dx garantálja, hogy ugyanugy fog kinézni).
|
|
|
Igen, közben rájöttem, átméreteztem 1024-esre úgy, h tartsa az aspect ratio-t, és úgy már jól töltötte be. Akkor sem támogatja a vidkari, hogy ha csak ID3DXSprite-al rajzolom? (gondolom igen  ). Esetleg valami megoldás? Animated sprite-ot csináltam éppen, aztán annak a megkötésnek léteznie kell ezekszerint, hogy az oldal kettő hatványa méretű legyen (hackelés nélkül  )?
|
|
|
Igen, mert alapbol kettöhatványra skálázza. Van valami nonpow2 vagy hasonlo flag, de nem minden vidkari támogatja.
|
|
|
Az természetes, hogy van egy 640x64-es textúrám, azt D3DXCreateTextureFromFile-al létrehozva 1024x64-es textúrát kapok?
|
|
|
Nekem már akkor is lassabb volt, ha amikor a "kész" képet rendereltem ki, és egy sima shaderre ráküldtem a fullscreen quad-ot, mint a sprite-os. Most éppen lens flare-t írtam meg, a különbség nem észrevehető, annyiban viszont jobb a sprite, hogy:
- nem kell átszámolnom [0;width] és [0;height] intervallumokból [-1;1]-re
- hiába négyzet alakú-t hoztam létre, a képernyő arányától függött (azaz nem négyzet volt, hanem téglalap). Így ilyen gond sincs
|
|
|
Az up mindig lassabb mint a vertex bufferes. Ilyen kevés vertexnél viszont egy sprite az up éri meg jobban. Ha viszont már sok spriteot kell rajzolni akkor ld. spacebang2 doksi
|
|
|
Az úgy rendben van, hogy az "ID3DXSprite"-os renderelés gyorsabb, mintha fogok, készítek egy vertex és index tömböt, majd shaderrel DrawIndexedPrimitiveUP?
|
|
|
Például csinálsz egy dictionary tömböt.
|
|
|
Nálam mennek az ékezetek is, majd küldök példakódot. 
A directinput-os dolog az meg inkább arra van, hogy pl a kamerát folyamatosan mozgathasd.
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Nahat, ez tok jo  Kar, hogy az ekezetek nem igen mennek vele :/
|
|