使用OpenGL ES纹理缓存而不是glReadPixels来获取纹理数据

2023-12-19

在 iOS 5 中,引入了 OpenGL ES 纹理缓存,以提供从相机视频数据到 OpenGL 的直接方式,而无需复制缓冲区。里面有关于纹理缓存的简单介绍会议 414 - WWDC 2011 的 iOS 5 OpenGL ES 进展 http://adcdownload.apple.com//wwdc_2011/adc_on_itunes__wwdc11_sessions__pdf/414_advances_in_opengl_es_for_ios_5.pdf.

我发现了一个有趣的article http://allmybrain.com/2011/12/08/rendering-to-a-texture-with-ios-5-texture-cache-api/最终进一步滥用了这个概念并规避了对glReadPixels通过简单地锁定纹理,然后直接访问缓冲区。

glReadPixels由于 iPad 2 中使用基于图块的渲染器(即使仅使用 1x1 纹理),速度确实很慢。然而,所描述的方法似乎比glReadPixels.

文章中提出的方法是否有效?它是否可以用于增强依赖于glReadPixels?

由于OpenGL与CPU并行处理图形数据,那么应该如何处理图形数据呢?CVPixelBufferLockBaseAddress在不与 OpenGL 对话的情况下调用知道渲染何时完成?


我描述了一种这样做的方法这个答案 https://stackoverflow.com/a/9704392/19679,基于您上面链接的文章和 WWDC 2011 中 Apple 的 ChromaKey 示例。鉴于 Apple 在他们的一个示例中使用了这一点,并且我没有听到他们的 OpenGL ES 工程师对此提出反驳,我相信这是有效的使用纹理缓存。它适用于我尝试过的所有 iOS 5.x 兼容设备,也适用于 iOS 5.0 和 5.1。它比glReadPixels().

至于何时锁定像素缓冲区基地址,您应该能够使用glFlush()或类似的阻塞,直到所有数据都渲染到您的 FBO 纹理。这似乎适用于我通过纹理支持的 FBO 完成的 30 FPS 1080p 电影编码。

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

