Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Asmodiel

Treue Seele

  • »Asmodiel« ist der Autor dieses Themas

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

1

02.02.2009, 09:53

Hardwarebeschleunigung

Ahoi Piraten,

Wie ich so bin, möchte ich bei der Programmierung
immer genau wissen, was eigentlich im Hintergrund abläuft.
Besonders bei DirectX / OpenGL hätte ich da eine Frage,
auf die ich bisher nach längerer Suche keine Antwort gefunden
habe.

DirectX und OpenGL benutzen Hardware-Beschleunigung.
Aber in wiefern? Im Arbeitsspeicher befindet sich der Videospeicher.
OK... Darin kann ich alles direkt manipulieren, einzelne Pixel des
Bildschirms setzen. Das läuft ja dann über Software.

Meine Frage: Arbeiten auch DirectX / OpenGL mit diesem
Videospeicher im Arbeitsspeicher, oder geht diese Hardware-
Beschleunigung so weit, dass sie direkten Zugriff auf die
Grafikkarte haben und somit direkt dort irgendwelche Pixel-
Manipulationen durchführen können?
Oder betrifft die Hardware-Beschleunigung lediglich andere
Dinge, wie die Darstellung von Punkten, Linien oder Ähnlichem?

Ich kenne mich da nicht wirklich aus, und es ist auch nicht
leicht, die Frage korrekt zu stellen. ^^°

Gruss
Asmo
Eat a beaver - Save a tree.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

02.02.2009, 10:35

Ohne Hardware-Beschleunigung wird dein Bild von der CPU berechnet. Die CPU ist jedoch nicht sonderlich gut darin (und vor allem langsam).

Daher nutzt man Grafikkarten und auf diese kannst du mit DX oder OGL zugreifen.

Grafikkarten sind darauf spezialisiert die Berechnungen die nötig sind um ein 3D Bild zu erzeugen unheimlich schnell zu erledigen. Du gibst einen Haufen Vertices, Indizes, Texturen und co rein (mit OGL oder DX) und bekommst ein Bild auf den Bildschirm. Die Berechnung wird von der Grafikkarte übernommen (wesentlich schneller als die CPU es könnte).

Wenn du selbst auf den Videospeicher zugreifst, dann greifst du, wenn ich mich recht erinnere, direkt auf den Speicher der Grafikkarte zu, nicht auf den Arbeitsspeicher.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

3

02.02.2009, 10:53

Crashkurs Grafikkarten

Die einfachst denkbare Grafikkarten besteht nur aus ein etwas Speicher - dem Videoram - um das auf dem Monitor sichtbare Bild aufzunehmen, und einer speziellen Schaltung - dem sogenannten RAM-DAC - der diesen Speicher ausliest und in ein für den Monitor verständliches Signal umwandelt.
Sämtliche grafischen Operationen, sei es das setzen eines einzelnen Pixels, das Füllen eines Rechtecks oder auch das Malen deines Browserfensters, werden von dem Prozessor (CPU) durch Schreibzugriffe in diesen Speicher ausgeführt.
Da der Videospeicher sich auf der Grafikkarte befindet, findet der Datenaustausch von/zu der CPU über ein sogenannten Bus statt (früher ISA,PCI,AGP und heute PEG) und ist dadurch relativ langsam (verglichen mit Zugriffen auf den Arbeitsspeicher).

Der nächste Schritt in der Entwicklung der Grafikkarten war, ihnen einen kleinen Prozessor zu spendieren, der dann einfache Aufgaben (Füllen rechteckiger Bereiche, Zeichnen von Linie, usw.) übernehmen konnte.
Die CPU schickt dafür lediglich das Kommando und die nötigen Daten, wie z.B. Start- und Endpunkt einer Linie. Fertig ist ein VGA-Beschleuniger.

Großer Sprung nach heute. Grafikkarten verfügen heutzutage über leistungsfähige Prozessoren (GPU), die nicht länger auf spezialisierte Operationen festgelegt, sondern programmierbar sind (Shader, aber auch noch spezialisierte Hardware wie z.B. Texturfilter, Rasterizer) und über große Mengen Speicher verfügen.
Wie kann nun z.B. OpenGL davon Gebrauch machen ?
Das Prinzip ist das selbe, wie bei dem oben skizzierten VGA-Beschleuniger: die CPU sendet nur noch Kommandos und die dafür notwendigen Daten, die Arbeit wird von der GPU übernommen. Zusätzlich haben Grafikkarten heute ausreichend Speicher, um eine Menge an Daten ebenfalls vorab im Videospeicher ablegen zu können (Shader-Programme, Texturen, Geometrie, ...), so dass den Kommandos auf vorhandenen Daten arbeiten können.
Theoretisch befinden sich also alle deine Shader,Texturen und Modell im Speicher der Grafikkarte, so dass du beim Rendern eines Frames lediglich die zu verwendenden Daten (welchen Shader/welche Textur(en)/...) auswählst und dann die Modelle nennst, die mit der Kombination gerendert werden sollen.

