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

Aktuelle Zeit: So Dez 22, 2024 11:21

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Sa Jul 28, 2012 12:30 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hallo,

ich wollte jetzt endlich mal von Displaylisten auf VBOs umsteigen.
Leider stürtzt mein Programm schon ab, sobald ich irgendwo glGenBuffers oder glGenBuffersARB drin hab, ohne Fehlermeldung.
Die OpenGL-Version habe ich gerade zu 3.2 ausgelsen (glGetString(GL_VERSION)) , glewInit wird auch aufgerufen.
Shader benützen funktioniert mit glUseProgram (oder glUseProgramObjectARB) einwandfrei.
Wieso stürtzt es dann bei glGenBuffers ab?

Übrigens, warum kann ich mit OpenGL 3.2 noch alle alten Befehle verwenden, die bei meiner Version schon deprecated sein müssten?

Kann man auch ältere Versionen einstellen? Wenn ja, wie?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 13:56 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
http://arcsynthesis.org/gltut/ ich lege Dir dieses Tutorial mal nahe.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 14:21 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Ist echt ein gutes Buch, bin schon über das ein oder andere Kapitel daraus gestolpert.
Aber welches Kapitel?
Ich mein, es ist halt schon ein recht umfangreiches Tutorial.

Also bezüglich glGenBuffers steht da z.B.:

..."glGenBuffers(1, &positionBufferObject);"

..."The first line creates the buffer object, storing the handle to the object in the global variable positionBufferObject. Though the object now exists, it does not own any memory yet. That is because we have not allocated any with this object."

Hilft mir aber nicht weiter, oder stürtzt das jetzt ab, weil das Object keinen Speicher zugewiesen bekommen hat?

Ich hab natürlich schon ausprobiert mit glBindBuffer und glBufferData... und das ganze auch zu zeichnen.

Aber da es abgestürtzt ist, wollte ich eben Schritt für Schritt schauen woran es liegt, und musste feststellen, dass es schon bei glGenBuffers abstürtzt.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 14:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Hast du mit dem debugger mal geschaut ob glGenBuffers nil ist sofern du dglOpenGL.pas verwendest?
Ist dein Context gebunden?

Wenn das nich weiter hilft würde den ensprechenden code zu sehen evtl. weiter helfen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 15:46 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
dglOpenGL.pas nicht, benutze C++, glut, glew.

Was meinst du mit Context gebunden?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 17:09 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
{w}glMakeCurrent(hdc, hglrc);

ist glGenBuffers bei Dir 0?
ist glew und co richtig initialisiert bei Dir?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 17:50 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
glew ist initialisiert, shader werden ja auch geladen und benutzt ohne Probleme.
was meinst du mit glGenBuffers gleich 0?

GLuint VBO;
VBO=0;
glGenBuffers(1, &VBO);

hab ich probiert, Crash.

{w}glMakeCurrent(hdc, hglrc); ?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 18:25 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Funktionszeiger sagt Dir was?

MakeCurrent war auf die Frage von Frenk bezogen, ob dein Context gebunden ist.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 19:00 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Soweit ich weiß, ist das ein Zeiger auf eine Funktion... :?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jul 28, 2012 21:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
Exakt. glew bietet dir die Funktionen höherer GL-Versionen, indem es Funktionspointer nimmt und sie mit den entsprechenden Adressen füllt, die es von wgl bekommt.
Sollte es da Probleme geben, würde der Funktionszeiger von glGenBuffers möglicherweise auf 0 zeigen. Damit würde dein Programm abstürzen, wenn du diese Funktion aufrufst.
Tipp: Programm mit gDEBugger laufen lassen, da kriegst du möglichweise Hinweise, wo das Problem liegt.

/edit:
Vinz hat geschrieben:
Übrigens, warum kann ich mit OpenGL 3.2 noch alle alten Befehle verwenden, die bei meiner Version schon deprecated sein müssten?

Kann man auch ältere Versionen einstellen? Wenn ja, wie?

Vermutlich verwendest du keinen forward-compatible-Context. Eine ältere Version anzufordern ist nicht notwendig.

opengl.org hat geschrieben:
A context, of version 3.0 or greater, can be created with the "forward compatibility" bit set. This will cause, for the given profile, all functionality marked "deprecated" to be removed. You can combine the forward compatibility bit with core and compatibility contexts.

Siehe auch:
http://www.opengl.org/wiki/Tutorials
http://www.opengl.org/wiki/Core_And_Com ... n_Contexts

_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jul 29, 2012 12:07 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Und wie ist das jetzt mit den Versionen.
Ich hab ja jetzt auslesen lassen, dass ich 3.2 hab,
wieso kann trotzdem die alten Befehle verwenden?
Bei
http://www.opengl.org/wiki/History_of_O ... tion_Model
steht, dass ab 3.1. z.B. Displaylisten entfernt wurden.
Warum kann ich sie dann mit 3.2 verwenden?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jul 29, 2012 12:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Weil du einen Kontext mit Rückwärtskompatibilität erstellt hast. Bei solchen Kontexten kann man auch noch die alte Funktionalität nutzen. Willst du nur die neuen Funktionen nutzen, dann brauchst du (siehe Posting von darkinsanity) einen Vorwärtskompatiblen Kontext.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jul 29, 2012 12:59 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Achso, hatte das /edit von darkinsanity gar nicht bemerkt, war ja schon beantwortet. Merci jedenfalls.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 30, 2012 22:09 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
So, jetzt klappt es endlich mit den VBOs.
Ich hatte glewInit im main aufgerufen, dort werden auch meine Shader geladen.
Da ich meine Shader in anderen Programmteilen(z.B. in der Draw-Datei) benutzen konnte, dachte ich, dass es reicht, glew im main zu initialisieren.

glewInit direkt vor glGenBuffers in dem anderen Programmteil aufzurufen, hat die Sache dann behoben.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 31, 2012 18:45 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Das klingt meiner Meinung nach immer noch sehr wonky, glewInit for glGenBuffers aufrufen zu müssen....


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


Wer ist online?

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