OpenGL ES 2.0 屏幕闪烁

2024-06-01

我面临着一个大问题。我正在使用带有 Android 4.0.3 的 Transformer tf101 选项卡。

我的应用程序使用自定义 OpenGL ES 2.0 表面。我正在用纹理渲染多个平面。该纹理大约发生变化。每秒 20 次,并通过传递字节数组进行更新。但是,在某些情况下,屏幕开始闪烁并且不渲染新纹理。其他 UI 元素仍然具有响应能力并按预期工作。 OpenGL 上下文似乎忽略了所有命令并且没有响应。

发生这种情况时,我的 logCat 中会显示几行:

08-20 10:31:15.390: D/NvOsDebugPrintf(2898): NvRmChannelSubmit: NvError_IoctlFailed with error code 1

其次是

08-20 10:31:15.390: D/NvOsDebugPrintf(2898): NvRmChannelSubmit failed (err = 13, SyncPointValue = 879005, returning = 0)

其中一些:

08-20 10:31:15.390: D/NvOsDebugPrintf(2898): NvRmChannelSubmit failed (err = 196623, SyncPointValue = 0)

这是我创建纹理平面的方法:

    m_nTextureStorage[0] = 0;

    GLES20.glGenTextures( 1, m_nTextureStorage, 0);
    GLES20.glActiveTexture( GLES20.GL_TEXTURE0 );
    GLES20.glBindTexture( GLES20.GL_TEXTURE_2D, m_nTextureStorage[ 0 ] );

    // Set filtering
    GLES20.glTexParameterf( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST );
    GLES20.glTexParameterf( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST );
    GLES20.glTexParameteri( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE );
    GLES20.glTexParameteri( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE );

这是我画它的方法:

GLES20.glEnable(GLES20.GL_TEXTURE_2D);
        GLES20.glEnable(GLES20.GL_DEPTH_TEST);
        GLES20.glActiveTexture( GLES20.GL_TEXTURE0 );

        //GLES20.glUniformMatrix4fv(m_HMVPMatrixUniform, 1, false, mvpMatrix, 0); 
        GLES20.glUseProgram( m_nProgramHandle );
        ByteBuffer oDataBuf = ByteBuffer.wrap( m_sTexture );

        m_HTextureUniform = GLES20.glGetUniformLocation( m_nProgramHandle, "uTexture" );
        m_HTextureCoordinate = GLES20.glGetAttribLocation( m_nProgramHandle, "TexCoordinate" );
        GLES20.glUniform1iv( m_HTextureUniform, 2, m_nTextureStorage, 0 );

        // get handle to the vertex shader's vPosition member
        m_nPositionHandle = GLES20.glGetAttribLocation( m_nProgramHandle, "vPosition" );


        // Prepare the triangle data
        GLES20.glTexImage2D( GLES20.GL_TEXTURE_2D, 0, GLES20.GL_LUMINANCE, 640, 480,
                             0, GLES20.GL_LUMINANCE, GLES20.GL_UNSIGNED_BYTE, oDataBuf );

        // Prepare the triangle data
        GLES20.glVertexAttribPointer( m_nPositionHandle, 3, GLES20.GL_FLOAT, false, 12, m_oVertexBuffer );
        GLES20.glEnableVertexAttribArray( m_nPositionHandle );

        GLES20.glVertexAttribPointer( m_HTextureCoordinate, 2, GLES20.GL_FLOAT, false, 12, m_oTextureBuffer); 
        GLES20.glEnableVertexAttribArray( m_HTextureCoordinate );

        m_nMVPMatrixHandle = GLES20.glGetUniformLocation( m_nProgramHandle, "uMVPMatrix");

        // Apply the projection and view transformation
        GLES20.glUniformMatrix4fv( m_nMVPMatrixHandle, 1, false, mvpMatrix, 0);

        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 6);

OpenGL 渲染器只需通过传递 mvpMatrix 来调用我的 TexturedPlane 的绘制函数。我不会删除任何纹理,因为我读到 Android 系统会自动处理这个问题。

我认为这与 GPU OOM 有关,但我不确定,因为我没有找到与发布的错误消息相关的任何内容。

谢谢它提前!

UPDATE:

渲染模式设置为RENDER_WHEN_DIRTY。更改为之后RENDERMODE_CONTINOUSLY问题消失了..奇怪。由于这只是一种解决方法,没有解决方案,所以我仍在寻求帮助;)

连续保持渲染模式是不可能的,因为这会消耗大量处理器时间并且没有意义,因为只有在生成新纹理时才需要渲染。


终于找到了解决办法。

