우리 게임에서는 작은 이미지에서 여러 개의 큰 텍스처가 동적으로 생성되어야하며 텍스처의 데이터 복사본을 유지하지 않아도됩니다. OpenGL을 사용하여 glTexSubImage2d
실제 텍스처.안드로이드에서 컨텍스트를 잃을 때 OpenGL 텍스처를 저장하는 방법
Back을 누르거나 게임에서 포커스가 사라지면이 텍스처를 RAM에 저장하려고합니다. 따라서 사용자가 다시 게임으로 돌아 간다면 onSurfaceCreated
에서 다시 만들거나 다시로드 할 수 있습니다. 우리는 이미 모든 정적 텍스처를 '디스크'에서 다시로드합니다.
그러나 EGL 컨텍스트를 잃을 것이라는 메시지를 어디에서 얻을 수 있는지 알기가 어렵습니다. 메인 액티비티의 onBackPressed
에 플래그를 설정하면 기본 렌더 루프에서 해당 플래그를 검사하여 텍스처를 저장할 수 있지만 기본 액티비티의 텍스처에 액세스 할 수 없으므로 기본 액티비티의 onStop
콜백 너무 늦었다. 텍스쳐를 저장하는 후속 렌더링 루프는 없습니다. 뒤로 버튼을 누르는 것 이외의 다른 방법으로 onStop
이 호출되므로이 작업을 수행해야합니다.
아마도 onStop
을 지연시켜 둘 중 하나를 "렌더링"할 수 없습니다. 다른 아이디어?
FBO에 텍스처 바인딩을 시도한 다음 glReadPixels을 호출하여 텍스처 데이터를 메모리에 복사 해 보셨습니까? – Mortennobel
네, 텍스처에서 데이터를 얻는 방법은 정확히 같지만 문제는 이것을 언제해야 하는지를 아는 것입니다. 렌더링 스레드에서 EGL 컨텍스트를 잃기 직전에이 작업을 수행해야합니다. – user3162134