Autor Wątek: [3xKulka + Raytracing] The Orb Game - gra na compo  (Przeczytany 7421 razy)

Offline Patryk N.

  • Użytkownik

# Listopad 10, 2009, 05:12:37
Co do kodu GLSL:
- [WARNING] rzutowanie z int na float - proponowałbym to poprawić tak jak już zasugerował Java, jednak nie prawdą jest, że kod ten nie przejdzie na kartach AMD-ATI.
- [ERROR] funkcja tex2D - zamiast niej musisz korzystać z funkcji texture2D.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Dab

  • Redaktor
    • blog

# Listopad 10, 2009, 12:24:58
Odpala się projekt, kompiluje bez problemów, ale nadal nie działa. :)

Znaczy odpala się projekt z Visuala i pokazuje okienko o niewłaściwej konfiguracji?

Cytuj
- [WARNING] rzutowanie z int na float - proponowałbym to poprawić tak jak już zasugerował Java, jednak nie prawdą jest, że kod ten nie przejdzie na kartach AMD-ATI.
- [ERROR] funkcja tex2D - zamiast niej musisz korzystać z funkcji texture2D.

<self-facepalm>
Chyba mam za dużo przyzwyczajeń z Cg żeby pisać w GLSL ;)
A nie pokazuje błędu "bindable uniform is forbidden"?
Czy po zmianie tex2D na texture2D odpala się? Rozumiem, że masz Radeona?
« Ostatnia zmiana: Listopad 10, 2009, 12:26:52 wysłana przez Dab »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 10, 2009, 12:44:20
Cytuj
Znaczy odpala się projekt z Visuala i pokazuje okienko o niewłaściwej konfiguracji?
Zbudowałem exeka, przekopiowałem do katalogu z grą i odpaliłem - rezultat taki, jak zawsze.

Offline Dab

  • Redaktor
    • blog

# Listopad 10, 2009, 13:22:03
OK, to chyba wina SDL. Zrobiłem nową paczkę, gdzie SDL jest zlinkowany na stałe z aplikacją. Mógłbyś sprawdzić?
http://dabroz.scythe.pl/upload/2009/11/orbgame2.rar

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 10, 2009, 13:46:36
OK, to chyba wina SDL. Zrobiłem nową paczkę, gdzie SDL jest zlinkowany na stałe z aplikacją. Mógłbyś sprawdzić?
Jasne. Jak tylko wieczorem dotrę do domu. :)

Offline vashpan

  • Użytkownik
    • Strona

# Listopad 10, 2009, 14:17:19
Na 9600GSO + Win7 64bit dziala bez problemu. Gameplay jest ciekawy, aczkolwiek irytujacy z poczatku... :)

Offline IIablo

  • Użytkownik

# Listopad 10, 2009, 16:36:26
Nie mam Radeona.
Nie musisz miec :)

Offline Avaj

  • Użytkownik

# Listopad 10, 2009, 17:05:30
OK, to chyba wina SDL. Zrobiłem nową paczkę, gdzie SDL jest zlinkowany na stałe z aplikacją. Mógłbyś sprawdzić?
http://dabroz.scythe.pl/upload/2009/11/orbgame2.rar
Nie wina SDLa, ja odpaliłem twoją paczkę bez problemu a jestem bez SDLa zainstalowanego

Offline Dab

  • Redaktor
    • blog

# Listopad 10, 2009, 17:08:52
Java: wina SDLa, który był skompilowany pod VS2008... w trybie debug :D
W ogóle to nie wierzę w voodoo programming, ale jak rano budowałem SDL to wszystko działało pięknie w trybie debug. Przestawiłem runtimy na MT (nie Debug, nie DLL), usunąłem sprawdzanie błędów, makro DEBUG i nadal działało. Release z runtime MT nie działał. No to wyłączyłem optymalizacje z release. Nie działa. W końcu doprowadziłem do sytuacji gdzie oba buildy (release i debug) miały te same parametry (linie poleceń) i debug działał, a release nie ;) Magia.

IIablo: o, w takim razie przetestuję, dzięki.

