Hi,

I have noticed that loading an image into a GLTexture using

Drawable d = getResource().getDrawable(...);
Bitmap bitmap = Bitmap.createBitmap(...);
Rect rect = new Rect(...)
d.setBounds(rect)
d.draw(new Canvas(bitmap));
GLUtils.texImage2D(...)

Will create a texture with premultiplied alpha. Not a problem, as long
as I use glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) to blend instead
of glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) which will cause
dark borders.

However, I've found that if I render text onto the Bitmap and convert
to glTexture using:

Bitmap bitmap = Bitmap.createBitmap(...);
Canvas c = new Canvas(bitmap);
Paint p = new Paint();
p.setColor/setAntiAlias/setTextSize(...)
c.drawText(text, x, y, p)
GLUtils.texImage2D(...)

..the resultant texture is NOT premultiplied, and using
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) will cause ugly over-
saturated edges when blended into the 3D world. Blending using
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) makes it look right
again.

To confirm this, I saved the bitmap into a PNG file and load it as a
resource into a texture, and the resultant texture is premultiplied
and renders correctly using glBlendFunc(GL_ONE,
GL_ONE_MINUS_SRC_ALPHA)

Is there a way to force the text rendering onto the bitmap to be pre-
multiplied?

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to