Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Apr 28, 2024 22:20

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Di Sep 12, 2023 16:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich wollte mich mal ein bisschen schlau über Vulkan machen und habe danach gegoogelt.
Ist das wirklich so, das man über 500 Zeilen Code braucht, bis man das erste Dreieck hat ?

Hier sogar fast 1000 Zeilen: https://github.com/Overv/VulkanTutorial ... iangle.cpp

Braucht es diesen enormen Overhead, oder geht dies auch einfacher ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Sep 13, 2023 09:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Leider ist das der Fall, da Vulkan das Speichermanagement, Pipeline und deren Stages dem Entwickler überlässt und sich auf eine Minimale Hardware API konzentriert. Daher funktioniert das so ziemlich überall mit einer Codebase aber man muss ne Menge Code selber mit bringen.
Sascha hatte damals, als es sich etabliert hat, ein Framework gebaut und das pflegt er und wird auch auf andere Sprachen portiert und hat sich als Standard in der Vulkan Szene etabliert.
Wenn man OpenGL 4.5 genutzt hat, dann kennt man das schon zu Teil, weil man dort auch die einzelnen Schritte der Pipeline selber bauen muss, basis Lineare Algebra benötigt und Objekte gibt, die man sinnvoll verwaltet muss aber es gab kein Memory management.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Sep 13, 2023 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Dann ist wohl nichts, in der schnelle mal ein einfaches Beispiel mit einem Dreieck auszuprobieren.

Mein Ziel wäre, das ich Vulkan unter Lazarus zum laufen bringen.
Es gibt da eine Package pl_Vulkan, aber leider hängen diese alle wen ich sie probieren will.

Dies hatte ich noch gefunden: https://github.com/BeRo1985/pasvulkan
Mit Mühe und Not und Bibliotheken zusammenwursteln habe ich es zum laufen gebracht.
Aber dieses Example ist total überladen.

So wie es aussieht muss ich da zuerst mal passen. :oops:

Zitat:
Wenn man OpenGL 4.5 genutzt hat, dann kennt man das schon zu Teil, weil man dort auch die einzelnen Schritte der Pipeline selber bauen muss, basis Lineare Algebra benötigt und Objekte gibt, die man sinnvoll verwaltet muss aber es gab kein Memory management.

Würde es sich lohnen zuerst mal mit OpenGL 4,5 zu beschäftigen ?
Ich vermute mal, da ist der Schritt ein wenig einfacher, wen man von den OpenGL3.3 Welt kommt.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Sep 14, 2023 13:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Wenn du bei OpenGL erstmal bleiben willst, dann probier 4.5 und eventuell auch die Extension von NV und AMD für Memory Management. Du kannst mit OpenGL4.5 und Extensions ziemlich nahe dem Code kommen, den du für Vulkan brauchst.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 17, 2023 07:45 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Leider ist das der Fall, da Vulkan das Speichermanagement, Pipeline und deren Stages dem Entwickler überlässt und sich auf eine Minimale Hardware API konzentriert. Daher funktioniert das so ziemlich überall mit einer Codebase aber man muss ne Menge Code selber mit bringen.

Kann man dies etwa so vorstellen ?
Bei OpenGL 1.x waren alle Pipelines fix, Von aussen, hatte man ein paar Zeichen-Befehle und konnte die Matrix ein wenig manipulieren.
Später kamen die Shader dazu, dort musste man die ganze Render-Pipeline selbst programmieren, dafür wurde man mit Flexibilität belohnt.

Und mit Vulkan hat man auf den ganzen Rendering-Prozess Einfluss, auch was das ganze Buffergeschehen anbelangt ?
Und man kann die Grafikkarte voll auf seine eigenen Bedürfnissen programmieren ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 17, 2023 11:58 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
OpenGL1 hat fixed pipelines, du hast States wie Texturslots, Filter, Vertices und shortcuts für Vertex Arrays aber die Struktur war starr.
OpenGL2 bricht es etwas auf. Shader weniger States. Rudimentäre Shader.
OpenGL3 hat Geometry, Fragment, Vertex, Tesselation shader, also die Schritte in der Pipeline sind immer noch fix aber du kannst die Schritte nun selber modifizieren. States werden weniger, Objekte kommen ins Spiel. Einige stages, in der Pipeline sind nun optional.
OpenGL4 States kommen in Objekten, Objekte überall, Shader sind noch flexibler, GPU seitige Befehl-Pipelines, compute shader, custom debugging.
Als Extensions kamen noch diverse Sachen, z.B. für Memory Management, unterschiedliche Auflösungen beim Swap(glaube swap-chain war der name).
Also die Pipeline ist immer fix aber es gibt viele Optionale Stages.

Mein Verständnis von Vulkan ist dass ich die Pipeline selber definiere aber gewisse Stages benötigst(Fragment shader).
Eventuell haben wir ja wen aktives noch hier, der da mehr zu sagen kann.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 17, 2023 13:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
So wie ich es vermutet habe.

Zitat:
OpenGL3 hat Geometry, Fragment, Vertex, Tesselation shader, also die Schritte in der Pipeline sind immer noch fix aber du kannst die Schritte nun selber modifizieren. States werden weniger, Objekte kommen ins Spiel. Einige stages, in der Pipeline sind nun optional.

