我正在学习OpenGlEs for android。我正在尝试执行一个非常基本的清除屏幕程序。但是我没有执行。 以下是我的计划。
MainActivity
package com.learning.opengl;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.pm.ConfigurationInfo;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity {
private GLSurfaceView glSurfaceView;
private boolean rendererSet = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
glSurfaceView = new GLSurfaceView(this);
final ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
final boolean supportGlEs2 = configurationInfo.reqGlEsVersion >= 0x2000;
if(supportGlEs2){
glSurfaceView.setEGLContextClientVersion(2);
//glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
glSurfaceView.setRenderer(new CustomRenderer());
rendererSet = true;
Toast.makeText(this,"The Version is :"+(configurationInfo.reqGlEsVersion >= 0x2000),Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(this,"This device does not support OpenGL ES 2.0", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(rendererSet)
{
glSurfaceView.onResume();
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if(rendererSet)
{
glSurfaceView.onPause();
}
}
}
CustomRenderer
package com.learning.opengl;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import static android.opengl.GLES20.GL_COLOR_BUFFER_BIT;
import static android.opengl.GLES20.glClear;
import static android.opengl.GLES20.glClearColor;
import static android.opengl.GLES20.glViewport;
import android.opengl.GLSurfaceView.Renderer;
public class CustomRenderer implements Renderer{
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
} glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
glClear(GL_COLOR_BUFFER_BIT);
我在Android清单文件中没有任何权限。当我在真实设备Motox上执行此程序时
我收到了以下错误
05-24 14:49:21.396: E/Adreno-ES20(10379): <gl_external_unsized_fmt_to_sized:2379>: QCOM> format, datatype mismatch
05-24 14:49:21.396: E/Adreno-ES20(10379): <get_texture_formats:3009>: QCOM> Invalid format!
我用Google搜索了一下。但没有运气。
谢谢。
答案 0 :(得分:0)
我认为您使用来自reqGlEsVersion
的{{1}}的测试不符合您的意图。它提供了您在清单中请求的版本的值。如果您未在清单中指定ES 2.0,则测试将失败。
如果您打算仅支持ES 2.0,请确保在清单中包含此内容:
ConfigurationInfo
如果您确实打算支持多个OpenGL版本,则需要进行不同的运行时测试。 http://developer.android.com/guide/topics/graphics/opengl.html上的“检查OpenGL ES版本”部分解释了如何执行此操作。总之,您有两种选择: