我想在屏幕上贴一张纹理,不过没有成功,屏幕只显示黑色,环境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();
}
}
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();
}
}
把下面代码放到onSurfaceCreated()中即可
// Enable textures.
gl.glEnable(GL11.GL_TEXTURE_2D);
gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_REPLACE);