Ich hoffe, trotz der Kürze einigermaßen verständlich geworden zu sein ;)

4

02.02.2009, 10:57

In der Regel laufen DX und Ogl direkt auf der Grafikkarte ab. Bildlich gesprochen. Sagen wir du hast OpenGL und einen Grafikkartentreiber, oder eben einen Grafikkartentreiber mit OpenGL drinne. Dann übersetzt der quasi deine OpenGL Befehle und leitet sie an die Grafikkarte weiter und die führt dann die Berechnungen durch.
Und der Videospeicher befindet sich direkt auf der Grafikkarte, der Grafikkarte kann zwar auch den Arbeitsspeicher benutzen, das ist aber sehr langsam.
Allerdings gibt es auch sicher viele Dinge die nicht auf der Grafikkarte ablaufen, wenn du z.B. einen Speicher lockst und manipulierst und dann wieder entlockst, wird er z.B. am Anfang komplett in deinen Hauptspeicher kopiert, dort verändert und dann wieder komplett zurückkopiert, da erspart man sich den Transfer von möglicherweise tausenden von Befehlen.
Lieber dumm fragen, als dumm bleiben!

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

5

02.02.2009, 11:11

S.Seegel: Prima Erklärung!

Asmodiel

Treue Seele

  • »Asmodiel« ist der Autor dieses Themas

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

6

02.02.2009, 11:13

Vielen Dank für die Antworten, nun wurde mir schon einiges
klar. :) Was ich wissen wollte, weiss ich nun eigentlich.

Zitat von »"S.Seegel"«

die CPU sendet nur noch Kommandos und die dafür notwendigen Daten, die Arbeit wird von der GPU übernommen. Zusätzlich haben Grafikkarten heute ausreichend Speicher, um eine Menge an Daten ebenfalls vorab im Videospeicher ablegen zu können (Shader-Programme, Texturen, Geometrie, ...), so dass den Kommandos auf vorhandenen Daten arbeiten können.
Theoretisch befinden sich also alle deine Shader,Texturen und Modell im Speicher der Grafikkarte, so dass du beim Rendern eines Frames lediglich die zu verwendenden Daten (welchen Shader/welche Textur(en)/...) auswählst und dann die Modelle nennst, die mit der Kombination gerendert werden sollen.


Zusätzlich wollte ich fragen, ob es detaillierte Informationen über diese
Vorgänge gibt... Besonders aus Sicht der Programmierung.
Wie gesagt, die Suche stellte sich da als relativ schwierig heraus.

Aber eben, eigentliche Frage ist beantwortet. Vielen Dank nochmal <3
Eat a beaver - Save a tree.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

7

02.02.2009, 11:19

Da DX und OGL diese Funktionen direkt nutzen findest du fast alles was du darüber wissen musst in Büchern zu OpenGL oder DirectX.

Wenn du da mehr wissen möchtest: Es gibt glaube ich Reference Manuals von ATI und NVidia die über die Informationen über die Implementierung dieser Funktionen liefern.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

8

02.02.2009, 11:45

Wenn dich die Details interessieren, wie eine GPU tickt, dann kann ein Blick in die Dokumentation von AMD lohnen. Lass dich aber bitte nicht davon abschrecken, wenn du zunächst nicht allzu viel verstehst (schließlich ist diese Dokumentation an Entwickler von Grafiktreibern gerichtet !).

http://developer.amd.com/documentation/g…t.aspx#open_gpu

Für einige interessante Einblicke kann ich R6xx Family Instruction Set Architecture empfehlen.

Asmodiel

Treue Seele

  • »Asmodiel« ist der Autor dieses Themas

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

9

02.02.2009, 12:04

Danke für die guten Erklärungen, Hinweise und Links. :)
Werde mir alles einmal anschauen.

Mich interessiert momentan nicht wirklich, wie ich etwas mit
DX / OGL implementiere, sondern wie DX / OGL implementiert
sind. :) Also, mal nachschauen. ^^
Eat a beaver - Save a tree.

Werbeanzeige