簡體   English   中英

具有SDL的頂點緩沖區對象

[英]Vertex Buffer Objects with SDL

使用SDL 1.2時 ,我需要包括什么才能使用OpenGL 頂點緩沖對象 (VBO)?

當前,我僅包含SDL.h, SDL_opengl.h, SDL_image.h

並得到錯誤:

glGenBuffersARB, glBindBufferARB, glBufferDataARB not declared in this scope

如果要使用SDL_opengl.h GL_GLEXT_PROTOTYPES在包含它之前定義GL_GLEXT_PROTOTYPES

#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的1.3開發不足版本, 以打開OpenGL 3.2上下文

還值得檢查SFML,它類似於SDL,但在2D東西,面向對象的C ++方面是硬件加速的,並且更易於使用。 OpenGL使用起來特別簡單。 再次是支持OpenGL 3.2上下文的Development 2.0版本(盡管它即將發布)。

您可能需要將非ARB版本與上述功能結合使用。

我發現SDL_opengl.h文件相當無用。 就個人而言,我建議使用GLEW或GLee。 GLee更容易添加到項目中,但是在OpenGL 3.0處停止(在SDL應用程序中通常很好,因為SDL僅啟用OpenGL 2.1上下文)。 GLEW需要做更多的工作,但是可以通過OpenGL 4進行填充。

關於SDL中的VBO,我遇到了同樣的問題。

暫無
暫無

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

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