当我在每个渲染循环后调用 glFlush() 时,它工作正常。我没有在不同的纹理通道上渲染每个平面,到目前为止它工作得很好。谢谢您的帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL ES 2.0 屏幕闪烁 的相关文章

  • Android val 无法重新分配

    我定义了一个名为notes的变量 当我尝试从方法修改它时 android studio说 val 不能重新分配 但是 如果我像这样访问变量 我可以修改它 this notes class NoteAdapter var context Co
  • 如何使网页视图与其内容一样大?

    我在网上找不到这个 我有很多网络浏览量HorizontalScrollView 我希望它们全部适合其内容 然后可能具有不同的宽度 更多 我给那些充气webviews像这样 LinearLayout layout LinearLayout g
  • 如何在 Android 中获取 SD 卡上文件夹的大小?

    是否可以轻松获取SD卡上文件夹的大小 我使用文件夹来缓存图像 并希望显示所有缓存图像的总大小 除了迭代每个文件之外 还有其他方法吗 它们都位于同一个文件夹中 只需浏览所有文件并将它们的长度相加即可 Return the size of a
  • GridView 的行中列宽不同

    我有一个 GridView 需要在其中显示图像 我应用了以下逻辑 If 1 Photo 1 row and 1 col and full width image If 2 Photos 1 row and 2 cols with equal
  • MPAndroidChart - 饼图的所有部分都是相同的颜色

    我正在使用 MPAndroidChart https github com PhilJay MPAndroidChart https github com PhilJay MPAndroidChart 库来生成饼图 我遵循了多个教程 包括
  • 将长文本分成页面供viewpager使用

    我正在实施中的messureText方法这个问题 https stackoverflow com a 22199847 3930169在 viewpager 中渲染之前将长文本分成指定大小的页面 我正在使用增量字符数进行 while 循环以
  • 如何限制可以选中的复选框数量? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 尝试在空对象引用上调用接口方法“...”

    我正在开发一个具有蓝牙功能的应用程序 我使用片段来扫描并列出蓝牙设备 单击时 会回调提供所选蓝牙设备的主要活动 我从使用 Android 6 API 23 的智能手机开始 然后必须调整代码以用于 Android 5 0 API 21 我刚刚
  • 在 Android 上以编程方式输入 *#*#4636#*#* 等密码

    在许多 Android 设备上 您可以通过键入以下内容从 电话 应用程序进入秘密设置菜单 4636 http technology headlines com 2010 09 17 4636 android secret codes htt
  • 如何创建像Foursquare兴趣选择屏幕一样的gridview?

    我正在创建一个应用程序 要求用户选择多个兴趣 我正在尝试创建一个类似于 Foursquare 兴趣选择的屏幕类似于标签云其中可以选择多个按钮来代表用户的兴趣 我尝试创建一个 gridview 但无法实现按钮换行到下一行的效果 有没有办法通过
  • 无法按宽度包装任意行数的类似块引用的 TextView

    I need to render a quote block of arbitrary length The text must be aligned to the left while the block itself aligned t
  • 设置画廊间距的任何值都会禁用 onKeyEvent

    当用户单击左侧或右侧按钮时 我试图使图库以动画向左或向右滚动 如果我使用下面的代码调用 keyevent 来滚动图库 效果会很好 gallery onKeyDown KeyEvent KEYCODE DPAD LEFT new KeyEve
  • SQLite CursorWindow 限制 - 如何避免崩溃

    我必须执行查询并将结果存储在列表中 我使用的函数如下 List
  • 在 KtorClient 的 DefaultRequest 中声明 ContentType = Application.Json 后,我可以更改特定请求的 ContentType 标头吗

    我正在开发我的 android 项目 我正在创建一个请求函数来上传文件 该函数发出如下请求 httpClient put uri body MultiPartFormDataContent formData append file file
  • 将 Dagger 与 Espresso 一起使用

    我计划在我的应用程序多模块上创建 Espresso 测试 并且我即将创建第一个 Espresso 测试 但我看到的是 在我的应用程序上我没有AppComponent我可以在哪里伪造它 由于我想在我的功能模块上添加测试 我将创建TestApp
  • android项目中视频文件放在哪里

    我有一个视频 我需要知道放置在哪里以及如何获取该视频的路径 我知道如何从 URL 添加视频 Uri uri Uri parse www abc com myVid mp4 videoView VideoView findViewById R
  • 菜单项标题未显示

    菜单项的标题未显示在片段内 我在菜单文件中有两个项目 第一个是带有图标和标签的showAsAction always在工具栏中显示图标 第二个只有标题 我不知道这里出了什么问题 菜单项的所有操作均有效 例如下面 菜单 销售 xml menu
  • 让 DrawerLayout 在 ActionBar 上滑动

    我在活动中有一个滑动抽屉菜单 其中有一个带有一些选项卡的操作栏 我想让滑动抽屉滑过标签 而不是滑过标签下方 这就是现在的样子 关于如何做到这一点有什么想法吗 注意 我知道我可能会在这里打破一些约定和 UI 模式 如果它根本不起作用 我会考虑
  • 如何在 Android 键盘中包含建议

    我正在开发 Android 软键盘 我已经创建了键盘布局 但不知道如何包含在 EditText 中键入一些单词时出现的建议 例如 如果我写 在 中 已知 和 已知 将显示在建议中 所以我的问题是 1 如何在 Android 软键盘中包含建议
  • 将文本文件写入 SD 卡失败

    我遇到了一个奇怪的问题 我的应用程序可以将一个简单的文本文件写入 SD 卡 有时它对某些人有效 但对其他人无效 我不知道为什么 对于某些人来说 如果他们输入一些字符 例如 在文件等中 我似乎无法重现它 因为我没有遇到任何麻烦 但这是处理文件

