내가 작업하고있는 OpenGL ES 앱에서 glReadPixels()
기능이 모든 장치/시뮬레이터에서 작동하지 않는 것으로 나타났습니다. 이를 테스트하기 위해 베어 본 샘플 OpenGL 앱을 만들었습니다. 나는 EAGLContext 컨텍스트에 배경 색상을 설정하고 다음과 같이 glReadPixels()
를 사용하여 픽셀을 읽으려고 :glReadPixels는 iOS 7 장치에서만 검은 색 이미지를 표시합니다.
int bytesPerPixel = 4;
int bufferSize = _backingWidth * _backingHeight * bytesPerPixel;
void* pixelBuffer = malloc(bufferSize);
glReadPixels(0, 0, _backingWidth, _backingHeight, GL_RGBA, GL_UNSIGNED_BYTE, pixelBuffer);
// pixelBuffer should now have meaningful color/pixel data, but it's null for iOS 7 devices
free(pixelBuffer);
하지만 실패한다 물리적 인 iOS 7 장치. 테스트 시나리오는 아래 표와 같습니다 (YES/NO = 작동하지 /하지 않습니다) :
V2는 빠른 테스트 후 작동하지 비록 내가 (OpenGL을 ES 1.1 버전을 사용하고 있습니다).
사람이 문제가 발생 했습니까? 내가 놓친 게 있니? 가장 이상한 부분은 iOS 7 물리적 장치에서만 실패한다는 것입니다.
Here은 참조 용으로 모든 관련 코드와 기본 뼈가 GitHub project 인 요지입니다. 문제를 만들고 보여주기가 매우 쉬워졌습니다.
UPDATE : 여기
는 updated gist이며, GitHub project도 업데이트되었습니다. glReadPixels
에서 메모리 출력을 쉽게 볼 수 있도록 샘플 프로젝트를 업데이트했습니다.
또한, 나는 새로운 관찰이 다음 EAGLContext
는 레이어 백업 ([self.context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]
) 인 경우, glReadPixels
성공적으로 모든 장치에서 데이터를 읽을 수/시뮬레이터 (아이폰 OS 6, 7). 그러나 문맥이 레이어 백업 ([self.context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:nil]
)이되지 않도록 GLView.m에서 플래그를 토글하면 glReadPixels
은 초기 게시물에 표시된 조건을 나타냅니다 (iOS 6 sim/device, iOS 7 sim에서 작동하지만 iOS에서는 작동하지 않음). 7 장치).
는이시기에 적절한 상황이 있습니까 아래와 같이 될 것이다, 또는 당신이 전에 명확한 호출하는 기회가 될 수 있을까? – prabindh
코드를 복사했고 작동합니다. 버퍼를 표시하기 전에 read pixels 메서드를 호출해야합니다. –
@prabindh이 전에는 분명히하지 않았습니다. –