我正在製作一款iPad應用程序,需要使用OpenGL來做翻轉動畫。我有一個正面圖像紋理和背面圖像紋理。這兩個紋理都是截圖。如何在iPhone/iPad上的OpenGL ES中壓縮紋理?
// Capture an image of the screen
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Allocate some memory for the texture
GLubyte *textureData = (GLubyte*)calloc(maxTextureSize*4, maxTextureSize);
// Create a drawing context to draw image into texture memory
CGContextRef textureContext = CGBitmapContextCreate(textureData, maxTextureSize, maxTextureSize, 8, maxTextureSize*4, CGImageGetColorSpace(image.CGImage), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(textureContext, CGRectMake(0, maxTextureSize-size.height, size.width, size.height), image.CGImage);
CGContextRelease(textureContext);
// ...done creating the texture data
[EAGLContext setCurrentContext:context];
glGenTextures(1, &textureToView);
glBindTexture(GL_TEXTURE_2D, textureToView);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, maxTextureSize, maxTextureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);
// free texture data which is by now copied into the GL context
free(textureData);
每個紋理都佔用大約8 MB的內存,這對於iPhone/iPad應用程序來說是不可接受的。任何人都可以告訴我如何壓縮紋理來減少內存使用量?
我會建議查看設備上的PowerVR紋理壓縮,但這個問題的答案似乎表明,這是不可能的:[將.png轉換爲PVRTC * on * iPhone。](http://stackoverflow.com/questions/1020944/convert-png-to-pvrtc-on-the-iphone)。但是,實現這一點可能有不同的方法。 – 2010-12-22 16:09:06
@BradLarson我想我錯了。我認爲更好的方法是縮小屏幕截圖(512 * 512)並將其縮放以適應紋理(1024 * 1024)。這樣,現在每個紋理都是1MB。但我不知道如何實現這一點。任何幫助? – nonamelive 2010-12-22 16:12:17