2012-06-17 24 views
28

在我的iOS应用程序(针对iPad)中,我想使用两个非功率(NPT)纹理。我的GL_VERSION查询返回“OpenGL ES 2.0 APPLE”。根据规范,它应该支持NPT纹理,但是一个简单的测试表明我需要在纹理出现之前将纹理调整到2^N。iOS中两个纹理的非功率

Apple不支持完整的ES 2.0规范吗?我在哪里可以找到不支持的文档?

我正在使用Xcode 4.3.2和iOS 5.1。

编辑:

在ES 2.0.25规范(第3.8.2节),仔细一看,发现,有要满足NPOT工作的几个条件。从本质上讲,如果我使用下面的设置,我能够加载NPOT纹理:

// use linear filetring 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
// clamp to edge 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

我应该关闭这个或回答我的问题?

+3

无需关闭问题,您可以撰写答案并接受它。有一天它可能会对别人有所帮助。 – Tim

+0

我几天前还记得同样的问题和答案。这是一个经常性的话题。 – Luca

回答

24

正如我在编辑中提到的,我找到了解决方案。 NP 2.0上的NPOT要求您使用线性滤波和钳制边缘。另外,没有mipmap。

+0

同时检查'GL_APPLE_texture_2D_limited_npot'扩展名以确保它被支持。 –

+1

它适用于GL_NEAREST作为ios7上的min/mag过滤器。 GL_CLAMP_TO_EDGE是问题。 – Martin

+0

@Martin你可以分享一个关于如何在iOS下绘制两个纹理的非力量的片段吗?我正在尝试这样做,但我只能显示一张白色图片:https://gist.github.com/anonymous/53307d146d3d1a750554 – amb