iOS中两种纹理的非幂

iOS中两种纹理的非幂,ios,opengl-es,Ios,Opengl Es,在我的iOS应用程序(针对iPad)中,我想使用非二次幂(NPT)纹理。我的GL_版本查询返回“OpenGL ES 2.0 APPLE”。根据规范,它应该支持NPT纹理,但一个简单的测试表明,在它出现之前,我需要将纹理大小调整为2^N 苹果不支持完整的ES 2.0规范吗?我在哪里可以找到不支持的文档 我使用的是Xcode 4.3.2和iOS 5.1 编辑: 仔细查看ES 2.0.25规范(第3.8.2节),发现NPOT工作需要满足一些条件。基本上,如果使用以下设置,我可以加载NPOT纹理: //

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

苹果不支持完整的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);

我应该关闭此对话框还是回答我自己的问题?

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

无需关闭问题,您只需撰写答案并接受即可。有一天它可能会对其他人有所帮助。我记得几天前有一个相同的问题和答案。这是一个经常出现的话题。另外,请检查
GL\u APPLE\u texture\u 2D\u limited\u npot
扩展以确保它受支持。它在ios7上与GL\u最近的as min/mag filter for me一起工作。GL_CLAMP_TO_EDGE是问题所在。@Martin你能分享一个关于如何在iOS下绘制非二次幂纹理的片段吗?我正在尝试这样做,但我只能显示白色图像:
- (BOOL)isSupportNPOT {
//    GL_OES_texture_npot
//    GL_APPLE_texture_2D_limited_npot
//    GL_ARB_texture_non_power_of_two
    EAGLContext *context_ = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
    [EAGLContext setCurrentContext:context_];
    NSArray *extensionNames = nil;
    NSString *extensionsString = [NSString stringWithCString:(const char *)glGetString(GL_EXTENSIONS) encoding:NSASCIIStringEncoding];
    extensionNames = [extensionsString componentsSeparatedByString:@" "];
    BOOL isSupport = [extensionNames containsObject:@"GL_APPLE_texture_2D_limited_npot"];
    [EAGLContext setCurrentContext:nil];
    NSLog(@"Apple Opengl support NPOT is %@", isSupport ? @"YES" : @"NO");
    return isSupport;
}