2010-08-26 77 views
1

我正在編寫代碼,允許用戶瀏覽SD卡上的文件以定位圖像,並使用openGL ES 2.0加載它們。當我只使用EditText鍵入文件路徑時,這很好,但現在我已經實現了一個文件瀏覽器,該文件瀏覽器使用與我獲得的文件路徑字符串完全相同的調用「在沒有當前上下文的情況下調用openGL API 「在LogCat中。從活動返回時沒有當前的openGL上下文嗎?

我認爲這與加載器活動超過GLSurfaceView的頂部有關,所以我設置該活動在任何openGL調用之前終止,但沒有骰子。

什麼給?

下面是一些代碼片段:

當用戶點擊了裝載機

public void backOut(String filePath) { 
     // inform the main Activity of the file to load... 
     Intent i = new Intent(); 
     i.putExtra("filePath", filePath); 

     setResult(Activity.RESULT_OK, i); 
     // ... and end the load activity 
     finish(); 
    } 

中的文件裏面的主要活動,其中包含了GLSurfaceView

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) { 
    case (1) : { 
     if (resultCode == Activity.RESULT_OK) { 
     String toLoad = data.getStringExtra("filePath"); 
     Log.v(TAG, toLoad); 
     gl.informRendererLoadTexture(toLoad); 
     } 
     break; 
    } 
    } 
} 

而且在調用GLSurfaceView

public void informRendererLoadTexture(String filePath){ 
    _filePath = filePath; 
    queueEvent(new Runnable(){ 
      public void run() { 
       _renderer.loadGLTexture(_filePath); 
      }}); 
+0

是否使用多線程 – 2010-08-26 21:49:06

+0

我只是用它擴展GLSurfaceView類,所以我猜想以後會自動將渲染器從用戶界面中分離出來,是的。 但是除了我還沒有創建任何我自己或任何其他線程。 – Frank 2010-08-26 21:53:18

回答

2

從GLSurfaceView文檔:

「有些情況下EGL渲染上下文將丟失。這通常發生在設備在睡覺後醒來時。當EGL上下文丟失時,與該上下文關聯的所有OpenGL資源(例如紋理)將被自動刪除。爲了保持渲染正確,渲染器必須重新創建它仍然需要的任何丟失的資源。 onSurfaceCreated(GL10,EGLConfig)方法是一個方便的地方。「

您需要了解丟失的OpenGL上下文,然後重新獲取上下文並重新加載所有OpenGL資源。您顯示全屏的文件瀏覽器

您可以檢查出副本島的有關檢測和處理丟失的上下文的示例代碼:?http://code.google.com/p/replicaisland/

+0

謝謝你的迴應,我一直在尋找一個這樣的例子。我目前正在瀏覽提供的豐富信息,但我仍然有點不確定爲什麼我的代碼無法正常工作。 我特別確定要等到返回到保存我的GLSurfaceView的Activity後才能進行任何openGL調用,以確保上下文就位。 你能否給我提供一個小例子?我不在乎丟失紋理或類似的東西,只要確保在上下文重新就位後調用加載新紋理即可。 – Frank 2010-08-27 17:14:32

+0

通過代碼挖掘需要一點時間,但謝謝。這導致我找到了解決方案。 – Frank 2010-08-28 16:20:23

+0

很高興你能工作。不幸的是,我沒有可以與您分享的獨立代碼示例。 – 2010-08-30 02:00:46

相關問題