20181220_eglSwapBuffers详解

2023-11-09

eglSwapBuffers详解

问题来自eglSwapBuffers是否有等待,如果调用eglSwapBuffers的话,是不是会导致帧率下降?

2.7.1 BootAnimation中的调用

之所以需要了解这个api的具体实现,因为我们需要了解eglSwapBuffers是否有等待Fence

首先看下在BootAnimation中对于这个函数的调用:

        EGLBoolean res = eglSwapBuffers(mDisplay, mSurface);

        if (res == EGL_FALSE)

            break;

故名思意,通过这个函数来实现buffer的互换,可是这个互换的buffer是怎么来的呢?

通过对代码的跟踪,可以知道,在bootanimationreadyToRun()函数中,会来创建mSurface

    surface = eglCreateWindowSurface(display, config, s.get(), NULL);

因为我们没有GPU驱动的代码,所以,我们可以从libagl中看出一点端倪。

查看这部分代码,建议将如下几部分的sourcecode导入到sourceinsight中。

l  frameworks/native/opengl/libagl

l  frameworks/base/cmds/bootanimation

l  frameworks/core/libpixelflinger

2.7.2 eglCreateWindowSurface

egl.cpp中,eglCreateWindowSurface就是对应函数createWindowSurface的接口封装。

surface = eglCreateWindowSurface(display, config, s.get(), NULL);

 

EGLSurface eglCreateWindowSurface(  EGLDisplay dpy, EGLConfig config,

                                    NativeWindowType window,

                                    const EGLint *attrib_list)

{

    return createWindowSurface(dpy, config, window, attrib_list);

}

 

 

在介绍createWindowSurface之前,先来看看window,这个window到底是什么。

bootanimation.cpp中有这样的一个调用逻辑:

    // create the native surface

sp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),

sp<Surface> s = control->getSurface();

 

sp<SurfaceControl> SurfaceComposerClient::createSurface(

        const String8& name,

        uint32_t w,

        uint32_t h,

        PixelFormat format,

        uint32_t flags)

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

