opengl-es - glMapBuffer 在 OpenGL-ES 2.0 中未声明

标签 opengl-es buffer opengl-es-2.0 memcpy

我正在通过使用 kronos 和 pvrsdk 在 ununtu 10.10 中执行 Opengl-es 2.0。现在代码

#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>

==========|||||||||||||||||||||||||||||||||== =================

GLfloat *pData = glMapBufferOES (GL_ARRAY_BUFFER, GL_WRITE_ONLY_OES);
            for(i=0; i<triNum[surfnum]; ++i,pData+=9)
            {
                 memcpy(pData, triArray[surfnum][i].pt1, 3*sizeof(GLfloat));
                 memcpy(pData+3, triArray[surfnum][i].pt2, 3*sizeof(GLfloat));
                 memcpy(pData+6, triArray[surfnum][i].pt3, 3*sizeof(GLfloat));
            }
            glUnmapBufferOES (GL_ARRAY_BUFFER);

错误:

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

我知道这些在 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_PROTOTYPES block ,这导致函数原型(prototype)没有生成(事实上,我不确定为什么生成原型(prototype)的选项存在,它们对任何人都没有用)。
之后,您会看到 PFNGLMAPBUFFEROESPROC 的类型定义。 .这就是您所需要的。

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

看看GLEW之类的库是什么或 Glee做。

(关于 memcpy 的错误是缺少 #include <string.h> )

关于opengl-es - glMapBuffer 在 OpenGL-ES 2.0 中未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567042/

相关文章:

ios - 渲染到纹理,然后在 iOS 中将纹理渲染到屏幕

c++ - 文件读取停止

Javascript:创建一个类似对象的缓冲区,用于收集输入的击键,然后按时间间隔将它们逐个释放到函数

C 编程检查缓冲区中的消息

ios - 有人在 iOS 上的 OpenGL ES 2.0 中使用 glGenerateMipmap 得到模糊不可用的纹理吗?

ios - GLES2着色器的高精度输出

c++ - 如何在 IOS 应用程序 (OpenGL) 中放置 href 链接

iphone - Alpha 与 OpenGL ES 2.0 混合?

ios - 在 iOS 5.1 上的 OpenGL ES 应用程序中,它们真的使用它们声明的顶点数组吗?

c++ - 如何使用 C++ native 代码链接到 Android Studio 项目中的 GLES2