[英]OpenGL ES application crashes when locked screen or entered background
我的應用程序是一個大量使用的OpenGL,它用於處理圖像,渲染場景,顯示預覽等。但是,在我實現多任務作為Apple的官方文檔“iOS的OpenGL ES編程指南”之后,仍然出現了奇怪的崩潰偶爾起來。 Debug Navigator Stack跟蹤顯示類似'sgxPatchDeferredFramebufferOffsets','presentRenderbuffer EXC_BAD_ACCESS','gpus_ReturnNotPermittedKillClient'等。
所以,我想知道究竟應該實現什么樣的OpenGL ES多任務。
=============更新:解決問題============
感謝您的回答,CStreel和其他試圖提供幫助的人。
在第二次“OpenGL ES編程指南”中閱讀“背景應用程序可能無法在圖形硬件上執行命令”部分后,我逐一了解這個問題。
我的應用程序的一個大問題是我不應該在通知方法中實現OpenGL ES多任務。 因為,與委托方法不同,通知方法將被異步調用,當應用程序已經移入后台時,這些停止動畫操作和glFinish()調用可能不會生效。 當我執行一系列與OpenGL ES相關的操作時,當我點擊鎖定屏幕按鈕時,這可能會更頻繁地發生。
如果你們發現了其他一些問題,請隨時與我聯系。
當您的應用程序即將進入后台時,如果您的應用程序調用任何OGLES功能,操作系統將立即終止您的應用程序
閱讀App States&Multitasking獲取更多信息閱讀成為負責任的背景應用程序
以下是該文檔的一些摘錄:
(Required) When moving to the background, make sure your app adjusts its behavior appropriately.
關於OGLES
...the app should stop calling OpenGL ES functions.
通知可以是同步的或異步的。 如果您注冊指定NSOperationQueue的通知,則回調將是異步的,否則我相信它將始終是同步的。
我遇到了一些崩潰,並在我的代碼中發現了一些錯誤:
我使用DidEnterBackground / WillEnterForeground通知(而不是回調)來停止/重啟openGL操作。 我仍然得到一個非常罕見的崩潰(我必須使用自動化和鎖定/解鎖/旋轉20-30分鍾才能獲得它),但使用WillResignActive / DidBecomeActive沒有任何區別; 無論如何都會發生
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.