20181220_eglSwapBuffers详解 的相关文章

  • glDeleteTextures在Windows上似乎没有释放纹理内存,有没有解决办法?

    我的 openGL 应用程序内存不足 遇到一些问题 我正在尝试找出我的问题 为此 我创建了一个小型测试程序 它基本上只是从调用 glDeleteTextures 的文件中加载一个巨大的纹理 然后再次加载它 如果我在 OSX 上运行这个测试程
  • GLSL聚光投影体积

    在我的开源项目中 我使用 Qt3D 设置了延迟渲染管道 到目前为止一切顺利 但现在我想通过添加聚光灯投影量来继续前进 例如场景中好像有烟雾 像这样 我正在使用的片段着色器位于问题的末尾 我读过 对于每个片段 我应该从光位置进行光线行进并找到
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • 无法在 Linux 的 NetBeans 中编译 C++ 和 OpenGL (GLFW) 的简单源代码

    我开始学习 OpenGL glfw 我从教程中复制源代码并尝试编译它 但出现了错误 我想我已经正确安装了所有头文件 glm glfw 等 这是我的来源 我没有在头文件中使用这些字符 include iostream include stdi
  • OpenGL 缓冲区、glFlush 和 glutSwapBuffers()

    使用之间有什么区别吗 glutInitDisplayMode GLUT SINGLE GLUT RGB with glFlush and glutInitDisplayMode GLUT DOUBLE GLUT RGB with glutS
  • SDL 程序中颜色关闭

    我目前正在开发一个非常简单的游戏 使用纯 C 方法和 SDL 及其官方额外库 如 SDL image 和 OpenGL 现在 虽然我遇到了一些障碍 但我不知道为什么要这样做 绘制时颜色全部关闭 我目前在 Mac 上运行该程序 但如果我没记错
  • OpenGL 新手: glutMouseFunc

    我试图在单击鼠标后更改球体位置 但在使用 glutMouseFunc 中的 x 和 y 时它不起作用 以下是代码 include stdafx h include
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • OpenGL/GLSL - 纹理过滤的实现

    我想在 GLSL 着色器中自己实现纹理过滤 min 和 magfilter 因为我想使用 image load and store 而不是采样器 而且我想以特殊方式处理未定义的像素 并且我正在寻找一篇文章或者这样讨论过滤过程 我记得如何从我
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 并排显示图像的一半 - OpenGL

    我为两个图像创建了两个纹理 现在我想在opengl中按图像2的左侧部分 完整的图像1 图像2的右侧部分的顺序显示该纹理 我已经做了如下 Image1 显示在 opengl 屏幕的中央 但屏幕的左右部分不正确 应分别显示 image2 的左侧
  • 如何在 Moderngl EGL 后端添加深度缓冲区?

    此代码渲染一个带有抗锯齿功能的彩色三角形 samples 8 当深度缓冲线depth attachment ctx depth texture 512 512 samples 8 被评论 但是当我添加深度缓冲区时 它会在绑定处返回 GL 错
  • 改进OpenGL粒子系统

    我正在寻找一种提高粒子系统性能的方法 因为它在 FPS 方面的成本非常高 这是因为我打电话 glDrawElements GL TRIANGLE STRIP mNumberOfIndices GL UNSIGNED SHORT 0 我为应用
  • Pygobject GTK3 中 Gtk.GLArea 的使用

    Gtk3 的 python 包装器的使用文档有些有限 我找到了几个常见的小部件示例 我正在尝试使用 Gtk GLArea 小部件 API 文档是针对 C 的 我没有太多运气猜测使用这个小部件的等效 python 调用 在示例中 小部件是使用
  • 如何在 Qt4 OpenGL 应用程序中启用 HiDPI (Retina) 支持?

    我正在使用带有 QGraphicsView 的 QGraphicsScene 如中所述这个文件 https doc qt io archives qq qq26 openglcanvas html 我打算最终将 Qt 小部件覆盖在我的 Op
  • opengl:向纹理添加更高分辨率的 mipmap

    每当我想在 opengl 中使用 mipmap 时 我需要上传最高分辨率位图作为 mipmap 级别 0 然后上传较高 mipmap 级别的较低分辨率位图 我希望能够添加更高分辨率的 mipmap 以及更低分辨率的 mipmap 目前我知道
  • 使用 OpenGL 进行子弹调试抽屉

    我已经摆弄了子弹一段时间 现在我想绘制调试 我有一个 opengl 世界 具有有效的子弹物理和一切 我尝试过的是这样的 我创建了一个像这样的 GLDebugDrawer 类 include LinearMath btIDebugDraw h
  • 如何将 OpenGL 数学 (GLM) 添加到 Xcode 4?

    我不知道如何将框架添加到我的项目中 我尝试像任何其他框架一样添加它 方法是单击 链接二进制文件与库 下的加号按钮 然后单击 其他 然后选择 GLM 文件夹 但是当我去包含它时 自动完成功能可以工作 但无法构建 因为它说找不到该文件 图书馆网
  • 如何获取片段的当前颜色?

    我正在尝试了解 GLSL 中的着色器 并且找到了一些有用的资源和教程 但我一直在寻找一些应该是基本且微不足道的东西 我的片段着色器如何检索当前片段 你通过说设置最终颜色gl FragColor whatever 但显然这是一个仅输出值 如何
  • 纹理映射和光照顶点着色器错误 Java OpenGL

    我正在尝试将纹理映射到 3D 立方体并尝试编写着色器以使其具有照明和纹理 我尝试过只编写纹理着色器并且它有效 我还尝试过仅将 3D 值设置为红色的照明着色器 并且该照明着色器也可以工作 但当我尝试将两者结合起来时 我遇到了问题 我在下面提供