使用OpenGL ES纹理缓存而不是glReadPixels来获取纹理数据 的相关文章

  • 带约束的嵌套集合视图的意外行为 (Swift 4)

    我的表格视图中有一个单元格 其中包含水平分页集合视图 该集合视图的每个页面内都有一个垂直集合视图 为了避免 滚动滚动 问题 我在垂直集合视图中禁用了垂直滚动 垂直集合视图的单元格计数不是静态的 可以是任意数字 因此 这会产生一个问题 集合视
  • 如何将CIFilter应用到UIView上?

    根据Apple docs 过滤属性CALayer不支持iOS 当我使用正在申请的应用程序之一时CIFilter to UIView即 Splice Funimate 和 Artisto 的视频编辑器 Videoshow FX 这意味着我们可
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • 如何在Sprite Kit中实现鼠标关节?

    我已经在 iOS 上用 Cocos2d Box2d 编写了拖放功能的工作实现 我需要将它移植到 Sprite Kit 逻辑非常基本 当用户触摸屏幕时 找到手指下的精灵 在找到的精灵和场景的物理体之间创建鼠标关节 将关节的目标设置为触摸位置
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • NSUserDefaults 多久同步一次?

    的文档NSUserDefaults说synchronise方法被定期调用 但没有提及频率 10分钟的谷歌搜索没有发现任何信息 发生的频率是多少synchronise方法调用 这是一个未公开的实现细节 可能甚至不是一个恒定的时间间隔 但是 您
  • 从 IOS 应用程序注销的完美方法是什么?

    下面的代码可以工作 但有一个错误 场景是 我首先登录进入应用程序系统 登录成功后 应用程序将设置 UserDefaults UserId 之后 我可以使用存储的 UserId 导航应用程序视图 一旦我进入设置和选项卡注销 这将清除 User
  • 在 IOS 中从 iPhone 删除资产(图片或视频)

    我正在开发一个 Iphone 应用程序 我可以使用 Assetslibrary 枚举资产并将它们加载到表视图中 用户可以在应用程序中删除一行 图片 视频 但如何直接从我的应用程序更新 Iphone 相册 否则 刷新时 表视图将重新加载之前删
  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • 从 NavigationController 中删除 ViewController 后 AVPlayer 继续播放

    因此 我在项目中使用 ARC 当我添加 AVPlayerLayer 时 它工作得很好 但当我从 UINavigationItem 中弹出 UIViewController 时 视频继续在后台播放 有谁知道你会如何处理这个问题 这似乎是一件很
  • 如何右对齐 UILabel?

    Remark 实施 myLabel textAlignment right does not解决了我的问题 这不是我所要求的 我想要实现的是让标签对齐右对齐 为了更清楚地说明 这就是如何left对齐外观 就是这样justify对齐外观 if
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0
  • 从 Mac 命令行访问 iOS 应用程序目录(沙箱)

    我需要使用 Mac 或 Linux 上的命令行 非 GUI 访问 iOS 设备上安装的应用程序的沙箱目录 这有助于开发和测试自动化 将 json 文件放入沙箱中可以让我设置参数 例如额外的调试消息和更小的刷新间隔 像 iFunBox 这样的
  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • Cordova 在 iOS 中显示警告“线程警告:[您的函数]花了 [n] 毫秒”

    THREAD WARNING Console took 81 661865 ms Plugin should use a background thread 在跑步的时候iOS 手机差距项目 对于一些剩余的插件 例如地理位置和文件系统 也是
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • ios - 在哪里放置 s.static_framework = true

    我在 CocoaPods 中的级别为 0 当我使用pod install有一个错误说 The Pods App target has transitive dependencies that include static framework
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • 企业发行版在 Swift 应用程序中与 iOS8 配合不佳

    我在使用 swift 应用程序在 iOS 8 设备上运行 Enterprise 版本时遇到问题 如果我使用非企业帐户进行代码签名 它似乎工作正常 有人遇到这个问题吗 以下是我在尝试使用企业帐户运行构建以进行协同设计时在 iOS 设备上收到的
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt

