簡體   English   中英

異步GLKit的GLKViewController替換(異步OpenGL繪圖)

[英]Async GLKit's GLKViewController replacement (async OpenGL drawing)

根據這個問題及其答案, GLKViewController與異步OpenGL繪制模式並不真正兼容。

是否有人知道任何重新實現GLKViewControllerUIViewController子類)但具有更多手動控件的開源或代碼示例,因此可以與異步繪圖一起使用?

這個問題太過廣泛了。 您是否正在尋找具有更多手動控件的示例? 您應該在尋找的內容上更加具體。

我不知道有多少很好的資源或示例可以實現與視圖控制器相對較高的功能,但是我知道一些很好的過程,這些過程如何分離模塊以對openGLES的異步使用提供強大的支持。 iOS。

有關如何移植GLKViewController的詳細說明,您應該列出您已經在使用的項目,或者是您在網上找不到答案的項目。 不幸的是,我對同時使用GLKViewControllerGLKView只是“不要!”。

因此,關於用於多線程的模塊分離,我使用的是一個包裝上下文的類,並使用線程和可選的另一個上下文包裝器進行初始化,以支持上下文之間的共享。 此包裝器的工作方式是傳遞包裝器上調用的每個方法,以在包裝器綁定到的線程上執行該方法。 此外,它還包含performBlock:performBlock:callback: ,它們將在綁定線程上執行該塊,並在完成后可選地調用另一個塊。

從這里開始,該包裝器進一步細分為包含當前上下文狀態(用於優化),包括加載的着色器池(緩存)和加載的紋理池(緩存)。 共享包裝器也鏈接到創建它們的父對象,因此只有父對象包含池。

因此,在背景中加載紋理的過程如下所示:

  • 僅從mainContext開始
  • 創建一個新newThread
  • 創建sharedContextmainContextnewThread
  • 請求mainContext創建一個texture (僅獲取ID)
  • 完成后,請求sharedContext將紋理數據加載到texture並在完成時通知mainContext
  • texture然后刪除sharedContext或者保留它以備后用。

現在,我希望您可以通過此過程看到您可以輕松創建一個更高級別的系統,在最常見的情況下,您將創建一個包含兩個上下文包裝器的類,即主上下文和后台工作程序。 這種類型的系統應該非常易於維護,從使用角度來看,您將不必擔心多線程。

之后,要非常接近GLKViewController我有一個包含幀緩沖區和渲染緩沖區的類,可以使用用於顯示的UIView進行初始化,也可以使用生成紋理的大小進行初始化,並將其用於FBO系統。 因此,擁有一個包含此類和上下文包裝器的視圖控制器可能是一個非常強大的工具,看起來好像您可能需要某種東西。

如果您選擇實施這種系統並遇到任何問題,我將很高興聽到它並為您提供幫助,或者寧願聽到您的成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM