Загрузка изображений не-власти двух в OpenGL ES iPhone - PullRequest
2 голосов
/ 27 августа 2011

Кто-нибудь знает эффективный способ загрузки текстур в OpenGL ES, размер которых не равен степени двух?Я новичок в OpenGL и работаю над 2D-игрой для iPhone, и у меня уже есть множество текстур.Было бы очень утомительно возвращаться и изменять размеры всех моих текстур до степени двойки.

Ответы [ 2 ]

3 голосов
/ 27 августа 2011

По соображениям производительности лучше поместить все свои спрайты в атлас.Атлас - это большая текстура, которая содержит все ваши спрайты.Есть инструменты для автоматизации этого процесса.Например, TexturePacker: http://www.texturepacker.com/

В зависимости от того, какую технологию вы используете, вам, возможно, придется анализировать выходные данные из упаковщика текстур, чтобы получить смещения UV.

0 голосов
/ 31 августа 2011
unsigned int NextPOT(unsigned int x)
{
    x = x - 1;
    x = x | (x >> 1);
    x = x | (x >> 2);
    x = x | (x >> 4);
    x = x | (x >> 8);
    x = x | (x >>16);
    return x + 1;
}

unsigned int width  = CGImageGetWidth(image.CGImage);
unsigned int height = CGImageGetHeight(image.CGImage);
unsigned int Width_POT  = NextPOT(width);
unsigned int Height_POT = NextPOT(height);
CGRect Rect = CGRectMake(0,0,width, height);
CGSize size         = CGSizeMake(Width_POT, Height_POT);
UIGraphicsBeginImageContext(size);
[image drawInRect:Rect];
UIImage* result     = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

изображение - исходное изображение, размер которого не равен 2, результат - изображение, которое вы можете передать OpenGL

...