各位前辈好,我现在在学习安卓OpenGL ES开发。在存放顶点数据时看到两种完全不同的思路,感到困惑。安卓官网Java语言编写OpenGL ES2.0
桌面版的C语言OpenGL教程桌面版的思路:
用int变量存储VBO的ID
用glBindBuffer将原始数据生成Buffer并缓存到ID里,并设置数据用途为GL_ARRAY_BUFFER
glVertexAttribPointer第一个参数指定location=0即可
据说顶点着色器运行时,会自动使用GL_ARRAY_BUFFER类型数据,无需再指定。安卓官网的思路:
没有专门的VBO的ID
用int变量存储一个Handler的ID
用Java New IO生成一个Buffer
没有glBindBuffer这个步骤
通过glGetUniformLocation函数获取链接程序中输入变量的入口点
glVertexAttribPointer第一个参数指定Handler对应入口点,后面比桌面版多了个参数,指定Buffer。好像安卓官网是通过Java生成了Buffer,最后直接一个指针,把着色器的数据入口和Buffer联系起来,然后就拿去渲染。这两种方法,我网上查了下好像都有人在用,而且也是Java语言,用GLES类实现的。我试着按照桌面版的思路写,发现GLES 20类提供的函数就和桌面版有点不同。glBindBuffer它不能放原始数据了,仍然必须放Buffer,ID也必须是一个数组。其它都和桌面版写法一样。但是最后黑屏…为什么呢?