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

Aktuelle Zeit: Fr Jul 18, 2025 00:47

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



Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Di Feb 14, 2006 16:38 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich arbeite gerade an einem GL-Projekt mit Eclipse und CDT3.0. Als Compiler kommt der GCC zum einsatz.

Alles lief gut, bis ich Multitexturing einbauen wollte. Der Compiler sagt, er kenne die Funktion glActiveTexture und glMultiTexCoord nicht.
Ich habe den glext.h eingebunden. Dieser enthält ja (zumindest unter Windows) diese Funktionen.
Wenn ich per Ctrl+Click auf einen der beiden Namen klicke, meldet mir Eclipse, dass es die Funktionen nicht finden könne. Wenn ich z.B. eine der Konstanten (GL_TEXTURE1) anklicke, komme ich in dem Header raus, welcher auch die Funktionen beinhaltet.

Ich vermute nun folgendes:
Der Compilerschalter GL_GLEXT_PROTOTYPES schien das zu verhindern. Den hab ich jetzt aber programmseitig auf true gesetzt. Trotzdem nichts.

Ich komm hier nicht weiter. Ich kenn mich auch mit dem gcc nicht so übermäßig aus, um nachzuvollziehen, wieso er Funktionen aus der glext.h nicht einbindet, die Constanten aber schon. Wenn ihr mir da helfen könntet wäre das super, es ist nämlich verhältnismäßig wichtig, das ich das zum laufen bekomme.

PS: Kurzer ausschnitt aus der glext.h
Code:
  1.  
  2. ...
  3. /* Header file version number, required by OpenGL ABI for Linux */
  4. /* glext.h last updated 2005/06/20 */
  5. /* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */
  6. #define GL_GLEXT_VERSION 29
  7.  
  8. ...
  9.  
  10. #ifndef GL_VERSION_1_3
  11. #define GL_VERSION_1_3 1
  12. #ifdef GL_GLEXT_PROTOTYPES
  13. GLAPI void APIENTRY glActiveTexture (GLenum);
  14. ...
  15.  

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 17:05 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Vielleicht ist es an der Zeit, dass die Skeptiker unter uns den Header vechseln. ;)


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

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 18:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
wenns schnell gehen soll benutz ich immer http://elf-stone.com/glee.php die GLee Lib die sich um das ganze extensions laden kümmert und die funktionspointer klar macht.
hab aber keine ahnung von eclipse und gcc, benutz M$ VS. müsste aber gehen, oder ?!

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 19:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Koennte mir denken das du vielleicht den entsprechenden Namespace nicht eingebunden hast. Ist es dass?

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 20:12 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Oder muß man da noch extra eine LIB Datei mit hinzulinken? Oft ist es mit dem Einbinden von dem Header bei C++ ja nicht getan.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 20:58 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hab die OpenGL32 und GLU32 Libs eingelinkt.

Einen Namespace gibt es für die extensions auch nicht.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 22:57 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Wäre es möglich, dass du glext.h öfter als einmal includierst und das GL_GLEXT_PROTOTYPES beim ersten mal nicht gesetzt ist? Also beispielsweise:

foo.h
#include "glext.h"

bar.cpp oder bar.h
#include "foo.h"
#define GL_GLEXT_PROTOTYPES
#include "glext.h"

oder sowas in der Art? Um derartige Fehler auszuschließen ist es meistens eine gute Idee sowas als Umgebungsvariable in der Entwicklungsumgebung bzw. beim compilieren zu setzen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 02:14 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
War zwar der Fall, aber nachdem ich das geändert habe bleibt der Fehler.

Das "#define GL_GLEXT_PROTOTYPES 1" steht in der *.cpp welche auch die main() enthält, und dort direkt vor dem Aufruf von "#include <GL/glext.h>".

Ich bin mir auch nicht sicher ob man diese "Prototypen" überhaupt benötigt, da anscheinend nachher die Einsprungadressen (?) per APIENTRY angegeben werden.

Programmiert denn hier keiner mit C++ und dem GCC? Wir haben doch ne Menge C++ler mittlerweile hier.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 02:31 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bei Nehe (hab mir die übersetzung bei Joachim Rhode angeguckt) binden die die Funktionen selber. Muss man das machen? :shock: Macht das nicht der Header :?:

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 04:48 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Zitat:
Das "#define GL_GLEXT_PROTOTYPES 1" steht in der *.cpp welche auch die main() enthält, und dort direkt vor dem Aufruf von "#include <GL/glext.h>".

Ist aber noch lange kein Grund das es auch in den anderen .cpp's so sein muss :-). Bei C wird jede .cpp einzeln kompiliert und demnach können Funktionen in einer .cpp vorhanden sein, in einer anderen nicht.

