2013-02-26 2 views
6

표준 렌더 - 텍스처 설정을 사용하는 플랫폼 간 코드베이스 (iOS 및 Android)가 있습니다. 각 프레임 (초기화 후), 다음과 같은 순서가 발생 텍스처 컬러 첨부 파일이있는 프레임 버퍼의렌더링 - 텍스처 및 동기화

  1. glBindFramebuffer는
  2. 안드로이드에 몇 가지 물건 기본 프레임 버퍼의
  3. *
  4. glBindFramebuffer (0 렌더링, 보통 2 iOS에서)에 결합 된 텍스처를 이용
  5. ,369
  6. 렌더 제 프레임 버퍼에 컬러 부착했다 텍스처
  7. glBindTexture

iOS 및 일부 Android 기기 (에뮬레이터 포함)에서 정상적으로 작동하며 예상대로 작동합니다. 다른 장치 (현재 4.0.6을 실행하는 Samsung Galaxy Note 앞에 위치)에서 텍스처를 사용하는 2 단계 렌더링은 "불안정"해 보입니다. 다른 애니메이션은 "튀는"비트와 동일한 화면에서 60fps로 계속 실행됩니다. 내 결론은 대상 텍스처에 대한 변경 사항이 두 번째 렌더링 단계에서 항상 표시되는 것은 아니라는 것입니다.

이 이론을 테스트하기 위해 위의 * 표시가있는 단계에서 glFinish()를 삽입합니다. 모든 장치에서 이제는 올바른 동작을합니다. 흥미롭게도 glFlush()는 문제를 해결하지 못합니다. 하지만 glFinish()는 비싸고, 필자는 이것이 필연적 일 것이라고 제안하는 문서를 보지 못했습니다.

여기 내 질문 : 마지막 렌더링 패스에서 가장 최근에 그어진 텍스처를 사용할 수 있도록 텍스처 렌더링이 완료되면 어떻게해야합니까?

+1

합리적인 OpenGL 동작처럼 들리지는 않습니다. 저는 ES 전문가는 아니지만, ES (최소한 스펙별로)가이 기본 동기화 동작을 변경하지 않는다고 확신합니다. 렌더링 전에 버퍼 쓰기를 끝내는 것에 의존하는 것과 같이 유지할 수 없다면 어떤 것에도 의지 할 수 없습니다. 이러한 작업에는 다른 명시적인 동기화 메커니즘이 없으므로 명령 대기열을 적절히 순차적으로 동기화해야합니다. –

+0

그리고 나는 아무도 이것을 관찰하지 않았다? 물론 장치/빌드와 관련이 있을지도 모르겠지만 재미가 없습니다. – addaon

답변

3

설명하는 코드는 잘되어야합니다.

단일 컨텍스트를 사용하고 동기화 동작을 완화하는 확장 프로그램 (예 : EXT_map_buffer_range)을 선택하지 않는 한 모든 명령이 정확히 지정된 순서대로 실행 된 것처럼 실행되어야합니다 API 및 API 사용에서 텍스처를 읽기 전에 텍스쳐로 렌더링합니다.

그렇다면 이러한 장치에서 드라이버 버그가 발생했을 수 있습니다. 어떤 장치에서 문제가 발생했는지 나열 할 수 있습니까? 아마도 일반적인 하드웨어 나 드라이버를 찾을 수있을 것입니다.