Anfängerfrage: Woher kennt eine Klasse den Adressbereich einer Grafikkarte?

Diskutiere mit über: Anfängerfrage: Woher kennt eine Klasse den Adressbereich einer Grafikkarte? im Mac OS X Entwickler, Programmierer Forum

  1. kalle51

    kalle51 Thread Starter MacUser Mitglied

    Beiträge:
    125
    Zustimmungen:
    0
    Registriert seit:
    24.08.2005
    Hi Leute, mal eine ganz dumme Frage! Woher kennt eine Klasse (z.B. von Cocoa) den Adressbereich einer Grafikkarte, fängt der bei allen Grafikkarten an der gleichen Stelle an? Kann doch eigentlich nicht, kommt doch darauf an wieviel RAM man im Rechner und in der Grafikkarte hat? Gibt es ein Befehl um den Adressbereich der Grafikkarte zu bekommen? Bitte habt Verständnis für meine Frage, meine Programmiererfahrung beruht noch auf dem Atari,C64 und Amiga! In meiner PC Zeit habe ich mich nicht damit beschäftigt, man hatte genug mit der Kiste zu tun um sie am "laufen" zu halten!
    Gruß Kalle
     
  2. dannycool

    dannycool MacUser Mitglied

    Beiträge:
    1.485
    Zustimmungen:
    34
    Registriert seit:
    02.02.2005
    Moderne Rechner arbeiten in dieser Hinsicht *vollständig* anders, als Du denkst. Stichwort virtueller Speicher.

    Moderne Grafikkarten arbeiten in dieser Hinsicht *vollständig* anders, als Du denkst. Auf den RAM der Grafikkarte kann in der Regel nicht direkt zugegriffen werden und ich wüsste auch nicht, welchen Sinn das hätte, es seidenn Du hättest ein Dokument in dem steht wie die Karte ihren RAM verwaltet.

    Unter Mac OS X kannst Du die Grafikkarte nicht selbst ansteuern, da das Superuser-Privilegien erfordert. Wenn Du Grafik schnell darstellen willst, arbeite Dich in OpenGL ein. Außerdem ist es nicht gerade guter Stil, soetwas selbst zu machen.
     
    Zuletzt bearbeitet: 24.09.2005
  3. kalle51

    kalle51 Thread Starter MacUser Mitglied

    Beiträge:
    125
    Zustimmungen:
    0
    Registriert seit:
    24.08.2005
    Mir ist schon klar, daß man nicht direckt auf den Grafikspeicher zugreifen kann. Aber wenn ich z.B. eine Cocoa Klasse benutze die ein Fenster darstellt, muß doch irgendwo definiert sein wo diese Grafikinformationen hingeschrieben werden müssen - oder? Unter virtuellem Speicher verstehe ich das Auslagern von Prozessen auf die Festplatte, wenn der RAM Bereich nicht ausreicht!
    Gruß Kalle
     
  4. dannycool

    dannycool MacUser Mitglied

    Beiträge:
    1.485
    Zustimmungen:
    34
    Registriert seit:
    02.02.2005
    Das macht das Betriebssystem für Dich. Cocoa-Fenster haben sogar per Default double buffering eingeschaltet. Du musst also wirklich nur mit den üblichen Zeichenaufrufen reinmalen.

    Dann bist Du, auf die Windows-Welt bezogen, ca. 10 Jahre hinterher, und auf die UNIX-Welt bezogen noch etwas mehr. Prozessortechnisch gesehen bist Du auf einem Stand eines 80286. In Ataris gesprochen entspricht das einem der Rechner älter als dem TT030.

    Heutzutage ist es durch virtuelle Speicherverwaltung möglich, dass a) alle Prozesse den exakt selben Adressraum für völlig verschiedene Daten benutzen können, b) dadurch alle Prozesse den vollen Adressraum nutzen können, und c) das Auslagern von nicht benutzten Speicherseiten als Nebeneffekt.
     
  5. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    Ich bin sicher das ist mehr Informationen als ihr hören wollt, aber ganz tief unten macht ein Treiber ein Mapping. Der Treiber weiss, wo der Speicher der Grafikkarte ist. Diesem reellen Speicher auf der Karte kann dann ein virtueller Speicher im Adressbereich des Rechners zugewiesen werden.

    Aber wenn Du nicht gerade Treiber für Grafikkarten schreibst kann Dir das tatsächlich herzlich egal sein. Und wie schon gesagt, in diesen Speciher dürftest Du ohnehin nur mit root Rechten schreiben. CoreImage treibt die Abstraktion sogar noch eine Stufe höher und erlaubt Dir, in der OpenGL Shading Language Filter zu definieren, ohne das Instruction Set der Karte zu kennen.

    Gruss

    Alex
     
  6. kalle51

    kalle51 Thread Starter MacUser Mitglied

    Beiträge:
    125
    Zustimmungen:
    0
    Registriert seit:
    24.08.2005
    Danke, aber genau das wollte ich wissen. Dann müste doch der virtuelle Adressbereich der Klasse bekannt sein? Steht dann so ein "Funkionsaufruf" in der Klasse die z.B. ein Fenster definiert, dass müsste man dann doch in einer Headerdatei finden - oder?
    Gruß Kalle
     
  7. dannycool

    dannycool MacUser Mitglied

    Beiträge:
    1.485
    Zustimmungen:
    34
    Registriert seit:
    02.02.2005
    Okay, Du wolltest es doch nicht wissen... Du bist sowas von auf der falschen Schiene...
     
  8. kalle51

    kalle51 Thread Starter MacUser Mitglied

    Beiträge:
    125
    Zustimmungen:
    0
    Registriert seit:
    24.08.2005
    So, zu meinem Verständnis gehört das nun mal. Früher hat man bei einem C64 direkt in den Grafikspeicher geschrieben, um eine schnellere Grafik zu bekommen. Heute ruft man Klassen(Objekte) auf, z.B. eine Klasse die mir ein Fenster "malt". Nun muss doch diese Klasse den Adressbereich - ob nun real oder virtuell - kennen. Wenn nun der Grafiktreiber den realen Adressbereich in einen virtuellen Adressbereich des Rechner mappt, muss doch die Klasse die das Fenster mal diesen auch kennen - oder?
     
  9. CapFuture

    CapFuture MacUser Mitglied

    Beiträge:
    1.777
    Zustimmungen:
    1
    Registriert seit:
    23.01.2004
    Der Virtuelle Speicher macht quasi alles zu einem riesigen Fließband, wo jeder was reinschreiben kann... Siehe auch virtuelle Adressierung...

    Ansonsten schau nochmal nach, was ein Framework ist ;)
    Um genau solche Direktzugriffe zu vermeiden, existiert das Cocoa Framework überhaupt :)

    Abgesehn davon gestaltet sich OSX wie ein großes Videospiel, da der Bildaufbau über Core2D/3D Schnittstelle an dessen Ende OpenGL sitzt (Überspitze Darstellung der Tatsachen ;) )
     
  10. dannycool

    dannycool MacUser Mitglied

    Beiträge:
    1.485
    Zustimmungen:
    34
    Registriert seit:
    02.02.2005
    Nach genau dem Wissensstand klingen Deine Fragen ja auch... was soll ich noch viel mehr sagen als dass Du den mal updaten sollst?

    Heutzutage ist es um ein paar Ebenen komplizierter.

    Erstens wird der gemappte Adressbereich nicht unbedingt benutzt, damit der Rechner irgendwas direkt in den Grafikkartenspeicher schreibt, sondern zur Kommunikation.

    Zweitens kennt eine typische Fenster-Klasse keine Details des Ausgabegerätes sondern kann ihre Darstellung durchaus ganz anders ablegen als die Grafikkarte das machen würde.

    Quartz setzt die ganzen rechteckigen oder sonsteckigen Fensterblöcke im Ausgangsbild zusammen. Quartz greift auch nicht direkt auf den Kartenspeicher zu, sondern benutzt OpenGL.

    OpenGL ist immernoch nicht hardwareabhängig. Von hier aus geht es entweder weiter zur Grafikkarte, die OpenGL selbst versteht (alle Mac-Grafikkarten können das), oder zu einem Software-Renderer wie Mesa, der die Aufrufe umsetzt und die Grafikkarte dann am Ende anders anspricht, oder oder oder.


    Wenn Du heute schnellere Grafikausgabe willst dann lern OpenGL. Selbst in den Kartenspeicher schreiben ist, wenn Du es überhaupt schaffst, langsamer, weil die (beachtliche) Rechenleistung der GPU nicht mehr dafür zur Verfügung steht.
     
Die Seite wird geladen...
Ähnliche Themen - Anfängerfrage Woher kennt Forum Datum
Adressbuchzugriff woher Infos Mac OS X Entwickler, Programmierer 02.01.2012
Anfängerfrage zu Zeigern - bitte nicht hauen ;-) Mac OS X Entwickler, Programmierer 07.11.2008
Anfängerfrage zu C++ Mac OS X Entwickler, Programmierer 22.10.2005
anfängerfrage zu xcode 2.1 Mac OS X Entwickler, Programmierer 22.07.2005
Java Anfängerfrage Mac OS X Entwickler, Programmierer 30.04.2004

Diese Seite empfehlen

Benutzerdefinierte Suche