Opengl es OpenGL ES 2.0中未声明的glMapBuffer

Opengl es OpenGL ES 2.0中未声明的glMapBuffer,opengl-es,buffer,opengl-es-2.0,memcpy,Opengl Es,Buffer,Opengl Es 2.0,Memcpy,我正在使用kronos和pvrsdk.Now代码在联合国大学10.10版中编写OpenGLES2.0 #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> 我知道这些都在gl2ext.h中,我也包括了这个文件,但它的给出错误。我缺少一些东西。请告诉我。你可以问我任何其他问题或信息 在我的glext.h中: /* GL_OES_mapbuffer */ #ifndef GL_OES_mapbuffer #define GL_OE

我正在使用kronos和pvrsdk.Now代码在联合国大学10.10版中编写OpenGLES2.0

#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
我知道这些都在gl2ext.h中,我也包括了这个文件,但它的给出错误。我缺少一些东西。请告诉我。你可以问我任何其他问题或信息

在我的glext.h中:

/* GL_OES_mapbuffer */
#ifndef GL_OES_mapbuffer
#define GL_OES_mapbuffer 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access);
GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target);
GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void** params);
#endif
typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target);
typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname,     void** params);
#endif
我已经定义了它,但它仍然将这些函数作为未声明的函数。因此,您是否知道其中的任何更改,以便可以使用它。

与“普通”OpenGL一样,您必须定义函数指针,并显式加载超出“基本”的功能

如果您查看标题,您将看到
#ifdef GL_GLEXT_prototype
块,这导致函数原型无法生成(事实上,我不知道为什么会存在生成原型的选项,它们对任何人都没有真正的用处)。
接下来,您将看到
PFNGLMAPBUFFEROESPROC
的typedef。这就是你需要的

您必须声明一个全局函数指针,例如
extern PFNGLMAPBUFFEROESPROC glMapBufferOES并在启动时初始化它(在检查扩展是否存在之后)

看看像或这样的库做了什么

(关于
memcpy
的错误是缺少
#include

放入
#include

修复了我的问题

我已编辑了问题并给出了扩展文件代码。你能给我进一步的建议吗。感谢您定义GL_GLEXT_原型应该可以消除声明错误。虽然我只是想说,这只会将编译时错误替换为链接时错误,但有趣的是,
nm libGLESv2。因此
甚至会列出
glMapBufferOES
,尽管它不应该。。。无论如何,我还是要加载函数指针,这是保证工作的。@damon如何做你能详细说明一下吗?通常,我们假设“main”文件中的所有内容(对于ES 2.0,将是gl2.h)都是“core”,而gl2ext.h中的所有内容都是扩展名(另外,请注意,函数也以OES结尾)。任何“核心”的东西,只要使用libglesv2并与之链接就可以了。任何“扩展”通常都不在导入库中(出于某种原因,我不知道为什么会在我的库中存在glMapBufferOES,可能是因为它在逻辑上属于其他“缓冲函数”),并且不能保证开箱即用。对于任何“扩展”,都使用函数指针typedefs(PFN…PROC)。这些可用于定义函数指针(例如PFNGLMAPBUFFEROESPROC glMapBufferOES;),该函数指针将通过类似于
EGLGETPROCADRESS(“glMapBufferOES”)
的方式进行初始化。函数指针初始化后,其工作方式与任何其他函数一样,然后可以调用
glMapBufferOES
src/Hello.cpp: In function 'int main(int, char**)':
src/Hello.cpp:279: error: 'glMapBufferOES' was not declared in this scope
src/Hello.cpp:282: error: 'memcpy' was not declared in this scope
src/Hello.cpp:286: error: 'glUnmapBufferOES' was not declared in this scope
/* GL_OES_mapbuffer */
#ifndef GL_OES_mapbuffer
#define GL_OES_mapbuffer 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access);
GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target);
GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void** params);
#endif
typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target);
typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname,     void** params);
#endif