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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

02.06.2010, 13:26

DirectX, OpenGL, Glide ... und was hat Mac?

Hi,
Nach meinem Wissen gibt es:

DirectX nur für Windows, XBox360 und Playstation3
OpenGL für Windows, MacOS, Linux und alle Unix-Nachfahren
Glide für Voodoo Grafikkarten (wird aber wohl kaum noch irgendwo verfügbar sein ohne Wrapper wie "OpenGlide")

So weit ich weiß hat Mac auch einen eigenen Renderer?! Wie heißt der?
Falls in meiner 'Liste' was nicht stimmt, korrigiert micht bitte. Keine Ahnung ob DirectX auch auf der Wii oder PS2 läuft?!

Gruß,
Lukas

2

02.06.2010, 13:28

Ich vermute mal stark das dies OpenGL sein wird.

C-/C++-Quelltext

1
2
3
4
while(true)
{
    printf("Schon wieder aufgehangen!?");
}

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

02.06.2010, 13:30

Ich meine mich aber daran zu erinner, dass MacOS auch einen komplett eigenen Renderer hat. Nicht nur OpenGL.

4

02.06.2010, 13:56

Ja es hat einen eigenen Renderer für die GUI und einfachen 2D Formen, ähnlich wie bei Windows die GDI bzw GDI+. Von einem Hardware beschleunigten 3D Renderer außer OpenGL, der auf MacOS läuft, habe ich noch nichts gehört, und würde ich dann auch garnicht erst empfehlen.

C-/C++-Quelltext

1
2
3
4
while(true)
{
    printf("Schon wieder aufgehangen!?");
}

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

5

02.06.2010, 16:58

OpenGL:
- PC-Windows, -Linux, BeOS etc. (GL 1.4 ist auf 99,9% von den PCs, die heute noch existieren, verfügbar, GL 2.1 aber quasi Standard)
- Mac (OpenGL 2.0 quasi Standard, dort auch direkt im Betriebssystem verankert)
- PlayStation 2-3 (GL ES 1.0)
- XBox 360 (GL ES)
- alle Android Geräte (ES 1.0, neuere auch 2.0, OpenGL direkt im Betriebssystem verankert, wird für diverse 2D-Darstellungen genutzt)
- alle iPhones sowie iPod Touch (ES 1.1, ab 3GS auch 2.0, OpenGL direkt im Betriebssystem verankert und wird für quasi alle 2D-Darstellungen genutzt)
- Symbian (Nokia) (ES 1.0 bzw. ES 2.0 bei neueren Geräten)
- Windows Mobile / Windows CE (sinnvoll nur auf höherwertigen Geräten wie HD2 etc.)
- Windows Mobile 7 (GL ES 2.0)


Direct3D:
- PC-Windows
- XBox

Zur Kompatibilität:
Wenn man sich auf GL 1.4 beschränkt, sprich nur simples Multitexturing, keine Shader etc. pp. läuft es auf Anhieb auf allen Geräten, die ich kenne, zumindest für den Mac, das iPhone und Android musste ich nicht eine einzige Zeile am Renderer ändern. Generell ist es also eigentlich ganz intelligent immer eine 1.4er-Schnittstelle als Fallback zu unterstützen, so dass sein Spiel dann später überall zumindest prinzipiell läuft.

Mit Shadern streut sich das dann natürlich sehr schnell sehr weit:
GLSL 1.2 - Standard für alle mittelklassigen Smartphones der heutigen Generation, sprich iPhone 3GS, Nexus One, Desire etc. pp.
GLSL 2.0 - Macs der letzten Generation, viele Laptops, aber auch sicher noch ein guter Batzen an PCs
GLSL 3.0 - der derzeitige Standard bei PCs der letzten 2 Jahre
GLSL 4.0 - Die DX11-Generation, sprich die Fermis, die neuen ATI-Karten etc.

Bzgl. dem "Renderer" auf dem Mac: Der nennt sich Quartz und ist quasi ein OpenGL-Wrapper, um sich auf 2D-Ebene nicht mit Dingen wie dem Laden von Grafiken und Standard-2D-Funktioen rumplacken zu müssen und bietet... da er ja unter der Haube nunmal sowieso 3D arbeitet... auch diverse 3D-Effekte, sprich du kannst halt nicht nur X,Y und Width und Height definieren wie bei Windows, sondern den 2D-Elementen auch gleich Matrizen verpassen, so dass sie dann durch die Gegend fliegen und solche Dinge... Apple halt ;-). Für dich alles in allem aber uninteressant.

LG
Alyx

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Alyx« (02.06.2010, 17:03)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

6

03.06.2010, 13:37

Danke für die ausführliche Antwort =)
OpenGL 1.4 will ich eigentlich auch noch in meine Engine einbauen.
Aber was wäre da vernünftiger? Einen extra VideoDriver oder in dem OpenGLDriver intern abfangen, welche Funktionen verfügbar sind und welche nicht? Letzteres wäre dann halt etwas langsamer.
Aber Ersteres wäre irgendwie unschön, weil unmengen an OpenGL Code genau gleich zwei mal existieren würde.

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

7

03.06.2010, 14:40

Habe ich um ehrlich zu sein auch noch keine perfekte Lösung für. Habe die von den Unterschieden betroffnen Teile in jeweils entsprechende virtuelle Funktionen ausgelagert, die zueinander kompatibel sind.
Sprich wenn du mit dem 1.4er einem Material eine Bumpmap hinzugefügen willst via AddMap(DataSource,MapType) dann ignoriert er dies schlicht und einfach, ebenso wie er mit GL30 die Textureinheiten nicht immer an und ausschaltet, weil dies ja hier ebenso wegfällt, nur um zwei Beispiele zu nennen. Das Problem ist natürlich um so mehr virtuelle Funktionen, um so mehr Calls, um so schlechter die Performance, wenn diese Aufrufe in einer inneren Schleife liegen. Aber ich denke es ist so prinzipiell ganz sinnvoll und wenn man dann am Ende ein mehr oder minder fertiges Produkt hat und nicht mehr wie wild daran rumändert, kann man immer noch eben diese kritischen Funktionen dann natürlich wieder direkt an die entsprechenden Stellen schieben.
Das gute an OpenGL im Gegensatz zu Direct3D ist hier halt, dass die einzelnen Versionen doch noch verhältnismäßig sehr kompatibel zueinander sind, weswegen die Sprünge 2.1 auf 3 und 3 auf 4 sich doch sehr in Grenzen halten.

EDIT: Im oberen Post vergessen: Bei GL ES kann man sich nur auf RGBA8888, A8 und S3TC als verfügbare Texturformate verlassen, selbst 16-Bit-Texturen funktioniert nicht. Es kann natürlich sein, das einzelne Geräte auch mal eines mehr unterstützen, aber man sollte sich nicht drauf verlassen. Habe nämlich auch versucht auf dem iPhone Speicher zu sparen, in dem ich auf 16-Bit reduzieren wollte... mit der festen Meinung das müsse ja gehen, wenn es selbst auf der Riva TNT schon lief, aber nö, die haben da gleich mal mit dem Besen gekehrt ;-).

LG
Alyx

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Alyx« (03.06.2010, 14:56)


Werbeanzeige