ok, definitively POT it is not the problem, i tested with a 256x256 figure and it show a white texture....
:( On 3 oct, 23:43, Adam Ratana <[email protected]> wrote: > I concur with this as well from experience. Non powers of 2 textures are > supported by some implementations on some devices, but to be safe, always > use powers of 2 textures. In your case if you want to draw something that > is 180x140, just draw that part of the texture, while having the full > texture you load be a power of two (256x256 would be the minimum enclosing > size, as has been suggested by others here). > > handy chart for you, though us computer geeks should know these cold! > :)http://www.vaughns-1-pagers.com/computer/powers-of-2.htm > > > > > > > > On Monday, October 3, 2011 11:56:06 AM UTC-4, latimerius wrote: > > > In my experience, the classic cause of "white" textures on some hardware > > but not other is a non-power-of-two texture. Your code doesn't seem to > > enforce POT texture dimensions, are your assets POT? > > > On Mon, Oct 3, 2011 at 5:43 PM, saex <[email protected]> wrote: > > >> i have an app that draws a square on the screen with a texture, and > >> the user can rotate the square touching the screen. It works fine with > >> android 1.5 to 2.1. But when i test the App on a Motorola Droid with > >> android 2.2.2 something is failing because the square is loaded with a > >> white texture. > > >> What is wrong? > > >> This is the code of my class square: > > >> public class Square { > > >> /** The buffer holding the vertices */ > >> private FloatBuffer vertexBuffer; > >> /** The buffer holding the texture coordinates */ > >> private FloatBuffer textureBuffer; > >> /** Our texture pointer */ > >> private int[] textures = new int[3]; > > >> /** The initial vertex definition */ > >> private float vertices[] = { > >> -1.0f, -1.0f, 0.0f, > >> //Bottom Left > >> 1.0f, -1.0f, 0.0f, > >> //Bottom Right > >> -1.0f, 1.0f, 0.0f, > >> //Top Left > >> 1.0f, 1.0f, 0.0f > >> //Top Right > > >> }; > >> /** The initial texture coordinates (u, v) */ > > >> private float texture[] = { > >> //Mapping coordinates for the > >> vertices > >> 0.0f, 0.0f, > >> 0.0f, 1.0f, > >> 1.0f, 0.0f, > >> 1.0f, 1.0f > >> }; > > >> /** > >> * The Square constructor. > >> * > >> * Initiate the buffers. > >> */ > >> public Square() { > >> // > >> ByteBuffer byteBuf = > >> ByteBuffer.allocateDirect(vertices.length * 4); > >> byteBuf.order(ByteOrder.nativeOrder()); > >> vertexBuffer = byteBuf.asFloatBuffer(); > >> vertexBuffer.put(vertices); > >> vertexBuffer.position(0); > >> // > >> byteBuf = ByteBuffer.allocateDirect(texture.length * 4); > >> byteBuf.order(ByteOrder.nativeOrder()); > >> textureBuffer = byteBuf.asFloatBuffer(); > >> textureBuffer.put(texture); > >> textureBuffer.position(0); > >> } > > >> /** > >> * The object own drawing function. > >> * Called from the renderer to redraw this instance > >> * with possible changes in values. > >> * > >> * @param gl - The GL Context > >> */ > >> public void draw(GL10 gl) { > >> //Set the face rotation > >> //gl.glFrontFace(GL10.GL_CW); > >> gl.glFrontFace(GL10.GL_CCW); > >> //Bind our only previously generated texture in this case > >> gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); > >> //Point to our vertex buffer > >> gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); > >> gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer); > >> //Enable vertex buffer > >> gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); > >> gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); > >> //Set The Color To Blue > >> //gl.glColor4f(0.5f, 0.5f, 1.0f, 1.0f); > >> //Draw the vertices as triangle strip > >> gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length > >> / 3); > >> //Disable the client state before leaving > >> gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); > >> gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); > > >> /// > >> //Bind the texture according to the set texture filter > >> //gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[filter]); > >> } > > >> /** > >> * Load the textures > >> * > >> * @param gl - The GL Context > >> * @param context - The Activity context > >> */ > >> public void loadGLTexture(GL10 gl, Context context) { > >> //Generate one texture pointer... > >> gl.glGenTextures(1, textures, 0); > >> //...and bind it to our array > >> gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); > >> //Create Nearest Filtered Texture > >> 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); > > >> //Different possible texture parameters, e.g. > >> GL10.GL_CLAMP_TO_EDGE > >> gl.glTexParameterf(GL10.GL_TEXTURE_2D, > >> GL10.GL_TEXTURE_WRAP_S, > >> GL10.GL_REPEAT); > >> gl.glTexParameterf(GL10.GL_TEXTURE_2D, > >> GL10.GL_TEXTURE_WRAP_T, > >> GL10.GL_REPEAT); > > >> //Get the texture from the Android resource directory > >> InputStream is = > >> context.getResources().openRawResource(R.drawable.radiocd2); > >> Bitmap bitmap = null; > >> try { > >> //BitmapFactory is an Android graphics utility for > >> images > >> bitmap = BitmapFactory.decodeStream(is); > > >> } finally { > >> //Always clear and close > >> try { > >> is.close(); > >> is = null; > >> } catch (IOException e) { > >> } > >> } > > >> //Use the Android GLUtils to specify a two-dimensional > >> texture image > >> from our bitmap > >> GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); > > >> /* > >> * This is a change to the original tutorial, as > >> buildMipMap does > >> not exist anymore > >> * in the Android SDK. > >> * > >> * We check if the GL context is version 1.1 and generate > >> MipMaps by > >> flag. > >> * Otherwise we call our own buildMipMap implementation > >> */ > >> if(gl instanceof GL11) { > >> gl.glTexParameterf(GL11.GL_TEXTURE_2D, > >> GL11.GL_GENERATE_MIPMAP, > >> GL11.GL_TRUE); > >> GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, > >> 0); > > >> // > >> } else { > >> buildMipmap(gl, bitmap); > >> } > > >> //Clean up > >> bitmap.recycle(); > >> } > > >> /** > >> * Our own MipMap generation implementation. > >> * Scale the original bitmap down, always by factor two, > >> * and set it as new mipmap level. > >> * > >> * Thanks to Mike Miller (with minor changes)! > >> * > >> * @param gl - The GL Context > >> * @param bitmap - The bitmap to mipmap > >> */ > >> private void buildMipmap(GL10 gl, Bitmap bitmap) { > >> // > >> int level = 0; > >> // > >> int height = bitmap.getHeight(); > >> int width = bitmap.getWidth(); > > >> // > >> while(height >= 1 || width >= 1) { > >> //First of all, generate the texture from our > >> bitmap and set it to > >> the according level > >> GLUtils.texImage2D(GL10.GL_TEXTURE_2D, level, > >> bitmap, 0); > > >> // > >> if(height == 1 || width == 1) { > >> break; > >> } > > >> //Increase the mipmap level > >> level++; > > >> // > >> height /= 2; > >> width /= 2; > >> Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, > >> width, height, > >> true); > > >> //Clean up > >> bitmap.recycle(); > >> bitmap = bitmap2; > >> } > >> } > >> } > > >> -- > >> 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 -- 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

