Оптимизировать эффективность розыгрыша GLES20 - PullRequest
0 голосов
/ 16 октября 2018

Я использовал GLES20, чтобы нарисовать временную метку, изображения рисуются один раз в секунду.Я хочу улучшить эффективность рендеринга и освободить ненужные ресурсы изображения, чтобы избежать переполнения памяти.Метод generateSimpleWatermarkPlain генерирует только метку времени, можете ли вы дать мне несколько советов по оптимизации?

private void drawWatermark() {
    if(mWatermarkImg == null) {
        return;
    }

    GLES20.glUniformMatrix4fv(muPosMtxHandle, 1, false, mNormalMtx, 0);

    GLES20.glVertexAttribPointer(maPositionHandle,
            3, GLES20.GL_FLOAT, false, 4 * 3, mWatermarkVertexBuffer);
    GLES20.glEnableVertexAttribArray(maPositionHandle);

    mNormalTexCoordBuf.position(0);
    GLES20.glVertexAttribPointer(maTexCoordHandle,
            2, GLES20.GL_FLOAT, false, 4 * 2, mNormalTexCoordBuf);
    GLES20.glEnableVertexAttribArray(maTexCoordHandle);

    if(mWatermarkTextureId == -1) {
        oldTime=System.currentTimeMillis();
        int[] textures = new int[1];
        GLES20.glGenTextures(1, textures, 0);
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, mWatermarkImg, 0);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
                GLES20.GL_LINEAR);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
                GLES20.GL_LINEAR);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
                GLES20.GL_CLAMP_TO_EDGE);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
                GLES20.GL_CLAMP_TO_EDGE);
        mWatermarkTextureId = textures[0];
    }
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mWatermarkTextureId);

    GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
    GLES20.glEnable(GLES20.GL_BLEND);

    GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
    GLES20.glDisable(GLES20.GL_BLEND);

    if(System.currentTimeMillis()-oldTime>1000){
        oldTime=System.currentTimeMillis();
        mWatermarkImg= BitmapUtil.generateSimpleWatermarkPlain(mWatermark.width,mWatermark.height,mWatermark.name,mWatermark.userID,mWatermark.lon,mWatermark.lat,true);
        mWatermarkTextureId=-1;

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