java - Android Studio 上的 setEGLContextClientVersion(3) 导致错误

标签 java android android-studio opengl-es

我一直在关注 Android OpenGL tutorial 上使用带有 Java Dev Kit 1.8.0 和 SDK 版本的 Android Studio 2.1.3 API 24 (Android 7.0 Nougat) 并且我无法通过 setEGLContextClientVersion(3) 将 OpenGL ES 上下文 # 设置为 3.0| .

这样做会产生以下结果:

09-01 11:02:46.526 6822-6839/? E/AndroidRuntime: FATAL EXCEPTION: GLThread 149 Process: com.example.opengl, PID: 6822 java.lang.IllegalArgumentException: eglChooseConfig failed at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:852) at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1023) at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1400) at 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;
    }
}

还值得注意的是,我有 android:glEsVersion="0x00030000"在我的Manifest并拥有 import android.opengl.GLES30对于需要 GLES30/20 的文件一切顺利,前提是(2)已设置。

如果我应该添加任何其他代码或信息,请告诉我。

最佳答案

有时,您正在开发或运行应用程序的手机不支持 OpenGLES 版本 3。检查这一点的方法是首先使用 OpenGLES 2,看看是否有错误。然后如果它有效,这意味着您的手机不支持 OpenGLES 3

关于java - Android Studio 上的 setEGLContextClientVersion(3) 导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39278541/

相关文章:

android - 手动安装 Android SDK 工具 - Google Play 服务

android - 在 Android Studio 上导入模块

java - 我应该多次使用同一个 key 吗?

java - 将 Java 连接到 MySQL 数据库

java - 即使我用代码执行此操作,复选框也未选中

android - *.so 库从包含 *.jar 涉及 UnsatisfiedLinkError

c# - Xamarin 商店信息

java - 在 Java 中实现指数移动平均线

php - 使用移动网页检测 Android 应用程序是否已安装在设备上 - PHP 和 JS

java - 错误:null value in entry: streamOutputFolder=null OR Error:null value in entry: streamOutputFolder=null