[#1] Aplikacje na AGA i RTG - jak pisać sensownie?
Pisze engine gry w C. Chciałbym aby była ona dostępna dla użytkowników klasyków z AGA, jak i systemów z kartami graficznymi. Natknąłem się na problem natury bardziej... logistycznej niż programistycznej :P.

W przypadku programowania na AGA mamy do dyspozycji szereg systemowych funkcji, które pozwalają na rysowanie sprite'ów, przemiemszczanie ich po ekranie, etc. z wykorzystsaniem blittera (opisane dokładnie w rodziale 28 RKRM dot. bibliotek). Te procedury wydają się być bardzo przywiązne do chipsetu Amigi i mam niejasne przypuszczenie, że nie będą działać na karcie graficznej. Nie myle się?

Oczywiście karta graficzna nie zna pojęcia "sprite'u" w rozumieniu Amigowym i API CGX i P96 dostarczają chyba tylko funkcji do rysowania w stylu chunky.

Konkludując. Moje pytanie sprowadza się do tego czy można za pomocą jednego API stworzyć aplikacje która będzie działać na AGA i CGX/P96 ? Czy też powinienem po prostu napisać osobne procedury rysujące dla AGA i któregoś z API RTG?

Kiedys istnial projekt biblioteki rtgmaster, ale wydaje się być martwy.

Niestety póki co nie mam karty graficznej w klasyku, więc nie mam jak tego wszystkiego sprawdzić "w praktyce".

[#2] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@strim, post #1

Zapytaj się m.in. MinistraQ i kiero, lub przeszukaj forum wątki o podobnej tematyce. Mi osobiście MiniQ oraz kiero bardzo pomogli jeśli chodzi o programowanie pod kartę graficzną.

Przeczytaj również autodoki do cybergraphics.library. Tam jest swoista "przedmowa", gdzie możesz się dowiedzieć o głównych zasadach pisania programów na kartę graficzną.

A tutaj skrót najważniejszych zasad:

1. Traktuj strukturę BitMap jako prywatną tj. nie zaglądaj do jej składowych, używaj do tego specjalizowanych funkcji jak:
- GetBitMapAttr() do pobierania informacji o wysokości/szerokośći/głębokości bitmapy itp.
Przy alokacji bitmapy podawaj parametr BMF_MINPLANES oraz podaj parametr friend_bitmap wskazujący na bitmapę otwartego ekranu.

2. By podpiąć RastPort pod Twoją bitmapę użyj
InitRastPort(&rp); oraz
rp.BitMap = moja_bitmapa;
Teraz możesz korzystać z dowolnych funkcji rysujących w RastPorcie np.:
- rodziny ReadPixelArray8() i WritePixelArray8() do rysowania lub odczytywania prostokątnych obszarów.

3. By kopiować dane graficzne nie korzystaj z blittera tylko funkcji rysujących graphics.library z rodziny BltBitMap(): BltBitMapRastPort() i BltMaskBitMapRastPort().

4. Otwierając ekran podaj SA_DisplayID pobrany np. z funkcji BestModeID() Dzięki temu ekran otworzy się w dobrym trybie na karcie graficznej.

5. Do podwójnego buforowania używaj funkcji AllocScreenBuffer() oraz ChangeScreenBuffer(). Mogę Ci podać przykład jak to poprawnie zrobić.

6. Staraj się nie używać funkcji ściśle związanych z danymi planarnymi jak np. systemowych Bobów, choć ich można używać.

7. Nie używaj bezpośrednio funkcji korzystających z Coppera jak np. własne copperlisty.

Jeśli coś jest niejasne, bądź wymaga doprecyzowania to pisz śmiało. Pozdrawiam.

[#3] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@Minniat, post #2

Te wszystkie kombinacje wyjaśniają mi dlaczego wiele programów, dem, gier ma osobne wersje CGX i AGA. Chyba poczekam z dalszą inwestygacją tematu, aż będę miał kartę graficzną i będę mógł to wszystko sprawdzić w praktyce.

[#4] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@strim, post #3

nie masz w pegazosie karty graficznej ?

[#5] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@rzookol, post #4

Mam. Ale nie mam w nim AGAty :P. Poza tym nie mam gwarancji, że na OS 3.x i na MOSie wszystko będzie działać identycznie...

[#6] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@strim, post #5

Akurat kod 68k działający poprawnie na Pegazie pod MorphOSem raczej na pewno będzie też działał dobrze na klasyku z kartą graficzną.

[#7] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@Marek Szyprowski, post #6

Dzięki za sugestię, w obec tego na razie użyje MorphOSa do testów. Co może się nawet pozytywnie odbić na przenośności programu ;).

[#8] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@strim, post #7

Tu jeszcze taka mała uwaga - przy pisaniu tego kodu najlepiej używać dokumentacji do CGX v4, tak, aby przypadkiem nie skorzystać z funkcji, które są dostępne tylko na MorphOSie.

[#9] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@strim, post #7

Generalnie pomysl o trybach chunky i operowaniu na nich wtedy jedyna rzecza potrzebna bedzie synchronizacja doublebufferingu i kopiowanie buforow juz przez cgx.lib. Wtedy sam sobie jestes panem ;)

Nie pamietam juz jak dzialalo rtgmaster.library na mosie. Generalnie powinno byc w porzadku bo ten lib mial za zadanie pracowac na kartach gfx i nie robil sztuczek ze sprzetem. Tam masz tez ogolnie system bobow i kilka innych przydatnych funkcji. Pamietaj jednakze, ze boby w rtgmaster na AGA nie byly generalnie szybkie.

System bobow i jego obsluge mozna napisac w kilka tygodni. Zawsze mozesz sie wesprzec jakims materialem na sieci o tym itd.


Tak rozwijajac ta kwestie, jest jeszcze sdl. Prawie 100% system independent, no ale klasyk i AGA to chyba za slabe sprzety. Śpioch

[#10] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@AmiChris, post #9

Z tego co wiem klasyk bez karty graficznej w ogóle nie obsługuje SDL ;) .

[#11] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@strim, post #10

Z http://ggreco.interfree.it/sdl.html


These are the system requirements of the Amiga version of SDL 1.2.x:


OS 3.x (3.0 is enough)

AHI sound system installed.

A CGX/P96 compatible graphics card (untested with CGX AGA)

Some memory :) (most of the SDL graphics operation are done in fastram)

Suggested: 040 or better 68k processor.


Może ktoś testował pod CGX AGA? Ale i tak chyba wydajność byłaby przytłaczająca :/

[#12] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@pong777, post #11

Testowałem i (mi) nie działa...



Ostatnia modyfikacja: 12.06.2010 09:33:22
[#13] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@strim, post #12

Co więcej SDL na Amidze klasycznej na procku Motoroli z rodziny 68k podobno bardzo kuleje. Dopiero na PPC rozwija skrzydła.

Ja jeśli mam Ci poradzić to sugeruję pisać generalnie pod system i według dyrektyw zawartych w autodokach do cybergraphics.library i tak jak napisałem w poście nr 2. Podstawowa rzecz to używanie RastPortu oraz alokacja BitMap. Możesz napisać wiele różnych funkcji do konkretnych czynności blitujących, które będziesz mógł podmienić gdy będziesz chciał przeportować program pod CGX.

Z drugiej strony optymalizacja na AGA może nieść konsekwencje nie-portowalności kodu na kartę graficzną. Na przykład korzystanie z przerwań, bądź wyłączanie systemu, bądź korzystanie z własnych copperlist. W takim wypadku warto napisać plan programu zarówno na AGA i kartę graficzną.



Ostatnia modyfikacja: 12.06.2010 10:48:22
[#14] Re: Aplikacje na AGA i RTG - jak pisać sensownie?

@Minniat, post #13

Spoko, właśnie pisze z użyciem procedur systemowych i planuje pewne procedury optymalizacyjne włączać/wyłączać w zależności od obecności karty graficznej. Niestety z powodu padu klasyków idzie mi to powoli .

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem