Android、OpenGLES、CmdLine 工具,获取 MainDisplay 分辨率

2023-11-29

环境

  • Windows (x64) 主机
  • Android 5.0 USB 连接到 Windows 机器
  • 三星盖乐世 5
  • 可视化GDB
  • OpenGL (v1.4)
  • ADB CmdLine 工具 => 本机 C++(无 Java)

Use-case

实现一个提取主显示分辨率的 ADB 命令行工具(这是工具功能的一部分)

下面的代码打印乱码数据, 如何使用作为 ADB 命令行工具运行的 Native C++ 代码获取主显示分辨率?

代码片段

HRESULT GetMainDisplayResolution(OUT SIZE& sz) {
    EGLConfig pConfigs[MAX_CONFIGS] = { 0 };
    EGLint iErr = 0;
    EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
    if (0 == display)
        return E_FAIL;
    int maj, min;
    if (FALSE == eglInitialize(display, &maj, &min)) {
        iErr = eglGetError();
        return E_FAIL;
    }

    EGLint iCfgCount = 0;
    if (FALSE == eglGetConfigs(display, pConfigs, MAX_CONFIGS, &iCfgCount)) {
        iErr = eglGetError();// EGL_NOT_INITIALIZED
        return E_FAIL;
    }

    for (int i = 0; i < iCfgCount; i++) {
        eglGetConfigAttrib(display, pConfigs[i], EGL_HORIZONTAL_RESOLUTION, (EGLint*)&sz.cx);
        eglGetConfigAttrib(display, pConfigs[i], EGL_VERTICAL_RESOLUTION, (EGLint*)&sz.cy);
        printf("Cfg %i, x:%i, y:%i", i, sz.cx, sz.cy);
    }

    return S_OK;
}

EGL 无法访问显示器本身。它从窗口管理器获取一个窗口,然后由 SurfaceFlinger 与其他东西合成。架构描述如下here.

如果您不介意使用非公共 API,并且您以“shell”或“root”身份运行(作为 ADB 命令,您将这样做),您可以执行某些测试代码的操作并查询直接显示 SurfaceFlinger 的属性。看一眼窗面。 (如果您想查看实际代码,可以在附近找到经典的“San Angeles”演示。)WindowSurface 被添加到 Android 5.0“Lollipop”中,取代了试图绕过 SurfaceFlinger 的旧实现(这需要关闭 Android 框架) )。新的实现只是借鉴了正在运行的内容。

The screenrecord工具使用相同的 SurfaceComposerClient API 来确定如何调整视频大小(参见第 540 行)。如果您想要的只是分辨率并且实际上并不关心 EGL,那么这是一个更简单的示例。

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

Android、OpenGLES、CmdLine 工具,获取 MainDisplay 分辨率 的相关文章

