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. Psssing keys for each value in a list view to another view

hi,

 I have a  list view to list some categories. I need to list the
products under each category in a new list. I used arrayList to the
adapter, I am able to list the category names . but I cant pass the
keys (categoryIds) to the next view for getting the products.

Please help me in this regard.

For Now I am trying to display the categoryId in the produts page, but
i am not suceeding :(


the following is the code I tried

public class Categories extends ListActivity  {

        ArrayList CatList       ;
           @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
       CatList= GetCategories(); // this returns an Array List
      setContentView(R.layout.categories);
          setListAdapter(new ArrayAdapter<String>
(this,android.R.layout.simple_list_item_1,CatList));


   }


 @Override
   protected void onListItemClick(ListView l, View v, int position,
long id) {
//       Map map = (Map) l.getItemAtPosition(position);

     //  Intent intent = (Intent) map.get("intent");
    //   startActivity(intent);
          // super.onListItemClick(l, v, position, id);
       Intent i = new Intent(this, Products.class);
     //  startActivity(i);
       i.putExtra("categ",CatList.get(position).toString() );
       startActivity(i);
        // setContentView(R.layout.products);
   }
public static Arraylist GetCategories() {
                code to  get the array List
        }
}
/// following is the products.java


public class Products extends ListActivity  {


   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
           setContentView(R.layout.products);
          TextView CategoryIdtext = (TextView) findViewById
(R.id.CategoryId);
      Bundle extras = getIntent().getExtras();
      CategoryIdtext.setText("CAtegoryID:"+extras.getString("categ"));
}

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

2. Starting new Activity vs. setContentPane(newView)

Question: Why is it better to start a new activity if you want to
change screen to a new view (for example to edit some notes on a
separate text field)?

You could get the same result by taking setContentView(newView) which
offers several advantages as far as I can see. Are there any
consequences, if I pack every single view of my application into one
single activity? Or are both ways equivalent?  If yes, I would prefer
setContentView(...) for many reasons.

Thanks in advance for your answers.
--~--~---------~--~----~------------~-------~--~----~

3. Standard widget styles

4. Fwd: Supported unicode characters

5. Ping website

6. potential medication applications

7. How about making an internet-less GPS system?