OPENGL ES на iOS, glreadpixel не работает с форматом BGRA - PullRequest
2 голосов
/ 05 августа 2011

На устройстве iOS (я пробовал ipad1 и ipad2) glreadpixel работает для формата пикселей RGBA, но для формата пикселей BGRA это не работает.В приведенном ниже коде я использую GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES, чтобы получить собственный формат пикселей, который является GL_BGRA_EXT, но glgeterror возвращает GL_INVALID_ENUM.Это противоречит утверждению в документе opengl http://www.khronos.org/opengles/sdk/1.1/docs/man/glReadPixels.xml, в котором говорится, что GL_INVALID_ENUM генерируется, если формат не GL_RGBA или значение GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES.

Кто-нибудь имеет какое-либо отношение к этому?

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];
...