2011-09-23 150 views
1

當使用SDL 1.2時,需要包含哪些內容才能使用OpenGL 頂點緩衝區對象(VBOs)?如果你想使用SDL_opengl.h包括它之前定義GL_GLEXT_PROTOTYPES帶SDL的頂點緩衝區對象

glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope

回答

6

目前,我只包括SDL.h, SDL_opengl.h, SDL_image.h

,並得到錯誤。

#define GL_GLEXT_PROTOTYPES 

#include "SDL.h" 
#include "SDL_opengl.h" 

我可能會也可能不會工作。如果你想這樣做的「適當」的方式,使用像glew

+0

我基本上是說如果SDL提供了一種包含必要的OpenGL標頭的方法。 – Ben

4

您應該包括<GL/gl.h><GL/glext.h>。有時OpenGl擴展函數不是直接可用的,必須使用SDL_GL_GetProcAddress加載(如果擴展不可用,則返回函數指針或0)。您可能有興趣看看加載擴展功能的libglew。

這裏是你可以怎麼做(如果不使用GLEW):

extern PFNGLGENBUFFERSARBPROC glGenBuffers; // Function pointer declaration, in a header file. 

// Function pointer initialization 
glGenBuffers = 0; 

// Get the function (you should have checked that extension is available) 
glGenBuffers = (PFNGLGENBUFFERSARBPROC)SDL_GL_GetProcAddress("glGenBuffersARB"); 
+0

只需包含''和''給我一個重新定義警告加上述錯誤。 – Ben

+1

所以我認爲你應該加載自己想要的功能,或者使用libglew。 (將編輯響應) – neodelphi

0

我找到SDL_opengl.h文件是相當無用的。我個人建議使用GLEW或GLee。 GLee更容易添加到項目中,但在OpenGL 3.0中停止(SDL應用程序通常很好,因爲SDL只支持OpenGL 2.1上下文)。 GLEW只需要更多的工作,但可以通過OpenGL 4實現。

我遇到了與SDL中的VBO相同的問題。

1

可以通過一些工作得到SDL to open a OpenGL 3.2 context的欠發達版本1.3。

它也值得檢查SFML,它類似於SDL,但硬件加速爲二維的東西,面向對象的C++和更容易使用。 OpenGL使用起來特別簡單。再一次,它是支持OpenGL 3.2上下文的開發2.0版本(雖然它接近於被髮布)。

您可能需要使用上述的非ARB版本。

相關問題