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

Aktuelle Zeit: Di Jul 08, 2025 08:35

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mehrere Grundlegende Fragen
BeitragVerfasst: Sa Jul 24, 2010 13:35 
Offline
DGL Member

Registriert: Sa Jul 10, 2010 16:22
Beiträge: 16
Programmiersprache: C++
Hi, ich habe ein paar grundlegende Fragen die ihr mir hoffentlich noch beantworten könnt:

1.) Die bei Visual Studio 2010 enthaltene gl.h besitzt ja einen total veralteten Header (glaube Version 1.2). Steht irgendwo im Netz ein aktueller Header zum Download?

2.) Mit OpenGL 3.0 und höher soll man ja VBO's verwenden. Mir scheint diese sind vor allem sinnvoll wenn man Objekte mehrfach rendern möchte. Aber ist dann der Einsatz z.B. beim Rendern einer GUI überhaupt sinnvoll? In der GUI muss ich ja jeden z.B. Button individuell behandeln und als eigenes VBO ablegen. Zudem muss dieser dann auch noch ständig verändert werden, wenn der User mit dem Button agiert. Bzw. das VBO würde genau genommen eigentlich nur einmal gerendert, da dieser i.d.R. nur dann neu gerendet wird wenn sich der Status, Größe, Position usw. geändert hat, was wiederum die Erzeugung eines neuen VBO's erfordet.

3.) Die Fixedfunction Pipeline von OpenGL ist ja deprecated. Woran kann ich nun erkennen dass eine Funktion von OpenGL mittlerweile veraltet ist. Ist dies in der http://wiki.delphigl.com/index.php/OpenGL-Funktions%C3%BCbersicht irgendwie ersichtlich? Bzw. bedeutet dieses "ARB" im Funktionsnamen dass die Funktion veraltet ist? Warum heißt es dann aber nicht z.B. glBeginARB?

weitere Fragen folgen bestimmt noch ;).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Grundlegende Fragen
BeitragVerfasst: Sa Jul 24, 2010 14:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
zu 1) Vernünftige Betriebssysteme (aka Linux) liefern den Header eigentlich mit. Windows ist halt nicht vernünftig :lol: Ich habe keine Ahnung wo man den Header für Windows her bekommt, aber ich würde mal diesen versuchen: http://www.opengl.org/registry/#headers

zu 2) Solange du den Inhalt des VBO nur änderst und nicht seine Größe änderst ist das eigentlich ziemlich schnell. Bei mir sieht das so aus:
Code:
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
if (m_vboSize < newSize || m_vboSize > 2*newSize) {
   // resize buffer
   glBufferData(GL_ARRAY_BUFFER, newSize, m_vertexData, GL_STATIC_DRAW);
   m_vboSize = newSize;
}
else {
   // use old buffer
   glBufferSubData(GL_ARRAY_BUFFER, 0, newSize, m_vertexData);
}

Ich ändere also die Buffergröße nur wenn der neue Buffer nicht in den alten passt oder mehr als 2mal so groß ist wie nötig. Dadurch pendelt sich die Buffergröße bei der benötigten Größe ein.

Alternativ kannst du natürlich auch einfach nur eine Reihe von statischen Quads in den VBO legen. Also pro Quad nur 2D-Positionen: (0,0), (0,1), (1,0), (1,1)
Der Vertexshader bekommt dann pro Quad z.B. einen vec4 mit Position+Größe des Quads und schiebt die Vertices an die richtige Stelle:
Code:
uniform vec4 transform; // vec4(top, left, width, height);
gl_Position.xy = transform.xy + (gl_Vertex.xy * transform.zw);
gl_Position.zw = vec2(0,1);

Texturkoordinaten und was du sonst noch brauchst wird dann alles im Shader erzeugt.

zu 3) ARB steht für Architectural Review Board und bedeutet das die entsprechende Funktion nicht Teil von Standard-OpenGL ist, sondern zu einer ARB-Extension gehört. Häufig gibt es eine Funktion mit und ohne Namenserweiterung. Im Normalfall sind beide Funktionen äquivalent, aber es ist möglich das sie nicht gleich sein. Die Namenserweiterung ist nämlich dafür da das man das Verhalten einer Funktion noch einmal ändern kann. Es gibt auch weitere Namenserweiterungen, siehe ARB.

Zitat:
Woran kann ich nun erkennen dass eine Funktion von OpenGL mittlerweile veraltet ist.