随机推荐

  • 循环单链表的销毁操作

    循环单链表销毁的时候 我的代码开始是这样子的 Status DestroyList L LinkList L 销毁链表 Lnode p while L p L L L gt next delete p return OK 不出意外的报错了
  • vue 弹窗 多选表格组件封装 以及 回调绑定

    组件
  • CUDA Toolkit多版本安装与配置

    CUDA Toolkit多版本安装目的是为了将CUDA Toolkit支持多个版本 并将当前版本更新到后续支持常见pytorch的版本 即cuda11 6 目前该系统默认安装的是cuda10 2 cuda11 0和cuda11 2 CUDA
  • layui折叠面板无效 - 已解决

    出现折叠面板无效 可能因为一下两点造成的 原因一 原因二 具体是为什么 我不清楚 正确的方式
  • Unity:给角色和敌人加上血条

    横条血条 想法 1 创建一个画布 画布里面包含血条 HealthBar 空对象 Fill image 血条填充物 Border image 血条框 Heart image 心脏图标 2 为HealthBar对象添加HealthBar脚本和S
  • 速腾聚创雷达最新驱动安装(包含ring和timestamp)运行lio-sam

    记录一下搞slam的过程 ring和timestamp 最近想跑lio sam 需要用到ring和timestamp两个参数 lio sam作者用的velodyne雷达是带这两个参数的 但是rs雷达的老版驱动录制的点云包没有这两个参数 在g
  • pandas分析数据的案例

    1 pandas分析电影数据的案例 https blog csdn net houyanhua1 article details 87858575
  • 共享停车位

    随着代步车的普及 对停车位的需求日益增长 停车位的供应跟不上汽车保有量的快速增长 地段有限 停车场有限 停车位有限 停车难已经成为当今 城市病 中最难解决的一环 随着共享经济的发展 错时停车的提出和实施也逐渐被大众接受 通过物联网创新技术实
  • 服务器自动备份怎么做,服务器运维技巧分享,用backup为数据库做定时备份

    写了套网站 除了日志需要定时分割外 数据库还需要定时备份 如果你用的是云服务器自带的备份功能 会更简单些 但也需要自行购买数据库服务器 对于像我这种还在初期的系统来说 能减少服务器的开支就一定要减少 毕竟现在还不挣钱 安装 用的是ruby
  • Ubuntu20 安装Ceres库和g2o库

    此文章主要适配视觉SLAM十四讲 Ubuntu20 04的情况 建议Ceres版本为2 0 0 g2o库为最新版 安装Ceres库 安装依赖 sudo apt get install liblapack dev libsuitesparse
  • JsonNode与java相互转换

    将Jackson JsonNode数组转换为Java List string JsonNode jsonNode getJsonPayload JsonNode partial jsonNode path someArrayField Li
  • 动态规划(C语言)

    一 入门 以斐波那契数列为例 它的第一项为1 第二项为1 从第三项开始 每一项的值都是前面两项的和 让我们求第n项的是多少 对于这个问题 我们从最开始的递归思想来看 int fib int n if n 1 n 2 return 1 ret
  • js对象的属性用中括号表示

    中括号运算符总是能代替点运算符 但点运算符却不一定能全部代替中括号运算符 中括号运算符可以用字符串变量的内容作为属性名 点运算符不能 中括号运算符可以用纯数字为属性名 点运算符不能 中括号运算符可以用js的关键字和保留字作为属性名 点运算符
  • RISC-V、ARM和X86架构

    1 要了解X86 ARM和RISC V架构的区别 就得先了解复杂指令集 CISC 和精简指令集 RISC A X86使用的是复杂指令集 CISC ARM和RISC V使用的是精简指令集 RISC 这便是属于这几种架构之间最大的区别 狭义的x
  • javaweb使用Thymeleaf 最凝练的CRUD项目-上

    目录 最凝练的CRUD 1 建模 物理建模 逻辑建模 2 总体架构 3 搭建持久化层所需环境 导入jar包 创建jdbc properties 创建JDBCUtils工具类 BaseDao 4 搭建表述层所需环境 导入jar包 创建View
  • 力扣(19) - 跳跃游戏

    给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例 1 输入 nums 2 3 1 1 4 输出 true 解释 可以先跳 1 步 从下标 0
  • a*算法的优缺点_轻松理解机器学习算法-朴素贝叶斯

    1 预备知识 贝叶斯定理 Bayes theorem 是概率论中的一个定理 它跟随机变量的条件概率以及边缘概率分布有关 通常事件A在事件B发生的条件下的概率 与事件B在事件A发生的条件下的概率是不一样的 然而这两种是有确定关系的 这种关系就
  • ASP.NET Core 简介

    NET Core 是 NET Framework 的新一代版本 是微软开发的第一个具有跨平台 Windows Mac OSX Linux 能力的应用程序开发框 ASP NET Core 是 Microsoft 新开发的 基于 NET Cor
  • JSON

    数据提取之JSON与JsonPATH JSON JavaScript Object Notation 是一种轻量级的数据交换格式 它使得人们很容易的进行阅读和编写 同时也方便了机器进行解析和生成 适用于进行数据交互的场景 比如网站前台与后台
  • 20181220_eglSwapBuffers详解

    eglSwapBuffers详解 问题来自eglSwapBuffers是否有等待 如果调用eglSwapBuffers的话 是不是会导致帧率下降 2 7 1 BootAnimation中的调用 之所以需要了解这个api的具体实现 因为我们需