在 iPhone 上渲染为非二次方纹理
是否可以在 iPhone(2G 及更早版本)上使用 OpenGL ES 1.1 渲染纹理?如果我将纹理绑定为渲染缓冲区,则它必须是渲染缓冲区的大小,而不是 POT 大小。但 OpenGL ES 1.1 要求纹理必须是 POT。
也许在 ES 1.1 上不能完成?
Is it possible to render to texture with OpenGL ES 1.1 on the iPhone (2G and older)? If I bind a texture as a render buffer, it has to be the size of the render buffer, which isn't POT-sized. But OpenGL ES 1.1 requires textures to be POT.
Maybe it can't be done on ES 1.1?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
虽然 OpenGL ES 1.1 不支持非二次幂纹理,但较新的 iOS 设备型号具有扩展名
GL_APPLE_texture_2D_limited_npot
,其中指出:您可以使用以下代码来确定您的设备是否支持此扩展(取自 Philip Rideout 的优秀 iPhone 3D 编程 书):
在这些设备上,只要设置正确的纹理环绕,您就应该能够使用非二次方纹理:
不幸的是,这个示例应用程序,我使用 OpenGL ES 2.0 渲染到非二次幂纹理,所以我不确定在这种情况下这会对你有帮助。
While OpenGL ES 1.1 does not support non-power-of-two textures, newer iOS device models have the extension
GL_APPLE_texture_2D_limited_npot
, which states:You can use the following code to determine if this extension is supported on your device (drawn from Philip Rideout's excellent iPhone 3D Programming book):
On these devices, you should then be able to use non-power-of-two textures as long as you set the proper texture wrapping:
Unfortunately, this example application that I have which renders to a non-power-of-two texture uses OpenGL ES 2.0, so I'm not sure that will help you in this case.
这是可以做到的,你需要做的就是得到下一个比非 POT 大的 2 的幂。
然后生成一个帧缓冲区:
和一个纹理:
然后你做同样的纹理:
这里我使用了draw_texture扩展。
textureWidth
和textureHeight
是 2 的幂,而renderWidth
和renderHeight
是渲染对象的宽度和高度。然后,当您绑定到 aFramebuffer 时,它将绘制到纹理。
It can be done, all you need to do is get the next power of 2 bigger than the non-POT.
Then generate a framebuffer:
And a texture:
Then you do the same texture like things:
Here I used the draw_texture extension.
textureWidth
andtextureHeight
are the power of 2 bigger, andrenderWidth
andrenderHeight
are the the rendere's width and height.Then when you bind to
aFramebuffer
it will draw to texture.