tex1 = loadTexture(gl, bmp0);
tex2 = loadTexture(gl, bmp1);
tex3 = loadTexture(gl, bmp2);
tex4 = loadTexture(gl, bmp3);
tex5 = loadTexture(gl, bmp4);
....
       protected static int loadTexture(GL10 gl, Bitmap bmp) {
            Bitmap bmp_tmp = bmp;
            return loadTexture(gl, k,bmp_tmp, false);
        }

        /**
         * Create a texture and send it to the graphics system
         * @param gl The GL object
         * @param bmp The bitmap of the texture
         * @param reverseRGB Should the RGB values be reversed?
(necessary
workaround for loading .pngs...)
         * @return The newly created identifier for the texture.
         */
//      protected static int[] loadTexture(GL10 gl, Bitmap[] bmp,
boolean
reverseRGB) {
        protected static int loadTexture(GL10 gl, Bitmap bmp, boolean
reverseRGB) {

        System.out.println("Eenter loadTexture in GLTutorialBase");
        int[] tmp_texture = new int[1];
        gl.glGenTextures(1, tmp_texture, 0);
        int texture = tmp_texture[0] ;//QQ

        System.out.println("k=0 loadTexture 11111 in GLTutorialBase");
//      ByteBuffer bb = ByteBuffer.allocateDirect(bmp.getHeight()
*bmp.getWidth()*4);
        ByteBuffer bb = ByteBuffer.allocateDirect(bmp.getHeight()
*bmp.getWidth
()*4);
        bb.order(ByteOrder.BIG_ENDIAN);
        IntBuffer ib = bb.asIntBuffer();
        System.out.println("k=0 loadTexture 22222 in GLTutorialBase");

        for (int y=bmp.getHeight()-1;y>-1;y--)
            for (int x=0;x<bmp.getWidth();x++) {
                int pix = bmp.getPixel(x,bmp.getHeight()-y-1);
                // Convert ARGB -> RGBA
                @SuppressWarnings("unused")
                byte alpha = (byte)((pix >> 24)&0xFF);
                byte red = (byte)((pix >> 16)&0xFF);
                byte green = (byte)((pix >> 8)&0xFF);
                byte blue = (byte)((pix)&0xFF);

                // It seems like alpha is currently broken in
Android...
                ib.put(red << 24 | green << 16 | blue << 8 | 0xFF);//
255-alpha);
            }

        System.out.println("k=0 loadTexture 33333 in GLTutorialBase");

        ib.position(0);
        bb.position(0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, texture);
        gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA,
bmp.getWidth(), bmp.getHeight(), 0, GL10.GL_RGBA,
GL10.GL_UNSIGNED_BYTE, bb);
        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_NEAREST);
        tmp_texture=null;
        ib.position(0);
        bb.position(0);
        ib.clear();
        bb.clear();
        System.out.println("k =0 Leave loadTexture in
GLTutorialBase");
        return texture;
}

.......

//选择并使用纹理   choose and use texture
               gl.glBindTexture(GL10.GL_TEXTURE_2D, tex);
                gl.glEnable(GL10.GL_TEXTURE_2D);
                gl.glMaterialfv(GL10.GL_FRONT_AND_BACK,
GL10.GL_AMBIENT, matAmbient,
0);
                gl.glMaterialfv(GL10.GL_FRONT_AND_BACK,
GL10.GL_DIFFUSE, matDiffuse,
0);

                gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff);
                gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
                gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
                gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuff);

                gl.glNormal3f(0,0,1);
                gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
                gl.glBindTexture(GL10.GL_TEXTURE_2D, tex1);
                gl.glNormal3f(0,0,-1);
                gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);

                gl.glBindTexture(GL10.GL_TEXTURE_2D, tex2);
                gl.glNormal3f(-1,0,0);
                gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
            gl.glBindTexture(GL10.GL_TEXTURE_2D, tex3);
                gl.glNormal3f(1,0,0);
                gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);

            gl.glBindTexture(GL10.GL_TEXTURE_2D, tex4);
                gl.glNormal3f(0,1,0);
                gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
            gl.glBindTexture(GL10.GL_TEXTURE_2D, tex5);
                gl.glNormal3f(0,-1,0);
                gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
in the above context,when the bmp,bmp1,bmp2,...,bmp5 all be modified
to bmp ,there will be no problem,otherwise when the second to call
loadtexture() there will be "force
close"exception in "ByteBuffer bb =ByteBuffer.allocateDirect
(bmp.getHeight()*bmp.getWidth()*4);"and why?
here is the trace information:
05-05 02:57:25.392: INFO/System.out(1072): Eenter loadTexture in
GLTutorialBase
05-05 02:57:25.392: INFO/System.out(1072): k=0 loadTexture 11111 in
GLTutorialBase
05-05 02:57:25.425: INFO/System.out(1072): k=0 loadTexture 22222 in
GLTutorialBase
05-05 02:57:26.119: INFO/System.out(1072): k=0 loadTexture 33333 in
GLTutorialBase
05-05 02:57:26.129: INFO/System.out(1072): k =0 Leave loadTexture in
GLTutorialBase
05-05 02:57:26.149: INFO/System.out(1072): Before loadTexture bmp1
05-05 02:57:26.149: INFO/System.out(1072): Eenter loadTexture in
GLTutorialBase
05-05 02:57:26.159: INFO/System.out(1072): k=1 loadTexture 11111 in
GLTutorialBase
05-05 02:57:26.231: ERROR/AndroidRuntime(1072):     at
com.android.simple_gl.GLTutorialBase.loadTexture(GLTutorialBase.java:
130)
05-05 02:57:26.231: ERROR/AndroidRuntime(1072):     at
com.android.simple_gl.GLTutorialBase.loadTexture(GLTutorialBase.java:
72)
best wishes!

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to