随机推荐

  • iPhone 应用程序操作按钮

    我需要在我的 iPhone 应用程序中添加一个操作按钮 单击该按钮时 需要弹出带有按钮的 UIActionSheet 谁能告诉我如何添加操作按钮 意味着 iPhone 应用程序有内置操作按钮吗 或者我们是否需要创建一个带有图像的新按钮 提前
  • 在 pinescript 中向警报添加变量

    我想在 pine 脚本中对 TradingView 中的多只股票使用相同的警报条件 问题是我不知道哪只股票触发了警报 除非我创建脚本的副本并为每个脚本提供自定义消息 我想要这样的东西 alertcondition someCondition
  • 相当于 Java 中的 C++ map.lower_bound

    我的问题很基本 但我自己找不到解决方案 我习惯用C 编写算法 在那里我经常使用std map结构 以及它提供的所有辅助方法 此方法将迭代器返回到映射的第一个元素 其中键 gt 作为参数给出的键 例子 map
  • 如何在解决方案中找到未使用的 NuGet 包?

    如何在解决方案中找到未使用的 NuGet 包 我有很多解决方案 其中有很多已安装的软件包 并且其中很大一部分被标记为有更新 但是 我担心可能会发生重大更改 因此我首先想通过删除任何未使用的软件包来进行清理 ReSharper 2016 1
  • 如何使用 Javascript、PHP 等将 html + CSS 页面转换为 pdf? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 但请记住我需要一个免费的图书馆它不会干扰我的网页的 CSS 并轻松转换我的网页的某些部分 我使用了 J
  • 经典 ASP 页面自动将 IE 8 中的 Quriks 模式设置为默认模式

    查看 HTML 时 IE 8 将默认文档模式设置为 IE8 标准 但它会在 ASP 页面上进入怪异模式 即使我使用 这并没有什么帮助 我应该怎么办 我要做的第一件事是将相同的输出放入 HTM 文件中并访问它 如果你得到不同的结果 那么确实发
  • terraform 支持数学舍入吗?

    是否可以在 terraform 字符串插值中舍入整数值 这有点像黑客 不使用 terraform 字符串插值 但是 您可以使用外部数据源 https www terraform io docs providers external data
  • SOAP HTTPS 测试获取类转换异常(字符串到整数)

    我正在使用 HTTPS 上的独立应用程序测试 SOAP 请求 我已经从 WSDL 创建了所需的类 使用 wsimport 我已经使用一些模拟值填充了对象值 令人惊讶的是 我的所有 XML 值都在 String 中 但我收到一个类转换异常 为
  • npm test 未检测到 jenkins 中新的测试文件更改

    Jenkins jest 和 CI 我使用 create react app 创建了一个 React APP 并使用 JEST 进行测试 我在创建的 app test js 文件中做了一些新的更改 并提交给 git hub 当我运行 npm
  • 捕获 Excel 数据透视表刷新事件

    是否有与数据透视表的数据刷新相对应的事件 我已经找到了 worksheet pivottableupdate 事件 但这似乎每次我更改过滤器或操作数据透视表时都会被调用 这在我的宏中非常频繁 我需要的只是捕获底层数据何时更新 有办法做到这一
  • 隐式运算符和类型转换器是否等效?

    在我看来 实现隐式运算符与 TypeConverter 似乎非常容易 因此我假设它们并不等效 因为框架中 TypeConverters 的流行 请参阅扩展 FrameworkElement 的任何内容 但为什么 创建 string gt o
  • 通过 HTTP 传输文件的 Response.TransmitFile 的替代方案

    我正在开发一个允许用户下载文件的 ASP NET 网站 以前 文件存储在与网站相同的服务器上 因此我们可以执行以下操作 Response Clear Response AddHeader Content Disposition attach
  • WinForms - 本地化 - UI 控件在其他文化中的位置不同

    我做了 UI 设置 原始语言是英语 之后我将 Localized 属性设置为 True 将原始 resx 文件复制到 frmMain de De resx 例如 翻译所有字符串 一切正常 但现在我想改变控件的位置 之后变化可见only原始
  • React-native --variant 选项

    可能的值是什么 variant选项除了release 它记录在哪里 我在反应本机文档中找不到 我应该指定这个选项吗debug or devDebug调试构建的价值 thanks 只有两个选择 release and debug 默认vari
  • 如何从文本文件中删除 ^M 并将其替换为下一行

    假设我有一个包含以下内容的文本文件 Hello what is up M M What are you doing 我想删除 M并将其替换为下面的行 所以我的输出看起来像 Hello what is up What are you doin
  • 为所有用户添加一个键到 HKEY_CURRENT_USER

    我有一个安装程序 它在 HKEY CURRENT USER 上安装一个密钥 当我运行安装程序时 它仅将其添加到正在安装的用户上 有没有办法一次性为所有用户添加密钥 Thanks 你必须遍历所有不同的用户HKEY USERS 这需要更高的权限
  • 使用 ls 按一定顺序 scp 文件

    每当我尝试 SCP 文件 在 bash 中 时 它们最终都会以看似随机 的顺序出现 我找到了一种简单但不太优雅的方法来保持所需的顺序 如下所述 有聪明的方法吗 Edit 从这里删除了我早期的解决方案 使用其他建议进行清理 调整 并添加为下面
  • 如何在Linux中创建名称以破折号开头的文件? (例如“-文件”)

    如何在 Linux 中使用命令行创建名为 file 的文件 在其前面指定一个路径 例如 file
  • 从 GCP HTTP 函数调用启动后台进程的最佳方式?

    所以 根据这里的文档https cloud google com functions docs writing http https cloud google com functions docs writing http 终止 HTTP
  • 使用OpenGL ES纹理缓存而不是glReadPixels来获取纹理数据

    在 iOS 5 中 引入了 OpenGL ES 纹理缓存 以提供从相机视频数据到 OpenGL 的直接方式 而无需复制缓冲区 里面有关于纹理缓存的简单介绍会议 414 WWDC 2011 的 iOS 5 OpenGL ES 进展 http