Как я могу сжать текстуру в OpenGL ES на iPhone / iPad? - PullRequest
0 голосов
/ 22 декабря 2010

Я делаю приложение для iPad, которому нужен OpenGL для анимации.У меня есть текстура переднего изображения и текстура заднего изображения.Обе эти текстуры являются скриншотами.

// 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 МБ памяти, что недопустимо для приложения для iPhone / iPad.Может кто-нибудь сказать мне, как я могу сжать текстуру, чтобы уменьшить использование памяти?

1 Ответ

1 голос
/ 22 декабря 2010

Более поздние версии OpenGL поддерживают сжатие текстур.Вы можете сжать их OpenGL при загрузке данных текстуры или сделать это самостоятельно и предоставить предварительно сжатые данные в OpenGL.

Спецификация ARB для поддержки сжатых текстур в OpenGL 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

...