Das APIENTRY ist als extern definiert wenn ich mich nicht irre und tut hier eher wenig zur Sache.

Wenn bereits der Compilier einen Fehler ausspuckt, dann ist im Header was falsch. Wenn der Linker einen Fehler ausspuckt, dann ist die Bibliothek die du verwendest mies oder du musst noch ein bisschen was coden. Wenn er zur Laufzeit sagt: "Ausnahmefehler blablabla" dann hast du zwar einen Pointer auf die entsprechende Funktion, dieser ist jedoch leider NULL oder ein anderes Nirvana.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 16:44 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ok..Ich hab jetzt das define direkt an den Anfang des Headers geschrieben.

Compilieren tuts. Nur nicht Linken.

Hier mal die Meldung:
Code:
  1. Building target: Puke_Machine.exe
  2. Invoking: GCC C++ Linker
  3. g++ -LC:\Programmieren\Imported_Libs\SDL_Libs -LC:\Programmieren\EclipseProjects\GL_SDL_UI\Debug -LC:\Programmieren\EclipseProjects\GL_SDL_TEX\Debug -LC:\Programmieren\EclipseProjects\Utils\Debug -oPuke_Machine.exe ./src/Application.o ./src/Kamera.o ./src/Karusell.o ./src/createUI.o ./src/main.o -lGL_SDL_UI -lGL_SDL_TEX -lUtils -lSDL -lSDLmain -lSDL_image -lSDL_ttf -lOpenGL32 -lGLU32
  4. ./src/Karusell.o(.text+0xca2): In function `ZN8Karusell9drawBasisEv':
  5. C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:184: undefined reference to `glActiveTexture@4'
  6. ./src/Karusell.o(.text+0xdad):C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:189: undefined reference to `glActiveTexture@4'
  7. ./src/Karusell.o(.text+0xf19):C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:197: undefined reference to `glMultiTexCoord2i@12'
  8. ./src/Karusell.o(.text+0xf38):C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:198: undefined reference to `glMultiTexCoord2i@12'
  9. ./src/Karusell.o(.text+0xf79):C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:200: undefined reference to `glMultiTexCoord2i@12'
  10. ./src/Karusell.o(.text+0xf98):C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:201: undefined reference to `glMultiTexCoord2i@12'
  11. ./src/Karusell.o(.text+0xfd9):C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:203: undefined reference to `glMultiTexCoord2i@12'
  12. ./src/Karusell.o(.text+0xff8):C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:204: more undefined references to `glMultiTexCoord2i@12' follow
  13. ./src/Karusell.o(.text+0x10a3): In function `ZN8Karusell9drawBasisEv':
  14. C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:213: undefined reference to `glActiveTexture@4'
  15. ./src/Karusell.o(.text+0x10c1):C:/Programmieren/EclipseProjects/Puke_Machine/Debug/../src/Karusell.cpp:216: undefined reference to `glActiveTexture@4'
  16. collect2: ld returned 1 exit status
  17. make: *** [Puke_Machine.exe] Error 1
  18. make: Target `all' not remade because of errors.
  19. Build complete for project Puke_Machine


Könnt ihr was damit anfangen?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 17:51 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Lyr hat geschrieben:
Das APIENTRY ist als extern definiert wenn ich mich nicht irre und tut hier eher wenig zur Sache.
APIENTRY steht für stdcall, aber wie gesagt, tut hier nichts zur Sache.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 18:14 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Ok, hab mir das glext Zeugs noch mal näher angesehen. Also wie's aussieht ist das GL_GLEXT_PROTOTYPES nur ratsam wenn du eine Bibliothek hast die die entsprechenden Extensions (direkt) unterstützt. D.h. du musst dir entweder selber noch was schreiben im Sinne von:

OGL_Extensions.h:
extern PFNGLACTIVETEXTUREPROC glActiveTexture;

OGL_Extensions.cpp:
PFNGLACTIVETEXTUREPROC glActiveTexture;
und irgendwo ein
glActiveTexture = (PFNGLACTIVETEXTUREPROC) wglGetProcAddress("glActiveTextureARB");

Oder aber du nimmst dir das SDK von http://oss.sgi.com/projects/ogl-sample/sdk.html, oder etwas anderes in der Art.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 18:37 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
meine glext.h stammt aus dem SDK. Irgendwie hab ich sowas befürchtet.

Wieso muss man das denn alles selber amchen? Gibts da nicht einen ähnlich komfortablen Header wie die DGLOpenGL.pas auch für C++? Bei der gl.h und glu.h muss ich auch nix mehr binden...

Wie machst du das denn? Du bist doch C++ler

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 15, 2006 18:54 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Da oben wurde doch die Rückkonvertierung von dglopengl.pas gepostet.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]