UIView를 반복적으로 OpenGL 텍스처로 렌더링합니다. 장치에서 문제가 없습니다. 예상대로 텍스처가 업데이트됩니다. 시뮬레이터에서 텍스쳐는 처음에는 정확합니다 (정확한 알파와 컬러). 그러나 텍스쳐에 대한 후속 업데이트는 기존 텍스쳐를 대체하는 대신 기존 텍스쳐와 결합하여 (마치 기존 텍스쳐에 붙여 넣은 것처럼) 점진적으로 엉망진창을 만듭니다.대체 대신 OpenGL ES 텍스처 결합 (시뮬레이터가 아닌 장치에서 작동)
일부 (아마도) 관련 상황 : 나는 OpenGL을 ES 1.1
- (라데온 X1600 비디오)
- 이 프로젝트는 아이폰 OS SDK 4.3을 사용하고 배포 대상은 다음
(같은 코드는 초기에 대한 렌더링 및 후속 업데이트 책임이있는 텍스처보기를 렌더링하는 코드입니다 iOS 4.0 버전)입니다 .
// render UIView to pixel buffer
GLubyte *pixelBuffer = (GLubyte *)malloc(4 * width * height);
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixelBuffer, width, height, 8, 4 * width, colourSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colourSpace);
[view.layer renderInContext:context];
// replace OpenGL texture with pixelBuffer data
glBindTexture(GL_TEXTURE_2D, textureId);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelBuffer);
처음에는 시뮬레이터와 장치의 차이에 대해 걱정하지 않았지만 시뮬레이터를 사용하여 교육용 비디오를 만들어야합니다.
나 자신 비슷한 문제를 건너 왔어요
덕분에, 나는 조건부 컴파일 지시문 (참조에 memset 함수를 포장 결국 (HTTP [SO 865377 답변] : //stackoverflow.com/questions/864920/conditional-compile-when-running-in-simulator-as-opposed-to-on-a-device/865377#865377)). 이제는 대접을받습니다. 시간 제한 리프트가 만료되는 즉시 그 현상금을 할당 해 드리겠습니다. –