Frage

Ich programmiere eine kleine App mit opengl für das iPhone, und jetzt will ich Texturen im PVRTC Format laden. Ist das kompliziert?. Gerade jetzt sind alle meine Texturen sind in .png Format, und ich bin mit dieser Methode zum Laden sie:

- (void)loadTexture:(NSString*)nombre {

    CGImageRef textureImage = [UIImage imageNamed:nombre].CGImage;
    if (textureImage == nil) {
        NSLog(@"Failed to load texture image");
        return;
    }

    textureWidth = NextPowerOfTwo(CGImageGetWidth(textureImage));   
    textureHeight = NextPowerOfTwo(CGImageGetHeight(textureImage));

    imageSizeX= CGImageGetWidth(textureImage);
    imageSizeY= CGImageGetHeight(textureImage);

    GLubyte *textureData = (GLubyte *)calloc(1,textureWidth * textureHeight * 4); 

    CGContextRef textureContext = CGBitmapContextCreate(textureData, textureWidth,textureHeight,8, textureWidth * 4,CGImageGetColorSpace(textureImage),kCGImageAlphaPremultipliedLast );
    CGContextDrawImage(textureContext, CGRectMake(0.0, 0.0, (float)textureWidth, (float)textureHeight), textureImage);

    CGContextRelease(textureContext);
    a
    glGenTextures(1, &textures[0]);

    glBindTexture(GL_TEXTURE_2D, textures[0]);


    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

    free(textureData);


    glEnable(GL_BLEND);


    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);   

}

Mit dieser Funktion ändern PVRTC zu lesen ist kompliziert?, Wie kann ich es tun?

War es hilfreich?

Lösung

Ja, Sie werden an der PVRTextureLoader Probe zu suchen. Es ist ein sehr einfaches Dateiformat. Das Kernstück ist die Header-Struktur:

typedef struct _PVRTexHeader
{
    uint32_t headerLength;
    uint32_t height;
    uint32_t width;
    uint32_t numMipmaps;
    uint32_t flags;
    uint32_t dataLength;
    uint32_t bpp;
    uint32_t bitmaskRed;
    uint32_t bitmaskGreen;
    uint32_t bitmaskBlue;
    uint32_t bitmaskAlpha;
    uint32_t pvrTag;
    uint32_t numSurfs;
} PVRTexHeader;

Sie können dann die gesamte Datei schlürfen mit dataWithContentsOfFile , und einfach das Ergebnis an die Struktur gegossen:

NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
NSString* fullPath = [resourcePath stringByAppendingPathComponent:nombre];
NSData* fileData = [NSData dataWithContentsOfFile:fullPath];
PVRTexHeader* header = (PVRTexHeader*) [fileData bytes];
char* imageData = (char*) [fileData bytes] + header->headerLength;

, um das Texturformat zu bestimmen, können Sie die Flaggen sehen in der Struktur. Vergessen Sie nicht, zu nennen glCompressedTexImage2D statt glTexImage2D .

Andere Tipps

Überprüfen Sie die PVRTextureLoader Beispiel in der Entwicklerdokumentation in XCode aus. Es hat alles, was Sie brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top