The ball.png that you reference above is 30x30 pixels.  As MrChaz
said, you must use power of two sized bitmaps.  Otherwise the
texImage2D function will not accept your texture.  It seems likely
that that is what is going on here.  Also, this works in the 16 bits
per pixel modes as well.  You don't need a separate alpha channel in
your frame buffer to do alpha compositing, so a simple RGB454 frame
buffer works, which is what you get if you use a SimpleEGLConfigChooser
(false) to select your pixel format.  16bpp formats are twice as fast
when it comes to rendering as 32bpp formats (if your fill rate
limited, and if you're rendering a 2D game with sprites then you
probably are).

    Another word of caution, PNG files are supposed to (if you follow
the spec) have non-premultiplied alpha channels.  But it seems that
not many people actually follow the standard, and so you can find PNG
files that do it either way.  If your PNG files are in fact using non-
premultiplied alpha then the glBlendFunction should be
(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA).  If they use
premultiplied alpha then it should be as MrChaz said (GL10.GL_ONE,
GL10.GL_ONE_MINUS_SRC_ALPHA).  If you use the first and see dark halos
around all of your sprites then you probably have premultiplied alpha
PNGs.

    As a side note, premultiplied alpha is better for a number of
reasons.  It simplifies a number of compositing operations and treats
all of the color and alpha channels in a uniform way.  It also allows
for super-luminous pixels.

    -Anton

On May 27, 7:00 pm, Nate <nathan.sw...@gmail.com> wrote:
> I am rendering this PNG with no transparency just 
> fine:http://n4te.com/temp/test.png
> However if I try to render this PNG (with transparency) with the exact
> same code, I just get a white box:http://n4te.com/temp/ball.png
>
> I am loading the PNG into a texture like this:
> Bitmap bitmap = BitmapFactory.decodeStream(input);
> int[] temp = new int[1];
> gl.glGenTextures(1, temp, 0);
> textureID = temp[0];
> gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);
> gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
> GL10.GL_NEAREST);
> gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
> GL10.GL_NEAREST); // GL_LINEAR for quality.
> gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
> GL10.GL_CLAMP_TO_EDGE);
> gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
> GL10.GL_CLAMP_TO_EDGE);
> GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
> bitmap.recycle();
>
> I am using this blending:
> gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
>
> How is it possible to render a PNG with transparency in OpenGL ES?
>
> Thanks!
> -Nate
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to