各位前辈好,我现在在学习安卓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也必须是一个数组。其它都和桌面版写法一样。但是最后黑屏…为什么呢?
桌面版的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也必须是一个数组。其它都和桌面版写法一样。但是最后黑屏…为什么呢?
解决方案 »
- 选项菜单的单击事件问题?
- 在android2.3.4中如何通过修改framework,让所有应用都竖屏显示
- 跪求 andriod google map 申请打不开
- 基于Rexsee项目中心的在线开发实现hello World,含代码
- android软键盘弹出区域大小设置
- 该应用已存在,不允许重复上传
- 蓝牙设备名称保存问题
- 关于不同应用数据共享的问题
- 使用ACTION_DATE_CHANGED动态注册广播无法监听系统日期的改变
- jdbc连接mysql5.6.35数据库,始终Access denied for user 'root'@'localhost' (using password
- 小米日历提醒接入问题
- 请问一下SqLite的query方法
安卓版是attribute vec4 vPosition;桌面版的教程我用的是https://learnopengl-cn.readthedocs.io/
安卓教程就是安卓Developer上面的指南