Files
FireBee_Setup/tools/zview/goodies/enhancer/docs/german/neue_fkt.txt
2022-10-02 10:09:40 +02:00

360 lines
15 KiB
Plaintext
Raw Blame History

Neue Funktionen in NVDI 2.50
============================
Nachfolgend werden in dieser Datei die neuen Funktionen aufgef<65>hrt, die
NVDI f<>r Bildschirmausgaben anbietet.
1. Off-Screen Bitmaps
=====================
F<>r viele Anwendungen ist es sehr n<>tzlich, wenn Zeichenfunktionen nicht
direkt auf den Bildschirm, sondern auf einen nicht sichtbaren Bildschirm
angewendet werden k”nnen. Einen derartigen "versteckten" Bildschirm
nennt man Off-Screen-Bitmap.
Zur Erzeugung von Off-Screen-Bitmaps dient die Funktion OPEN BITMAP.
Man kann ihr entweder die Gr”že eines Bitmap angeben, die Sie allozieren
soll, oder ihr eine Bitmap <20>bergeben. Die Bitmap wird im gleichen Format
wie die des Bildschirms verwaltet, wodurch schnelles Kopieren zwischen
beiden m”glich ist.
Die Funktion CLOSE BITMAP schliežt eine mit OPEN BITMAP erzeugte Bitmap
und gibt gegebenenfalls deren Speicher zur<75>ck.
OPEN BITMAP (VDI 100, 1)
void v_opnbm( WORD *work_in, MFDB *bitmap, WORD *handle, WORD *work_out )
{
pb[1] = work_in;
pb[3] = work_out;
pb[4] = work_out + 45;
contrl[0] = 100;
contrl[1] = 0;
contrl[3] = 20;
contrl[5] = 1;
*(MFDB *)&contrl[7] = bitmap;
vdi();
*handle = contrl[6];
pb[1] = intin;
pb[3] = intout;
pb[4] = ptsout;
}
Best<73>ckung der VDI-Arrays:
Feldelement | Belegung
------------------|-------------------------------------------
contrl[0] | 100 Funktionsnummer f<>r v_opnbm()
contrl[1] | 0 Anzahl der Eintr„ge in ptsin
contrl[2] | 6 Anzahl der Eintr„ge in ptsout
contrl[3] | 20 Anzahl der Eintr„ge in intin
contrl[4] | 45 Anzahl der Eintr„ge in intout
contrl[5] | 1 Unterfunktionsnummer f<>r v_opnbm()
contrl[6] | handle
contrl[7..8] | bitmap Zeiger auf einen MFDB der Bitmap
|
intin[0..19] | work_in[0..19]
|
intout[0..44] | work_out[0..44]
|
ptsout[0..11] | work_out[45..56]
handle: graf_handle()
work_in[0..10]: wie bei v_opnwk()/v_opnvwk() definiert
work_in[0]: Getrez() + 2
work_in[11]: Breite -1 (z.B. 1279)
work_in[12]: H”he -1 (z.B. 959)
work_in[13]: Breite eines Pixels in Mikrometern
work_in[14]: H”he eines Pixels in Mikrometern
work_in[15..19]: reserviert, sollte 0 enthalten
Achtung: Der Eintrag work_in[11] sollte bei Addition von 1 ohne Rest
durch 16 teilbar sein. Andernfalls rundet der VDI-Treiber
auf den n„chsth”heren ohne Rest teilbaren Wert.
Hinweis: Wird f<>r Pixelbreite und -H”he 0 angegeben, so werden die
Werte des Bildschirms benutzt.
work_out[0..1]: wie bei v_opnwk()/v_opnvwk() definiert
work_out[2]: 0
work_out[3..38]: wie bei v_opnwk()/v_opnvwk() definiert
work_out[39] 0 (keine Hardware-Palette vorhanden, da Bitmap)
work_out[39..56]: wie beiv_opnwk()/v_opnvwk() definiert
bitmap: Zeiger auf einen MFDB
Falls bitmap->fd_addr gleich NULL ist, so wird anhand der Gr”žen-
angaben in work_in Speicher f<>r die Bitmap angefordert (die Bitmap
wird im Gegensatz zu v_opnvwk() gel”scht).
Um eine Bitmap im ger„tespezifischen Format zu ”ffnen, muž
bitmap->fd_nplanes eine Null oder die Ebenenanzahl des Schirms
enthalten (work_out[4] bei vq_extnd()). Ist bitmap->fd_nplanes 1,
wird eine monochrome Bitmap angelegt.
Die Eintr„ge des MFDB (fd_addr, fd_w, fd_h, fd_wdwidth, fd_stand,
fd_nplanes) werden vom VDI-Treiber gesetzt und an die aufrufende
Applikation zur<75>ckgegeben. Wenn nicht nicht gen<65>gend Speicher
vorhanden ist, wird der Inhalt des MFDBs nicht ver„ndert; ein
Null-Handle wird zur<75>ckgegeben.
Wenn bitmap->fd_addr ungleich NULL ist, wird dieser Eintrag als
Zeiger auf eine Bitmap interpretiert. Wenn die Bitmap im
Standardformat vorliegt, wird sie ins ger„tespezifische Format
umgewandelt. Liegt sie schon im ger„tespezifischen Format vor, so
wird sie nicht umgewandelt. Falls die Aufl”sung der Bitmap (d.h.
die Anzahl der Farben und Planes) nicht unterst<73>tzt wird, gibt
v_opnbm() ein Null-Handle zur<75>ck.
CLOSE BITMAP (VDI 101, 1)
void v_clsbm( WORD handle )
{
contrl[0] = 101;
contrl[1] = 0;
contrl[3] = 0;
contrl[5] = 1;
contrl[6] = handle;
vdi();
}
Best<73>ckung der VDI-Arrays:
Feldelement | Belegung
------------------|-------------------------------------------
contrl[0] | 101 Funktionsnummer f<>r v_clsbm()
contrl[1] | 0 Anzahl der Eintr„ge in ptsin
contrl[2] | 0 Anzahl der Eintr„ge in ptsout
contrl[3] | 0 Anzahl der Eintr„ge in intin
contrl[4] | 0 Anzahl der Eintr„ge in intout
contrl[5] | 1 Unterfunktionsnummer f<>r v_clsbm()
contrl[6] | handle
Die Funktion v_clsbm() schliežt die mit handle bezeichnete Bitmap.
Wenn der Speicher beim v_opnbm() vom VDI alloziert wurde, gibt sie
diesen Speicher wieder frei.
Rasteroperationen bei Off-Screen-Bitmaps:
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Rasteroperationen zwischen Bildschirm und Off-Screen-Bitmap sollten
grunds„tzlich im ger„tespezifischen Format erfolgen.
Wenn als Ziel einer Rasteroperation eine Off-Screen-Bitmap mit ihrem
MFDB angegeben wird und wenn das zu dieser Bitmap geh”rende Handle
benutzt wird, so wird beim Blitten anhand der <20>ber vs_clip() auf dieser
Workstation eingestellten Koordinaten geclippt. F<>r das Kopieren eines
Rasters vom Bildschirm in eine Off-Screen-Bitmap sollte man also das
VDI-Handle dieser Bitmap benutzen.
Ist die Bitmap dagegen Quelle und der Bildschirm Ziel, so sollte man das
Handle der Bildschirm-Workstaion benutzen, da dann das Raster anhand der
Bildschirm-Koordinaten abgeclippt wird.
Wenn man das von v_opnbm() zur<75>ckgelieferte Handle einer Bitmap benutzt
und in fd_addr in einem MFDB 0 enth„lt, so werden die Daten der Bitmap
statt dessen benutzt.
ESCAPES
-------
Die VDI-Escape-Funktionen (VT52) k”nnen nicht auf einer Bitmap benutzt
werden. Ihr Aufruf wid ignoriert.
vs_color()/vq_color()
---------------------
Wenn die Funktion vs_color() mit dem Handle einer Off-Screen-Bitmap
aufgerufen wird, werden die Farben nur dann gesetzt, wenn es sich um
High- oder True-Color handelt. Vq_color() ist ebenfalls nur in High-
oder True-Color sinnvoll - andernfalls ist der Parameter valid -1.
vst_point()
-----------
Die Funktion vst_point() und alle anderen Funktionen, die Texth”hen in
Punkten einstellen, reagieren bisher nur dann sinnvoll, wenn die Bitmap
die Ausmaáe des Bildschirms hat.
v_show_c()/v_hide_c()
---------------------
Beide Funktionen werden ignoriert, falls sie mit dem Handle einer
Off-Screen-Bitmap aufgerufen werden. Sie beziehen sich nur auf den
Bildschirm und sollten nur vom AES aufgerufen werden.
2. vq_scrninfo()
=================
Genauere Angaben <20>ber das Bildschirmformat liefert die Funktion INQUIRE
SCREEN INFORMATION implementiert. Im workout-Array wird angeben, wie das
ger„tespezifische Format aufgebaut ist.
Diese Informationen sind in erster Linie interessant f<>r Programme, die
- schnell Raster aufbauen (auch in TrueColor) und diese mit vro_cpyfm()
auf den Schirm kopieren m”chten.
- Raster speichern (z.B. XIMGs).
- Raster anzeigen.
VQ_SCRNINFO( 102, 1 )
void vq_scrninfo( WORD handle, WORD *work_out )
{
pb[3] = work_out;
intin[0] = 2;
contrl[0] = 102;
contrl[1] = 0;
contrl[3] = 1;
contrl[5] = 1;
contrl[6] = handle;
vdi();
pb[3] = intout;
}
Best<73>ckung der VDI-Arrays:
Feldelement | Belegung
------------------|-------------------------------------------
contrl[0] | 102 Funktionsnummer von vq_scrninfo()
contrl[1] | 0 Anzahl der Eintr„ge in ptsin
contrl[2] | 0 Anzahl der Eintr„ge in ptsout
contrl[3] | 1 Anzahl der Eintr„ge in intin
contrl[4] | 272 Anzahl der Eintr„ge in intout
contrl[5] | 1 Unterfunktionsnummer von vq_scrninfo()
contrl[6] | handle
|
intin[0] | 2 erweiterte Informationen ausgeben
|
intout[0..272] | work_out[0..272]
intout[0]: Formatangabe:
0: Interleaved Planes, wortweise (ATARI Grafik)
1: Standardformat (komplette Planes)
2: Packed Pixels
-1: unbekanntes Format; nicht direkt beschreibbar
intout[1]: Verf<72>gbarkeit einer CLUT:
0: keine CLUT (z.B. TTM 194)
1: Hardware-CLUT
2: Software-CLUT (HiColor oder TrueColor)
intout[2]: Anzahl der Ebenen (Bits) pro Pixel
intout[3/4]:Farbanzahl oder 0L (mehr als 2*10^31 Farben)
intout[8]: Anzahl der Bits f<>r die Rot-Intensit„t
intout[9]: Anzahl der Bits f<>r die Gr<47>n-Intensit„t
intout[10]: Anzahl der Bits f<>r die Blau-Intensit„t
intout[11]: Anzahl der Bits f<>r den Alpha-Channel oder „hnliches
intout[12]: Anzahl der Bits f<>r Genlock
intout[13]: Anzahl der nicht benutzen Bits
Falls eine Hardware-CLUT (intout[1] == 1) vorhanden ist:
intout[16-271]: Pixelwert des zugeh”rigen VDI-Farbindexes
Falls HiColor, TrueColor oder „hnliches vorhanden ist:
intout[16..31]: Zuordnung von Bitnummer im Pixel zum Bit der Rotintensit„t
intout[32..47]: Zuordnung von Bitnummer im Pixel zum Bit der Gr<47>nintens.
intout[48..63]: Zuordnung von Bitnummer im Pixel zum Bit der Blauintensit„t
intout[64..79]: Zuordnung der Bitnummer f<>r Alpha-Channel
intout[80..95]: Zuordnung der Bitnummer f<>r Genlock
intout[96..127]: unbenutzte Bits
intout[128..271]: reserviert (0)
Beispiele:
----------
In 256 Farben auf dem Falcon w<>rden folgende Ausgaben erfolgen:
intout | Wert | Bedeutung
---------|--------|-----------------------------------------------------
0 | 0 | Interleaved Planes, wortweise
1 | 1 | Hardware-CLUT vorhanden
2 | 8 | 8 Bit pro Pixel
3/4 | 256 | 256 verschiedene Farben gleichzeitig m”glich
8 | 6 | 6 Bits f<>r die Rot-Intensit„t
9 | 6 | 6 Bits f<>r die Gr<47>n-Intensit„t
10 | 6 | 6 Bits f<>r die Blau-Intensit„t
11 | 0 | kein Bit f<>r Alpha-Channel
12 | 0 | kein Bit f<>r Genlock
13 | 0 | kein unbenutzes Bit
| |
| |
16 | 0 | Pixelwert f<>r VDI-Farbindex 0
17 | 255 | Pixelwert f<>r VDI-Farbindex 1
18 | 2 | Pixelwert f<>r VDI-Farbindex 2
... | ... |
271 | 15 | Pixelwert f<>r VDI-Farbindex 255
In HiColor auf dem Falcon w<>rden folgende Ausgaben erfolgen:
intout | Wert | Bedeutung
---------|--------|-----------------------------------------------------
0 | 2 | Packed Pixels
1 | 2 | HiColor bzw. TrueColor
2 | 16 | 16 Bit pro Pixel
3/4 | 32768 | 32768 verschiedene Farben gleichzeitig m”glich
8 | 5 | 5 Bits f<>r die Rot-Intensit„t
9 | 5 | 5 Bits f<>r die Gr<47>n-Intensit„t
10 | 5 | 5 Bits f<>r die Blau-Intensit„t
11 | 0 | kein Bit f<>r Alpha-Channel
12 | 1 | ein Bit f<>r Genlock
13 | 0 | kein unbenutzes Bit
| |
| |
16 | 11 | Bit 0 der Rot-Intensit„t (niederwertigstes Bit)
| | befindet sich in Bit 11 des Pixels
17 | 12 | Bit 1 befindet sich in Bit 12 des Pixels
18 | 13 | ...
19 | 14 | ...
20 | 15 | Bit 4 der Rot-Intensit„t (h”chstwertigstes Bit)
| | befindet sich in Bit 15 des Pixels
21..31 | -1 | Bits werden nicht f<>r Rot-Intensit„t benutzt
| |
| |
32 | 6 | Bit 0 der Gr<47>n-Intensit„t (niederwertigstes Bit)
| | befindet sich in Bit 6 des Pixels
33 | 7 | Bit 1 befindet sich in Bit 7 des Pixels
34 | 8 | ...
35 | 9 | ...
36 | 10 | Bit 4 der Gr<47>n-Intensit„t (h”chstwertigstes Bit)
| | befindet sich in Bit 10 des Pixels
37..37 | -1 | Bits werden nicht f<>r Gr<47>n-Intensit„t benutzt
| |
| |
48 | 0 | Bit 0 der Blau-Intensit„t (niederwertigstes Bit)
| | befindet sich in Bit 0 des Pixels
49 | 1 | Bit 1 befindet sich in Bit 1 des Pixels
50 | 2 | ...
51 | 3 | ...
52 | 4 | Bit 4 der Blau-Intensit„t (h”chstwertigstes Bit)
| | befindet sich in Bit 4 des Pixels
53..63 | -1 | Bits werden nicht f<>r Blau-Intensit„t benutzt
| |
| |
64..79 | -1 | kein Alpha-Channel
| |
| |
80 | 5 | Bit f<>r Genlock
81..95 | -1 | nicht f<>r Genlock benutzt
| |
| |
96..127| -1 | keine unbenutzten Bits
| |
| |
3. Wie erkennt man, ob die neuen Funktionen vorhanden sind?
===========================================================
NVDI installiert (ebenso wie der nur f<>rs ATARI-VDI gedachte Enhancer)
einen Cookie mit der Kennung 'EdDI'. Das auf diese Kennung folgende
Langwort ist die Adresse eines Funktionsdispatchers, der mit der
Funktionsnummer in Register d0 aufgerufen wird. Der Aufruf erfolgt nach
den Pure C-Konventionen (Register d0-d2/a0-a1 und der Stack werden zur
Parameter<65>bergabe benutzt).
Bisher existiert nur die Funktion 0, die als Funktionsresultat eine
Versionsnummer zur<75>ckliefert, anhand er man auf die unterst<73>tzten
Funktionen schlieáen kann.
Ab Version 1.00 ($100 wird zur<75>ckgeliefert) sind die Funktionen
v_opnbm(), v_clsbm() und vq_scrninfo() vorhanden.