私は2048x2048スプライトシートの束で作業していますので、すばやくメモリをいっぱいにしています。 、私はテクスチャをロードするために(レイWenderlich経由)は、以下の方法を使用していているとおり:OpenGL ESのiOSテクスチャ読み込み - RGBA8888の.pngファイルからRGB565のテクスチャを取得するにはどうすればよいですか?
- (GLuint)setupTexture:(NSString *)fileName
{
CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage;
if (!spriteImage)
{
NSLog(@"Failed to load image %@", fileName);
exit(1);
}
size_t width = CGImageGetWidth(spriteImage);
size_t height = CGImageGetHeight(spriteImage);
GLubyte * spriteData = (GLubyte *) calloc(width*height*4, sizeof(GLubyte));
CGContextRef spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width*4,CGImageGetColorSpace(spriteImage), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(spriteContext, CGRectMake(0, 0, width, height), spriteImage);
CGContextRelease(spriteContext);
GLuint texName;
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData);
GLenum err = glGetError();
if (err != GL_NO_ERROR)
NSLog(@"Error uploading texture. glError: 0x%04X", err);
free(spriteData);
return texName;
}
ので、私の質問は、私はCGImageからのアルファ情報を破棄しないか、そして以下にした画像を「ダウンサンプリング」されますピクセルあたりのビット数、そして最後にOpenGLに伝えますか?
'uint8x8_t'型は' arm_neon.h'で定義されています – brigadir
splendid!glTexImage2D行を次のパラメータに変更しなければならなかった: 'glTexImage2D(GL_TEXTURE_2D、0、GL_RGB、幅、高さ、0、GL_RGB、GL_UNSIGNED_SHORT_5_6_5、スプライトデータ); ' – Jakob
素晴らしい答え、そこには多くのNEONコードが見当たらない。ハードウェアに依存しないようにするには、Accelerateフレームワークを使用してこれを実装してみましたか? –