代码之家  ›  专栏  ›  技术社区  ›  composer314

Android SurfaceView Emulator OpenGL错误

  •  7
  • composer314  · 技术社区  · 7 年前

    在运行简单代码绘制SurfaceView时,我在Android Emulator中遇到了几个OpenGL错误。因此,SurfaceView在emulator中运行时不会绘制。相同的代码在设备上正确运行(在本例中,是Amazon Fire HD 8(2017-KFDOWI))。

    以下是错误:

    模拟器:android/android emugl/host/libs/Translator/GLES\u V2/GLESv2Imp。cpp:glReadPixels:2827错误0x502

    仿真程序:sprepareeteximage2d:3087验证失败

    模拟器:android/android emugl/host/libs/Translator/GLES\u V2/GLESv2Imp。cpp:glTexImage2D:3133错误0x500

    仿真程序:sprepareeteximage2d:3087验证失败

    模拟器:android/android emugl/host/libs/Translator/GLES\u V2/GLESv2Imp。cpp:glTexImage2D:3133错误0x500

    模拟器:android/android emugl/host/libs/Translator/GLES\u V2/GLESv2Imp。cpp:glTexSubImage2D:3237错误0x500

    代码如下:

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.util.AttributeSet;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    
    public class CustomSurfaceView extends SurfaceView implements SurfaceHolder.Callback  {
    
        private SurfaceHolder surfaceHolder;
    
        public CustomSurfaceView(Context context) {
            super(context);
            init();
        }
    
            public CustomSurfaceView(Context context, AttributeSet attributeSet) {
            super(context, attributeSet);
            init();
        }
    
        private void init() {
            this.surfaceHolder = getHolder();
            surfaceHolder.addCallback(this);
        }
    
        @Override
        public void surfaceCreated(SurfaceHolder surfaceHolder) {
            Canvas canvas = surfaceHolder.lockCanvas();
            canvas.drawColor(Color.RED);
            surfaceHolder.unlockCanvasAndPost(canvas);
        }
    
        @Override
        public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
        }
    
        @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        }
    }
    

    活动:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="MainActivity">
    
        <CustomSurfaceView
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </android.support.constraint.ConstraintLayout>
    

    系统信息:

    • MacOS High Sierra 10.13.2
    • 16 GB RAM
    • Android Studio 3.0.1
    • JRE 1.8.0\u 152
    • HAXM 6.2.1

    AVD信息:

    • API 25
    • 图形:自动
    • 内存:1536 MB

    应用程序信息:

    • API 26
    • 最小SDK:19

    此外,我可以在同一个模拟器中运行OpenGL ES 2.0代码,而不会出现这些问题。

    1 回复  |  直到 7 年前
        1
  •  6
  •   muro    7 年前

    禁用硬件加速。

    [打开虚拟设备配置->编辑虚拟设备->使用软件模式图形]