Ein neues Konzept, um Rechenzeit zu sparen: ------------------------------------------- Vorteile: --------- *Eine Umrechnung von Farben ist nur erforderlich, wenn: -die globalen Farbeinstellungen im Commodity verändert wurden -ein ViewPort neu kreiert wurde -mittels Load/SetRGBx Farben im ViewPort verändert wurden *Kein Rechenzeitaufwand mehr beim Verschieben von Screens Nachteile: ---------- *direkte "Pokes" in den Palette-Bits der ColorMap werden nicht erkannt Erzeugung von Knotenstrukturen ------------------------------ Wird eine neue Knotenstruktur erzeugt, werden folgende Operationen durchgeführt: Der Zeiger auf den ViewPort wird in der Knotenstruktur abgelegt. Eine alternative ColorMap wird mittels GetColorMap() belegt und in der Knotenstruktur gespeichert. Alle relevanten Felder der originalen ColorMap werden in die Backup-ColorMap kopiert. Alle Farben werden mittels GetRGB32() aus der originalen ColorMap ausgelesen, anschließend gepatcht und mit der ORIGINAL SetRGB32CM() in die alternative ColorMap geschrieben. Auffindung von Knotenstrukturen ------------------------------- Wird eine Knotenstruktur anhand des ViewPorts aufgefunden, so wird ein weiteres Update der AltCMap und eine Konsistenzprüfung durchgeführt. Patch bei LoadRGB32: -------------------- Nachsehen, ob der ViewPort bekannt ist. Wenn nein, eine Knotenstruktur erzeugen. Wenn ja, die Knotenstruktur auffinden. Wenn UpdateAll-Flag nicht gesetzt ist: Schleife: Die neuen Farbwerte werden mittels der ORIGINAL SetRGB32CM() in die alte ColorMap geschrieben. Gleichzeitig werden diese Farben gepatcht und in einer alternativen Tabelle abgelegt. Wenn das UpdateAll-Flag gesetzt ist: Schleife: Die neuen Farbwerte werden mittels der ORIGINAL SetRGB32CM() in die alte ColorMap geschrieben. ALLE Farben werden mittels GetRGB32() aus der originalen ColorMap ausgelesen, anschließend gepatcht und eine Tabelle erzeugt. Diese Tabelle wird dann mittels der ORIGINAL LoadRGB32() auf die alternative ColorMap losgelassen. Patch bei SetRGB32CM() ---------------------- ORIGINAL SetRGB32CM() aufrufen Wenn das Feld cm_ViewPort initialisiert ist: Nachsehen, ob der ViewPort bekannt ist. Wenn nein, eine Knotenstruktur erzeugen. Wenn ja, die Knotenstruktur auffinden. Farbwerte patchen und mittels der ORIGINAL SetRGB32CM in die alternative ColorMap eintragen Patch bei LoadRGB4() Schleife: Die neuen Farbwerte werden mittels der ORIGINAL SetRGB32CM() in die alte ColorMap geschrieben. Gleichzeitig werden diese Farben gepatcht und in einer alternativen Tabelle abgelegt. Diese Tabelle wird dann mittels der ORIGINAL LoadRGB32() auf die alternative ColorMap losgelassen. Patch bei MakeVPort: -------------------- Nachsehen, ob der ViewPort bekannt ist. Wenn nein, eine Knotenstruktur erzeugen. Wenn ja, die Knotenstruktur auffinden. Der ColorMap-Zeiger des ViewPorts wird auf die alternative ColorMap gestellt. Dann wird MakeVPort aufgerufen und anschließend der ColorMap-Zeiger restauriert. Entfernen der Knotenstrukturen ------------------------------ Regelmäßiges Durchsehen aller Knotenstrukturen, ob der ViewPort noch Bestandteil des Views ist. Wenn nicht, wird die Knotenstruktur gelöscht.