Я использовал 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;
}
}