簡體   English   中英

使用 GLFW/GLEW 進行 OpenGL 編程

[英]OpenGL programming with GLFW/GLEW

我想學習使用着色器,因此在 Netbeans(8.0.2 版)上創建了一個新的 C++ 項目。

我想包括本教程中所述的 GLFW 和 GLEW 庫: http : //www.learnopengl.com/#! Getting-started/Creating-a-window

我目前正在努力正確導入glew。 使用#include <GL/glew.h> ,編譯器(我在 Windows10x64/Cygwin 控制台上使用 GNU g++)會拋出大量錯誤。 這似乎是glu.h的問題。 出於測試目的,我刪除了 glew.h 中的 glu.h 的導入。 這消除了錯誤,但也阻止了 openGL 完全加載(以 gl 開頭的函數是“未定義的”,如glViewport )。 所以這不能成為解決方案。

在正常的glew.h 上調用編譯器時得到的輸出:

g++ -m64   -c -g -Wall -I/cygdrive/C/Users/Erik/programming/Libraries/glew-1.13.0-win32/glew-1.13.0/include/ -I/cygdrive/C/Users/Erik/programming/Libraries/glfw-3.1.2.bin.WIN32/glfw-3.1.2.bin.WIN32/include/ -std=c++11 -MMD -MP -MF "build/Debug/Cygwin-Windows/startup.o.d" -o build/Debug/Cygwin-Windows/startup.o startup.cc

In file included from /cygdrive/C/Users/Erik/programming/Libraries/glew-1.13.0-win32/glew-1.13.0/include/GL/glew.h:1202:0,
                 from startup.cc:5:
/usr/include/w32api/GL/glu.h:68:79: error: expected ')' before '*' token
 void APIENTRY gluQuadricCallback(GLUquadric *qobj,GLenum which,void (CALLBACK *fn)());
                                                                               ^
/usr/include/w32api/GL/glu.h:68:79: error: expected ')' before '*' token
/usr/include/w32api/GL/glu.h:68:79: error: expected initializer before '*' token
/usr/include/w32api/GL/glu.h:78:79: error: expected ')' before '*' token
 void APIENTRY gluTessCallback(GLUtesselator *tess,GLenum which,void (CALLBACK *fn)());
                                                                               ^
/usr/include/w32api/GL/glu.h:78:79: error: expected ')' before '*' token
/usr/include/w32api/GL/glu.h:78:79: error: expected initializer before '*' token
/usr/include/w32api/GL/glu.h:94:75: error: expected ')' before '*' token
 void APIENTRY gluNurbsCallback(GLUnurbs *nobj,GLenum which,void (CALLBACK *fn)());
                                                                           ^
/usr/include/w32api/GL/glu.h:94:75: error: expected ')' before '*' token
/usr/include/w32api/GL/glu.h:94:75: error: expected initializer before '*' token
/usr/include/w32api/GL/glu.h:96:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUquadricErrorProc)(GLenum);
                        ^
/usr/include/w32api/GL/glu.h:97:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessBeginProc)(GLenum);
                        ^
/usr/include/w32api/GL/glu.h:98:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessEdgeFlagProc) (GLboolean);
                        ^
/usr/include/w32api/GL/glu.h:99:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessVertexProc)(void *);
                        ^
/usr/include/w32api/GL/glu.h:100:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessEndProc)(void);
                        ^
/usr/include/w32api/GL/glu.h:101:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessErrorProc)(GLenum);
                        ^
/usr/include/w32api/GL/glu.h:102:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessCombineProc)(GLdouble[3],void*[4],GLfloat[4],void**);
                        ^
/usr/include/w32api/GL/glu.h:103:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessBeginDataProc)(GLenum,void *);
                        ^
/usr/include/w32api/GL/glu.h:104:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessEdgeFlagDataProc) (GLboolean,void *);
                        ^
/usr/include/w32api/GL/glu.h:105:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessVertexDataProc)(void *,void *);
                        ^
/usr/include/w32api/GL/glu.h:106:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessEndDataProc)(void *);
                        ^
/usr/include/w32api/GL/glu.h:107:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessErrorDataProc)(GLenum,void *);
                        ^
/usr/include/w32api/GL/glu.h:108:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUtessCombineDataProc)(GLdouble[3],void*[4],GLfloat[4],void**,void*);
                        ^
/usr/include/w32api/GL/glu.h:109:24: error: expected ')' before '*' token
 typedef void (CALLBACK *GLUnurbsErrorProc)(GLenum);
                        ^

對我來說,(我不是 C++ 專家,因此在解釋錯誤消息方面不是很好)似乎CALLBACK還沒有定義。 關於如何解決這個問題的任何想法?

我以某種方式解決了它(不漂亮,但至少以某種方式解決了):

我嘗試像windef.h鏈接中所說的那樣導入windef.h 這刪除了回調錯誤,但創建了一個新錯誤(關於 APIENTRY)。 於是我搜索了windef.h的錯誤解決部分,找到了:

#ifndef CALLBACK
#if defined(_ARM_)
#define CALLBACK
#else
#define CALLBACK __stdcall
#endif
#endif

然后我只是將其粘貼到我的文件中(而不是包括整個windef.h)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM