OpenGL不会加载纹理

时间:2013-10-16 09:55:36

标签: android opengl-es

所以我试图使用Nehe的端口代码将纹理加载到正方形上。但是纹理不会加载,给我的错误是在加载纹理void处的空指针异常。所以基本上我到处寻找,找不到一个null的对象。我试图加载的图像是64x64 res图像。任何解决方案的家伙?

 public class Square {
private FloatBuffer vertexBuffer;  // Vertex Buffer
private FloatBuffer texBuffer;     // Texture Coords Buffer 


private float[] vertices = {  
          -1.0f, -1.0f,  0.0f,  
           1.0f, -1.0f,  0.0f,  
          -1.0f,  1.0f,  0.0f,  
           1.0f,  1.0f,  0.0f};        

float[] texCoords = { // Texture coords for the above face (NEW)
          0.0f, 1.0f,  // A. left-bottom (NEW)
          1.0f, 1.0f,  // B. right-bottom (NEW)
          0.0f, 0.0f,  // C. left-top (NEW)
          1.0f, 0.0f   // D. right-top (NEW)
       };
int[] textureIDs = new int[1];   // Array for 1 texture-ID (NEW)


 public Square() {
      // Setup vertex array buffer. Vertices in float. A float has 4 bytes
      ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
      vbb.order(ByteOrder.nativeOrder()); // Use native byte order
      vertexBuffer = vbb.asFloatBuffer(); // Convert from byte to float
      vertexBuffer.put(vertices);         // Copy data into buffer
      vertexBuffer.position(0);           // Rewind

      // Setup texture-coords-array buffer, in float. An float has 4 bytes (NEW)
      ByteBuffer tbb = ByteBuffer.allocateDirect(texCoords.length * 4);
      tbb.order(ByteOrder.nativeOrder());
      texBuffer = tbb.asFloatBuffer();
      texBuffer.put(texCoords);
      texBuffer.position(0);
   }

 public void draw(GL10 gl) {
      // Enable vertex-array and define its buffer
      gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
      gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
      // Draw the primitives from the vertex-array directly
      gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
      gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);  // Enable texture-coords-array (NEW)
      gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuffer); // Define texture-coords buffer (NEW)
      gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
      gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);  // Disable texture-coords-array (NEW)
   }

// Load an image into GL texture
   public void loadTexture(GL10 gl, Context context) {
      gl.glGenTextures(1, textureIDs, 0); // Generate texture-ID array

      gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[0]);   // Bind to texture ID
      // Set up texture filters
      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);

      // Construct an input stream to texture image "res\drawable\nehe.png"
      InputStream istream = context.getResources().openRawResource(R.drawable.test);
      Bitmap bitmap;
      try {
         // Read and decode input as bitmap
         bitmap = BitmapFactory.decodeStream(istream);
      } finally {
         try {
            istream.close();
         } catch(IOException e) { }
      }

      // Build Texture from loaded bitmap for the currently-bind texture ID
      GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
      bitmap.recycle();
   }
}

LE:所以我弄清楚出了什么问题,但是我无法解决它..输入流没有解码图像...也没有任何图像..故障是输入流返回null但是图像存在......任何人的想法?

0 个答案:

没有答案