home *** CD-ROM | disk | FTP | other *** search
- Neue Funktionen in NVDI 2.50
- ============================
-
- Nachfolgend werden in dieser Datei die neuen Funktionen aufgefü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 ü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ü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ü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ückgegeben. Wenn nicht nicht genügend Speicher
- vorhanden ist, wird der Inhalt des MFDBs nicht verändert; ein
- Null-Handle wird zurü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ützt wird, gibt
- v_opnbm() ein Null-Handle zurü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ü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 ü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ü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 ü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ü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ü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ü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ü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ü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ü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ü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ün-Intensität (höchstwertigstes Bit)
- | | befindet sich in Bit 10 des Pixels
- 37..37 | -1 | Bits werden nicht für Grü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übergabe benutzt).
-
- Bisher existiert nur die Funktion 0, die als Funktionsresultat eine
- Versionsnummer zurückliefert, anhand er man auf die unterstützten
- Funktionen schlieβen kann.
-
- Ab Version 1.00 ($100 wird zurückgeliefert) sind die Funktionen
- v_opnbm(), v_clsbm() und vq_scrninfo() vorhanden.
-
-