Google 제품에는 화면 전체를 빠르게 복사해야하는 풀 프레임 픽셀 데이터를 기본적으로 생성하는 소프트웨어 이미지 디코더가 포함되어 있습니다 (우리는 iOS에서 실행 중입니다).iOS에서 RGB 픽셀 데이터를 고성능으로 복사
현재 우리는 CGBitmapContextCreate를 사용하고 있으며 메모리 버퍼에 직접 액세스 한 다음 각 프레임마다 CGBitmapContextCreateImage를 호출 한 다음 해당 비트 맵을 화면에 그립니다. 괜찮은 프레임 속도에서 iPad의 망막 디스플레이에서 전체 화면 새로 고침이 너무 느립니다 (그러나 Retina가 아닌 장치에서는 괜찮습니다).
우리는 glTexImage2D 및 glTexSubImage2D (본질적으로 텍스처로 렌더링)의 사용을 포함하여 모든 종류의 OpenGL ES 기반 접근법을 시도했지만 CPU 사용량은 여전히 높으며 ~ 30FPS 이상을 얻을 수 없습니다 문제는 30 FPS를 사용하면 픽셀을 화면에 복사하기위한 CPU 사용량이 거의 100 %에 불과하다는 것입니다. 즉, 픽셀을 화면에 복사 할 때 CPU 사용량이 거의 100 %에 달합니다. CPU.
최대 성능을 제공하는 OpenGL 또는 iOS API를 사용할 수 있습니다. 픽셀 데이터는 픽셀 당 32 비트 RGBA 데이터로 포맷되지만 여기에는 약간의 융통성이 있습니다 ...
어떤 제안이 있습니까?
계측기를 사용하여 정확히 어떤 작업이 모든 CPU를 사용하는지 확인 했습니까? 나는 비슷한 것을했는데 많은 시간을 RGBA를 ARGB로 변환하는 데 지출했다는 것을 발견했다. (당신이 아직하지 않았다면 당신의 문제는 아니지만 프로파일을 보는 것이 도움이 될 것이다.) – nielsbot
"비트 맵을 화면 "의미? 당신은 UIView의'-drawRect :'메소드를 드로잉하거나 레이어에 CGImage를 두거나 UIImageView를 사용하고 있습니까? 후자의 두 메소드는 상당히 빨라야합니다.이 [이전 응답] (http://stackoverflow.com/questions/10410106/drawing-image-with-coregraphics-on-retina-ipad-is-slow/10424635#10424635)을 참조하십시오.). –
"glTexSubImage2D"접근 방식은 무엇입니까? 나는 이것이 제대로 완료되면 충분히 빠르다고 생각합니다. 당신이하는 일을 이해하는 방법은 CPU에서 미가공 픽셀 데이터를 처리하고 그 데이터를 GPU에 푸시하고 렌더링하는 것입니다. 최대 4kx4kx4B (64MB)의 데이터가 전체 텍스처 (iPad3)에 대해 푸시되고 너무 많이 보이지 않습니다. 어쨌든, 어떤 경우이든 이것이 fps의 하락을 유발하는 것이라면, 나는 보이지 않습니다. 더 나은 방법은 다음 픽셀과 함께 GPU를 직접 작업. –