简体   繁体   English

在 Android 中结合 OpenGL ES 渲染和 UI 元素

[英]Combining the OpenGL ES rendering and UI-elements in Android

Android application uses android.opengl.GLSurfaceView to rendering OpenGL ES: Android 应用程序使用 android.opengl.GLSurfaceView 来渲染 Z760716B590EE7C0ADC25F434F577 ES:

public class GameActivity extends AppCompatActivity {
    private SurfaceView surfaceView;
    @Override
    protected void onCreate(Bundle state) {
        ...
        surfaceView = new SurfaceView(this);
        setContentView(surfaceView);
    }
}

public class SurfaceView extends GLSurfaceView {
    private final SceneRenderer renderer;
    public SurfaceView(Context context) {
        ...
        renderer = new SceneRenderer(context);
        setRenderer(renderer);
    }
}

How to display Android UI-elements (like text labels) over of OpenGL ES rendering?如何在 OpenGL ES 渲染中显示 Android UI 元素(如文本标签)?

Need to use:需要使用:

public class GameActivity extends AppCompatActivity {
    private SurfaceView surfaceView;
    @Override
    protected void onCreate(Bundle state) { 
        setContentView(R.layout.activity_gl);
        surfaceView = findViewById(R.id.oglView);
        surfaceView.init(this.getApplicationContext());
    } 
}

public class SurfaceView extends GLSurfaceView {
    private SceneRenderer renderer;
    public SurfaceView(Context context) {
        super(context);
    }

    public SurfaceView(Context context, AttributeSet attributes) {
        super(context, attributes);
    }

    public void init(Context context) {
        renderer = new SceneRenderer(context);
        setRenderer(renderer);
        ...
    }
}

And create layout activity_gl.xml:并创建布局activity_gl.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    tools:context=".activities.GameActivity">
    <com.app.SurfaceView
        android:id="@+id/oglView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <TextView ... />
</androidx.constraintlayout.widget.ConstraintLayout>

To update elements from the render thread, can use Handler/Looper.要从渲染线程更新元素,可以使用 Handler/Looper。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM