OPEN GL Android - Как преобразовать растровый объект в рисованную текстуру - PullRequest
4 голосов
/ 29 декабря 2011

Я пытаюсь реализовать сетку прокручиваемых изображений в OPEN GL 2.0.У меня уже есть представление, реализованное с использованием Canvas Drawing, но по соображениям производительности я решил перейти на OGL.В моей реализации, в каждом кадре я рисую список объектов Bitmap, каждый Bitmap - это кэшированная строка миниатюр изображений.Теперь, как мне преобразовать эти растровые изображения в текстуры, которые я могу использовать с OGL?

1 Ответ

5 голосов
/ 29 декабря 2011
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureID);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);

.. где textureID - это уникальный идентификатор текстуры (обычно получаемый из glGenTextures(), или просто из-за того, что вы сохраняете собственную систему назначения каждой новой текстуры нового идентификатора).bitmap - это растровый объект.


Пример использования в моем классе текстур:

public class Texture {

protected String name;
protected int textureID = -1;
protected String filename;

public Texture(String filename){
    this.filename = filename;
}

public void loadTexture(GL10 gl, Context context){

    String[] filenamesplit = filename.split("\\.");

    name = filenamesplit[filenamesplit.length-2];

    int[] textures = new int[1];
    //Generate one texture pointer...
    //GLES20.glGenTextures(1, textures, 0);

    // texturecount is just a public int in MyActivity extends Activity
    // I use this because I have issues with glGenTextures() not working                
    textures[0] = ((MyActivity)context).texturecount;
    ((MyActivity)context).texturecount++;

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);

    //Create Nearest Filtered Texture
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);

    //Different possible texture parameters, e.g. GLES20.GL_CLAMP_TO_EDGE
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);

    Bitmap bitmap = FileUtil.openBitmap(name, context);

    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);

    bitmap.recycle();   

    textureID = textures[0];

}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getTextureID() {
    return textureID;
}

public void setTextureID(int textureID) {
    this.textureID = textureID;
}


}
...