-
GEBIET DER ERFINDUNG
-
Die
vorliegende Erfindung betrifft allgemein Computergraphik und insbesondere
Signalverarbeitungsverfahren für
mehrdimensionale Graphiksysteme mit optimiertem Speichermapping
für Graphikobjekte.
-
HINTERGRUND DER ERFINDUNG
-
Die
Verwendung und Anwendung von Computergraphik auf alle Arten von
Systemumgebungen steigt mit der Verfügbarkeit von immer schnelleren
Informationsverarbeitungs- und Abrufvorrichtungen weiterhin in einem
immer größeren Ausmaß an. Die Betriebsgeschwindigkeit
solcher Vorrichtungen bleibt eine Designaufgabe mit hoher Priorität. Dies
gilt besonders bei einem Graphiksystem und sogar in noch größerem Ausmaß bei 3D-Graphiksystemen.
Solche Graphiksysteme erfordern eine große Verarbeitungsaufgabe für große Datenmengen
und die Geschwindigkeit des Datenstroms ist kritisch beim Bereitstellen eines
neuen Produkts oder Systems in Designgraphiksystemen zur Anwendung
für neue
Verwendungen.
-
Im
Gebiet der Computergraphik existieren viele Verfahren, um Polygone
in ein Pixelgitter zu zeichnen. Polygone werden als Zeichengrundelemente
für viele
Anwendungen verwendet, wie graphische Benutzerschnittstellen, computerunterstütztes Design
und 3D-Computeranimation. Die meisten Techniken zum Zeichnen von
Polygonen reduzieren das Polygon in eine Serie von Abtastlinien,
die mit den Rändern
des Polygons und mit dem Pixelgitter ausgerichtet sind. Wenn diese
Verfahren in Hardware implementiert werden, wird auf das Pixelgitter
allgemein mit einem sequenziellen Verfahren zugegriffen, d. h. für jeden
XY-Pixelzugriff wird das Pixelgitter auf der Grundlage der XY-Adresse
aktuali siert. Für
ein Pixelgitter, das eine große
Aufbauzeit pro Pixelaktualisierung aufweist, kann dies ein zeitlicher
Flaschenhals für
das System werden.
-
Bei
allen Daten- und Informationsverarbeitungssystemen und insbesondere
bei Computergraphiksystemen wird viel Zeit zum Zugriff auf Daten
von einem Speicher oder einer Speicherstelle, darauffolgendem Verarbeiten
dieser Information und Senden der verarbeiteten Information zu einer
anderen Stelle zum nachfolgenden Zugriff, Verarbeiten und/oder Anzeigen
verbraucht. Mit der immer weiteren Erhöhung der Geschwindigkeit von
neuen Prozessoren wird die Zugriffszeit zum Zugriff und zum Abruf
von Daten von dem Speicher immer mehr ein Flaschenhals hinsichtlich
der Systemgeschwindigkeit.
-
Graphiksysteme
müssen
in der Lage sein, ausgefeiltere Funktionen in geringerer Zeit durchzuführen, um
größere Mengen
von Graphikdaten, die durch moderne Softwareanwendungen erfordert
werden, zu verarbeiten. Es gibt einen anhaltenden Bedarf nach Verbesserungen
in Softwareverfahren und Hardwareimplementationen, um dreidimensionale Objekte
unter Verwendung von Vollfarbe, Schattierung, Texturmapping und
Transparenzmischen zu zeichnen.
-
Die
Entwicklung von Rasteranzeigesystemen reduzierte die Gesamtkosten
dramatisch und erhöhte
die Fähigkeiten
von Graphiksystemen. In einem Rasteranzeigesystem bildet ein Satz
von horizontalen oder orthogonalen Abtastlinien, von denen jede
eine Zeile von Pixeln umfasst, ein Feld oder Gitter von Pixeln,
um den gesamten Schirmbereich zu repräsentieren. Der Schirm ist bevorzugt
eine Kathodenstrahlröhre
(CRT) oder ein Flüssigkristalldisplay (LCD)
oder dgl., das in der Lage ist, das gesamte Pixelgitter mit einer
relativ hohen Rate abzutasten, um Flackern so weit als möglich zu
reduzieren.
-
Die
Pixeldaten werden bevorzugt in einem Framepuffer gespeichert, der
dynamische Direktzugriffsspeicher (DRAMs) umfasst, wobei jedes Pixel abhängig von
der gewünschten
Auflösung,
Farbe, Helligkeit und anderen Variablen durch ein oder mehrere Bits
repräsentiert
wird. Typische Displaysysteme kön nen
Schirme mit mehreren Farben mit einer Vielzahl von Schirmauflösungen zeichnen,
wie etwa, aber nicht begrenzt auf, 640 × 480, 800 × 600, 1024 × 768, 1280 × 1024 oder
andere Kombinationen abhängig
von den verwendeten Softwaretreibern und der Hardware. Ein Videocontroller
tastet die Pixeldaten in dem Framepuffer ab und wandelt sie zu den Steuer/Regelsignalen
um, die durch das Schirmsystem erfordert werden, um die Information
auf dem Schirm anzuzeigen. Der Videocontroller tastet jedes der
Pixel sequenziell ab, von oben nach unten und von links nach rechts,
und wandelt Pixeldaten in Intensitätswerte für entsprechende Pixel auf dem Schirm
um. In einem Farbgraphiksystem, das ein CRT verwendet, werden drei
getrennte Strahlen gesteuert/geregelt, d. h. ein Strahl für jede der
Primärfarben,
wobei die Intensität
jedes der Strahlen durch den Pixelwert entsprechend den jeweiligen
Farben bestimmt ist. Ein ähnliches
System wird für
LCD-Vorrichtungen verwendet. Jeder Pixelwert kann z. B. 24 Bit umfassen,
d. h. ein 8-Bit-Byte für
jede der Primärfarben
Rot, Grün
und Blau, wobei der Bytewert die Intensität der jeweiligen anzuzeigenden
Farbe bestimmt.
-
Ein
Pixelgitter im Speicher ist eine Repräsentation eines zweidimensionalen
Raums in einem Linearzugriffsspeicher. Der Linearzugriffsspeicher
besitzt inkrementierende Adressen für jede Stelle im Speicher,
d. h. einen eindimensionalen Raum. Ein zweidimensionaler Raum kann
in einer eindimensionalen Adressierung durch Erzeugen eines Pitchwerts für den "Y"-Parameter repräsentiert werden, d. h. für jedes
Inkrement "Y" existieren eine
Anzahl von Pixelgitterstellen in "X".
Dies erlaubt es, dass eine lineare Adresse aus einem zweidimensionalen
XY-Pixelgitterzugriff berechnet wird. Die meisten Verfahren zum Zeichnen
eines Pixelgitters verwenden das obige Verfahren, um auf ein Pixelgitter
zuzugreifen. Das XY-Mapping wird zu der Zeit festgehalten, zu der
die Polygone auf der Grundlage des gegenwärtigen zweidimensionalen Pixelgitters
im Speicher gezeichnet werden. Von diesem Punkt an wird das Pixelgitter,
solange nichts anderes genannt ist, als eine feste zweidimensionale
Repräsentierung
eines Pixelgitters in dem linear adressierten Speicher angenommen.
-
Ein
Polygon wird als ein Satz von Punkten in dem Pixelgitter repräsentiert,
die den Schnittpunkt des zu zeichnenden Polygons abbilden. Die Definition
der meisten Linien und Polygone sind stetige Funktionen, die durch
das Pixelgitter nur angenähert werden
können.
Polygone werden in Computergraphik allgemein durch Zerlegen der
Definition des Polygons in einen Satz von Grenzbedingungen gezeichnet,
die Vertexpunkte genannt werden und die Näherungen der Endpunkte des
Polygons in einem Pixelgitter repräsentieren. Diese Vertexpunkte
werden dann in einen Satz von Abtastlinien für jede Y-Abtastung in der X-Richtung
für jedes
Pixel in der X-Richtung, das innerhalb des Polygons enthalten ist,
zerlegt.
-
Unter
besonderer Bezugnahme auf Computergraphikanwendungen werden Repräsentationen von
Bildern in pixelorientierten Framepuffern gespeichert. Das Referenzframe
für Videopuffer
ist ein Nullpunkt relativ zu einer Matrix von Speicherpositionen für Speicherpixelwerte
und Information, die die ein anzuzeigendes Bild definierenden Pixeleigenschaften
betrifft. Diese Nullpunktspeicherposition entspricht einer Nullpunktpixelposition
auf einem Anzeigeschirm, der zur Anzeige des in den gespeicherten Pixeln
enthaltenen Bildes verwendet wird. Ein String oder eine Zeile von
Daten aus dem Puffer entspricht einer Zeile von Pixeln auf dem Anzeigeschirm.
Wenn ein Bild auf einem Anzeigeschirm erneuert wird, wird jede Zeile
von Daten, die in dem Videospeicher gespeichert sind, sequenziell
aus dem Speicher zugegriffen und zu der Anzeigevorrichtung übertragen,
um entsprechende sequenzielle Linien von Pixeln auf der Anzeige
zu füllen.
Jeder solche Zugriff und jede solche Übertragung weist eine denselben
zugeordnete Verzögerungszeit
auf, die bislang relativ unveränderbar
war, wegen der inhärenten
Abhängigkeit des
Speicherprozesses von dem Abtastprozess, d. h. die Initiierung jeder
Speicherlinie beginnt mit dem am weitesten links angeordneten Pixel
jeder Anzeigeabtastlinie ohne Rücksicht
auf die Position in der Abtastlinie, die das erste Bit von der Bilddefinition
enthält.
Diese Beziehung erforderte, dass eine gewisse feste Anzahl von Zugriffen
existiert und die damit verbundenen Verzögerungen für eine entsprechend feste Anzahl
von Schirmabtastungen pro Schirmanzeige.
-
Gegenwärtige Implementationen
zeichnen jede Abtastlinie in dem Pixelgitter als eine Serie von XY-Zugriffen
auf das Pixelgitter. Wenn jedes Pixel erzeugt wird, wird es sequenziell
aus dem Pixelgitter herausgeschrieben. Mit dem obigen Verfahren
des Zeichnens von Polygonen auf einem Pixelgitter ist die Anzahl
von Zugriffen auf das Pixelgitter gleich der Anzahl von innerhalb
der Repräsentation
des Polygons in dem Pixelgitter enthaltenen Pixeln. Für Speichersubsysteme
mit einer relativ großen
Zugriffszeit für
sequenziellen Zugriff auf das Pixelgitter kann die Zugriffszeit
pro Pixel der begrenzende Faktor für die in einem zeitlich festgelegten
Intervall zu zeichnende Anzahl von Polygonen sein. Viele Speichersubsysteme
weisen eine große
Zugriffszeit auf, aber kompensieren dies, indem sie in der Lage
sind, sequenzielle Zugriffe zu beschleunigen, nachdem der erste
Zugriff gemacht worden ist.
-
Die
Patentanmeldung GB 2 251 770 betrifft ein Graphikbeschleunigersystem,
das den Speicherzugriff optimiert durch Zugreifen der Patches, die
teilweise innerhalb des Polygons liegen. Das offenbarte System führt eine
Polygontraversierung unter Bezugnahme auf Patches von Pixeln durch.
Das Polygon wird traversiert – Patch
für Patch – mit einer
Art von Rasterabtastung. Nachdem eine Zeile von Patches beendet
ist, wird die nächste
Zeile von Patches an derselben Ausgangsposition gestartet, aber
die Richtung der Bewegung wird derart ausgewählt, dass die Chancen minimiert
werden, durch viele leere Patches zu wandern, bevor das Polygon
gefunden wird.
-
Demzufolge
existiert ein Bedarf für
ein neues Verfahren zur Erhöhung
der Anzahl von Pixeln, die pro Zugriff gezeichnet werden, um die
Gesamtzahl von erforderlichen Zugriffsoperationen zu reduzieren und
ebenfalls die erforderliche Zeit zu reduzieren und die Geschwindigkeit
des Systems zu erhöhen.
Es existiert ebenfalls ein Bedarf für ein verbessertes Verfahren
und eine Vorrichtung, die zur Maximierung der Anzahl von verarbeiteten
Daten wirksam sind und ebenfalls zur Maximierung der Informationstransfereffizienz,
d. h. zur Maximierung des Anteils der nützlichen Daten, auf die pro
Abtastung zugegriffen wird.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Ein
Verfahren und System wird vorgesehen, um optimal einen schnellen
Speicher in Segmente aufzuteilen, wobei jedes der Segmente mit der
Form eines Graphikobjekts in Beziehung steht, welches auf einer
Anzeigevorrichtung gezeichnet werden kann. Das Verfahren ist iterativ
und fährt
fort, objektreferenzierte minimal große Speichersegmente zu definieren,
bis das gesamte Objekt für
die weitere Verarbeitung segmentiert worden ist.
-
KURZE BESCHREIBUNG DER
ZEICHNUNGEN
-
Ein
besseres Verständnis
der vorliegenden Erfindung kann erhalten werden, wenn die folgende detaillierte
Beschreibung einer bevorzugten Ausführungsform in Verbindung mit
den begleitenden Zeichnungen betrachtet wird, in denen:
-
1 ein Blockdiagramm eines
Computersystems einschließlich
eines Graphiksystems ist,
-
2 ein Blockdiagramm des
in 1 gezeigten Graphiksystems
ist,
-
3 ein Flussdiagramm ist,
das eine Gesamtmethodologie zur Verarbeitung von Graphikanzeigedaten
zeigt,
-
4 ein Flussdiagramm ist,
das einen Betriebsfluss für
ein optimiertes Speichersegmentdatenspeicherverfahren zeigt,
-
5 eine Illustration des
Abtastens eines Objekts auf einem Anzeigeschirm ist,
-
6 eine Illustration ist,
die verschiedene mögliche
teilobjektbasierte Pixelbereichsabdeckungsmuster zeigt,
-
7 eine Illustration ist,
die eine Anwendung von Pixelabdeckungsmustern auf einem exemplarischen
Anzeigeobjekt zeigt,
-
8 eine Illustration ist,
die eine Punktreferenz-Objektabtastverfahren zeigt,
-
9 ein Flussdiagramm ist,
das die Details einer der in 3 gezeigten
Operationen zeigt,
-
10 ein Flussdiagramm ist,
das die Details einer anderen in 3 gezeigten
Operation zeigt,
-
11 ein Flussdiagramm ist,
das die Details des "ZEICHNE
IN DAS SRAM"-Schritts zeigt, der
in 9 gezeigt ist, und
-
12 eine Illustration der
Details eines der Schritte des in 11 gezeigten
Flussdiagramms ist.
-
DETAILLIERTE BESCHREIBUNG
-
Gemäß der offenbarten
Ausführungsform wird
ein Speicher mit schnellem sequenziellen Zugriff verwendet, um Teile
eines Polygons zu zeichnen. Eine Pixelschreibmaske wird verwendet,
um zu bestimmen, welche Pixel aus dem sequenziellen Schnellzugriffsspeicher
auf das Pixelgitter gezeichnet werden. Dies ermöglicht es, dass auf den Pixelgitterspeicher
in zwei Dimensionen im Burstverfahren zugegriffen wird. Das offenbarte
Verfahren wird verwendet, um zu bestimmen, welche Teile des gegenwärtig zu
zeichnenden Polygons in den sequenziellen Schnellzugriffs- oder
Scratch-Pad-Speicher passen. Der Scratch-Pad-Speicher wird dann
mit den zu zeichnenden Pixeln gefüllt. Der Scratch-Pad-Speicher
besitzt kein festes XY-Mapping während
des Zeichnens eines Polygons, wie es das Pixelgitter aufweist, sondern
ist variabel und basiert auf dem Teilblock des zu zeichnenden Polygons.
Dies ermöglicht es,
dass das Polygon mit Blöcken
von verschiedener Breite und Höhe
ausgefüllt
wird. Das Verfahren des Zeichnens von Polygonen ist das Abtastlinienverfahren, aber
die Y-Dimension wird in Inkremente von Eins oder mehr aufgebrochen,
auf Grundlage der Blockgröße, die
in den Scratch-Pad-Speicher passen kann. Jedes Pixel wird in den
Scratch-Pad-Speicher gezeichnet, als ob es in das Pixelgitter gezeichnet würde, und
eine Pixelschreibmaske wird verwendet, um die auf das Scratch Pad
gezeichneten Pixel zu verfolgen. Wenn ein Block gefüllt ist
oder seine Grenze in Y erreicht, wird er nachfolgend zu dem Pixelgitter übertragen.
Die Pixelschreibmaske wird verwendet, um zu bestimmen, welche Pixel
gezeichnet werden. Dies hält
das Speichersubsystem, in dem das Pixelgitter enthalten ist, im
Burstmodus, wodurch die Speicherbandbreite optimiert wird.
-
In
der offenbarten Implementierung kann ein 128 Byte SRAM auf einer
Chipausführung
zur Verwendung als Scratch-Pad-Speicher vorhanden sein. Das Pixelgitter
ist eine XY-Karte und kann in dem Framepuffer angeordnet sein. Der
Scratch-Pad-Speicher weist vier Potenzen von "2"-Pitches
auf, die als "1 × 128", "2 × 64", "4 × 32" und "8 × 16" in XY definiert
sind. Das Pixelgittermapping hängt
von dem Speichermappingmodus der Speichersteuer/regeleinheit ab.
Eine Ein-Bit-Pixelschreibmaske wird verwendet, um die – Pixeloctobytes
(8 Bytes) zu bestimmen, die in den Speicher zurückgeschrieben werden sollen.
Der Scratch-Pad-Speicher ist auf der Grundlage der Anzahl von Bytes
pro Pixelformat rekonfigurierbar.
-
Unter
Bezugnahme auf 1 können die verschiedenen
oben diskutierten Verfahren innerhalb eines typischen Computersystems
oder einer Workstation 101 implementiert sein. Eine typische
Hardwarekonfiguration einer Workstation, die in Verbindung mit der
vorliegenden Erfindung verwendet werden kann, ist gezeigt und enthält eine
Zentralprozessoreinheit (CPU) 103, wie einen herkömmlichen
Mikroprozessor, und eine Anzahl von anderen durch einen Systembus 105 verbundenen
Einheiten. Der Bus 105 kann eine Erweiterung 121 für weitere
Verbindungen zu anderen Workstations oder Netzwerken und dgl. enthalten.
Die in 1 gezeigte Workstation enthält einen
System-Direktzugriffsspeicher
(RAM) 109, und einen System-Nur-Lese-Speicher (ROM) 107.
Der Systembus 105 ist ebenfalls typischerweise durch einen
Benutzerschnittstellenadapter 115 mit einer Tastaturvorrichtung 111 und
einer Maus oder einer anderen Zeigevorrichtung 113 verbunden.
Andere Benutzerschnittstellenvorrichtungen, wie eine Touch-Screen-Vorrichtung
(nicht gezeigt), können ebenfalls
mit dem Systembus 105 durch den Benutzerschnittstellenadapter 115 gekoppelt
sein. Eine Graphikvorrichtung 117 ist ebenfalls zwischen
dem Systembus 105 und einer Monitor- oder Anzeigevorrichtung 119 verbunden
gezeigt. Da die Workstation oder das Computersystem 101,
innerhalb der/dem die vorliegende Erfindung implementiert ist, größtenteils
in der Technik allgemein bekannt ist und aus elektronischen Komponenten
und Schaltungen aufgebaut ist, die ebenfalls dem Fachmann allgemein bekannt
sind, werden Schaltungsdetails über
diejenigen in 1 gezeigten
hinaus nicht weiter erläutert als
die die, wie oben gezeigt, zum Verständnis und zur Würdigung
der der vorliegenden Erfindung zugrundeliegenden Konzepte für notwendig
erachtet wurden, und um die Lehren der vorliegenden Erfindung nicht
zu verschleiern oder von diesen abzulenken.
-
In 2 ist gezeigt, dass der
Systembus 105 mit der Graphikvorrichtung – oder dem
Subsystem 117 verbunden ist. Die Graphikvorrichtung 117 kann z.
B. einen Graphikprozessor 201 enthalten, der derart ausgebildet
ist, dass er Information oder Daten von einer Framepuffereinheit 203 verarbeitet, überträgt und empfängt. Die
Framepuffereinheit 203 enthält Frameanzeigeinformation,
auf die durch den Graphikprozessor 201 zugegriffen wird,
der wiederum mit einer Anzeigevorrichtung 119 verbunden
ist. Die Anzeigevorrichtung 119 ist derart betreibbar, dass
sie eine Graphikanzeige der in dem Framepuffer 203 gespeicherten
Information bereitstellt, wie sie durch den Betrieb des Graphikprozessors 201 verarbeitet
wurde. Obwohl das vorliegende Beispiel einen von einer System-CPU 103 getrennten
Graphikprozessor 201 zeigt, versteht es sich, dass die
vorliegende Erfindung nicht darauf beschränkt ist, einen separaten Graphikprozessor
zu haben, sondern ebenfalls Systeme enthält, in denen die hierin gelehrte
Methodologie innerhalb oder als Teil einer einzelnen System- CPU oder eines anderen
größeren Systemchips oder
einer integrierten Schaltung implementiert ist.
-
In 3 beginnt das offenbarte
Verfahren mit einem POLY-ZEICHNEN-Befehl 301. Der POLY-ZEICHNEN-Befehl
referenziert bestimmte Information, die das zu zeichnende Polygon
betrifft, wie die verschiedenen Steigungen des zu zeichnenden Polygons
ebenso wie die verschiedenen Vertizes oder Punkte des Polygons.
Als Nächstes
bestimmt der Prozess die XY-Schnellspeichersegmentgröße 303.
Dieser Prozess wird detaillierter in Verbindung mit 4 bis 8 erläutert, aber
es sei bemerkt, dass der Segmentgrößenbestimmungsschritt eine Schnellspeicherverwendungsoptimierung
ermöglicht,
sodass ein schneller sequenzieller Zugriff verwendet wird, um Teile
eines Polygons zu zeichnen, und eine Pixelschreibmaske verwendet
wird, um zu bestimmen, welche Pixel von dem sequenziellen Schnellzugriffsspeicher
zu dem Pixelgitter oder Framepuffer zur Präsentation auf dem Schirm oder
der Anzeigevorrichtung gezeichnet werden.
-
Der
Bestimmung der Segmentgröße 303 folgend
werden die Segmente 305 in einen sequenziellen Schnellspeicher
gezeichnet, z. B. einen SRAM. Der SRAM im vorliegenden Beispiel
ist in den Graphikchip eingebaut, aber es versteht sich, dass ein System-
oder anderer Off-Chip SRAM ebenfalls verwendet werden kann. In der
vorliegenden Offenbarung werden die Ausdrücke "SRAM", "Schnellspeicher" und "sequenzieller Schnellzugriffsspeicher" austauschbar verwendet,
um einen sogenannten "Scratch-Pad-Speicher" zu bezeichnen, der
in dem Graphiksubsystemprozessor 201 im vorliegenden Beispiel
enthalten ist. Nachdem das Segment in den Scratch-Pad-Speicher 305 gezeichnet
ist, wird das Segment gespeichert 307, wie hierin im Folgenden detaillierter
in Verbindung mit 10 erläutert wird. Dem
Segmentspeicherschritt 307 folgend wird eine Bestimmung
gemacht, ob das zu zeichnende Polygon in Antwort auf den POLY-ZEICHNEN-Befehl
beendet ist 309. Wenn, auf die letzte Segmentspeicherung
folgend, weitere Abschnitte des Polygons verbleiben, dien noch nicht
segmentiert worden sind, kehrt der Prozess zum Anfang des Segmentie rungsbemessungsschritt 303 zurück, um den
nächsten Segmentabschnitt
des zu zeichnenden Polygons zu definieren. Dieser iterative Prozess
dauert an, solange, bis das gesamte zu zeichnende Polygon segmentiert
ist und die POLY-FERTIG-Bestimmung 309 eine zustimmende
Antwort zurückgibt.
Zu dieser Zeit wird eine Bestimmung bezüglich dessen gemacht, ob irgend
welche weitere zu zeichnende Polygone für ein spezielles Framepuffer
vorhanden sind, das auf der Anzeigevorrichtung 119 angezeigt
werden soll. Wenn noch mehr Polygone zu zeichnen sind, kehrt der
Prozess zum Initialisierungsschritt zurück, um das nächste Polygon
zu zeichnen, POLY-ZEICHNEN 301. Nachdem alle der Polygone
für ein
spezielles Bildframe gezeichnet worden sind, 305, und gespeichert
worden sind, 307, und es keine weiteren zu zeichnenden
Polygone 311 mehr gibt, wird der Teilobjektspeichermappingprozess
beendet 313.
-
4 zeigt den Segmentdimensionierungs- oder
Objektsegmentierungsschritt 303 detaillierter. Um den Segmentierungsprozess
von 4 vollständiger würdigen zu
können,
sollte ebenfalls auf 5 bis 8 Bezug genommen werden. 5 zeigt einen Schirmabtastprozess,
bei dem, im vorliegenden Beispiel, ein CRT-Schirm 503 von
einem Rand 501 zum gegenüberliegenden Rand 502 durch
einen Elektronenstrahl oder Strahlen entlang Abtastzeilen 504 abgetastet
wird. 5 zeigt ein Polygon 500 (ein Dreieck
im vorliegenden Beispiel), das angezeigt wird. Um der Verdeutlichung
willen sind Schnittpixel 507 und 509 vergrößert als
Schnittpunkte zwischen einem Rasterabtasthub 505 und dem
Polygon oder Dreieck 500 gezeigt. Das Dreieck 500 enthält einen Hauptbasispunkt 516 sowie
einen "oberen" Punkt 514 und
einen Vertexpunkt 512. Die Rasterabtastung 505 schneidet
das Dreieck 500 in einem Punkt 507 an einer "ersten gegenüberliegenden
Steigung" 508 oder
einem Rand des Dreiecks 500 und schneidet ebenfalls das
Dreieck 500 am Punkt 509 an der "Hauptsteigung" 510 des
Dreiecks 500. Eine andere Steigung des Dreiecks 500 wird
als die "zweite
gegenüberliegende
Steigung" 511 bezeichnet.
Im Allgemeinen ist in der Graphikterminologie, z. B. unter Bezugnahme
auf ein dreieckiges Grundelement, die "Hauptsteigung" als die Seite definiert, die die gesamte
vertikale Dimension überspannt
und die längste
Vertikalkompo nente des Objekts, z. B. des Dreiecks 500,
enthält.
Der Punkt 516 am Boden oder der Basis der Hauptsteigung
wird als der "Basispunkt" bezeichnet. Die "gegenüberliegenden" Steigungen sind
die Seiten, die der "Hauptsteigung" gegenüberliegen,
und werden hierin als die "erste
gegenüberliegende
Steigung 508" und
die "zweite gegenüberliegende
Steigung 511" bezeichnet,
da sie in der Anzeige von oben nach unten positioniert sind. Im
Allgemeinen enthält
ein Framepuffer die gesamte Pixelinformation jedes Bildframes, das
in einem beliebigen Moment angezeigt wird. Die Information enthält z. B. alle
der Leerpixel ebenso wie alle der gefüllten oder Füllpunktpixel.
Wenn die Frame-Anzeigeinformation verarbeitet
werden soll, besonders bei Graphiksystemen, in denen eine derartige
Bearbeitung intensiv ist, wird das Verfahren der Frameinformationsspeicherung,
wie es in 5 gezeigt
ist, als ineffizient und voluminös
für Verarbeitungszwecke
angesehen. Der Segmentierungsprozess, wie er hierin beschrieben ist,
kann dafür
angesehen werden, eine effektive Rationalisierung des Objektinformationsspeicherprozesses
zu erreichen, was einen sehr viel schnelleren Zugriff und Verarbeitung
solcher Information ermöglicht.
-
In 6 sind mehrere verschiedenen
Layouts oder Referenzorientierungen für ein 128 Bit SRAM gezeigt.
In der folgenden Diskussion sind die Pixelabdeckungsmuster in verschiedenen
Formen konfiguriert, die Speicherstellen und entsprechen Speicherkonfigurationen
entsprechen. Ebenfalls wird zum Zwecke der Erläuterung der Ausdruck "Bit" derart verwendet,
dass er die kleinste Speichereinheit bedeutet, und der Ausdruck "Pixel" wird derart verwendet,
dass er die kleinste Bildelementeinheit bezeichnet. In einer ersten
Orientierung 601 ist der Speicher nur ein Bit hoch mal
128 Bit lang konfiguriert. Eine andere Orientierung 603 ist
2 Bit hoch und 64 Bit lang konfiguriert. Andere Orientierungen 605, 607 und 609 zeigen
jeweils Orientierungen 4 Bit hoch mal 32 Bit lang, 32 Bit hoch mal
4 Bit lang und 128 Bit hoch mal 1 Bit lang. Es ist ersichtlich,
dass abhängig von
dem Layout oder der Orientierung des 128 Bit-Speichers unterschiedliche entsprechende
Bereiche eines angezeigten Objekts "abgedeckt" werden können. Wie in 7 gezeigt ist, ist das Polygon 701 auf
einem Anzeigeschirm 703 angeordnet. Der Anzeigeschirm 703 enthält Bits von
Information, die Pixel auf dem Schirm bilden. Wie hierin zuvor bemerkt, ist
der Framepuffer eines Anzeigesystems gewöhnlich derart konfiguriert,
dass eine Entsprechung zwischen einer Pixelposition relativ zum
Anzeigeschirm und der Position im Speicher der Bits existiert, die den
Inhalt oder die Substanz des entsprechenden Pixels umfassen oder
ausmachen. Wie in 7 gezeigt
ist, können
die Segmente des Speichers, die Information betreffend das Polygon 701 enthalten, durch
verschiedene Punkte des Polygons selbst referenziert werden, um
die relevante Polygoninformation in einem kompakteren Speicherbereich
oder Speichergröße zu speichern,
wodurch ein effizienteres Informationsspeichersystem bereitgestellt
wird. Die Konfiguration eines ersten Speichersegments 705 kann
beinahe so lang sein wie sie hoch sein, da das Polygon an dem Punkt
nicht so hoch ist. Wenn ein Speichersegment der für das erste
Speichersegment 705 gezeigten Konfiguration mit gespeicherten
Bits von Polygoninformation gefüllt
wird, wird bestimmt, dass alle Information betreffend das Polygon
noch nicht gespeichert worden ist und dass daher ein Bedarf besteht,
ein anderes Segment des Speichers zu konfigurieren, um zusätzliche
Bits zu empfangen. Da das nächste
Segment des Polygons 701 größer ist als das erste Segment,
wird das zweite Segment 707 des Speichers mit einer höheren Querdimension, aber
einer kürzeren
Längendimension
konfiguriert, um die gesamte relevante Polygoninformation in einem
so kompakt wie möglichen
Raum optimal zu speichern. In ähnlicher
Weise wird das nächste
Speichersegment 709 ebenfalls optimal für eine maximale Datenspeichereffizienz
für das
auf dem Schirm 703 zu zeichnende Polygon konfiguriert.
Diese Technik ermöglicht
es, dass ein Polygon z. B. aus einem Schnellzugriffs-SRAM-Speicher unter
Verwendung einer minimalen Anzahl von Zugriffen gezeichnet wird.
-
8 zeigt detaillierter die
Rekonfiguration oder den SRAM-"Formgebungs"-Prozess, durch den die Information in
einem Framepuffer kompakter durch ein objektreferenziertes Speicherverfahren
gespeichert werden kann. In 8 steigt
die Ordinate "Y" in der nach unten
gerichteten Richtung an, wie gezeigt ist. Das gezeigte Polygon besitzt
die Form eines Dreiecks mit einem oberen Punkt 801 an der Oberseite
des Dreiecks, einem unteren Punkt 803 an dem unteren Ende
einer Hauptsteigung 802 und einem Mittelpunkt oder Vertex 805,
der die jeweils erste und die zweite gegenüberliegende Steigung 806 und 808 jeweils
verbindet.
-
Detaillierter
unter Bezugnahme auf 4 und 8 beginnt das Verfahren
zur Bestimmung 303 der Schnellspeicher- oder SRAM-Segmentgrößen nach
einem POLY-ZEICHNEN-Befehl 301 durch Finden 401 des
ersten "1"-Bits in dem zu zeichnenden
Polygon. Unter Bezugnahme auf 8 ist
das erste "1"-Bit in dem vorliegenden Beispiel der
obere Punkt 801 eines Polygons 800. Man beachte,
dass der POLY-ZEICHNEN-Befehl Information betreffend die Steigungen
und Vertizes oder Punkte des zu zeichnenden Objekts enthält. Demzufolge
ist die Stelle des oberen Punkts 801 durch das Verfahren bekannt,
wenn der POLY-ZEICHNEN-Befehl erzeugt wird. Das Verfahren markiert
als Nächstes 403 oder speichert
die Stelle des ersten "1"-Bits als ein Segment
START-Punkt für
weitere Bezugnahme. Dieser Punkt entspricht dem Beginn einer objektbasierten Konfiguration
einer schnellen SRAM-Speichereinheit. Mit diesem Bezugspunkt bestimmt
das Verfahren, welche SRAM-Konfiguration am effizientesten das nächste Segment
des Polygons speichert. Z. B. bewegt sich unter Verwendung einer
128 Bit-Speichereinheit als eine Basis im vorliegenden Beispiel das
Verfahren als Nächstes
relativ zum START-Punkt 801, wie in 8 gezeigt, um Punkte auf dem Polygon 800 abzubilden,
bis 128 Bits in dem Prozess verwendet worden sind. Man beachte,
dass jede inkrementelle Bewegung in der "Y"-Richtung
als ein "Zähler" bezeichnet wird
und eine vorbestimmte Anzahl von Bits bei der Bewegung von einer
horizontalen Seite zur nächsten
erfordert. Zu den vertikalen Bewegungen werden die Anzahl von Bits
addiert, die erforderlich sind, um sich von dem vertikalen Tropfpunkt 807 zu
der Hauptsteigung 802 am Punkt 809 und ebenfalls
von dem ersten vertikalen Tropfpunkt 807 zu der ersten
gegenüberliegenden
Steigung 806 am Punkt 811 zu bewegen. Insbesondere
beginnt das Verfahren, das "POLYGON
ZUM NÄCHSTEN "1" BIT oder gefüllten Pixel in dem Polygon 800 ZU
TRAVERSIEREN" 405.
Im vorliegenden Beispiel "sieht" das Verfahren in
einer ansteigenden "Y"-Richtung in einer
inkrementellen Weise jedes Mal einen Zähler und sucht dann nach dem
nächsten "1"-Bit in jeder gegenüberliegenden horizontalen Richtung.
Jedes Mal, wenn ein "1"-Bit lokalisiert
wird, wird es als eine Referenz relativ zu dem letzten Segment "Start"-Punkt 801 markiert.
-
Als
Nächstes
wird bestimmt, ob der Unterschied zwischen dem STAR "1" BIT 801 und dem neu lokalisierten
nächsten "1"-Bitpunkt größer ist als die Segmentgröße 407,
d. h. 128 Bit in dem vorliegenden Beispiel. Wenn der Unterschied
größer ist
als 128 Bit, wird die Segmentgröße bei 128
Bit von dem START "1" BIT bestimmt und
die Segmentform wird dann definiert 411. In ähnlicher
Weise wird dann, wenn die Segmentgröße 407 nicht durch
die Traverse von dem START BIT überschritten
wird und der neu lokalisierte Punkt der Boden des Polygons 409 ist,
in diesem Fall das Segment ebenfalls definiert und geformt 411. Wenn
die "Segmentgröße"- 407 oder "Boden"-Anfragen ein negatives
Ergebnis zurückgeben,
kehrt der Prozess zu TRAVERSIEREN DES POLYGONS ZUM NÄCHSTEN "1" BIT zurück, um das nächste "1"-Bit in dem zu zeichnenden Polygon zu
finden. Wenn der "1"-Bitpunkt der BODENpunkt
des Polygons ist, fährt der
Prozess zu DEFINIEREN DER SEGMENTFORM 411 fort und kehrt
zu SEGMENT ZEICHNEN 305 zurück, wie hierin zuvor in Verbindung
mit 3 erläutert wurde.
-
Im "POLYGON ZUM NÄCHSTEN "1" BIT TRAVERSIEREN"-Schritt 405 sucht der Prozess
für das
nächste "1"-Bit in dem Polygon 800 in
einem sequenziellen Suchmuster von einem Schnitt "1"-Bitpunkt, z. B. 811 oder 809,
jeweils zum nächsten 819 oder 815,
während
er an jedem Punkt überprüft, ob die
kumulativen Bits von dem letzten STARTpunkt weniger als die 128
Bit SRAM-Segmentgröße 415 bleiben.
An jedem Punkt, an dem die gegenwärtige Speichersegmentgröße die Basissegmentgröße 528 Bit überschreitet,
kann die Segmentkonfiguration definiert und geformt werden. Die
Breite des Segments wird durch die Anzahl von Zählern oder vertikalen Absätzen bestimmt,
die zwischen dem STARTpunkt und dem Punkt verwendet worden sind,
bei dem die Gesamt SRAM-Speichereinheit oder Basiskapazität von 128
Bit überschrit ten
worden ist. Die Länge
der Konfiguration wird auch durch Addieren der kumulativen horizontalen
Inkrementalbewegungen während
derselben Periode bestimmbar. Daher wird das Polygon in einem Muster
abhängig
von und unter Bezugnahme auf das erste "1"-Bit
in dem Polygon gespeichert und die SRAM-Segmentgrößen werden geformt oder konfiguriert
in verschiedenen Formen oder Proportionen, abhängig von der maximalen Polygon-"Abdeckung" oder Bitspeichereffizienz.
Der iterative SRAM-Konfigurationsprozess fährt fort, solange bis der BODENpunkt 803 des
Polygons 800 erreicht wird, zu welcher Zeit das Verfahren
zu dem SEGMENT ZEICHNEN-Schritt 305 in 3 zurückkehrt. Danach
fährt nach
Maßgabe
des in 3 gezeigten Verfahrens
der SRAM-Formprozess fort, solange bis alle der zu zeichnenden Polygone
insgesamt in der neu definierten kompakten Form in einem Schnellzugriffs-Scratch-Pad-SRAM
gespeichert sind und durch das Polygonobjekt selbst referenziert
sind, nach Maßgabe
des vorliegenden Verfahrens.
-
In 9 ist der SEGMENT-ZEICHNEN-Schritt 305 von 3 detaillierter gezeigt.
Der Bestimmung einer Speichersegmentform 303 folgend wird
eine Bestimmung bezüglich
dessen gemacht, ob ein Z-ABRUF 901 erforderlich ist. Wenn ein
Z-ABRUF 901 erforderlich ist, wird ein Z-Wert von dem Z-Puffer
des Graphikcontrollers abgerufen und dem speziellen "1"-Bitpunkt "angefügt" oder referenziert, der verarbeitet
wird. In ähnlicher
Weise wird dann, wenn ein FARBENABRUF oder C-ABRUF 903 erforderlich
ist, d. h. dann, wenn dem verarbeiteten Punkt eine Farbe zugeordnet
ist, die Farbe abgerufen 907 und das Verfahren fährt durch
Zeichnen der assemblierten Datei in das SRAM oder den Scratch-Pad-Speicher
fort, d. h. ZEICHNEN IN SRAM 911.
-
Der
ZEICHNEN IN SRAM-Schritt 911 ist detaillierter in 11 gezeigt. Nach dem Z-
und C-Abruf, 901 und 903, wird eine Bestimmung
gemacht, ob eine Farbquelle erforderlich ist, 1101. Wenn
eine Farbquelle erforderlich ist, z. B. für Transparenzeffekte oder Farbquellenvergleichsfunktionen,
wird ein Block in ein Farb-SRAM 1105 abgerufen. Als Nächstes wird eine
Bestimmung gemacht, ob eine Z-Tiefen-Quelle erforderlich ist, 1103.
Wenn ja, wird ein Block in den Z- Puffer
SRAM 1107 abgerufen. Der Prozess fährt dann zu FARBE IN DEN Z-PUFFER ZEICHNEN UND
VERGLEICHEN 1109 fort. Der FARBE IN DEN Z-PUFFER ZEICHNEN UND
VERGLEICHEN-Schritt 1109 ist detaillierter in 12 gezeigt.
-
In 12 wird zunächst eine
Bestimmung gemacht, ob ein Z-VERGLEICH erforderlich ist, 1201.
Wenn ein Z-VERGLEICH erforderlich ist, wird die Z SRAM-Stelle für den analysierten
Punkt zum Vergleich gelesen, 1203. Wenn der neue Z-Wert
größer (oder
niedriger) ist als der gespeicherte Z-Wert (abhängig von den Konventionen des
Systems), wird der neue Wert in den SRAM geschrieben, 1205.
Anderenfalls wird der alte Z-Wert geschrieben. Der Prozess bestimmt
dann, ob der Block beendet ist, 1207, und falls nicht,
kehrt der Prozess zu Schritt 1201 zurück. Wenn der Block beendet
ist, fährt
der Prozess durch Bewegen zu dem SEGMENT-SPEICHERN-Schritt 307 fort.
-
Wie
in 10 gezeigt ist, arbeitet
die SEGMENT-SPEICHERN-Funktion 307 zum Speichern der Farbe,
d. h. FARBE SPEICHERN 1001, und ebenfalls, um, den Z- oder
Tiefenwert zu speichern, d. h. Z SPEICHERN 1003, des verarbeiteten "1"-Bitpunkts. Der Prozess fährt dann
fort durch Durchführen
einer Bestimmung, ob das spezielle gezeichnete Polygon fertig ist,
d. h. POLYGON FERTIG 309 in 3.
Wenn z. B. der letzte analysierte oder verarbeitete "1"-Bitpunkt
der Punkt 815 in 8 war,
würde das
gezeichnete Polygon 800 nicht voll segmentiert oder fertig
sein und die POLYGON-FERTIG-Anfrage 309 würde eine
negative Bestimmung zurückgeben
und der Prozess würde
zurückkehren,
um das nächste "1"-Bit zu finden, d. h. SEGMENTSTART "1" BIT FINDEN 401, wie in 4 gezeigt ist. Wenn das gezeichnete
spezielle Polygon zum BODENpunkt in dem Polygon fertig ist, wird
eine Bestimmung gemacht, ob irgend welche weiteren zu zeichnenden Polygone 311 für das spezielle
bearbeitete Frame existieren. Wenn keine weiteren zu zeichnenden
Polygone existieren, ist der Prozess FERTIG 313. Wenn weitere
zu zeichnende Polygone existieren, d. h. wenn weitre POLYGON-ZEICHNEN-Befehle
existieren, kehrt der Prozess zu dem POLYGON-ZEICHNEN-Schritt 301 zurück und führt diesen
Prozess weiter, wie hierin zuvor erläutert, unter Bezugnahme auf
das nächste
Polygon. Die beschriebene Verarbeitung dauert in einer iterativen
Weise so lange an, bis alle der Polygone für ein spezielles Frame im SRAM erneut
gezeichnet wurden nach Maßgabe
des offenbarten Verfahrens. Unter Verwendung des offenbarten Verfahrens
werden die Frame-Polygondaten rekonfiguriert oder reassembled und
in einer kompakten und hocheffizienten Weise gespeichert, wodurch eine
viel schnellere Verarbeitung ermöglicht
wird, die speziell für
Graphik und dreidimensionale Anwendungen geeignet ist.