1

我在 iPad 2 / 3 上使用 OpenGL ES 2.0。我想在创建纹理时使用 GL_FLOAT:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, rawData);

但问题是,如果您的支持扩展列表中没有显示 GL_OES_texture_float_linear,则使用 GL_FLOAT 时不支持 GL_LINEAR 作为 GL_TEXTURE_MAG_FILTER。(所有 iPad 都没有。)

但是我的扩展列表中确实有 GL_OES_texture_half_float_linear 。因此,使用半浮点纹理应该与线性插值一起使用。

问题是,将我的纹理创建切换为:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_HALF_FLOAT_OES, rawData);

当我运行应用程序时导致 EXC_BAD_ACCESS。(libGPUSupportMercury.dlylib'gpus_ReturnGuiltyForHardwareRestart)

自从使用 GL_FLOAT 调用数据后,我没有更改数据的格式。输入数据是否需要以某种方式更改为 HALF_FLOAT?如果是这样,怎么做?我不知道如何将输入浮点数分成两半。目前每个组件都是 GLfloat。

4

1 回答 1

1

我现在的“解决方案”是将我自己的双线性插值添加到片段着色器中,因为当使用 GL_FLOAT 时 OpenGL 不会为我做这件事。

于 2012-11-21T18:28:05.330 回答