I searched the entire Internet for days now to find a solution and got nothing.
I want to get the main info about the GPU on Android devices (like RENDERER, VENDOR and VERSION) and be able to print it on a textview on a defined XML layout. I tryed a lot of methods and nothing worked for me. Everybody says to use this:
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));
I implemented the next class:
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);
}
}
}
which works great but I have no idea how to put those logs into a textview. Setting up the ContentView to my GLSurfaceView I don't know how to use a TextView in there.
I aslo tryed using:
String renderer = gl.glGetString(GL10.GL_VENDOR);
Log.d("GL", renderer);
in the same place where previous Logs are, which also workg great and I can see the right value of the vendor in the LogCat.
But still, I don't know how to pass this value to a textview (for example tv.setText(renderer)) and use it on a normal layout.
I will appreciate a lot if someone could help me solve this problem with a simple example. Take in considerations that I never used OpenGL and I only want to get that info about it. I also accept if you tell me another way (easier if possible :D) to get that info.
Thanks in advance.
It is bit tricky, you don't need to have GlSurfaceView
as root , otherwise you will not have pre-defined TextView
in layout.
Solution:
This is how I manage to do, I have added GlSurfaceView
in my pre-defined layout and then removed it when I'm done with the information.
your xml
file will be looking something like this with pre-defined 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"
/>
and your Activity
file will be looking like this:
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);
}
}
I hope it will be helpful !!