Forum: PC-Programmierung Vulkan oder OpenGL als Beginner


von Marsmensch (Gast)


Lesenswert?

Ich interessiere mich sehr für die Grafikprogrammierung am PC, daher 
werde ich mich damit intensiv beschäftigen. Eigentlich wollte ich mit 
OpenGL anfangen, aber dann habe ich gelesen, dass Vulkan der Nachfolger 
von OpenGL ist. Es soll u.a. performanter sein aber auch komplexer als 
OpenGL. Jetzt wollte ich mal hier im Forum Ratschläge/Meinungen 
einholen.

Soll ich als Neuling auf dem Gebiet der Grafikprogrammierung lieber mit 
OpenGL oder gleich mit Vulkan anfangen? Tutorials gibt es für beide 
APIs. Meine Kenntnisse in C++ würde ich als fortgeschritten einstufen.

von Martin (Gast)


Lesenswert?

Beschreibe doch mal was du machen möchtest. Generell kann man heute 
denke ich mit Vulkan anfangen, aber es erfordert bzw. Vermittelt mehr 
Kenntnisse über Aufbau und Funktionsweise von Gpus.

von Dennis R. (dennis_r93)


Lesenswert?

OpenGL zieht einen mehr oder weniger großen Rattenschwanz an Altlasten 
hinter sich her. Mordern ist das nicht.
Auch wenn du Tutorials findest wie z.B. von NeHe solltest du dich eher 
in Richtung OpenGL 3.3 und Aufwärts orientieren. Alles drunter ist mit 
Vorsicht zu genießen und als veraltet zu betrachten.
Es gab versuche das ganze zu verbessern, es ist auch besser geworden. 
Aber es ist nicht gut geworden.

Ich würde die Empfehlen mit Vulkan anzufangen. Wenn du das verstanden 
hast wirst du auch sehr schnell und leicht auf OpenCL migrieren können.

Wenn es Windows sein darf würde ich dir auch noch DirectX 10 oder 11 
Empfehlen.
DirectX12 ist von der Mentalität her gesehen schon eher in Richtung 
Vulkan angesiedelt.

Insgesamt kann man sagen, dass DirectX12, OpenCL und Vulkan mehr 
Management der Details von dir verlangen. Wie z.B. Speicher anfordern, 
zuweisen und kernels ausführen.
Aber dafür lernst du mehr und hast auch mehr Kontrolle.

Ich selber habe wenig Erfahrung mit DirectX11 gemacht, viel mit OpenCL, 
wenig mit Vulkan und mittelmäßig mit OpenGL.

von Marsmensch (Gast)


Lesenswert?

Danke Dennis für die ausführliche Antwort. Dann werde ich es wohl wagen 
mit Vulkan.

@Martin: Spiele/Apps programmieren für PC und Smartphones/Tablets. Keine 
aufwändigen Sachen die zwingend Vulkan erfordern würden.

von Marsmensch (Gast)


Lesenswert?

Dennis R. schrieb:
> OpenGL zieht einen mehr oder weniger großen Rattenschwanz an Altlasten
> hinter sich her.

Genau das habe ich auch gelesen, das macht die Überlegung Vulkan zu 
nutzen interessanter.

von Dirk (Gast)


Lesenswert?

Hallo,

Marsmensch schrieb:
> @Martin: Spiele/Apps programmieren für PC und Smartphones/Tablets. Keine
> aufwändigen Sachen die zwingend Vulkan erfordern würden.

wieso dann nicht Unity oder Unreal Engine?

von Max D. (max_d)


Lesenswert?

OpenGL hat halt den Vorteil dass es nahezu überall unterstützt wird.
Mit DirectX dürfte zb auf dem Smartphone nix los sein.

von Daniel A. (daniel-a)


Lesenswert?

Modernes OpenGL, insbesondere das GLES subset, ist immernoch für die 
meisten Anwendungen mehr als ausreichend, ist auf allen Platformen 
verfügbar, inklusive Phones, und kann mit WebGL auch vom Browser aus 
genutzt wersen. Es hat einige nachteile gegenüber vulken, speziell, dass 
man nur einen Thread fürs rendering verwenden kann, und minimal mehr 
overhead. Bei vulkan ist die initialisierung komplexer, und der 
Hardwaresupport momentan noch geringer. Die grundlegenden Ablaufe sind 
dann aber bei beiden die selben. Vulkan hat noch den Vorteil, dass es 
etwas bessere mit OpenCL integriert, da es diesem von den APIs her sehr 
änlich ist.

