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

Aktuelle Zeit: Do Jul 17, 2025 01:24

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: C++ OpenGL und glext.h
BeitragVerfasst: Do Apr 14, 2011 15:54 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Tach,

ich hab hier ein Problem bei dem ich nicht weiter komme.

Spiele gerade ein bischen mit Visual Studio 2010 und OpenGL rum und
wollte mal wieder grundlegend anfangen, kleines pong spielchen bauen.

Lief gut, bis ich nun VBO funktionen nutzen wollte.

Hab mir dann wie ich noch in errinnerung hatte die glext.h header von opengl.org gezogen.
Genaugenommen diese hier: http://www.opengl.org/registry/api/glext.h

Daraus habe ich die sachen für die VBO´s extrahiert und simpel in eine neue header datei gepackt.
Mit extern die function pointer definiert und dann in einer c++ in einer initExtensions() funktion per wglgetprocaddress geholt.

Kling alles toll... es kompiliert auch... aber der linkt das ganze nicht.
Im Projekt ist die opengl32.lib und glu32.lib drinne...

Das NEHE beispiel http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=45
kompiliert als eigenes projekt sauber und läuft auch.
Kopier ich den GL Ext kram aus dem Beispiel in meine Header datei, dann gehts auch nicht :(

Ich verzweifle... habe damals wo ich mit C++ angefangen habe mit codeblocks gearbeitet, da lief das.

Folgender fehler kommt:

Code:
  1. Error   21  error LNK2001: unresolved external symbol "void (__stdcall* glGenBuffers)(int,unsigned int *)" (?glGenBuffers@@3P6GXHPAI@ZA)    E:\Entwicklung11\Vstudio2010\windowtest\pong\glextensions.obj   pong
  2.  


Hier das projekt, vielleicht sieht ihr den fehler.
Ich seh ihn nicht.

Danke,
Gruß Final


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ OpenGL und glext.h
BeitragVerfasst: Do Apr 14, 2011 16:15 
Offline
DGL Member

Registriert: Mi Jan 21, 2009 09:05
Beiträge: 13
Hallo,

hab mir das Projekt gerade angeschaut. Der fehler liegt darin, dass du die externe Funktion glGenBuffers nirgends definierst. Ich hab die Datei "glextensions.cpp" so ver'ndert und er kompiliert dann sauber durch.
Code:
  1. #include "glextensions.h"
  2.  
  3. PFNGLGENBUFFERSPROC glGenBuffers = NULL;
  4.  
  5. void GLExtensionsInit()
  6. {
  7.     // Get Pointers To The GL Functions
  8.     *(void**) & glGenBuffers = wglGetProcAddress("glGenBuffers");
  9. }


PS: Mir ist aufgefallen, dass du die Funktion GLExtensionsInit() nirgends aufrufst. Du solltest sie nach dem erstellen des OpenGL Kontextes aufrufen.

Mit freundlichen Grüßen
Archaon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ OpenGL und glext.h
BeitragVerfasst: Do Apr 14, 2011 16:54 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ah danke.

Sprich in einer header datei zu deklarieren reicht nicht aus in dem fall.
Ich dachte immer das eine header datei am ende im compiler auch nur zur CPP datei hinzugefügt wird.
Würde so im compiler aussehen:

Code:
  1. typedef void (APIENTRY* PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
  2.  
  3. extern PFNGLGENBUFFERSPROC glGenBuffers;
  4.  
  5. extern void GLExtensionsInit();
  6.  
  7. PFNGLGENBUFFERSPROC glGenBuffers = NULL;
  8.  
  9. void GLExtensionsInit()
  10. {
  11.     // Get Pointers To The GL Functions
  12.     *(void**) & glGenBuffers = wglGetProcAddress("glGenBuffers");
  13. }
  14.  


Verstehe ich irgendwie nicht, warum man das doppelt brauch :?:

Ja ich habe die init funktion noch nicht aufgerufen, weil ich erstmal das link problem beseitigt haben wollte.

Danke auf jedenfall mal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ OpenGL und glext.h
BeitragVerfasst: Fr Apr 15, 2011 09:22 
Offline
DGL Member

Registriert: Mi Jan 21, 2009 09:05
Beiträge: 13
Hallo,

naja doppelt ist es nicht. Mit dem Schlüsselwort extern sagst du dem Compiler, dass die Variable iregndwo extern definiert wird. Diese Definition ist
Code:
  1. PFNGLGENBUFFERSPROC glGenBuffers = NULL;

Da eine Definition nur einmal erfolgen darf, muss sie in einer cpp datei stehen und nicht im Header.
Du kannst ja mal das extern weglassen dann wirst du eine Fehlermeldung bekommen, dass die Variable merfach definiert ist, da sie jedesmal, wenn der Header eingebunden wird definiert wird.

Mit freundlichen Grüßen
Archaon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C++ OpenGL und glext.h
BeitragVerfasst: Fr Apr 15, 2011 10:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Spricht was gegen den Einsatz von GLEW ?
Das soll dir eigentlich die ganze Arbeit mit den ARB's und Extensions abnehmen.
http://glew.sourceforge.net/

_________________
"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  
 Betreff des Beitrags: Re: C++ OpenGL und glext.h
BeitragVerfasst: Fr Apr 15, 2011 14:28 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich verzichte nahezu auf thirdparty libraries, bzw ich vermeide es wo es nur geht.
Und extensions laden ist jetzt wohl nicht so schwer ^^


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.007s | 14 Queries | GZIP : On ]