Textures are white on Droid (and not other phones)

by Barrett_A » Sat, 27 Feb 2010 05:05:30 GMT


Sponsored Links
 I'm using GLSurfaceView to render OpengGL 3D.  It works great on my
nexus one, the emulators, and at least the G1.  However, on the droid,
the textures are white.  I've seen this problem before when textures
aren't loaded, and also when they aren't powers of two dimensions (not
the case here).  What's weird is that this started when I converted my
program to use GLSurfaceView (it used to be based on some older
example where I was doing the EGL stuff myself).

Textures displayed on the screen are white, but shapes that are just
colors are displayed just fine.

The person testing this for me on their droid does not have the sdk,
so if anyone would like to run this with the debugger, let me know and
I can get you the apk.

Thanks for any help!

--



Textures are white on Droid (and not other phones)

by Robert Green » Sat, 27 Feb 2010 11:31:11 GMT


 Your textures are being scaled and are no longer power-of-two.  Either
put them in drawable-nodpi or turn off scaling on the decoder
configuration.




--


Sponsored Links


Textures are white on Droid (and not other phones)

by Barrett_A » Sat, 27 Feb 2010 11:34:36 GMT


 I have them in just plain old drawable (added this directory myself
since this is how it used to be done, didn't do anything special, if
something special is required).

They work fine on my Nexus One, which is also HDPI (I assume).  Does
Nexus One default to not scale while Droid does scale?

Thanks





--



Textures are white on Droid (and not other phones)

by Robert Green » Sat, 27 Feb 2010 11:35:50 GMT


 Actually, I just noticed that you said it works on the n1.  My
previous guess is probably wrong then...




--



Textures are white on Droid (and not other phones)

by Barrett_A » Sat, 27 Feb 2010 13:56:13 GMT


 efore posting here, I googled this issue, and did find one other
unsolved thread about this same issue.
If anyone else comes here after googling, here's information about
what happened between it not working and working:
(I'm not sure which of these steps is what fixed it, and I don't
intend to find out :))

I got rid of everything GL11 (everything is GL10 now).

I changed my LoadTexture function from:

int LoadTexture(int resID,GL10 gl){
Resources res = gp.getContext().getResources();
Bitmap bmp = BitmapFactory.decodeResource(res,resID);
int[] tmp_tex = new int[1];
gl.glGenTextures(1, tmp_tex, 0);
int tex = tmp_tex[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, tex);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
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);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_ALPHA,
GL10.GL_ALPHA_BITS);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
bmp.recycle();
return tmp_tex[0];
}




to



int LoadTexture(int resID,GL10 gl)
{
int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);
int mTextureID = textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);
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_LINEAR);
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);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV,
GL10.GL_TEXTURE_ENV_MODE,GL10.GL_REPLACE);
InputStream is =
gp.getContext().getResources().openRawResource(resID);
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch(IOException e) {
// Ignore.
}
}
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
return mTextureID;
}
}


(I found the body of this in the ApiDemo with the 3 letters on a
textured triangle spinning).
Only a few differences, but they are there.

Again, I'm not sure which of those two things is what fixed it (and
it's even possible that it was something else that I don't remember
doing).

Hopefully this helps someone else.

(and thanks to R. Green for testing it on his Droid).


On Feb 26, 2:05pm, Barrett_A <lbarrettander...@gmail.com> wrote:

--



Textures are white on Droid (and not other phones)

by Robert Green » Sat, 27 Feb 2010 22:23:14 GMT


 I don't have access to my Droid at the moment but my guess is that it
maybe didn't like that alpha bits texture parameter? Perhaps you could
just try without that.  The minimal parameters that you need are the s
and t clamp method and the minification and magnification function.  I
recommend testing with only those when you are having major issues on
a specific chip.




--



Textures are white on Droid (and not other phones)

by Robert Green » Sat, 27 Feb 2010 22:27:44 GMT


 Oh.. yeah, you should run in the native Res by setting the supports
screen flags in the manifest and then use drawable-nodpi.  Both phones
should scale the same but it depends on the manifest.  I actually
think that the n1 may support non power of twos but I don't have the
extension list in front of me.




--



Other Threads

1. how to add progress bar with media Player??????

hi
using the "onBufferingUpdate(MediaPlayer arg0, int percent)" i am able
to show the buffering like the youtube player but how can a show the
playing updater in my own style????

--~--~---------~--~----~------------~-------~--~----~

2. Making a Skype Call

I have Skype Mobile installed on my phone, and would like an
application I am writing to dial a phone number through Skype.  How do
I do this? I have tried using a URI such as skype:8005551212?call with
ACTION_CALL and ACTION_VIEW, but I keep getting "No application to
handle intent" errors.  Any ideas? Mark Murphy suggested in a similar
post that Skype would know, but their documentation doesn't seem to
cover this.
Thanks!

This is what didn't work, but gives the gist of what I'm trying to
do...

                        Intent call = new Intent(Intent.ACTION_CALL);
                        call.setData(Uri.parse("skype:"+phonenumber+"?call"));
                        call.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(call);

-- 

3. listen for changes made in ContactMethod table

4. Android 2.1, HTC Legend, native Bluetooth client

5. DroidLiv

6. Android Tablet SDK or Emulator

7. apkatcher