2009-06-12 2 views
0

다른 스레드에서 OpenGL 렌더링과 터치 이벤트가 발생하는 것 같습니다. 이 경우인가요? 이 질문의 문맥은 터치 이벤트를 사용하여 OpenGL 그리기를 트리거하는 입자 시스템입니다. OpenGL 드로잉은 오히려 헤비급이기 때문에 스레드 관련 문제가 걱정됩니다.터치 이벤트 및 OpenGL 그리기. 별도의 스레드에서 발생합니까?

모든 통찰력을 주시면 감사하겠습니다.

감사합니다, 더그

답변

1

아니요. 같은 스레드.

OpenGL 하위 시스템에 명령을 제출하면 GPU에서 명령이 실행되므로 "정의 상"이 아닌 병렬 스레드 b/c 그래픽 프로세서는 반드시 그래픽 프로세서와 동일한 방식으로 스레드 개념을 가질 필요가 없습니다. CPU.

기본 OpenGL 프로젝트는 매 프레임마다 주 스레드에서 실행되고 OpenGL을 호출하는 NSTimer를 만듭니다.

아마 대부분의 그리기 명령은 비동기입니다.

[context presentRenderbuffer:GL_RENDERBUFFER_OES]; 
0

별도로 지정하지 않는 한, 당신의 코드는 메인 스레드에서 실행됩니다. 즉, 일부 라이브러리/SDK 호출은 별도의 스레드를 실행합니다. 이 방법으로 다른 스레드를 간접적으로 만들 수 있습니다.

귀하의 구체적인 경우 내 경험이 일치하지 않습니다. 터치 이벤트는 OpenGL과 마찬가지로 주 스레드에서 처리됩니다.

+0

끊기를에 OpenGL을이 GPU가 아닌 CPU에서 실행 이후 : 당신이 아이폰에 오프 스크린 버퍼에 그리기하고 있기 때문에 당신이 버퍼를 교체 할 때이 그리기 완료 후, 당신은 단지 결과를 볼 수 있습니다 정의 상 병렬 스레드로 실행됩니다. drawView는 일반적으로 타이머에서 호출되며, 단순히 타이머를 호출하여 GPU에 신호로 보냅니다. 터치 이벤트가 포함 된 OpenGL 앱에서이를 볼 수 있습니다. 그렇지 않으면 렌더링은 터치 시퀀스가 ​​완료되면 waitng을 중단시킵니다. – dugla