Reputation:
The Activity
load the layout, which has a 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 I took the example and fixed ( added the texture declaration and initialisation line )
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;
}
I am expecting to see my example email, but can't see it.
Note I don't use vertexShaderCode
, fragmentShaderCode
, nor GLES20.glCreateProgram()
. Maybe that is missinng, but can't understand why, where it needed.
How to fix this?
At Logcat I see the doPaintEmail1: foo@example
message.
Upvotes: 1
Views: 839
Reputation: 2832
Creating the vertex and fragment shader programs is required for any OpenGL ES 2.0 app to function. They are not optional. You should take a look at the 2.0 examples in the Android SDK. If you don't want to use shaders, then use OpenGL ES 1.1, instead.
The third article here will guide you to the best examples in the SDK.
Upvotes: 1