2011-03-02 402 views
1

我試圖實現glGenerateMipmap這樣我就可以去到recolour我已經呈現立方體的每一個級別,除了程序將無法編譯給人錯誤glGenerateMipmap-標識符未找到?

「錯誤C3861:‘glGenerateMipmap’:標識不發現」

我已經包含‘#包括’和定義似乎存在(儘管IF語句內?見下文),所以我在想,如果有重新定義一個方法/找到它在某種程度上頭內所以程序會編譯或運行,如果沒有,如果有另一種方法來自動生成mipmap?

#ifdef GL_GLEXT_PROTOTYPES 
... 
... 
GLAPI void APIENTRY glGenerateMipmap (GLenum); 
... 
#endif /* GL_GLEXT_PROTOTYPES */ 

非常感謝, 克里斯

回答

3

glGenerateMipmaps是一個擴展。考慮使用glew加載它。

+0

好吧,它開始作爲一個擴展,但它現在是核心的一部分。例如, – TheBuzzSaw 2011-03-02 15:03:23

+2

並不意味着它是由Microsoft提供的! – tibur 2011-03-02 15:16:07

+0

Tibur是正確的,因爲您必須以相同的方式初始化函數指針,因此1.4版以上的所有內容(Windows下的1.2)通常都被視爲擴展,即使它是核心。 – Damon 2011-03-02 20:43:30

5

這不是訪問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擴展函數的函數指針在上下文之間可能不同。

+0

非常感謝關於如何手動連接OpenGL dll的演示。我好幾個星期都在想這個。 – Codesmith 2013-04-12 18:57:48