這不是訪問OpenGL擴展的正確方法。正確的方法有一點涉及,因爲您不能重新定義可能從庫導入的符號。在Windows上不是一個大問題,因爲只有導出的OpenGL-1.1符號。但在幾乎任何其他操作系統中,OpenGL庫都有其他符號導出。
我強烈建議使用擴展加載器庫,因爲正確加載擴展的操作非常繁瑣。所以只需從http://glew.sourceforge.net得到GLEW,並完成它。或者使用一些也提供擴展管理的OpenGL框架,如GLFW。
只要看看如何正確加載OpenGL擴展,理解爲什麼:
typedef GLAPI void APIENTRY (*__MYGLEXTFP_GLGENERATEMIPMAPS)(GLenum);
__MYGLEXTFP_GLGENERATEMIPMAP __myglextGenerateMipmaps;
#define glGenerateMipmaps __myglextGenerateMipmaps;
在擴展初始化
及更高版本:
#ifdef WIN32
#define __MYGLEXT_GetProcAddress wglGetProcAddress
#endif
#ifdef GLX
#define __MYGLEXT_GetProcAddress glXGetProcAddress
#endif
__myglGenerateMipmap =
(__MYGLEXTFP_GLGENERATEMIPMAPS) __MYGLEXT_GetProcAddress("glGenerateMipmaps");
看起來相當凌亂,你同意嗎?然而,這是唯一干淨的方法。如果在Windows下使用多個OpenGL上下文,它會變得更加複雜,因爲Windows OpenGL擴展函數的函數指針在上下文之間可能不同。
好吧,它開始作爲一個擴展,但它現在是核心的一部分。例如, – TheBuzzSaw 2011-03-02 15:03:23
並不意味着它是由Microsoft提供的! – tibur 2011-03-02 15:16:07
Tibur是正確的,因爲您必須以相同的方式初始化函數指針,因此1.4版以上的所有內容(Windows下的1.2)通常都被視爲擴展,即使它是核心。 – Damon 2011-03-02 20:43:30