• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - OpenGLES for iOS - glBufferData() - GLuint 不适用于数据字段

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:59:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我花了半天时间试图解决这个问题,但到目前为止我没有运气,所以我正在寻找一些建议和指导。

我正在我的 32 位 iPad3 (iOS 8) 上渲染一个球体。

-(void) bufferVBO objectVertex[])objVertices int)objectVerticesSize
                  GLubyte[])vertexIndices     int)vertexIndicesSize
{
    ...
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, vertexIndicesSize, vertexIndices, GL_STATIC_DRAW);
    ...
}

效果很好。但是,这最多只能渲染 256 个索引(因为 GLubyte 只有 8 位),所以我需要更多来渲染球体。

但是,当我尝试这样做时(注意第三个参数从“GLubyte”更改为“GLunit”):

-(void) bufferVBO objectVertex[])objVertices int)objectVerticesSize
                  GLuint[])vertexIndices     int)vertexIndicesSize
{
    ...
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, vertexIndicesSize, vertexIndices, GL_STATIC_DRAW);
    ...
}

这行不通。我的屏幕上没有呈现任何内容。在(Mac)桌面应用程序上,我能够传入 GLuint 以渲染我的球体没有问题。但是,在我的 32 位 iPad 3 上,什么都没有显示(除非我使用 GLubyte,它没有渲染一个只有 256 个索引的完整球体)。

那么,为什么“GLuint”在传递索引数组时对 glBufferData() 不起作用?为什么只有“GLubyte”可以工作?

提前谢谢你。这让我发疯了。



Best Answer-推荐答案


问题不在于 glBufferData()。您可以将 GLuint 值存储在缓冲区中。

限制是 ES 2.0 不支持 GL_UNSIGNED_INT 作为索引类型。来自 man pageglDrawElements() 的“类型”参数的描述:

Specifies the type of the values in indices. Must be GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT.

ES 3.0 和完整的 OpenGL 支持此参数的 GL_UNSIGNED_INT。还有一个 ES 1.x 和 2.0 的扩展允许实现支持它:OES_element_index_uint .

你可以在 ES 2.0 中使用 GLushort 类型作为索引,GL_UNSIGNED_SHORT 对应于 glDrawElements() 的“类型”参数。这为您提供了 65,536 个索引的范围。

关于ios - OpenGLES for iOS - glBufferData() - GLuint 不适用于数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26686731/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap