2012-02-28 68 views
0

在我的應用程序的某些點,我需要改變多邊形的紋理。更改線程中多邊形紋理的問題....白色紋理

爲此,我必須從assets文件夾中加載一個位圖,然後將位圖傳遞給我的多邊形的「loadBitmap」方法,以更改紋理。

它工作正常,但我需要的代碼進入一個線程,因爲位圖的加載時間它frozing我的OpenGL多邊形時,它加載從資產文件夾中的位圖。

因爲我實現了一個線程,它被稱爲改變紋理,但有些事情因爲我的紋理是空的(白色),當我使用線程出錯了,但它的工作原理,如果我不使用線程,這是我的線程代碼:

public class addNextPage extends Thread 
{ 
    GL10 gl; 
    public addNextPage(GL10 gl) { 
     super(); 
     this.gl = gl; 
    }  
    public void run() 
    { 
     super.run(); 

     Bitmap bm=loadImage(pages.get(0)); 
     auxSquare.loadBitmap(context, gl, bm); 
     squares.set(3,auxSquare); 

     currentPage+=1;     
     //vuelvo a recolocar los squares 
     int posCont=-2; //el primer polígono está a la izquierda, no se ve. 
     for (int i=0;i<squares.size();i++){ 
      if (squares.get(i)!=null) 
       squares.get(i).setPosition(posCont,0); 
      posCont+=2; 
     }   
    } 
} 

回答

0

你爲什麼叫超級?也許這將工作:

public class addNextPage extends Thread { 
GL10 gl; 
public addNextPage(GL10 gl) { 
    this.gl = gl; 
}  
public void run() 
{ 

    Bitmap bm=loadImage(pages.get(0)); 
    auxSquare.loadBitmap(context, gl, bm); 
    squares.set(3,auxSquare); 

    currentPage+=1;     
    //vuelvo a recolocar los squares 
    int posCont=-2; //el primer polígono está a la izquierda, no se ve. 
    for (int i=0;i<squares.size();i++){ 
     if (squares.get(i)!=null) 
      squares.get(i).setPosition(posCont,0); 
     posCont+=2; 
    }   
} 

}

+0

是我tryed它,那並不作品 – NullPointerException 2012-02-28 14:52:46

0

你在哪裏打電話texImage2D?它必須在主渲染線程上調用。或者,爲後臺線程創建第二個OpenGL上下文。

我所描述的只是Java的解決方案,在一個單獨的線程上傳紋理作爲回答另一個問題:Threading textures load process for android opengl game