2010-12-22 87 views
0

我正在製作一款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應用程序來說是不可接受的。任何人都可以告訴我如何壓縮紋理來減少內存使用量?

+0

我會建議查看設備上的PowerVR紋理壓縮,但這個問題的答案似乎表明,這是不可能的:[將.png轉換爲PVRTC * on * iPhone。](http://stackoverflow.com/questions/1020944/convert-png-to-pvrtc-on-the-iphone)。但是,實現這一點可能有不同的方法。 – 2010-12-22 16:09:06

+0

@BradLarson我想我錯了。我認爲更好的方法是縮小屏幕截圖(512 * 512)並將其縮放以適應紋理(1024 * 1024)。這樣,現在每個紋理都是1MB。但我不知道如何實現這一點。任何幫助? – nonamelive 2010-12-22 16:12:17

回答

1

更高版本OpenGL支持壓縮紋理。您可以在上傳紋理數據時使用OpenGL對其進行壓縮,或者自己完成並將預壓縮數據提供給OpenGL。

在OpenGL 壓縮紋理支持的ARB規範http://www.opengl.org/registry/specs/ARB/texture_compression.txt

這裏還有一個特別的壓縮格式的描述 http://www.opengl.org/registry/specs/ARB/texture_compression_rgtc.txt

而具體到OpenGL ES的這種壓縮格式: http://www.khronos.org/registry/gles/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt