Activity
加载布局,其中包含GLSurfaceView
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mixed);
Bundle bundle = getIntent().getExtras();
if (bundle.containsKey(EXTRA_KEY_EMAIL)) {
email = bundle.getString(EXTRA_KEY_EMAIL);
TextView myTextView = (TextView) findViewById(R.id.myTextView);
myTextView.setText(myTextView.getText() + " " + email);
}
myGLRenderer.setEmail(email);
myGLSurfaceView = (GLSurfaceView) findViewById(R.id.myGLSurfaceView);
// Create an OpenGL ES 2.0 context.
myGLSurfaceView.setEGLContextClientVersion(2);
// Set the Renderer for drawing on the GLSurfaceView
myGLSurfaceView.setRenderer(myGLRenderer);
// Render the view only when there is a change in the drawing data
myGLSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
From here我拿了例子并修复了(添加了纹理声明和初始化行)
public class MyGLRenderer implements GLSurfaceView.Renderer {
private static final String TAG = "MyGLRenderer";
private String email;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
Log.e(TAG, "onSurfaceCreated: " + config);
GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);//gray this is done
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
Log.e(TAG, "onSurfaceChanged: width" + width + ", height:" + height);
GLES20.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
// Redraw background color
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
doPaintEmail1(gl);
}
private void doPaintEmail1(GL10 gl) {
// TODO do draw all stuff here: paint the email
Log.v(TAG, "doPaintEmail1: "+email);
// Create an empty, mutable bitmap
Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_8888);
// get a canvas to paint over the bitmap
Canvas canvas = new Canvas(bitmap);
bitmap.eraseColor(0);
// get a background image from resources
// note the image format must match the bitmap format
//Drawable background = context.getResources().getDrawable(R.drawable.background);
//background.setBounds(0, 0, 256, 256);
//background.draw(canvas); // draw the background to our bitmap
// Draw the text
Paint textPaint = new Paint();
textPaint.setTextSize(12);
textPaint.setAntiAlias(true);
textPaint.setARGB(0xff, 0xFF, 0x00, 0x00);
// draw the text centered
canvas.drawText(email, 16,112, textPaint);
int[] textures = new int[1];
//Generate one texture pointer...
gl.glGenTextures(1, textures, 0);
//...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
//Create Nearest Filtered Texture
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);
//Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
//Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
//Clean up
bitmap.recycle();
}
public void setEmail(String email) {
this.email = email;
}
我希望看到我的示例电子邮件,但看不到它。
注意我不使用vertexShaderCode
,fragmentShaderCode
,也不使用GLES20.glCreateProgram()
。也许这是错过的,但无法理解为什么,它需要的地方。
如何解决这个问题?
在Logcat,我看到了doPaintEmail1: foo@example
消息。
答案 0 :(得分:1)
创建顶点和片段着色器程序是任何OpenGL ES 2.0应用程序运行所必需的。它们不是可选的。您应该看一下Android SDK中的2.0示例。如果您不想使用着色器,请改用OpenGL ES 1.1。
第三篇文章here将指导您使用SDK中的最佳示例。