gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:19:44 25 4
gpt4 key购买 nike

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

我正在我的 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 位),所以我需要更多的索引来渲染一个球体。

但是,当我尝试这样做时(请注意第 3 个参数从“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”可以工作?

提前致谢。这让我抓狂。

最佳答案

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

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

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 - 适用于 iOS 的 OpenGLES - glBufferData() - GLuint 不适用于数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26686731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com