von Marsmensch (Gast)


Lesenswert?

Daniel A. schrieb:
> ist auf allen Platformen
> verfügbar, inklusive Phones

Gilt das mittlerweile nicht auch für Vulkan?

von Karl (Gast)


Lesenswert?

Marsmensch schrieb:
> Gilt das mittlerweile nicht auch für Vulkan?

Ist im kommen. Gerade auf mobilen Plattformen wird Vulkan begrüßt, weil 
es deutlich schonender mit der CPU umgeht aus ogl.  Spart einfach Strom.

Wie so oft könnte man sich noch für Frage stellen, was erlernt werden 
soll. 3d Grafik im allgemeinen oder eine API. VK bürdet dem Entwickler 
viel Arbeit auf, die in klassischen APIs vom Treiber erledigt wird, 
bietet dafür aber viele Vorteile in Form von Kontrolle, geringe CPU Last 
und ganz wichtig: multithreading.
Ogl und dx11 sind weiter weg von der hw, erleichtern aber so manche 
Sache. Der Trend scheint nicht zu sein, dass sich alle wie wild auf die 
neuen APIs stürzen.
Falls du erst Mal lernen willst was man alles machen kann in der 3d 
Grafik, würde ich eher mit ogl beginnen. Alternativ: 3dcenter.org. da 
tummelt sich mancher Experte, inkl einem der Entwickler von Doom und 
Wolfenstein 2.

von Marsmensch (Gast)


Lesenswert?

Karl schrieb:
> Wie so oft könnte man sich noch für Frage stellen, was erlernt werden
> soll. 3d Grafik im allgemeinen oder eine API

Höchstwarscheinlich muss man sowieso irgendwann umsteigen, weil OpenGL 
von Vulkan abgelöst wird. Dann macht es schon Sinn das neue zu lernen. 
Ich habe ein sehr detailliertes Tutorial gefunden, da arbeite ich mich 
jetzt mal durch. Da ich mit Grafik APIs bis jetzt nich nichts zu tun 
hatte, würde ich den Mehraufwand gar nicht merken. Wenn es mir doch zu 
komplex wird, versuche ich mich mal an OpenGL.

von Christopher C. (trihexagon)


Lesenswert?

Marsmensch schrieb:
> Höchstwarscheinlich muss man sowieso irgendwann umsteigen, weil OpenGL
> von Vulkan abgelöst wird. Dann macht es schon Sinn das neue zu lernen.

Nein, Vulkan ist kein Ersatz für OpenGL. OpenGL ist eine ordentliche 
Stufe über Vulkan, Vulkan ist mehr low-level. Aber halt mit allen Vor- 
und Nachteilen.

Marsmensch schrieb:
> Ich habe ein sehr detailliertes Tutorial gefunden, da arbeite ich mich
> jetzt mal durch. Da ich mit Grafik APIs bis jetzt nich nichts zu tun
> hatte, würde ich den Mehraufwand gar nicht merken.

Wirst du definitiv, wie schon gesagt wurde, musst du mit Vulkan 
wesentlich mehr (langweiligen) Verwaltungsaufwand selbst machen. Bei 
OpenGL macht das der Treiber für dich. Vergleiche mal den Code zum 
Erstellen eines Graphikkontextes für Vulkan und OpenGL...

Fang lieber mit OpenGL an, du musst sowieso schon genug lernen, wie z.B. 
Shaderprogrammierung, und solang du nicht an den Performancegrenzen 
moderner Grafikkarten und CPUs stößt, bringt dir Vulkan eh nichts, aber 
du hast wesentlich mehr Arbeit.

von Marsmensch (Gast)


Lesenswert?

Christopher C. schrieb:
> Fang lieber mit OpenGL an, du musst sowieso schon genug lernen

Ich habe mir jetzt das ganze Tutorial durchgesehen. Ich kanns fast nicht 
fassen, 900 Codezeilen um ein Dreieck auf den Bildschirm zu bringen. Ok 
das meiste davon hat mit der aufwändigen Initialisierung von Vulkan zu 
tun. Aber das waren ja erst die Basics, wenn der Rest ähnlich 
umfangreich ist, dann ist das in der Tat Momentan nichts für mich.