Aus irgend einem Grund wurde mir dazumal OpenGL 3.3 und nicht die 3.0 empfohlen.
Wurde mir dies gemacht, weil die 3.3 mehr ausgereift war ?

Zitat:
Mein Verständnis von Vulkan ist dass ich die Pipeline selber definiere aber gewisse Stages benötigst(Fragment shader).
Eventuell haben wir ja wen aktives noch hier, der da mehr zu sagen kann.

Dies tönt recht spannend.
Ich werde mir Vulkan mal im Hinterkopf behalten.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 17, 2023 14:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Am besten kann man die Änderungen hier sehen.
3.1 hat die alte API entfernt, 3.2/3 haben die Shader stark verändert.
Ich würde direkt auf 4.6 gehen, ich sehe dort, dass SPIR-V supported wird, dass benötigst du für Vulkan. Das ist ein llvm basierter Shader compiler. Der wurde bei AMD auch schon vor 4.6, hinter den Shader compiler verwendet.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 17, 2023 14:22 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Ich würde direkt auf 4.6 gehen

Für OpenGL 4.6 wird es wohl schwer sein, eine Lektüre zu finden.
Für die 4.5 gibt es die dicke Bibel. Und in diese hat es auch SPIR-V.

https://www.amazon.de/OpenGL-Programmin ... 112&sr=8-2

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 17, 2023 14:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich hatte die Kindle Variante genutzt. Die war gut.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 17, 2023 16:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Ich hatte die Kindle Variante genutzt. Die war gut.

Ich habe ein PDF gefunden.

Da habe ich folgendes gewurstel gesehen,
Code:
  1. memcpy(buffer + offset[Scale], &scale, size[Scale] * TypeSize(type[Scale]));
  2. memcpy(buffer + offset[Translation], &translation, size[Translation] * TypeSize(type[Translation]));
  3. memcpy(buffer + offset[Rotation], &rotation,  size[Rotation] * TypeSize(type[Rotation]));
  4. memcpy(buffer + offset[Enabled], &enabled, size[Enabled] * TypeSize(type[Enabled]));
  5.  
  6. glGenBuffers(1, &ubo);
  7. glBindBuffer(GL_UNIFORM_BUFFER, ubo);
  8. glBufferData(GL_UNIFORM_BUFFER, uboSize, buffer, GL_STATIC_RAW);

Ich denke, die kann man sicher eleganter mit einem Record lösen.
Bei OpenGL 3.3 ging dies beim UBO auch,

Aber ich vermute mal, im Buch machen die es so, um zu zeigen, wie man die Offsets und Grössen im Uniform-Struct auslesen kann.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 17, 2023 19:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Wahrscheinlich, je kompakter und sauber aligned, float/half float, des so flinker ist das ganze.
Wir hatten damals für ein Terrain die xyz,uv durch Höhe1,Höhe2,AtlasOffset ersetzt und dann im Vertex Shader über die VertexID x,y, sowie mit AtlasOffset noch u,v errechnet, dann über Distanz zur Kamera die Gewichtung zwischen Höhe1 und Höhe2 errechnet und somit ein LOD gehabt, was zwischen den LOD-Stufen das Mesh morphed. Das ganze passt in 3 floats. Die Macht von custom Data :)
Heute schätze ich mal, nutzt man eher Geometry Shader und tesselation.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 22, 2023 18:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
TAK2004 hat geschrieben:
OpenGL3 hat Geometry, Fragment, Vertex, Tesselation shader, also die Schritte in der Pipeline sind immer noch fix aber du kannst die Schritte nun selber modifizieren. States werden weniger, Objekte kommen ins Spiel. Einige stages, in der Pipeline sind nun optional.
Kleine Korrektur: Tesselation (Control/Evaluation) Shader kamen erst mit OpenGL 4.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 22, 2023 19:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Im Übrigen bietet die Mesamatrix meiner Meinung nach einen guten Überblick, welche Extensions wann in den Kern von OpenGL aufgenommen wurden – inklusive Link zu deren Spezifikation, die immer auch einen einleitenden Abschnitt enthält, worum es überhaupt geht.

mathias hat geschrieben:
Für OpenGL 4.6 wird es wohl schwer sein, eine Lektüre zu finden.
Du brauchst kein Buch für irgendeine spezielle OpenGL-Version. Seit OpenGL 3.2+ (Core Profile) ist keine Funktionalität weggefallen. Und das Prinzip, wie man OpenGL programmiert hat sich nicht verändert. Es lohnt sich natürlich, die neueren Features zu kennen, so dass man sie einsetzen kann, wenn man sie braucht. Und das ist alles hervorragend in der Spezifikation, bzw. etwas nutzerfreundlicher im Khronos-Wiki dokumentiert.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Sep 23, 2023 08:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Kleine Korrektur: Tesselation (Control/Evaluation) Shader kamen erst mit OpenGL 4.

Der einfache Tesselation-Shader scheint es sogar unter OpenGL 3.3 gegeben zu haben.
Nur konnte man diesen nur auf 3-Ecke anwenden, ab 4.x ist es auch mit Rechtecken möglich,

Ab 4.0 hat es schon noch ein paar interessante Ergänzungen gegenüber 3.3.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.035s | 19 Queries | GZIP : On ]