我在我的应用程序中使用 GLES20 纹理,我正在加载它的texImage2D
功能。有时我必须使用动态创建的位图修改加载纹理的一小部分区域。位图包含透明度(某些像素的 alpha < 255)。当我调用函数texSubImage2D
时,alpha 值 < 255 的像素会被黑色像素替换。
我的代码(我已经删除了不相关的部分)如下所示:
// Set blending function
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
// Create bitmap
Bitmap bitmap = Bitmap.createBitmap(20, 20, Config.ARGB_8888);
// Draw on the bitmap
Canvas c = new Canvas(bitmp);
Paint paint = new Paint();
paint.setStyle(Style.FILL_AND_STROKE);
paint.setColor(Color.argb(100, 255, 0, 0));
c.drawRect(0, 0, 20, 20, paint);
// Bind to the texture I want to modify
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
// Draw on the texture
GLUtils.texSubImage2D(GLES20.GL_TEXTURE_2D, 0, myX, myY, bitmap);
// Free memory
bitmap.recycle();
如果我使用 255 alpha(更改paint.setColor(Color.argb(100, 255, 0, 0));
为paint.setColor(Color.argb(255, 255, 0, 0));
),那么一切正常,但 alpha 当然会丢失。
如何在不丢失透明度的情况下在 GLES20 纹理上绘制具有透明像素的位图?