當使用SDL 1.2時,需要包含哪些內容才能使用OpenGL 頂點緩衝區對象(VBOs)?如果你想使用SDL_opengl.h
包括它之前定義GL_GLEXT_PROTOTYPES
帶SDL的頂點緩衝區對象
glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope
當使用SDL 1.2時,需要包含哪些內容才能使用OpenGL 頂點緩衝區對象(VBOs)?如果你想使用SDL_opengl.h
包括它之前定義GL_GLEXT_PROTOTYPES
帶SDL的頂點緩衝區對象
glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope
:
目前,我只包括SDL.h, SDL_opengl.h, SDL_image.h
,並得到錯誤。
#define GL_GLEXT_PROTOTYPES
#include "SDL.h"
#include "SDL_opengl.h"
我可能會也可能不會工作。如果你想這樣做的「適當」的方式,使用像glew。
您應該包括<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");
我找到SDL_opengl.h
文件是相當無用的。我個人建議使用GLEW或GLee。 GLee更容易添加到項目中,但在OpenGL 3.0中停止(SDL應用程序通常很好,因爲SDL只支持OpenGL 2.1上下文)。 GLEW只需要更多的工作,但可以通過OpenGL 4實現。
我遇到了與SDL中的VBO相同的問題。
可以通過一些工作得到SDL to open a OpenGL 3.2 context的欠發達版本1.3。
它也值得檢查SFML,它類似於SDL,但硬件加速爲二維的東西,面向對象的C++和更容易使用。 OpenGL使用起來特別簡單。再一次,它是支持OpenGL 3.2上下文的開發2.0版本(雖然它接近於被髮布)。
您可能需要使用上述的非ARB版本。
我基本上是說如果SDL提供了一種包含必要的OpenGL標頭的方法。 – Ben