2012-10-07 4 views
1

iOS 응용 프로그램은 Core Graphics를 사용하여 비트 맵 (내보기와 동일한 크기)을 그립니다. 비트 맵의 ​​업데이트 된 영역을 화면에 밀어 넣고 싶습니다. (표준 UIView drawRect 메서드를 사용했지만 OpenGL로 전환 할 좋은 이유가 있습니다.)OpenGL ES에서 UIView drawRect 복제

나는 UIView/CALayer drawRect와 동일한 동작을 복제하려고하지만 OpenGL보기에서는 복제하려고합니다. 기본적으로 내 OpenGL보기에서 더티 사각형을 업데이트하고 싶습니다. 아무것도 더.

지금까지 OpenGL ES 1.1 뷰를 만들고 내 비트 맵을 업데이트 할 때마다 단일 쿼드 (정점 배열의 텍스처)를 사용하여 전체 비트 맵을 화면에 표시 할 수있었습니다. 물론 전체 뷰가 아닌 더러운 직사각형을 새로 고칠 필요가 있기 때문에 이것은 비효율적입니다.

OpenGL ES에서 가장 효율적인 방법은 무엇입니까? 쿼드 격자를 사용하고 더러운 직사각형과 교차하는 쿼드 텍스처를 업데이트해야합니까? (만약 내가 그 방법을 사용했다면 VBO를 사용해야합니까?) 더 좋은 방법이 있습니까?

FYI (경우에 따라), 회전은 필요 없지만 전체 OpenGL보기의 크기를 조정해야합니다.

업데이트 : 이 방법은 실제로 작동합니다. 그러나 단일 버퍼링을 사용할 때 인공물을 생성하는 망막 디스플레이 장치의 iOS5.x에 버그가 있습니다. 이 문제는 iOS6에서 수정되었습니다. 아직 해결 방법이 없습니다.

답변

1

TexSubImage를 사용하여 텍스처의 일부분을 간단히 업데이트하고 표준 전체 화면 쿼드를 다시 그리기 만 할 수 있습니다. 그러나 가위 부분이 "더러운"부분으로 설정됩니다 (glScissor). GL은이 직사각형 바깥에 조각을 그리지 않습니다.

이 작업을하려면 물론 단일 버퍼링을 사용해야합니다.

+0

고마워요. ((CAEAGLLayer *) 자기 층]) drawableProperties = NSDictionary와의 dictionaryWithObjectsAndKeys : [numberWithBool의 NSNumber : TRUE, kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, 닐] 하나의 버퍼링을 사용한다.; – user1727274

+0

CVOpenGLESTextureCache를 사용할 때 이점이 있습니까? – user1727274

관련 문제