von Borislav B. (boris_b)


Lesenswert?

Wenn es dir ums Spieleentwickeln geht, bist du am besten mit einer 
Gameengine bedient. Besonders Unity hat eine sehr flache Lernkurve und 
bringt dich schnell zu tollen Ergebnissen.

Wenn du die Feinheiten der Grafikprogrammierung (aus wissenschaftlichem 
Interesse) erlernen möchtest, führt wohl kein Weg an Vulkan vorbei ;-)

von Marsmensch (Gast)


Lesenswert?

Borislav B. schrieb:
> Wenn du die Feinheiten der Grafikprogrammierung (aus wissenschaftlichem
> Interesse) erlernen möchtest, führt wohl kein Weg an Vulkan vorbei ;-)

Vielleicht vereinfacht Khronos Vulkan mit der Zeit auch wer weis. Oder 
es wird für bestimmte Abläufe Abstraktionsbibliotheken geben.

Muss man bei Vulkan grundsätzlich so viel Codeaufwand betreiben oder 
betrifft das immer nur den Initialisierungsteil und der renderingteil 
ist dann nicht so umfangreich?

Zu OpenGL eine Frage noch. Macht es einen Unterschied ob ich mit Opengl 
3.3 oder 4.x beginne? Glaube das "moderne" also das "core" OpenGL 
beginnt ja ab 3.3. Die meisten Tutorials raten davon ab altes OpenGL zu 
lernen.

von Christopher C. (trihexagon)


Lesenswert?

Marsmensch schrieb:
> Borislav B. schrieb:
>> Wenn du die Feinheiten der Grafikprogrammierung (aus wissenschaftlichem
>> Interesse) erlernen möchtest, führt wohl kein Weg an Vulkan vorbei ;-)
>
> Vielleicht vereinfacht Khronos Vulkan mit der Zeit auch wer weis. Oder
> es wird für bestimmte Abläufe Abstraktionsbibliotheken geben.

Vereinfacht wird die API auf keinen Fall, dass würde dem Design von 
Vulkan widersprechen. Was ich mir vorstellen kann ist, dass es in 
Zukunft kein natives OpenGL mehr geben wird, sondern der OpenGL Treiber 
nur noch ein Vulkan-Wrapper sein wird.

Marsmensch schrieb:
> Muss man bei Vulkan grundsätzlich so viel Codeaufwand betreiben oder
> betrifft das immer nur den Initialisierungsteil und der renderingteil
> ist dann nicht so umfangreich?

Natürlich ist das nicht alles. Wie gesagt, mehr LowLevel, mehr 
Möglichkeiten, aber auch mehr Verantwortung und Aufwand.

Marsmensch schrieb:
> Zu OpenGL eine Frage noch. Macht es einen Unterschied ob ich mit Opengl
> 3.3 oder 4.x beginne? Glaube das "moderne" also das "core" OpenGL
> beginnt ja ab 3.3. Die meisten Tutorials raten davon ab altes OpenGL zu
> lernen.

Nimm gleich 4.x und ein gescheides Buch. Zum Beispiel dieses 
Standardwerk:

https://www.cs.utexas.edu/users/fussell/courses/cs354/handouts/Addison.Wesley.OpenGL.Programming.Guide.8th.Edition.Mar.2013.ISBN.0321773039.pdf

von Marsmensch (Gast)


Lesenswert?

Christopher C. schrieb:
> Nimm gleich 4.x und ein gescheides Buch

Wow dieses Buch hört sich vielversprechend an, danke dir vielmals !

von S. R. (svenska)


Lesenswert?

Marsmensch schrieb:
> Zu OpenGL eine Frage noch. Macht es einen Unterschied
> ob ich mit Opengl 3.3 oder 4.x beginne?

Hängt davon ab, ob du seltsame Grafikchips mit schlechten Treibern 
unterstützen möchtest. Nicht alle Open-Source-Treiber können OpenGL 4 
(oft aber ein mehr oder weniger großes Subset davon) und wirklich alte 
Chips auch nicht. Mobilplattformen können sowieso kein OpenGL, sondern 
nur GLES.

