程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

android opengles 2.0 绘制二维字符串

发布于2023-11-26 20:54     阅读(471)     评论(0)     点赞(4)     收藏(5)


加载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);         
}

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

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

在此输入图像描述


解决方案


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

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



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/684999/6958f7336b57df659b1c/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)