在我的iOS应用程序(针对iPad)中,我想使用非幂(NPT)纹理。我的GL_VERSION查询返回“OpenGL ES 2.0 APPLE”。根据规范,它应该支持NPT纹理,但是一个简单的测试表明我需要在纹理出现之前将纹理大小调整为2 ^ N.
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);
我应该关闭它还是回答我自己的问题?
答案 0 :(得分:24)
正如我在编辑中提到的,我找到了解决方案。 ES 2.0上的NPOT要求您使用线性过滤和钳位到边缘。此外,没有mipmap。
答案 1 :(得分:0)
- (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;
}