随机推荐

  • Qt - 如何在多个平台上保存配置文件

    我正在编写一个 Qt 应用程序 需要将一些设置保存到用户的配置目录中 我想出了以下代码来获取此文件夹 ifdef Q WS WIN path QDir homePath Application Data Timely else path Q
  • excel vba选择表格范围

    我想选择一个表 它将有固定的列 其中 4 个 但可以有任意数量的行 也可以有空行 我将如何选择表格范围 例如 当前选择是B2 to E5 我怎样才能在VBA中以编程方式获得这个 以下是如何设置对表的引用 你应该观看 Excel VBA 简介
  • 基于通配符替换字符串的 SQL 查询

    我想在我的 WP 数据库上运行此类查询以删除 id more 的所有跨度实例 UPDATE wp posts SET post content REPLACE post content p span span p 但在我的示例中 more
  • 如何使用适配器在按钮单击时添加 ListView 项目

    如何获取在 EditText 中输入的数据并通过单击该窗口中的 提交 将其添加到以前的活动列表视图项目中 我需要做的是 创建 EditText 和提交按钮 在同一个 Activity 中创建列表视图 通过单击提交按钮 它应该在列表视图中显示
  • Cobertura 显示正确的覆盖范围,但在声纳中许多文件显示 0% 覆盖范围

    I have write multiple JUnit test classes for my project The code covergae is 80 when I see it in Eclipse using cobertura
  • 执行 sqlalchemy 存在查询

    我无法理解如何执行查询来检查 sqlalchemy 中是否已存在匹配的记录 我可以在网上找到的大多数示例似乎都引用了我没有的 会话 和 查询 对象 这是一个简短的完整程序 说明了我的问题 1 使用 person 表设置内存中的sqlite数
  • 将“Dialog”小部件的宽度设置为 Vaadin 14 中页面的百分比

    在瓦丁 14 中 Dialog当指定宽度和高度时 小部件可以正确打开px CSS 虚拟 像素 Dialog dialog new Dialog dialog setCloseOnEsc true dialog setCloseOnOutsi
  • 在 Yii2 中禁用单个操作的 CSRF 验证

    有没有办法对控制器的某些操作禁用 CSRF 验证 同时对其他操作保持启用状态 就我而言 我有几个可配置的 Action 类 它们旨在注入到控制器中 我无法将 csrf 验证令牌传递到 AJAX 请求中 因为我正在使用的东西是前端的外部 不是
  • NetBeans 7.0 的 Java UML 自动生成 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我需要为我的项目制作 UM
  • Git:仅在将外部分支合并到主分支时防止快进合并

    为了方便查看功能分支何时合并到 master 可以使用 Git 的 no ff将其功能分支合并到主分支时的选项 无需键入即可完成此操作的一种方法 no ff是完全禁用快进合并到 master 中 git config branch mast
  • HTML5画布颜料混合颜色工具

    你好 我需要创建混合颜色工具 我尝试从画布中获取颜色像素getImageData并与我选择的颜色混合并获得平均颜色 我可以轻松获得它 r1 red channel from getImageData g1 green channel fro
  • 从 WP_Query 中排除 WooCommerce 产品类别

    我将以下参数定义为查询的一部分 args apply filters woocommerce related products args array post type gt product author gt artist post st
  • 使用 AutoMapper 的集成测试无法初始化配置

    框架和包 NETCoreApp 1 1 Xunit 2 2 0 AutoMapper 6 0 2 Microsoft AspNetCore TestHost 1 1 1 Microsoft NET Test Sdk 15 0 0 集成测试
  • Android:无法播放mp4视频

    我正在尝试玩mp4 视频流使用本机从服务器视频查看 遗憾的是我不断收到 无法播放视频 error 奇怪的是 同一个视频在 Froyo 上播放得很好 但在 HoneyComb 上却无法播放 我用 MX Video Player 在 HC 上
  • Java邮件性能

    我一直在使用 javamail 从 IMAP 服务器 当前是 GMail 检索邮件 Javamail 非常快地从服务器检索特定文件夹中的消息列表 仅 ID 但当我实际获取消息 仅信封 甚至不包含内容 时 每条消息大约需要 1 到 2 秒 快
  • Oracle 的 Sonarqube Web UI 配置文件管理速度很慢

    在虚拟化环境 生产 上安装带有 Oracle 的 SonarQube 与具有相同发行版的其他安装相比 配置文件管理非常慢 当许多配置文件在此架构 虚拟化 Linux Oracle 上使用时 我将不胜感激有关此功能的响应时间的一些反馈 下面的
  • nextjs POSt API 无法在实时环境中工作,但在本地工作完美

    我最近开始学习使用 Nextjs 构建 Web 应用程序 因此我决定构建一个简单的应用程序来玩弄和学习 我在本地开发 一切都很完美 但是 当我部署到 vercel 时 POST 功能不起作用 该应用程序非常简单 它在主页上显示一些数据 并且
  • 计算大数的方差

    我还没有真正使用过方差计算那么多 而且我不太知道会发生什么 事实上我的数学一点也不好 我有一个包含 1000000 个 0 10000 范围内的随机数值的数组 该数组可能会变得更大 因此我使用 64 位 int 进行求和 我试图找到有关如何
  • ReactJS:[Home] 不是 组件。 的所有子组件都必须是

    单击 开始测验 按钮时 我试图导航到 quiz 但是 当我编译代码时 我在网站应用程序上收到以下错误 Home is not a
  • Android、OpenGLES、CmdLine 工具,获取 MainDisplay 分辨率

    环境 Windows x64 主机 Android 5 0 USB 连接到 Windows 机器 三星盖乐世 5 可视化GDB OpenGL v1 4 ADB CmdLine 工具 gt 本机 C 无 Java Use case 实现一个提