Low/High-Level: Unterschied zwischen den Versionen
(Was ist High- und Low-Level API und worin liegen die Vor- und Nachteile?) |
K (Ein paar Rechtschreibfehler korrigiert) |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
===Allgemein=== | ===Allgemein=== | ||
Low- und High-Level API sind Arten der Programmierung. | Low- und High-Level API sind Arten der Programmierung. | ||
− | Bei Low-Level API werden funktionen wie z.B. Lichtinitialisierung, | + | Bei Low-Level API werden funktionen wie z.B. Lichtinitialisierung, Konfiguration und Zeichnen und alle damit in Zusammenhang stehenden Funktionen in einige übersichtliche Funktionen zusammen gefasst. Wenn man dann ein Licht aktiviert, muss man sich selber noch darum kümmern, dass alles, was mit dem Licht zu tun hat, initialisiert und konfiguriert wird. |
− | Bei High-Level API wird | + | Bei High-Level API wird ein ganzer umfangreicher Bereich zu wenigen Befehlen zusammengefasst. So wird vom Programmierer aus nur noch das Licht aktiviert und dazugehörenende Shader, Zeichenfunktionen und andere Aufrufe werden durch diese eine Funktion abgearbeitet. |
− | In der Regel verwenden Engines, die für Privatentwickler sind, High-Level | + | In der Regel verwenden Engines, die für Privatentwickler sind, High-Level APIs, z.B. Dark Basic und GLScene. |
− | Das Ziel dieser Engines ist schnell und leicht erste sichtbare Erfolge zu presentieren aber unter dem Nachteil der Performance und | + | Das Ziel dieser Engines ist schnell und leicht erste sichtbare Erfolge zu presentieren aber unter dem Nachteil der Performance und Unflexibilität. |
Große Industrie Engines ordnen sich zwischen High und Low ein, da hier die Vorteile beider Varianten genutz werden kann. | Große Industrie Engines ordnen sich zwischen High und Low ein, da hier die Vorteile beider Varianten genutz werden kann. | ||
So kann der Entwickler z.B. in Vision mit einem Befehl das Licht anschalten und über Parameter alle wichtigen Informationen übergeben. Über weitere Funktionen wie Light.SetColor, Light.SetSpecular oder Light.SetType kann man dann tiefer in die Materie eingreifen und wem das noch nicht reicht, ist es möglich eigenen Code in vorhandene Events wie Draw oder Update zu speisen. | So kann der Entwickler z.B. in Vision mit einem Befehl das Licht anschalten und über Parameter alle wichtigen Informationen übergeben. Über weitere Funktionen wie Light.SetColor, Light.SetSpecular oder Light.SetType kann man dann tiefer in die Materie eingreifen und wem das noch nicht reicht, ist es möglich eigenen Code in vorhandene Events wie Draw oder Update zu speisen. | ||
Zeile 15: | Zeile 15: | ||
Vorteile: | Vorteile: | ||
− | *sehr | + | *sehr flexibel |
*Performanter | *Performanter | ||
Zeile 22: | Zeile 22: | ||
*schnell unübersichtlich | *schnell unübersichtlich | ||
*schwerer zu erlernen | *schwerer zu erlernen | ||
− | *nach längerer Zeit sind erste Ergebnisse | + | *erst nach längerer Zeit sind erste Ergebnisse sichtbar |
− | + | <br> | |
<u>High-Level</u> | <u>High-Level</u> | ||
Zeile 30: | Zeile 30: | ||
*bei größeren Anwendung trotzdem gute Codeübersicht | *bei größeren Anwendung trotzdem gute Codeübersicht | ||
*leichter zu erlernen | *leichter zu erlernen | ||
− | *nach kurzer Zeit sind erste Ergebnisse sichtbar | + | *schon nach kurzer Zeit sind erste Ergebnisse sichtbar |
+ | |||
+ | Nachteile: | ||
+ | *Unflexibler | ||
+ | *Geschwindigkeitseinbußen (Overhead) | ||
+ | <br> | ||
+ | <u>Mischung aus beiden Varianten</u> | ||
+ | |||
+ | Vorteile: | ||
+ | *leicht zu erlernen | ||
+ | *nach wenig Zeit erste Ergebnisse | ||
+ | *durch gute Strukturierung ist ein übersichtlicher Code bei großen Projekten möglich | ||
+ | *verhältnissmäßig Performant | ||
+ | *leichter anpassbar | ||
Nachteile: | Nachteile: | ||
− | * | + | *bei schlechter Codestruktur entsteht ein unübersichtlicher Code |
− | * | + | *immer noch möglich mehr Performance zu erreichen |
+ | *größerer Aufwand um größere Anpassungen zu machen | ||
===Beispiele=== | ===Beispiele=== |
Aktuelle Version vom 30. Januar 2008, 19:48 Uhr
Inhaltsverzeichnis
Low/High-Level API
Allgemein
Low- und High-Level API sind Arten der Programmierung. Bei Low-Level API werden funktionen wie z.B. Lichtinitialisierung, Konfiguration und Zeichnen und alle damit in Zusammenhang stehenden Funktionen in einige übersichtliche Funktionen zusammen gefasst. Wenn man dann ein Licht aktiviert, muss man sich selber noch darum kümmern, dass alles, was mit dem Licht zu tun hat, initialisiert und konfiguriert wird. Bei High-Level API wird ein ganzer umfangreicher Bereich zu wenigen Befehlen zusammengefasst. So wird vom Programmierer aus nur noch das Licht aktiviert und dazugehörenende Shader, Zeichenfunktionen und andere Aufrufe werden durch diese eine Funktion abgearbeitet.
In der Regel verwenden Engines, die für Privatentwickler sind, High-Level APIs, z.B. Dark Basic und GLScene. Das Ziel dieser Engines ist schnell und leicht erste sichtbare Erfolge zu presentieren aber unter dem Nachteil der Performance und Unflexibilität. Große Industrie Engines ordnen sich zwischen High und Low ein, da hier die Vorteile beider Varianten genutz werden kann. So kann der Entwickler z.B. in Vision mit einem Befehl das Licht anschalten und über Parameter alle wichtigen Informationen übergeben. Über weitere Funktionen wie Light.SetColor, Light.SetSpecular oder Light.SetType kann man dann tiefer in die Materie eingreifen und wem das noch nicht reicht, ist es möglich eigenen Code in vorhandene Events wie Draw oder Update zu speisen.
Vor- und Nach-teile
Low-Level
Vorteile:
- sehr flexibel
- Performanter
Nachteile:
- großer Codeumfang
- schnell unübersichtlich
- schwerer zu erlernen
- erst nach längerer Zeit sind erste Ergebnisse sichtbar
High-Level
Vorteile:
- kleiner Codeumfang
- bei größeren Anwendung trotzdem gute Codeübersicht
- leichter zu erlernen
- schon nach kurzer Zeit sind erste Ergebnisse sichtbar
Nachteile:
- Unflexibler
- Geschwindigkeitseinbußen (Overhead)
Mischung aus beiden Varianten
Vorteile:
- leicht zu erlernen
- nach wenig Zeit erste Ergebnisse
- durch gute Strukturierung ist ein übersichtlicher Code bei großen Projekten möglich
- verhältnissmäßig Performant
- leichter anpassbar
Nachteile:
- bei schlechter Codestruktur entsteht ein unübersichtlicher Code
- immer noch möglich mehr Performance zu erreichen
- größerer Aufwand um größere Anpassungen zu machen
Beispiele
Low-Level und High-Level anhand eines Lichtes.
Low-Level:
Licht:=TLight.create; Licht.enable:=True; Licht.position:=vec3f(0,0,0); ... Bumpmapping.lightpos:=Licht.position; Bumpmapping.Normalmap:=Textures[0]; Bumpmapping.Heightmap:=Textures[1]; ... Objekt:=TObjekt.create; Objekt.colors:=Bumpmapping.colors; ... Objekt.draw;
High-Level:
Licht:=TLight.create(true,vec3f(0,0,0),true); Objekt:=TObjekt.create(Cube,1,1,1,vec3f(0,0,0),True,True); Objekt.draw;