iOS デバイス (ipad1 と ipad2 を試しました) では、glreadpixel は RGBA ピクセル形式では機能しますが、BGRA ピクセル形式では機能しません。以下のコードでは、GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES を使用してネイティブのピクセル形式である GL_BGRA_EXT を取得していますが、glgeterror は GL_INVALID_ENUM を返します。これは、形式が GL_RGBA または GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES の値でない場合に GL_INVALID_ENUM が生成されるというopengl ドキュメントhttp://www.khronos.org/opengles/sdk/1.1/docs/man/glReadPixels.xmlのステートメントと矛盾します。
誰かがこれについて何か考えていますか?
GLint native_format;
GLint native_type;
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES, &native_format);
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES, &native_type);
NSLog(@"native_format: 0x%04X", native_format);
NSLog(@"native_type: 0x%04X", native_type);
//screen size
CGSize s = [[CCDirector sharedDirector] winSize];
int tx = s.width;
int ty = s.height;
int bitsPerPixel=32;
int bytesPerRow = (bitsPerPixel/8) * tx;
NSInteger myDataLength = bytesPerRow * ty;
GLubyte *buffer = malloc(sizeof(GLubyte)*myDataLength);
[target begin];
glReadPixels(0,0,tx,ty,native_format,native_type, buffer);
NSLog(@"gl get error %d", glGetError());
[target end];