Reputation: 5227
In my iOS app (targeted for iPad), I'd like to use non power of two (NPT) textures. My GL_VERSION query returns "OpenGL ES 2.0 APPLE". According to the spec, it should support NPT textures, but a simple test shows that I need to resize the texture to 2^N before it shows up.
Does Apple not support the full ES 2.0 spec? Where can I find documentation on what is not supported?
I am using Xcode 4.3.2 and iOS 5.1.
Edit:
A closer look at the ES 2.0.25 spec (section 3.8.2), reveals that there are a few conditions to be met for NPOT to work. Essentially if I use the settings below, I am able to load NPOT textures:
// 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);
Should I close this or answer my own question?
Upvotes: 32
Views: 9465
Reputation: 172
- (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;
}
Upvotes: 0
Reputation: 5227
As mentioned in my edit, I found the solution. NPOT on ES 2.0 requires that you use linear filtering and clamp to edge. Also, no mipmaps.
Upvotes: 27