In wenigen Jahren wird Vulkan auf allen neuen Android-Geräten vertreten 
sein müssen, bisher ist das noch nicht der Fall.

von Johnny B. (johnnyb)


Lesenswert?

Von mir auch ein Votum zu Unity; mit dem hat man schnell schöne Erfolge 
und es gibt sehr gute Tutorial Videos.
https://unity3d.com/de

Tutorial
https://www.youtube.com/watch?v=IlKaB1etrik

: Bearbeitet durch User
von Marsmensch (Gast)


Lesenswert?

S. R. schrieb:
> In wenigen Jahren wird Vulkan auf allen neuen Android-Geräten vertreten
> sein müssen, bisher ist das noch nicht der Fall.

Muss man sich halt Hilfsbibliotheken bauen um Dinge die immer gleich 
gemacht werden zu verstecken (Komplexität verstecken)

von frankthetank (Gast)


Lesenswert?

Marsmensch schrieb:
> Komplexität verstecken

Es müsste heißen: Komplexität reduzieren und verstecken.

von cfreak (Gast)


Lesenswert?

Nur so nebenbei gefragt welche Programmiersprache verwendest du? Ich 
empfehle unbedingt C, Vulkan ist eine reine C-API.
C++ ist ohnehin viel zu kompliziert und viele Konzepte der Sprache sind 
überflüssig, mit C sind deine Programme performanter da kein Overhead 
generiert wird. Just my 5 cent.

von S. R. (svenska)


Lesenswert?

cfreak schrieb:
> Just my 5 cent.

What an Unfug.

Vulkan mag mit einer C-API kommen, aber die kann man problemlos aus C++ 
heraus benutzen. Nimm also, was du am besten kannst und nutze die 
Features deiner Zielsprache, die dir einen Nutzen bringen.

Viel Erfolg.

von RenderZ (Gast)


Lesenswert?

Was ist denn eigentlich der Grund wieso OpenGL nur ein Thread zum 
rendern nutzt?
Wird dieser Mangel in der Praxis von Gameengines irgendwie umgangen? Ist 
also ein rendern mit mehreren Threads trotzdem möglich?

Kann doch nicht sein dass man quasi ein Vielfaches an Renderleistung 
einfach nicht nutzt weil OpenGL nur ein Thread nutzt.

So als hätte man ein Auto mit einem 1000 PS Motor aber die Software des 
modernen Autos würde Architektur bedingt nur 250 oder 500 PS rausholen. 
So was bereinigt man doch sofort und wartet nicht Jahrzehnte bis eine 
neue Software kommt, hm?

von S. R. (svenska)


Lesenswert?

RenderZ schrieb:
> Was ist denn eigentlich der Grund wieso OpenGL
> nur ein Thread zum rendern nutzt?

Damit müssen weder der Grafiktreiber, noch die OpenGL-Bibliotheken oder 
andere Teile des Render-Stacks reentrant sein. Außerdem ist die 
Reihenfolge, in der Aufgaben an den Grafiktreiber übergeben werden, 
eindeutig definiert (es gibt also keine Race-Conditions auf der Ebene).

RenderZ schrieb:
> Kann doch nicht sein dass man quasi ein Vielfaches an Renderleistung
> einfach nicht nutzt weil OpenGL nur ein Thread nutzt.

Es geht nicht um das Rendern, sondern um die Aufgabe von Render-Paketen 
an den Grafiktreiber. Das Rendern - also den eigentlichen Aufwand - 
übernimmt die Hardware selbst, damit ist der Performance-Verlust nicht 
besonders groß.

Moderne Engines mit massiv vielen Threads müssen ihre Aufgaben 
allerdings in Pakete bündeln und an einen (Render-)Thread weiterleiten, 
was deren Architektur beschränkt und einen Schedulerschritt mehr 
erfordert.

RenderZ schrieb:
> So als hätte man ein Auto mit einem 1000 PS Motor aber die Software des
> modernen Autos würde Architektur bedingt nur 250 oder 500 PS rausholen.

Nein. Das ist so, als hätte man ein Auto mit einem 1000 PS Motor, aber 
nur einer Tür. Das Auto fährt trotzdem nicht langsamer, aber die Zeit 
fürs Ein- und Aussteigen ist länger als nötig und erfordert zusätzliche 
Regeln.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.