1

加载布局,其中ActivityGLSurfaceView

@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);         
}

从这里我拿了例子并修复了(添加了纹理声明和初始化行)

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消息。

在此处输入图像描述

4

1 回答 1

1

任何 OpenGL ES 2.0 应用程序都需要创建顶点和片段着色器程序才能运行。它们不是可选的。您应该查看 Android SDK 中的 2.0 示例。如果您不想使用着色器,请改用 OpenGL ES 1.1。

这里的第三篇文章将引导您了解 SDK 中的最佳示例。

于 2013-11-04T15:53:41.697 回答