[#1] Custom Bitmap
Otwieram systemowo ekran OpenScreen podając mu adres własnej bitmapy. Czasem bitmapa nie spełnia wymogów szerokości (podzielność szerokości przez 16,32 itd.) np. w trybie hires (w lores jest ok). Wtedy ekran się otwiera bezbłędnie, ale bitmapa się nie wyświetla. Czy jest możliwość programowego wykrycia takiej sytuacji?
[#2] Re: Custom Bitmap

@cholok, post #1

Myślę, że warunek GetBitMapAttr(bm, BMA_FLAGS) & BMF_DISPLAYABLE powinien wystarczyć.

Przeczytałem, że jeżeli jednak nie stosujesz AllocBitMap(), to możesz dowiedzieć się, czy bitmapa jest prawidłowo dosunięta dla danego trybu poprzez funkcję MakeVPort() lub MakeScreen().

Od wersji V39 systemu zwracają one błąd MVP_NO_DISPLAY kiedy bitmapa nie spełnia wymogów.

Gorąco jednak polecam AllocBitMap() dla OS 3.

Ostatnia aktualizacja: 27.02.2022 16:08:52 przez Hexmage960
[#3] Re: Custom Bitmap

@Hexmage960, post #2

GetBitMapAttr nie wystarcza. AllocBitMap nie mogę użyć, bo wczytuję bitmapę bezpośrednio z pliku, a tam dosunięcie jest do słowa, a pozwalam userowi na użycie trybu hires na życzenie. To funkcja OpenScreen powinna zwrócić błąd, a nie zwraca. Sprawdzę ten MakeScreen.
[#4] Re: Custom Bitmap

@Hexmage960, post #2

MakeScreen nie działa.

Ostatnia aktualizacja: 27.02.2022 20:28:32 przez cholok
[#5] Re: Custom Bitmap

@cholok, post #4

Według mnie system nie akceptuje z jakichś powodów Twojej bitmapy. Proszę podaj jak ją inicjujesz. Nie wykluczone, że to błąd w funkcji systemowej, choć mało prawdopodobne.

W dokumentacji sugerują zaalokować BMF_DISPLAYABLE i skopiować tam bitmapę, może to dobre rozwiązanie?
[#6] Re: Custom Bitmap

@Hexmage960, post #5

Skoro nie akceptuje to niech wypluje błąd. Bitmapa 336x255x8, allign 16-bit.
Używam InitBitmap(), OpenScreen z custom bitmap.
W lowres się otwiera normalnie, w hires wyświetla tylko tło.
Hires 256 col wymaga podzielności przez 32, no więc czemu nie wypluwa błędu,
a skoro nie, to jak go samemu wyłapać?
[#7] Re: Custom Bitmap

@cholok, post #6

Sprawdziłem i faktycznie system nie wypluwa w tym przypadku błędu. U mnie taki ekran jest niewidoczny (tylko jakaś jedna linijka u spodzie ekranu Workbencha).

Nieważne czy InitBitMap(), czy AllocBitMap() bez BMF_DISPLAYABLE.

Ale sprawdziłem i MakeVPort() na ViewPort ekranu wypluwa błąd 4 (MVP_NO_DISPLAY) tak jak powinno. Więc po tym sprawdzisz.

Dodane: Ale GetBitMapAttr(BMA_FLAGS) zwraca prawidłowo BMF_DISPLAYABLE (0x2) dla bitmapy o szerokości 320 i brak tej flagi dla bitmapy o szerokości 336 (dla obu metod alokacji bitmapy), więc po tym też rozpoznasz!

Ostatnia aktualizacja: 27.02.2022 23:37:37 przez Hexmage960
[#8] Re: Custom Bitmap

@Hexmage960, post #7

MakeVPort działa, dzięki.
GetBitMapAttr nie działa, bo dla 336 nie wyświetla displayable, a w lores jest displayable. Ta funkcja nie zna view mode.
[#9] Re: Custom Bitmap

@cholok, post #8

GetBitMapAttr nie działa, bo dla 336 nie wyświetla displayable, a w lores jest displayable. Ta funkcja nie zna view mode.

Tak, ta funkcja nie ma dostępu do ViewPortu.

W notatkach na temat Intuition dla systemu w wersji V39 jest napisane, że w przypadku, gdy bitmapa nie spełnia wymogów (czyli jest podzielna tylko przez 16) ekran schodzi do trybu 1x, o ile wyświetlenie takiego ekranu jest możliwe.

W innym miejscu jest napisane, że ekran może być otwarty "wypaczony" (ang. "skewed"), kiedy bitmapa nie spełnia wymagań co do tej podzielności.

Ja myślę, że na poziomie intuition.library zakłada się dla uproszczenia, że jeżeli bitmapa jest podzielna tylko przez 16, jak w systemach 1.3, 2.1 to w konsekwencji program otwierający ekran, otwiera go w rozdzielczości Lores do 5 (8) bitplanów/Hires do 4 bitplanów.

Oczywiście OpenScreen powinien zwrócić w innym przypadku błąd. Myślę, że chciano ukryć takie szczegóły implementacji za pomocą BMF_DISPLAYABLE, dlatego jako Secondary Error nie ma kodu tego błędu.

Wspomniano też, że InitBitMap()/AllocRaster() nie mogło być dostosowane ze względu na kompatybilność.
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