Android OPENGL ES 不工作:没有当前上下文
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20159821/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
OPENGL ES not working : no Current context
提问by nmxprime
I tried the program as shown in book OpenGL ES2 for Android, but it's not working!!
我尝试了适用于 Android 的 OpenGL ES2 一书中所示的程序,但它不起作用!!
I have tested in Odroid E, samsung s3, samsung y, samsung star!!
我已经在 Odroid E、samsung s3、samsung y、samsung star 中测试过!!
the gl version suported returns 2, but i get
11-22 15:09:45.804: E/oGl-es v(9047): 2.0:131072
11-22 15:09:45.804: E/libEGL(9047): call to OpenGL ES API with no current context (logged once per thread)
11-22 15:09:45.804: E/unable to(9047): createShader
11-22 15:09:45.804: E/libEGL(9047): call to OpenGL ES API with no current context (logged once per thread)
11-22 15:09:45.804: E/unable to(9047): createShader
11-22 15:09:45.804: E/libEGL(9047): call to OpenGL ES API with no current context (logged once per thread)
11-22 15:09:45.804: E/Error creating(9047): GL programObject
11-22 15:09:45.812: E/render(9047): set
11-22 15:09:46.062: E/Results of validating program:(9047): 0
11-22 15:09:46.062: E/Results of validating program:(9047): Log:
Below are my code
下面是我的代码
public class Main_OGLT1 extends Activity {
MySurface mGLSurfaceView;
private boolean renderSet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLSurfaceView = new MySurface(this);//(this); //instantiation
ActivityManager actMan = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo mConfigInfo = actMan.getDeviceConfigurationInfo();
boolean isES2Compat = (mConfigInfo.reqGlEsVersion >= 0x20000);
Log.e("oGl-es v",mConfigInfo.getGlEsVersion()+":"+ mConfigInfo.reqGlEsVersion);
if(isES2Compat){
renderSet = true;
Log.e("render","set");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main__oglt1, menu);
return true;
}
@Override
protected void onResume()
{
// The activity must call the GL surface view's onResume() on activity onResume().
super.onResume();
mGLSurfaceView.onResume();
}
@Override
protected void onPause()
{
// The activity must call the GL surface view's onPause() on activity onPause().
super.onPause();
mGLSurfaceView.onPause();
}
}
The class MySurface :
类 MySurface :
public class MySurface extends GLSurfaceView{
public MySurface(Context context) {
super(context);
// TODO Auto-generated constructor stub
setEGLContextClientVersion(2);
setRenderer(new MyTestRenderer(getContext()));
}
}
回答by Avanz
The problem is with glSurfaceView, as it does not run on the OpenGL thread. The glSurfaceView should be on the main android thread.
问题在于 glSurfaceView,因为它不在 OpenGL 线程上运行。glSurfaceView 应该在主 android 线程上。
Here you find additional info about it:
在这里您可以找到有关它的其他信息:
opengl es api with no current context
OpenGL ES 2.0 Context in Android
Hope this help.
希望这有帮助。