title: Android OpenGL ES 1.1 white box textures
body: <p><br>
  I am having an issue where textures from the resources become just white.
  The issue only seems to occur on phones (Droid-X for sure), but it works just fine on the emulator.
  I have researched this issue for days and tried so many things. <br>
  <br>
  Textures are POT ranging from 8x8 to 128x128 <br>
  Textures have been in res/drawable, res/drawable-nodpi and res/raw <br>
  Tried with and without this in the manifest file:</p>
  
  <pre><code>&lt;supports-screens android:anyDensity="true" /&gt;
  </code></pre>
  
  <p><br>
  I am at a complete loss on this.</p>
  
  <p>Here is the code I am using <br>
  gl is GL10 and gl11 is GL11 <br>
  <br></p>
  
  <pre><code>During onSurfaceCreated
  gl.glEnable(GL10.GL_TEXTURE_2D);
  gl.glEnable(GL10.GL_BLEND);
  gl.glDisable(GL10.GL_DEPTH_TEST);
  gl.glDisable(GL10.GL_DITHER);
  gl.glDisable(GL10.GL_LIGHTING);
  
  gl.glShadeModel(GL10.GL_FLAT);
  gl.glClearColor(0.00f, 0.00f, 0.00f, 1.00f);
  gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_DST_ALPHA);
  gl.glOrthof(-1, 1, -1, 1, -1, 1);
  gl.glColor4f(0.5f, 0.5f, 0.5f, 0.5f);
  
  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.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);
  gl.glFrontFace(GL10.GL_CCW);
  
  gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
  </code></pre>
  
  <p>During onSurfaceChanged</p>
  
  <pre><code>gl.glMatrixMode(GL10.GL_PROJECTION);
  gl.glLoadIdentity();
  gl.glMatrixMode(GL10.GL_MODELVIEW);
  gl.glLoadIdentity();
  gl.glViewport(0, 0, width, height);
  </code></pre>
  
  <p>Generating the VBO:</p>
  
  <pre><code>public final float vertices[] = { 
      -1.0f, -1.0f, 1.0f,
      1.0f, -1.0f, 1.0f,
      -1.0f, 1.0f, 1.0f,
      1.0f, 1.0f, 1.0f
  };
  public float textureCoord[] = { 
      0.0f, 0.0f,
      0.0f, 1.0f,
      1.0f, 0.0f,
      1.0f, 1.0f
  };
  public final byte indices[] = { 
      0, 1, 3,
      0, 3, 2 
  };
  verticesBuffer = ByteBuffer.allocateDirect(vertices.length * 
      Constants.FLOAT_SIZE).order(ByteOrder.nativeOrder()).asFloatBuffer();
  textureCoordBuffer = ByteBuffer.allocateDirect(textureCoord.length * 
      Constants.FLOAT_SIZE).order(ByteOrder.nativeOrder()).asFloatBuffer();
  indicesBuffer = ByteBuffer.allocateDirect(indices.length).order(ByteOrder.nativeOrder());
  
  // fill buffers
  verticesBuffer.put(vertices);
  textureCoordBuffer.put(textureCoord);
  indicesBuffer.put(indices);
  
  // set pointer positions
  verticesBuffer.position(0);
  textureCoordBuffer.position(0);
  indicesBuffer.position(0);
  
  // temp buffer array
  int[] buffer = new int[1];
  
  // VERTICES BUFFER.
  gl11.glGenBuffers(1, buffer, 0);
  verticesBufferIndex = buffer[0];
  gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, verticesBufferIndex);
  final int vertexSize = verticesBuffer.capacity() * Constants.FLOAT_SIZE;
  gl11.glBufferData(GL11.GL_ARRAY_BUFFER, vertexSize, verticesBuffer, GL11.GL_STATIC_DRAW);
  
  // TEXTURE COORD BUUFER
  gl11.glGenBuffers(1, buffer, 0);
  textureCoordBufferIndex = buffer[0];
  gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, textureCoordBufferIndex);
  final int texCoordSize = textureCoordBuffer.capacity() * Constants.FLOAT_SIZE;
  gl11.glBufferData(GL11.GL_ARRAY_BUFFER, texCoordSize, textureCoordBuffer, GL11.GL_STATIC_DRAW);
  
  // clear buffer id
  gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, 0);
  
  // Unbind the array buffer.
  gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, 0);
  gl11.glGenBuffers(1, buffer, 0);
  
  // INDICES BUFFER
  indicesBufferIndex = buffer[0];
  gl11.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, indicesBufferIndex);
  final int indexSize = indicesBuffer.capacity();
  gl11.glBufferData(GL11.GL_ELEMENT_ARRAY_BUFFER, indexSize, indicesBuffer, GL11.GL_STATIC_DRAW);
  
  // Unbind the element array buffer.
  gl11.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, 0);
  
  gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, verticesBufferIndex);
  gl11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0);
  gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, textureCoordBufferIndex);
  gl11.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0);
  gl11.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, indicesBufferIndex);
  
  BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options();
  sBitmapOptions.inPreferredConfig = Bitmap.Config.ARGB_4444;
  
  // many of these calls :
  Bitmap bitmap = BitmapFactory.decodeStream(resources.openRawResource(resourceID), null, sBitmapOptions);
  int[] textures = new int[1];
  gl.glGenTextures(1, textures, 0);
  gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
  mCropWorkspace[0] = 0;
  mCropWorkspace[1] = bitmap.getHeight();
  mCropWorkspace[2] = bitmap.getWidth();
  mCropWorkspace[3] = -bitmap.getHeight();
  ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, 
  GL11Ext.GL_TEXTURE_CROP_RECT_OES, mCropWorkspace, 0);
  GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
  bitmap.recycle();
  return texture[0]; // which gets stored into textureID for later
  </code></pre>
  
  <p>During onDrawFrame</p>
  
  <pre><code>gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
  
  // and many of these
  gl11.glPushMatrix();
  // transfomations
  gl11.glBindTexture(GL11.GL_TEXTURE_2D, textureID);
  gl11.glDrawElements(GL10.GL_TRIANGLES, indicesCount, GL10.GL_UNSIGNED_BYTE, 0);
  gl11.glPopMatrix();
  </code></pre>
  
  <p><br>
  Sorry for all the code but I think everything is there.<br>
  Thank you,<br>
  Will</p>