[edit]
Lipa. Ten ShaderAnalyser zatrzymał się na GL 3.0 (GLSL 1.30), więc się nie przyda.
« Ostatnia zmiana: Listopad 10, 2009, 17:20:06 wysłana przez Dab »

Offline Patryk N.

  • Użytkownik

# Listopad 10, 2009, 18:05:21
A więc po poprawieniu shader'ów gra wygląda tak:
http://img40.imageshack.us/img40/141/dabg.jpg
(Wiem, że powinno wyglądać inaczej :P)

Muzyka się odtwarza itd, co jakiś czas słychać coś w stylu "boom", jednak nie widać obiektów. Nie analizowałem całego kodu więc może dałeś jakieś instrukcje warunkowe w przypadku nieodpowiedniej wersji PhysX, zapobiegające wysypaniu się programu czy coś, gdyż obiekty wtedy nie są tworzone? Jeśli PhysX może powodować ten błąd to wieczorem zaktualizuję sterownik, bo te które obecnie mam zainstalowane mają około pół roku.

Crash glCompileShader powodowało przekazywanie całej struktury Orb w funkcjach interesctSphere oraz GetNormal, gdy przekazujemy pojedyncze parametry np. position oraz radius, shader kompiluje się prawidłowo. Poniżej zamieszczam paczkę z poprawionymi shader'ami:
http://www.sendspace.com/file/4gntum
« Ostatnia zmiana: Listopad 10, 2009, 18:08:59 wysłana przez Patryk N. »

Offline Dab

  • Redaktor
    • blog

# Listopad 10, 2009, 18:16:19
Hmm, przede wszystkim dzięki za posiedzenie nad moją grą.
Myślę, że to raczej problem z przekazywaniem danych do shadera, bo nawet bez PhysX byłoby widać podłoże (szachownicę).

Jeżeli miałbyś jeszcze chwilę, to mógłbyś sprawdzić czy dane są przekazywane OK?
Tuż przed raytracing->Use(); w raytracer.cpp mógłbyś umieścić instrukcję typu
data.cośtam = ...
a shaderze rayps sprawdzić czy się zgadza wynik:
out_Color = data.cośtam;

Cytuj
Crash glCompileShader powodowało przekazywanie całej struktury Orb w funkcjach interesctSphere oraz GetNormal
Ciekawe, bo przekazywanie struktury Ray jest OK... czyżby ATI miało ograniczenie na wielkość parametru?

Offline Patryk N.

  • Użytkownik

# Listopad 10, 2009, 19:08:00
OK, sprawdziłem przekazywanie wartości i zarówno shader jak i kod główny programu operują na tych samych wartościach, więc przekazywanie działa prawidłowo. Jeśli chodzi o przekazywanie funkcji to operacja typu:
Orb Or;
Or = data.orbs[8];
float b = costam(Or,1.0);
działa prawidłowo, natomiast bezpośrednie przekazanie struktury:   
float b = costam(data.orbs[8],1.0);powoduje crash. Wydaje mi się, że w tym przypadku winny jest sterownik. Zaktualizowałem też sterownik PhysX i faktycznie jest tak samo jak było.

Offline Dab

  • Redaktor
    • blog

# Listopad 10, 2009, 20:09:22
OK, sprawdziłem przekazywanie wartości i zarówno shader jak i kod główny programu operują na tych samych wartościach, więc przekazywanie działa prawidłowo. Jeśli chodzi o przekazywanie funkcji to operacja typu:
Wiem, że jestem upierdliwy, ale czy sprawdziłeś też może czy te same wartości są dla jakiś dalszych pól? Typu data.orbs[11].position? Bo zastanawiam się czy to nie problem z wyrównaniem.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 10, 2009, 21:52:55
OK, tym razem działa. Trzeba było tak od razu. :)

Offline Patryk N.

  • Użytkownik

# Listopad 13, 2009, 03:04:06
Cześć, sorki, że nie odpisałem wcześniej, ale niestety byłem bardzo zajęty. Sprawdziłem dalsze pozycje i rzeczywiście jest coś nie tak. O ile dla orbs[0].position dane w programie i shader'ze są identyczne, to w przypadku dalszych obiektów: 1,2,3 itd. dane już nie są takie same.