我正在三星Galaxy Nexus上使用Android进行一些OpenGL ES 2.0编码。
我已根据Android OpenGL教程实现了MyRenderer类,但我希望能够将一些调试信息返回给MainActivity,例如,如果着色器编译器失败,则会显示错误消息。不幸的是,到目前为止,我尝试将错误消息重新发送回主要活动的所有方法都失败了。
首先,我只是让渲染类本身使用AlertDialogBuilder类弹出一个警告对话框,但由于GLSurfaceView.renderer不是正确的类型,这显然不起作用。由于GLSurfaceView.renderer不是一个活动,我也无法生成一个活动来显示信息。
我的方法是让我的MainActivity实现一个名为AlertReporter的接口,该接口只有一个方法:
public interface AlertCallback {
void alertAndDie(String alertString);
}
我已经在我的MainActivity中实现了该方法,但只要我有方法做任何事情(生成警告框,创建新的文本框活动等等),程序就会崩溃。我假设(并且可能是错的)这是因为我在渲染线程中调用MainActivity中的方法(GLSurfaceView在创建渲染器时会产生这种方法)。
长话短说,我的问题是: 将此错误信息反馈回MainActivity线程以便我可以显示它的最佳做法是什么?
作为一个附带问题,渲染器中的onCreateSurface方法是否是处理所有openGL初始化(例如着色器编译)的最佳位置?
答案 0 :(得分:0)
您可以轻松使用日志类来调试信息
Log.d("FPSCounter", "fps: " + frames);
对于android ui组件,你必须使用一个处理程序来正确地中断glthread这就是你崩溃的原因,我说使用日志,因为这是最好的做法
答案 1 :(得分:0)
这是我用来做类似事情的方法。我使用全局变量来保存在Activity类中创建的TextView的句柄。通过从Activity类调用render类来分配全局。
渲染类中的代码:
private static TextView glbTv1 = null;
public void assignTextviewGlobalHandles(TextView tv1){
glbTv1 = tv1;
}
public void mycallbacktomainactivitymehod(){
if(glbTv1 !=null){
final myMainActivity activity=(myMainActivity) this.context;
activity.runOnUiThread(new Runnable() {
public void run()
{
//glbTv1 is assigned through a TextView varaible created in the Activity class, by making a call into the render class.
glbTv1.setText(String.valueOf(f_jetPos));
}
});
}
}