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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

24.07.2013, 16:58

Das Problem ist, dass OpenGL so genial designed ist, dass es sich sehr effektiv jeglicher Kapselung widersetzt. Das fängt bereits dort an, wo der aktuelle GL Context kein explizites Objekt, sondern eine versteckte, threadlokale Variable ist. Ich habs jedenfalls aufgegeben, zu versuchen, Grafik APIs zu wrappen, imo ist es aber eh auch rein prinzipiell nicht sinnvoll...

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

12

24.07.2013, 18:19

Ich benutze OpenGL 3 und 4.

Freundliche Grüße
Stazer

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

13

24.07.2013, 18:22

Zitat

Das Problem ist, dass OpenGL so genial designed ist, dass es sich sehr effektiv jeglicher Kapselung widersetzt


Klar, aber ich kann immerhin schon mal die Funktionsaufrufe in Methodenaufrufe umwandeln und z.B. die Bindungen in der Klasse mitspeichern. Also die Texture ID oder was auch immer... Spart arbeit, aber wirklich schön ist es natürlich nicht.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

24.07.2013, 20:53

Das Problem ist halt, dass die Texture ID selbst immer nur innerhalb eines Thread überhaupt Gültigkeit besitzt. Auch würde mich interessieren, wie genau du das mit den Methoden schaffst, da ja immer nur eine Texture aktuell gebunden sein kann; hast du in jeder Methode der Texture Klasse am Anfang ein glBindTexture() stehen? Ist das nicht extrem viel unnötiger Overhead?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

24.07.2013, 21:02

Jup, die Punkte von dot sind das, was mich tierisch nervt. Das hat nichts mit vergessen gewisser API Calls zu tun. Aber man kann halt z.B. auch immer nur eine Textur binden, was schon ein großer WTF-Moment ist. Es gibt Wege herum um solchen Mist, aber die sind zum Haare raufen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

16

24.07.2013, 23:41

Seit ich wieder mehr mit Direct3D 11 mache, arbeite ich auch lieber mit Direct3D als mit OpenGL. Die API ist extrem aufgeräumt und besonders die Shader Ressourcen lassen sich meines Erachtens besser handhaben,
als mit den vielen "Buffer Objects" in OpenGL (FBO, VBO, SSBO, PBO etc.). Vor allem die Sache mit den Shadern: während bei OpenGL die Shader vom Grafik-Treiber kompiliert werden, und somit jeder GraKa-Hersteller eine andere Lösung dafür hat (mit anderen Bugs und anderer 'Spezifikations-Toleranz'), übernimmt dies bei Direct3D die DX API die nur von Microsoft entwickelt wird. D.h. bei HLSL wird der selbe Shader für jede GraKa genau gleich kompiliert.
Das schöne jedoch an OpenGL ist: wird eine neue Version veröffentlicht, kann man die neuen Features relativ schnell über die Extensions in das bestehende Render-System integrieren, wohin gegen man bei D3D gleich ein komplett neues Render-System schreiben muss.
Hat halt alles Vor- und Nachteile ;)
Gruß,
Lukas

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

17

25.07.2013, 01:56

Achso, hatte das überlesen mit den Threads. Ja klar ist das ein Problem...
Und nein ich binde die Textur dann nicht jedes mal neu. Ich schreibe quasi:

texture->bind();

was dann natürlich glBindTexture(m_target, m_id); aufruft. Dadurch kapsel ich das halt schon mal ein bisschen. Für mich ist dann ein Buffer ein Objekt oder was auch immer.

stef

Treue Seele

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

18

31.07.2013, 00:34

Das Problem ist halt, dass die Texture ID selbst immer nur innerhalb eines Thread überhaupt Gültigkeit besitzt.

Was verteilst du denn innerhalb deines Renderers auf mehrere Threads ?
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

19

31.07.2013, 01:01

Das Problem ist halt, dass die Texture ID selbst immer nur innerhalb eines Thread überhaupt Gültigkeit besitzt.

Was verteilst du denn innerhalb deines Renderers auf mehrere Threads ?

Der Punkt, auf den ich mit dieser Aussage hinauswollte, ist einfach nur, dass solch ein Verhalten rein prinzipiell eher schwer mit den Konzepten der OOP zu vereinbaren ist... ;)

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

20

31.07.2013, 07:26

Solange man keine Performancenachteile oder mangelenden Support hat werde ich wahrscheinlich auch nicht umsteigen.

Wie kommst du drauf, dass du keine Performancenachteile hast? ;)

Ist meine Annahme, wenn ich von dx11 features bisher keinen Profit sehe. Oder seh ich das falsch?

Werbeanzeige