android - 在 Android 上的 TextView 上打印 GPU 信息(渲染器、版本、供应商)

标签 android gpu glsurfaceview

我在整个 Internet 上搜索了几天以找到解决方案,但一无所获。

我想获取有关 Android 设备上 GPU 的主要信息(如 RENDERER、VENDOR 和 VERSION),并能够在定义的 XML 布局的 TextView 上打印它。我尝试了很多方法,但没有一个对我有用。每个人都说要使用这个:

Log.d("GL", "GL_RENDERER = " + gl.glGetString(GL10.GL_RENDERER));
Log.d("GL", "GL_VENDOR = " + gl.glGetString(GL10.GL_VENDOR));
Log.d("GL", "GL_VERSION = " + gl.glGetString(GL10.GL_VERSION));
Log.i("GL", "GL_EXTENSIONS = " + gl.glGetString(GL10.GL_EXTENSIONS));

我实现了下一个类:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mGLView = new GLSurfaceView(this);
    mGLView.setRenderer(new ClearRenderer());
    setContentView(mGLView);

}


private GLSurfaceView mGLView;
static class ClearRenderer implements GLSurfaceView.Renderer {

    public final static String renderer = null;
    Random aleatorio = new Random();

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        float r = aleatorio.nextFloat();
        float g = aleatorio.nextFloat();
        float b = aleatorio.nextFloat();
        gl.glClearColor(r, g, b, 1.0f);

        Log.d("GL", "GL_RENDERER = " + gl.glGetString(GL10.GL_RENDERER));
        Log.d("GL", "GL_VENDOR = " + gl.glGetString(GL10.GL_VENDOR));
        Log.d("GL", "GL_VERSION = " + gl.glGetString(GL10.GL_VERSION));
        Log.i("GL", "GL_EXTENSIONS = " + gl.glGetString(GL10.GL_EXTENSIONS));

    }

    public void onSurfaceChanged(GL10 gl, int w, int h) {           
    }

    public void onDrawFrame(GL10 gl) {
        gl.glClear(gl.GL_COLOR_BUFFER_BIT);         
    }
}
}

效果很好,但我不知道如何将这些日志放入 TextView 中。将 ContentView 设置为我的 GLSurfaceView 我不知道如何在其中使用 TextView。

我也尝试过使用:

String renderer = gl.glGetString(GL10.GL_VENDOR);
Log.d("GL", renderer);

在以前的日志所在的同一位置,这也很好用,我可以在 LogCat 中看到供应商的正确值。

但是,我仍然不知道如何将这个值传递给 TextView (例如 tv.setText(renderer))并在普通布局上使用它。

如果有人能用一个简单的例子帮助我解决这个问题,我将不胜感激。考虑到我从未使用过 OpenGL,我只想获取有关它的信息。如果你告诉我另一种方式(如果可能的话更容易 :D)来获取该信息,我也接受。

提前致谢。

最佳答案

这有点棘手,你不需要将 GlSurfaceView 作为 root ,否则你将不会在布局中有预定义的 TextView

解决方案:

这就是我设法做到的,我在我的预定义布局中添加了 GlSurfaceView,然后在我处理完信息后将其删除。

您的 xml 文件看起来像这样,带有预定义的 TextView:

gpu_info.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rlRoot"
android:layout_width="match_parent"
android:layout_height="match_parent" >


<TextView 
    android:id="@+id/tvVendor"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#FF0000"
    />

您的 Activity 文件将如下所示:

public class GpuInfoActivity extends Activity{

private RelativeLayout rlRoot;
private TextView tvVendor;
private String mVendor;
private GLSurfaceView mGlSurfaceView;
private GLSurfaceView.Renderer mGlRenderer = new Renderer() {

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {// TODO Auto-generated method stub
        Log.d(TAG, "gl renderer: "+gl.glGetString(GL10.GL_RENDERER));
        Log.d(TAG, "gl vendor: "+gl.glGetString(GL10.GL_VENDOR));
        Log.d(TAG, "gl version: "+gl.glGetString(GL10.GL_VERSION));
        Log.d(TAG, "gl extensions: "+gl.glGetString(GL10.GL_EXTENSIONS));

        mVendor = gl.glGetString(GL10.GL_VENDOR);
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                tvVendor.setText(mVendor);
                rlRoot.removeView(mGlSurfaceView);

            }
        });}

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onDrawFrame(GL10 gl) {
        // TODO Auto-generated method stub

    }
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gpu_info);


    rlRoot = (RelativeLayout)findViewById(R.id.rlRoot);
    tvVendor = (TextView)findViewById(R.id.tvVendor);

    mGlSurfaceView = new GLSurfaceView(this);
    mGlSurfaceView.setRenderer(mGlRenderer);

    rlRoot.addView(mGlSurfaceView);

    }
}

希望对您有所帮助!!

关于android - 在 Android 上的 TextView 上打印 GPU 信息(渲染器、版本、供应商),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18447875/

相关文章:

c++ - 我有两个 GPU,我怎么能只让其中一个执行特定的 CUDA 任务呢?

cuda - 将 SSE/AVX 单元与 GPU 核心进行比较公平吗?

android - ViewPager 适配器上的空异常 - Android

android Facebook SDK 使应用程序崩溃?

android截屏并分享

c++ - 统一内存分配cuda的功能关键字

android - 如何在 Android 上正确使用 setZOrderMediaOverlay?

android - 某些手机​​上的 gl 纹理错误

android - 将透明 GLSurfaceview 覆盖到 android 中的现有 View 上?

android - 广播 Intent 与多播监听器在Android上的实现