lex*_*nka 5 java android opengl-es android-studio
我一直在使用 Android Studio 2.1.3 和 Java Dev Kit 1.8.0 以及API 24 (Android 7.0 Nougat) 上的 SDK 版本来遵循 Android OpenGL教程,但我无法通过.setEGLContextClientVersion(3)
这样做会产生以下结果:
09-01 11:02:46.526 6822-6839/?E/AndroidRuntime:致命异常:GLThread 149 进程:com.example.opengl,PID:6822 java.lang.IllegalArgumentException:eglChooseConfig 在 android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:852) 在 android.opengl 失败。 GLSurfaceView$EglHelper.start(GLSurfaceView.java:1023) 在 android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1400) 在 android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239)
使用setEGLContextClientVersion(2)效果非常好,并且显示出所需的形状。我尝试调整我的Triangle& Square.java文件中的着色器以3.0在尝试时进行匹配setEGLContextClientVersion(3),但无济于事。
我还尝试使用setEGLConfigChooser(8, 8, 8, 8, 16, 4)我所看到的建议来解决类似的错误。
我还尝试重新启动 Android Studio 和我的模拟器,即 Android TV(1080p) API 24、Android TV(1080p) API 22 和 Galaxy Nexus API 22。
下面是我的MyGLSurfaceView.java代码 - 同样,如果我调整setEGLContextClientVersion(3)为(2),一切都会按预期运行。
package com.example.opengl;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.view.MotionEvent;
class MyGLSurfaceView extends GLSurfaceView {
private final MyGLRenderer mRenderer;
public MyGLSurfaceView(Context context) {
super(context);
//Create an OpenGL ES # context
setEGLContextClientVersion(3);
setEGLConfigChooser(8 , 8, 8, 8, 16, 4);
mRenderer = new MyGLRenderer();
setRenderer(mRenderer);
}
private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
private float mPreviousX;
private float mPreviousY;
@Override
public boolean onTouchEvent(MotionEvent e){
//MotionEvent reports input details from the touch screen
// and other input controls. In this case, you are only
// interested in events where the touch position changed.
float x = e.getX();
float y = e.getY();
switch(e.getAction()) {
case MotionEvent.ACTION_MOVE:
float dx = x - mPreviousX;
float dy = y - mPreviousY;
//reverse direction of rotation above the mid-line
if(y > getHeight()/2) {
dx = dx * -1;
}
//reverse direction of rotation to left of the mid-lin
if(x<getWidth()/2) {
dy=dy * -1;
}
mRenderer.setAngle(mRenderer.getAngle()+((dx+dy)*TOUCH_SCALE_FACTOR)); // = 180.0f / 320
requestRender();
}
mPreviousX = x;
mPreviousY = y;
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
还值得注意的是,我有android:glEsVersion="0x00030000"我的Manifest和有import android.opengl.GLES30需要的文件,只要设置好,GLES30/20一切都会顺利运行。(2)
如果我应该添加任何其他代码或信息,请告诉我。
有时,您正在开发或运行应用程序的手机不支持 OpenGLES 版本 3。检查这一点的方法是首先使用 OpenGLES 2,看看是否有错误。然后有效,这意味着您的手机不支持 OpenGLES 3
| 归档时间: |
|
| 查看次数: |
4443 次 |
| 最近记录: |