kategoria: ANSI C
[#1] [C, RTG] Screen a okno..
Cześć,
RTG przeglądałem tylko pobieżnie, ale w przykładach które widziałem,
robiło się i nowy screen i nowe okno dla danej aplikacji. Ale o ile się nie myle i coś sobie sprawdzałem na szybko to narysować się dało chyba i na samym screnie, bez potrzeby otwierania okna. Chyba, że coś pokręciłem.

Innymi słowy, czy do pełnoekranowej aplikacji wystarczy że zrobię screen czy musze też okno.
Zaznaczam, że będę potrzebował pobrać stan klawiszy i myszki. Czy tworzenie również okna jest konieczne?

Dzięki..
[#2] Re: [C, RTG] Screen a okno..

@mateusz_s, post #1

A custom screen to nie jest to co by ci temat zalatwialo?
[#3] Re: [C, RTG] Screen a okno..

@mateusz_s, post #1

Jeżeli chcesz mieć zdarzenia myszy i klawiatury, musisz mieć okno. Dla aplikacji pełnoekranowej najlepiej typu backdrop czyli bez ramek i w tle. Do tego trzeba odpowiednim tagiem wyłączyć belkę ekranu przy jego otwieraniu.

Natomiast po rastporcie ekranu oczywiście, że można rysować bez okna.
[#4] Re: [C, RTG] Screen a okno..

@Krashan, post #3

Ja dodam do tego co napisałeś, że trzeba być ostrożnym w rysowaniu do RastPortu ekranu (&screen->RastPort).

Lepiej jest rysować do RastPortu okien (window->RPort) ze względu na to, że operacje zostaną przycięte do bitmapy ekranowej. Dlatego - tak jak napisałeś - bardzo przydaje się otwarcie okna na cały ekran typu Backdrop.

Co do tego czy aplikacja ma działać w oknie czy na własnym ekranie to sytuacja wygląda podobnie na RTG jak i AGA.

Ja polecam działać na własnym ekranie, jeżeli potrzebujesz podwójnego buforowania. Z kolei skorzystanie z okna systemowego zaoszczędzi pamięć i pozwoli użytkownikowi dostosować sobie okno programu do potrzeb.

Jeżeli chcesz załadować grafikę przeźroczyście RTG/AGA to polecam Datatypy i Remapowanie grafiki. Wówczas grafika zostanie dopasowana do palety ekranu, na której się znajduje.
[#5] Re: [C, RTG] Screen a okno..

@Hexmage960, post #4

Czy jak otwieram ekran i okno to da się jakoś parametry wyswietlania dziedziczyć z systemu ? - tj. jesli uzywam w WB RTG to nowy ekran okreslony jako np HIRES LACED i okno nie korzystają z RTG? Czy potrzeba to jakos wlaczac inaczej? Bo rozumiem ze gdy okno rzucam bezposrednio na WB to temat jest zalatwiony bo WB jest w RTG? Nie mam w klasyku zadnej karty graficznej i nie wiem czy dobrze to rozumiem. Zauwazylem ze aplikacja w AGA renderuje obraz dosyc wolno - 6fps - na NG ten sam kod 160 fps. Myslalem sobie, ze skoro tak to na np. Warp1260 powinno byc znaaacznie szybciej niz na AGA... No i nie jest... 8fps. Z tego wywnioskowalem ze na Warp moj screen korzysta z natywnego AGA a NG poprostu jest bardzo szybkie i tyle ?
[#6] Re: [C, RTG] Screen a okno..

@arturB, post #5

Z tego wywnioskowalem ze na Warp moj screen korzysta z natywnego AGA a NG poprostu jest bardzo szybkie i tyle ?

Przybliż o jaki program chodzi.

Bo z reguły prędkość działania zależy od szybkości procesora głównego. W Amidze z kartą Warp1260 masz procesor MC68060 o taktowaniu rzędu 50-100MHz. Zaś co do NextGeneration to z tego co wiem masz komputer Amiga One X5000 z procesorem PowerPC rzędu 2GHz, czyli 40 razy szybszy.

Dlatego też różnica 6fps kontra 160fps jest wytłumaczalna.

Jeśli chodzi o animację, to karta RTG udostępnia lepsze rozdzielczości i szybkość działania. Jednakże szybkość animacji tego ekranu za pomocą procesora jest zbliżona zarówno pod AGA jak i RTG.

Co innego Blitter, który posiada RTG oraz AGA. Przyśpiesza on znaczenie operacje rysujące. Na AGA w 320x256, czy 640x256 jest to prędkość przyzwoita (widać to np. w Deluxe Paint V). Pod 640x512 może dla całego ekranu być wolniej, bo Blitter musi przerzucić 4 razy więcej danych niż wynosi szerokość szyny.

Dla RTG jeżeli używamy Blittera karty, to nawet w wysokiej rozdzielczości uzyskasz dobrą prędkość.

Operacje typu BltBitMapRastPort() na ekranie/oknie RTG są z reguły przyśpieszane Blitterem.

Tak więc jest kilka czynników.

Ostatnia aktualizacja: 25.07.2021 16:00:57 przez Hexmage960
[#7] Re: [C, RTG] Screen a okno..

@Hexmage960, post #6

Ok. To ma sens... ale... w moim klasyku mam 030/25mhz i 6fps a w warp 8fps -zdecydowanie ponizej oczekiwań. Apka to moj "potworek" napisany w C i renderujacy 3d wypelnione z oswietleniem. Czy rysowanie blitterem jest wydajniejsze w jakis warunkach?
[#8] Re: [C, RTG] Screen a okno..

@arturB, post #7

Jeśli chodzi o pelnoekranowe rtg to otwieram ekran np. 320x240x32 najlepiej z listy, rysuje coś w swoim buforze a następnie ten bufor kopiuje na wyjście karty graficznej (memcpy) - tak robię swojego fpsa mam całkiem szybko, jeśli chce mieć to samo tylko w okienku to otwieram samo okienko W trybie takim jakim jest aktualnie workbench tu uzywam write pixel areay, możesz zerkać sobie na kod mojego engine, ktory udostępniłem
Pierwszy post sekcja download
https://www.ppa.pl/forum/programowanie/42708/moje-raycasterowe-zabawy-progresy-testy#m714808
[#9] Re: [C, RTG] Screen a okno..

@arturB, post #7

Blitter Amigi nie jest generalnie używany do 3D, choć można rysować i wypełniać nim wielokąty, również te przestrzenne.

Stawiam, że Twój program wykorzystuje CPU do obliczeń i nie wspomaga się Blitterem karty RTG. Dlatego na Warp 1260 masz 8 fps, a na NG masz 160 fps.
[#10] Re: [C, RTG] Screen a okno..

@Hexmage960, post #9

Ok. Sprawy mają się już całkiem źle. Dopisałem teksturowanie wielościanów i... świat się zatrzymał... prawie. Otóż nie spodziewałem się niczego innego bo do rysowania użyłem systemowego WritePixel() ale po testach chciałbym jakoś szybciej to generować. Teraz bedzie pytanie... czy na otwarty ekran pod systemem moge wyrzucać dane przez copper liste? Jest to jakoś zrobialne z C bez demolki tego systemu?
[#11] Re: [C, RTG] Screen a okno..

@arturB, post #10

Tak, że tego... silnik "działa" ...





I teraz pytanie do bardziej ogarniętych osobników w amigowej 3d grafice... Rysuje po pixelu uzywając pixelDraw... w rezultacie na prawdziwej a4000/040/25 uzyskuje max 5-6fps... Jak można drastycznie poprawić wyniki... Czy gdybym użył kolekcji dla przechowania pixeli a nastepnie zamienił sasiadujace ze sobą takie same kolory z kilku pixelDraw na jedną LineDraw to uzyskam jakąs poprawę czy gra nie warta swieczki ?
1
[#12] Re: [C, RTG] Screen a okno..

@arturB, post #11

Nie wiem jak z RTG, ale w AGA jest funkcja WritePixelArray8. Rysujesz sobie grafikę w zwykłej tablicy o wymiarach x na y, a następnie tą funkcją rysujesz bitmapę na ekranie. Jest to o wiele szybsze niż bezpośrednie rysowanie piksela na ekranie. WritePixelArray8 używa własnego c2p.

Ta funkcja pozwala także na przerysowanie jedynie wybranego fragmentu ekranu, dzięki czemu możesz przyspieszyć rysowanie.

Ostatnia aktualizacja: 04.06.2022 20:08:57 przez witekkk
3
[#13] Re: [C, RTG] Screen a okno..

@witekkk, post #12

Yyy... no tak. Popróbowane i jednak... potrzebuje jakiś przykład gdzie to działa na podwójnym buforze. Wydawało mi się proste ale poległem . Nie moge nic znaleźć z przykladów
[#14] Re: [C, RTG] Screen a okno..

@arturB, post #13

Obadaj sobie to

github

Powinno działać. Jak masz pytania to śmiało.
2
[#15] Re: [C, RTG] Screen a okno..

@asman, post #14

Był błąd związany z alokacją drugiego ScreenBuffer, (alokował dla tej samej bitmapy co pierwszy ScreenBuffer). Poprawiłem to i teraz działa.


Edit: Ogólnie jeszcze kilka rzeczy nie podoba mi się, ale to jak znajdę chwilę czasu to coś tam pogrzebię.

Ostatnia aktualizacja: 29.06.2022 09:00:38 przez asman
1
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