2012-02-28 46 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