更改线程中多边形纹理的问题....白色纹理

时间:2012-02-28 13:34:54

标签: android opengl-es

在我的应用程序的某些方面,我需要改变多边形的纹理。

为此,我必须从assets文件夹加载一个位图,然后我将位图传递给我的多边形的“loadBitmap”方法,该方法会改变纹理。

它运行正常,但我需要将代码移动到一个线程中,因为位图的加载时间在从资源文件夹加载位图时冻结了我的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;
        }           
    }
}

2 个答案:

答案 0 :(得分: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;
    }           
}

}

答案 1 :(得分:0)

你在哪里打texImage2D?必须在主渲染线程上调用它。或者,为后台线程创建第二个OpenGL上下文。

我描述了一个仅用于java的解决方案,用于在单独的线程上上传纹理作为另一个问题的答案:Threading textures load process for android opengl game