Проблемы с изменением текстуры многоугольника в потоке .... белые текстуры - PullRequest
0 голосов
/ 28 февраля 2012

В какой-то момент моего приложения мне нужно изменить текстуру многоугольника.

Для этого я должен загрузить растровое изображение из папки активов, а затем передать растровое изображение методу 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 голосов
/ 02 ноября 2013

Куда вы звоните texImage2D?Он должен вызываться в основном потоке рендеринга.Или создайте второй контекст OpenGL для фонового потока.

Я описал решение только для Java для загрузки текстур в отдельном потоке в качестве ответа на другой вопрос: Процесс загрузки потоковых текстур для игры Android OpenGL

0 голосов
/ 28 февраля 2012

Почему ты называешь супер?Может быть, это будет работать:

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;
    }           
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...