please can you explain it a little more? i'm new in open GL. What you mean with non power of two?
what is POT? On 3 oct, 17:56, Latimerius <l4t1m3r...@googlemail.com> 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 <elpablos...@gmail.com> 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 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 -- 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