当前位置: 首页 > 知识库问答 >
问题:

GLSURFACHEVIEW有时在蜂窝上显示黑色,在IC上工作

伏子辰
2023-03-14

[编辑:已修复!问题似乎是布局xml中有一个不可见的视频视图覆盖了我的GLSURFACHEVIEW。从布局中删除视频视图将恢复预期的行为。]

[编辑#2:使GLSurfaceView使用ARGB888也应该解决这一问题(我认为不能混合具有不同颜色格式的曲面),因为这样做是为了在视频上显示GL。]

我成功地使用了GLSurfaceView,但在Android 3.2平板电脑上发现了一个奇怪的问题。GLSURFACHEVIEW活动使用AndroidManifest强制横向定位。如果以纵向方向从现有活动启动,屏幕将旋转,GLSURFACHEVIEW将按预期工作。如果我从横向活动开始,GLSURFACHEVIEW为黑色。这不仅仅是纹理问题,glClearColor和通过GLDrawArray填充实心三角形都不可见。

>

  • 如果我旋转屏幕(在删除manifest指令后手动旋转,或通过setRequestedOrientation(带或不带manifest指令)旋转屏幕,它将开始工作。

    如果按“上一步”按钮,我会在活动退出时看到预期的渲染GLSurfaceView。

    如果启动新活动(设置活动),则仅当设备处于横向时,我会在启动新活动和按后退按钮返回到GLSURFACHEVIEW活动时看到预期渲染的GLSURFACHEVIEW闪烁片刻(然后屏幕再次变黑)。如果我将设备置于纵向模式,然后启动“设置”活动,我看不到GL闪烁,但在按下“后退”之前旋转到纵向,我确实看到GLSURFACHEVIEW活动恢复时闪烁。

    我在模拟器中看不到这种行为,也没有在Android4.0.4手机上看到这种行为。

    我在onCreate中创建GLSurfaceView,并将其添加到布局xml中的FrameLayout中。

    我正在从相应的活动方法调用GLSurfaceView pause和resume方法。以下是我的onSurfaceCreated和onSurfaceChanged处理程序:

    public final static void onSurfaceCreated(GL10 pGL) {
        pGL.glClearColor(0.5f, 0.5f, 0.5f, 1f);
    
        pGL.glEnable(GL10.GL_TEXTURE_2D);
    
        pGL.glEnable(GL10.GL_BLEND);
        pGL.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
    
        pGL.glShadeModel(GL10.GL_FLAT);
        pGL.glDisable(GL10.GL_DEPTH_TEST);
    
        pGL.glDisable(GL10.GL_DITHER);
        pGL.glDisable(GL10.GL_LIGHTING);
    }
    
    public final static void onSurfaceChanged(GL10 pGL, int pWidth, int pHeight) {
        pGL.glViewport(0, 0, pWidth, pHeight);
    
        pGL.glMatrixMode(GL10.GL_PROJECTION);
        pGL.glLoadIdentity();
        pGL.glOrthof(0f, pWidth, 0f, pHeight, -1f, 1f);
        pGL.glMatrixMode(GL10.GL_MODELVIEW);
    }
    

    下面是我如何设置GLSurfaceView:

        mGLSurfaceView = new GLSurfaceView(pContext);
        mGLSurfaceView.setEGLConfigChooser(false);  // no depth buffer
    
        mGLSurfaceView.setRenderer(this);
        mGLSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR);
    

    我添加了日志来验证onSurfaceCreated和onSurfaceChanged(具有预期的大小),以及onDrawFrame是否被调用。

    我发现有人在TabHost中使用GLSURFACHEVIEW生成了类似的报告,但没有很好的分辨率:https://groups.google.com/forum/?fromgroups#!topic/android开发者/fXPfgw6AoeY

    我一直在尝试请求焦点、无效、请求布局等组合,但没有成功。我希望这里有人能帮我看到光明!

  • 共有1个答案

    鲁才艺
    2023-03-14

    回答我自己的问题:修复!问题似乎是布局xml中有一个不可见的视频视图覆盖了我的GLSURFACHEVIEW。从布局中删除VideoView将恢复预期的行为。

     类似资料:
    • 我的问题是,当添加一个. GIF到JPanel时,它显示这个. GIF的黑色正方形背景。 在 JPanel 上添加时的结果: 当我使用这一行时就会发生: 然而,当我在JFrame上添加相同的.GIF时,黑色方块不再存在。这样地: 在JFrame上添加时的结果: 部分类代码: 有人能解释一下为什么会发生这样的事情吗?谢谢你的时间和阅读。 编辑: 这就是第一个图像中显示的JPanel,没有JLabel

    • 蜂窝利用 目前,我们已经知道了如何在头单元上运行代码,前提是你能用USB设备(劫持)来连接汽车或访问车内的Wi-Fi(利用D-BUS漏洞/功能)。最大的问题是,这些入侵方法都要么需要接触到汽车,要么就需要攻击者加入到车上的Wi-Fi热点。 如果能加入到车内的Wi-Fi热点并进行漏洞利用是非常让人激动的,因为这就说明我们已经远程入侵了一辆原装汽车,但是,对我们来说,这其中的前提和限制还是太多了。首先

    • 我尝试在我的主题中设置以下内容,但似乎并没有改变什么:

    • 如何在android中禁用/启用蜂窝网络?我需要在短时间内完全禁用它,因为我有android 4.4飞行模式很难使用。 是否可以编写仅禁用蜂窝网络的代码?

    • 我正在为平台游戏做教程,但我的Pygame窗口显示一个黑屏。 我不知道怎么解决这个问题。 我尝试再次关闭和打开Visual Studio Code,但没有任何结果。

    • 我在试着编一个纸牌游戏。我有一个像雪碧片一样的系统来获得个人卡。这是我的Deck类的代码(没有一些函数): 当我在自己的JPanel类上绘制单个ImageIcons或大BuffereImage时,所有内容都是黑色的。当我尝试将TYPE\u INT\u RGB更改为ARGB时,图像会变得完全透明且没有大小。jpg版本的图像也会出现这种情况。我尝试了g.drawImage(…,frame);g、 dr