我想在屏幕上贴一张纹理,不过没有成功,屏幕只显示黑色,环境android 2.2。
render类代码如下:public final class RenderView extends GLSurfaceView implements GLSurfaceView.Renderer {
    public RenderView(Context context) {
super(context);
// TODO Auto-generated constructor stub
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
this.setRenderer(this);
}
private static final String TAG = "RenderView"; private Bitmap bitmap;

    /** Renders a frame of the UI. */
    // @Override
    public void onDrawFrame(GL10 gl1) {     gl1.glClear(GL11.GL_DEPTH_BUFFER_BIT);
     gl1.glEnable(GL11.GL_SCISSOR_TEST);
     gl1.glScissor(0, 0, getWidth(), getHeight());       //gl1.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
     gl1.glEnable(GL11.GL_BLEND);
     ((GL11Ext)gl1).glDrawTexfOES(0, 0, 0, bitmap.getWidth()*2, bitmap.getHeight()*2);
     gl1.glDisable(GL11.GL_BLEND);
    
    } @Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// TODO Auto-generated method stub

}
int[] textures = new int[1]; @Override
public void onSurfaceCreated(GL10 gll, EGLConfig config) {
// TODO Auto-generated method stub
GL11 gl = (GL11) gll;
//Generate one texture pointer...
int[] cropRect = { 0, bitmap.getHeight(), bitmap.getWidth(), -bitmap.getHeight() };        // Upload the bitmap to a new texture.
        gl.glGenTextures(1, textures, 0);
        gl.glBindTexture(GL11.GL_TEXTURE_2D, textures[0]);
        gl.glTexParameteriv(GL11.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, cropRect, 0);
        gl.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP_TO_EDGE);
        gl.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP_TO_EDGE);
        gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
        gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
        GLUtils.texImage2D(GL11.GL_TEXTURE_2D, 0, bitmap, 0);

//Clean up
bitmap.recycle();
}
}

解决方案 »

  1.   

    onDrawFrame() 里面 的 绑定纹理被你注掉了
      

  2.   

    //gl1.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 
      

  3.   

    我在onSurfaceCreated()里绑定了一次。在onDrawFrame()中还要重新把绑定?去掉注释仍然无法显示纹理
      

  4.   

    我记得onDrawFrame里是不用再bind的 你这个 gl.glTexCoordPointer 还有gl.glEnableClientState放哪里了 能贴出来看看么?
      

  5.   

    忘记Enable textures了。
    把下面代码放到onSurfaceCreated()中即可
            // Enable textures.
            gl.glEnable(GL11.GL_TEXTURE_2D);
            gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_REPLACE);