随机推荐

  • 使用 powershell 编辑 XML

    好吧 我感觉自己像个大白痴 为了工作中的管理目的 我使用 Powershell 已经有一段时间了 也就是说 编写脚本不是我的强项 现在 我正在尝试编写一个 PS 脚本 将一个部分添加到一堆机器上的 XML 中 以添加设置来解决我们在某个应用
  • Jetpack Compose 部分或开放侧边框

    我正在尝试绘制部分或一侧开放的矩形圆形边框以实现此效果 玩了一下之后我得到了这个 这是通过以下方式完成的 RoundedCornerShape topStartPercent 50 bottomStartPercent 50 start R
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • 覆盖hadoop中的log4j.properties

    如何覆盖hadoop中的默认log4j properties 如果我设置 hadoop root logger WARN console 它不会在控制台上打印日志 而我想要的是它不应该在日志文件中打印 INFO 我在 jar 中添加了一个
  • 如何在服务器上保存用户凭据以在后台运行查询

    背景 我们有一个 ASP NET Silveright Web 应用程序 silverlight客户端显示用户 图形形式的特定数据 它从服务器请求数据 问题 由于服务器必须执行底层数据库查询 获取这些数据的成本很高 因此客户端必须等待 优化
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 如何在 ionic2 中 pop() 之后重新加载 ion-page

    我有2页Page1 and Page2 我用过this nav pop 在Page2中 它将弹出Page2 Page1将启用 但我想刷新Page1 先感谢您 您可以将父页面与导航推送一起传递 这样您就可以将父页面作为 navParamter
  • 没有适用于机器人的 Laravel 会话

    我在大型 Laravel 项目和 Redis 存储方面遇到问题 我们将会话存储在 Redis 中 我们已经有 28GB 的 RAM 然而 它的运行速度仍然相对较快 达到了极限 因为我们有来自搜索引擎机器人的大量点击 每天超过 250 000
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 允许 iframe 跨域链接到目标父框架

    我有 2 个域 域 1 上的一个页面使用 iframe 加载域 2 中的内容 如何允许来自domain2 iframe 内 的链接在domain1 的完整父框架中打开 我一直在关注IE和w3c的新沙箱属性 http www w3 org T
  • ruby 包含问题

    class Foo def initialize a puts Hello a end end module Bar def initialize b puts b World end end class Sample lt Foo inc
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 为什么我们应该在 def __init__(self, n) -> None: 中使用 -> ?

    我们为什么要使用 gt in def init self n gt None 我读了以下摘录来自 PEP 484 https www python org dev peps pep 0484 the meaning of annotatio
  • 累计非重复计数

    我正在查询每天获取 uid 的累计不同计数 示例 假设有 2 个 uid 100 200 出现在日期 2016 11 01 并且它们也在第二天出现 新的 uid 300 100 200 300 出现在 2016 11 02 此时我希望商店累
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 全局变量是 None 而不是实例 - Python

    我正在处理Python 中的全局变量 代码应该可以正常工作 但是有一个问题 我必须使用全局变量作为类的实例Back 当我运行应用程序时 它说 back is None 这应该不是真的 因为第二行setup 功能 back Back Back
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • ormlite 将日期读取为 'yyyy-MM-dd'

    我需要读取给我的 sqlite 数据库 因此我无法更改表中的日期格式 yyyy MM dd 当我尝试使用 ormlite 为我生成对象时 使用以下注释 DatabaseField columnName REVISION DATE dataT
  • OpenGL ES 2.0 屏幕闪烁

    我面临着一个大问题 我正在使用带有 Android 4 0 3 的 Transformer tf101 选项卡 我的应用程序使用自定义 OpenGL ES 2 0 表面 我正在用纹理渲染多个平面 该纹理大约发生变化 每秒 20 次 并通过传