Ich weiß nicht ob das hier im Wiki zu finden ist, da noch relativ wenige mit OpenGL 3.0+ arbeiten. In jedem Fall kannst du z.B. checken ob die Funktion in der Spezifikation auftaucht.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Grundlegende Fragen
BeitragVerfasst: So Jul 25, 2010 09:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Warum sollte denn der OpenGL Header Bestandteil des Betriebssystems sein? Nenn mich kleinlich aber für mich wäre so etwas krautig. :P

Sonst kann ich dir aber zustimmen. Auf opengl.org/registry gibt es immer den neusten Header. Wobei viele auch bewusst auf Frameworks wie glew setzen. Damit ist das Handling wohl einfacher. Denn die Header auf OpenGL.org definieren nur die Prototypen und Typen. Es bleibt also noch Handarbeit an dir hängen.

Zum Thema deprecated. Die offizielle Spezification kann ich da echt nicht empfehlen. Ich blicke da drinne überhaupt nicht was jetzt deprecated ist und was nicht. Da würde ich dir eher empfehlen in die glext.h zu schauen. Di ganzen Sachen sind in defines gekappselt. GL_VERSION_1_2 und GL_VERSION_1_2_DEPRECATED. Alternativ dazu gibt es auch einen blanken gl3.h. Da sind dann nur die OpenGL3+ Sachen enthalten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Grundlegende Fragen
BeitragVerfasst: So Jul 25, 2010 10:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
Alternativ kannst du natürlich auch einfach nur eine Reihe von statischen Quads in den VBO legen. Also pro Quad nur 2D-Positionen: (0,0), (0,1), (1,0), (1,1)
Wenn Du vorwärtskompatibel sein willst, bitte keine Quads verwenden, sondern Triangles.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Grundlegende Fragen
BeitragVerfasst: So Jul 25, 2010 12:40 
Offline
DGL Member

Registriert: Sa Jul 10, 2010 16:22
Beiträge: 16
Programmiersprache: C++
Auf der Opengl Registy Page gibt es ja leider keine gl.h zum Download. Darum meine Frage. Und die von Microsoft ist von 1996.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Grundlegende Fragen
BeitragVerfasst: So Jul 25, 2010 13:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Auf der Opengl Registy Page gibt es ja leider keine gl.h zum Download.

Es gibt aber eine glext.h ;)

Jedenfalls hat Lossy recht, GLEW ist wirklich toll:
http://glew.sourceforge.net/

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Grundlegende Fragen
BeitragVerfasst: So Jul 25, 2010 14:48 
Offline
DGL Member

Registriert: Sa Jul 10, 2010 16:22
Beiträge: 16
Programmiersprache: C++
Wow, das muss man sich mal auf der Zunge zergehen lassen. Weil Microsoft die Opengl-Lib und den gl.h Header aus nachvollziehbaren Gründen (zum Vorteil von DX) seit 1995 nicht mehr aktualisiert hat, hat man den glext.h Header entworfen, der dann neuere Extensions included. Da aber nicht alle Extensions von allen Grafikkarten unterstützt werden, muss man sie manuell einbinden bzw. irgendwelche libs die das machen verwenden. Sorrry, aber so einen Murks habe ich schon lange nicht mehr gesehen. Leider hat man mit dem gl3.h Header scheinbar nichts dazugelernt, da man in Zukunft auch einen gl3ext.h Header zur Verfügung stellen möchte. Wäre doch zu schön gewesen alles in die gl.h (die man dann auf opengl.org anbieten würde) zu packen.

Ich habe mir mal GLee und GLew angeschaut. Glee lässt sich nicht mit VS2010 verwenden, da die Library mit einer älteren Version kompiliert wurde. Außerdem sprechen für mich die Lizenzbedingugen der beiden Header gegen eine Verwendung. Ich möchte bei meiner Software nicht noch darauf Hinweisen müssen, dass ich diesen oder jenen Header verwende.

Also muss ich die manuelle Variant wählen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Grundlegende Fragen
BeitragVerfasst: Mo Jul 26, 2010 20:22 
Offline
DGL Member

Registriert: Sa Jul 10, 2010 16:22
Beiträge: 16
Programmiersprache: C++
Und das nächste Problem. Wenn ich versuche eine MessageBox zu öffnen erscheint diese je nachdem wo im Code ich diese aufrufe gar nicht oder nur solange der Openglcontext noch nicht erstellt wurde. Stand hier schonmal jemand vor diesem Problem und kennt eine Lösung?

EDIT: Habe den Fehler gefunden. Ich hatte die WM_PAINT Message abgefangen, so dass die Messageboxen nicht gerendert wurden.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 7 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.010s | 20 Queries | GZIP : On ]