如何从 OpenGL ES 中渲染的纹理读取像素

2024-01-05

我正在尝试从即时生成的纹理(RTT,渲染到纹理)中读取像素。我通过实施 Apple 建议的方法来拍摄此快照here http://developer.apple.com/library/ios/#qa/qa1704/_index.html.

这对于呈现在屏幕上的“默认”颜色缓冲区效果很好,但我无法让它适用于写入纹理的像素。

我在使用这些行时遇到问题:

// Bind the color renderbuffer used to render the OpenGL ES view
// If your application only creates a single color renderbuffer which is already bound at this point,
// this call is redundant, but it is needed if you're dealing with multiple renderbuffers.
// Note, replace "_colorRenderbuffer" with the actual name of the renderbuffer object defined in your class.
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _colorRenderbuffer);

// Get the size of the backing CAEAGLLayer
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);

问题是我没有颜色缓冲区,因为我正在渲染到纹理中。

这是我创建纹理的方法:

void Texture::generate()
{
    // Create texture to render into
    glActiveTexture(unit);
    glGenTextures(1, &handle);
    glBindTexture(GL_TEXTURE_2D, handle);

    // Configure texture
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}

以下是我如何将其链接到用于渲染的 FBO:

void Texture::attachToFrameBuffer(GLuint framebuffer)
{
    this->framebuffer = framebuffer;

    // Attach texture to the color attachment of the provided framebuffer
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, handle, 0);
}

正如您所看到的,我实际上并没有可以首先绑定的 _colorRenderbuffer 。我首先认为绑定到帧缓冲区然后执行 Apple 的代码可以解决问题,但 backingWidth 和 backingHeight 不能提供纹理的分辨率(2048x2048),而是提供场景的分辨率(320x320)。所以我想我在这里遗漏了一些东西。


在渲染成纹理之前,它需要有一些内部存储,所以你需要调用glTexImage2D在渲染之前的某个时刻(可能通过NULL作为图像数据,因此仅分配纹理图像)。

但 backingWidth 和 backingHeight 没有给我我的分辨率 质地

为什么你无论如何都想检索这些值(当然这些检索函数不会工作,因为正如它们的名字所暗示的那样,它们在渲染缓冲区上工作)。你已经知道了,因为它是you谁创建了纹理(见上文)。

一旦渲染到纹理中,您就可以调用glReadPixels就像捕获普通屏幕一样,因为您的纹理现在是帧缓冲区,所以从帧缓冲区读取像素从纹理读取像素(当然,在调用该纹理时,FBO 仍然必须绑定)glReadPixels).

这实际上是在 ES 中读回任何纹理数据的唯一方法,而 ES 没有glGetTexImage,但既然你只是渲染了它,这绝对没有问题。

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

如何从 OpenGL ES 中渲染的纹理读取像素 的相关文章

  • YUV420p 上的大量绿色 --> iOS 上 OpenGL 2.0 着色器中的 RGB

    我想使用 ffmpeg 和 OpenGL ES 2 0 为 iOS 制作一个电影播放器 但我有一些问题 输出 RGB 图像有很多绿色 这是代码和图像 480x320 宽度和高度 512x512 纹理宽度和高度 我从 ffmpeg AVFra
  • 如何使用 OpenGL ES 2.0 旋转对象?

    在 OpenGL ES 1 1 中 您可以使用glRotatef 旋转模型 但 OpenGL ES 2 0 中不存在该函数 那么 在OpenGL ES 2 0中如何进行旋转呢 为了遵循克里斯蒂安所说的 您需要自己跟踪模型视图矩阵并操纵它来执
  • 使用未声明的标识符“gl_InstanceID”

    大家好 我一直在IOS平台上尝试在OpenGLES2 0中进行实例化绘制 我的渲染代码 glEnableVertexAttribArray glVertexAttribPointer glDrawElementsInstancedEXT G
  • 渲染脚本渲染在Android上比OpenGL渲染慢很多

    背景 我想根据Android相机应用程序的代码添加实时滤镜 但Android相机应用程序的架构是基于OpenGL ES 1 x 我需要使用着色器来自定义我们的过滤器实现 然而 将相机应用程序更新到OpenGL ES 2 0太困难了 然后我必
  • 有没有任何工具可以将 PVR 纹理分割成一组图块?

    我有一张大的 png 纹理 4096x4096 我需要将其部分加载到内存中 我已经将大 png 纹理分割成 16 个 1024x1024 块 然后将它们转换为 PVR 压缩文件 问题是 当我绘制这些图块时 图块之间的边缘与 png 的边缘不
  • 安装 OpenGL ES 并编译 Android 代码

    我刚刚开始在 android 上学习 OpenGL ES 使用这本书 https rads stackoverflow com amzn click com 1430226471 并遇到了采用的问题source http apress co
  • iPhone OpenGL ES 单视图还是多视图?

    我很困惑为 iPhone 编写游戏时最好的方法是什么 游戏将使用 OpenGL 渲染 但我很好奇创建开始屏幕 菜单 高分页面等 您是否使用 OpenGL 完成所有这些操作 或者创建额外的 UIView 并使用 UIKit 我认为没有最好的方
  • 径向渐变绘制性能 - OpenGL-ES 可以改进吗?

    我正在开发一个图像处理应用程序 它将径向渐变叠加在从照片库加载的图像上 在屏幕上 我有一个滑块可以动态地增大 减小径向渐变的半径 我发现模拟器上的性能很好 但在 iPhone 3G 或 3GS 上就很糟糕了much移动滑块时重绘速度较慢 我
  • OpenGL ES 片段着色器显然不可能返回白色

    这是一个奇怪的现象 我有一个片段着色器 据我所知只能返回黑色或红色 但它将像素渲染为白色 如果我删除一根特定的线 它会返回我期望的颜色 它适用于 WebGL 但不适用于 Raspberry Pi 上的 OpenGL ES 这是着色器代码 如
  • 在 Ubuntu 中找不到 X11/Xlib.h

    我试图在 Linux 上使用 open gl 编写一个相当简单的程序 但在编译时它说 编译拇指 egl 我对 GL 完全陌生 不知道出了什么问题 快速搜索使用 apt search Xlib h 打开 libx11 dev 包 但纯 Ope
  • 为什么在 iPhone 应用程序中调用 glMatrixMode(GL_PROJECTION) 会给我 EXC_BAD_ACCESS ?

    我有一个 iPhone 应用程序 我在应用程序 DidFinishLaunching 中调用这三个函数 glMatrixMode GL PROJECTION glOrthof 0 rect size width 0 rect size he
  • Android 7 GraphicBuffer 替代方案,用于直接访问 OpenGL 纹理内存

    从移动设备具有 CPU 和 GPU 共享内存这一事实中获利的唯一方法是使用GrphicBuffer 但由于 Android 7 限制对私有本机库 包括 gralloc 的访问 因此无法再使用它 问题 是否有其他方法可以直接内存访问纹理的像素
  • Android OpenGL ES 支持无处不在?

    我需要了解如果我选择在 OpenGL 而不是 android graphics 中的 android 原生 2D 图形 API 进行绘图 我会损失多少潜在安装量 android 文档似乎暗示 OpenGL ES API 基本上在所有手机上都
  • cocos2d-iphone-2.1-beta2 中的 CCScrollLayer 问题

    您好 我遇到了最新 cocos2d beta 中 CCScrollLayer 中所述的问题 主要是在编译时我得到 use of undeclared identifier CC GL BLEND 有没有办法解决这个有人发现的问题 您可以安全
  • OpenGL-ES、iPhone 和间歇性错误:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES (0x8CD6)

    我有一个在 UIView 中使用 OpenGL ES 和 EAGLContext 的应用程序 非常类似于 Apple 的 GLPaint 示例代码应用程序 我在 iPhone 4 上看到这个错误 但在 iPad 上却没有 这可能很重要 大多
  • 丢弃对 OpenGL 中的程序性能有影响吗?

    我正在读书this http code google com p gdc2011 android opengl wiki TalkTranscript文章 作者写道 以下是如何通过两个简单的步骤在每个平台上编写高性能应用程序 遵循最佳实践
  • 纹理采样:根据LOD值计算BIAS值

    GL ES 2 0 中的功能纹理2DLod在片段着色器中不可用 我需要移植 GLSL 着色器 在 GL ES 2 0 中我只能使用二维纹理 sampler2D 采样器 vec2 坐标 浮点数bias 告诉我如何计算 a 的值bias相当于已
  • OpenGL ES 中的高效绘图方法

    在我的应用程序中 我通过 OpenGL ES Api 绘制了很多立方体 所有立方体的尺寸相同 只是它们位于空间坐标不同 我可以想到两种绘制它们的方法 但我不确定哪一种是最有效的 我不是OpenGL专家 所以我决定在这里问 方法1 这就是我现
  • 使用 OpenGL ES 绘制地球仪

    我正在尝试渲染一个地球仪 上面有地图的球体 OpenGL ES 1 1 on iOS 我能够绘制球体并绘制边界 但有一个问题 在我看来 不面向前方的线条也被绘制在屏幕上 像这样 在图片中 您可以看到美国渲染得很好 但您可以看到澳大利亚渲染在
  • iOS OpenGL ES 2.0:离屏渲染并将结果保存到 UIImage

    我正在使用 OpenGL ES 渲染一些特殊效果 我不想向用户显示这些效果 我只想将结果保存为 UIImage 有人可以帮助我吗 这是我正在使用的代码 我可以获得一个包含我使用的红色透明颜色的图像 但没有显示几何图形 import Rend

随机推荐

  • 从 Cosmos 中的 JSON 文件中选择列时发生 MapReduce 错误

    问题如下 使用 Cygnus 0 2 1 创建表后 在尝试从 Hive 选择列时收到 MapReduce 错误 如果我们看到Cygnus在hadoop中创建的文件 我们可以看到使用的格式是JSON 这个问题在以前版本的 Cygnus 中没有
  • 使用 sqlalchemy 列出索引

    是否可以使用 sqlalchemy 列出数据库中的所有索引 yes http www sqlalchemy org docs core schema html sqlalchemy engine reflection Inspector g
  • 结构内存黑客重叠对象引用 - 这可能吗?

    我猜这个问题的答案是 不可能 切换到 C 但我想无论如何我都会把它扔掉 我正在处理一个巨大的二叉树 我有一个结构数组来表示分支节点 在遍历树时 我用它来帮助确定内存的局部性 为了节省一点内存 从而提高缓存局部性 我正在考虑重叠叶节点的对象引
  • 1 个 imageview android 上的多个动画

    我有 2 个动画已经可以使用了 我想同时淡出我的火车 补间我的火车 如果我执行其中 1 行 它就会起作用 但如果我尝试同时执行这两个操作 则只有 1 个可以工作 我在这里实在找不到解决办法 也许你能帮忙 final ImageView my
  • postgres 中的主键值可以为零吗?

    我的数据库中有一个表 其中一行的 ID 等于 0 零 主键是一个序列列 我习惯于看到以 1 开头的序列 那么 如果我将此 ID 保留为零 是否会出现问题 串行数据类型创建自动递增的整数列 因此 您应该能够向该列添加任何整数值 包括 0 来自
  • Telegram API:如何保持 ApiState 来保存登录状态

    我使用了来自此来源的 telegram api https github com voleon telegram trivia bot https github com voleon telegram trivia bot但我的问题是 如何
  • Laradock 不支持 mysql

    我无法理解如何让 Laradock 与 mysql 数据库一起正常工作 我已遵循 laradock 文档并安装了所有内容 使用以下命令启动容器 docker compose up d nginx mysql 我有这样的多项目版本布局 pro
  • 如何仅加载波形并等待用户单击“播放”以在 Wavesurfer-js 上下载音频?

    在我的服务器上 我使用 Audiowaveform 从音频文件生成 JSON 数据 在前端我使用Wavesurfer JS https wavesurfer js org根据之前的JSON数据绘制波形 问题是 在页面就绪时 Wavesurf
  • 按区域设置顺序获取工作日

    我想看看我们是否可以按区域设置排列工作日 例如 在美国语言环境中 我们将从星期日开始 而法国将从星期一开始 就日历而言 为了理解它 我正在制作一个闹钟应用程序 其中工作日的闹钟会在某些日子重复 以下是我所看到的工作日未按顺序排列的 new
  • 在 Python 中生成 py.test 测试

    先提问 如果有兴趣的话再解释 在 py test 的上下文中 如何从一小组测试函数模板生成一大组测试函数 就像是 models model1 model2 model3 data sets data1 data2 data3 def gen
  • R闪亮:如何阻止sliderInput标签点击导致滚动到页面顶部?

    我注意到 每当您单击任何 R Shiny 的标签时滑块输入控制时 窗口滚动到页面顶部 为了说明这一点 请将 sliderInput 放置在页面的更下方 例如 在大块文本或图表之后 然后单击其标签 页面滚动到顶部 我该如何抑制这种行为 我有一
  • 为什么 YouTube 在 iframe 中为嵌入视频添加 type= 属性?

    当访问 YouTube 时 它 会给出一个嵌入代码 例如 请注意 type text html 不是有效的 html iframe 标签没有这样的属性 谁能解释一下谷歌为什么这么说 我想这是出于某些实际原因 但我无法猜测是什么 PS您可以通
  • C# EventLog 无法访问日志

    下面是我在运行下面的代码时遇到的异常 未找到源 但无法搜索部分或全部事件日志 无法访问的日志 安全性 代码是 if EventLog SourceExists this EventLogSource 异常的内容对我来说有意义 这就是为什么它
  • Java 中的参数多态性是什么(举例)?

    据我了解 参数多态性是一种允许对各种数据 类型 进行统一操作的技术 我的知识正确吗 这个例子是参数多态吗 我相信这是因为 Animal talk 允许调用 talk 而不管特定的动物类型 猫或狗 public interface Anima
  • 尝试在 css 中重新创建加载 gif

    我正在尝试用纯 css 重新创建以下 gif CSS在这里 http codepen io anon pen FmCaL http codepen io anon pen FmCaL 目前仅支持 webkit chrome 我试图通过使用前
  • Java中如何并行添加两个数组?

    比如有两个巨大的 长度2 3百万 的数组float or double 需要它们很快加起来 怎么做 有这方面的库吗 采用固定线程池 线程数等于处理器核心数 有多少个线程就提交多少个任务 每个任务都会接收其需要求和的索引范围 在主线程中收集所
  • Firebase 数据库迁移

    来自 SQL 背景 我想知道如何在 Firebase 中进行数据库迁移 假设我在 firebase 中有以下数据 dateFrom 2015 11 11 timeFrom 09 00 现在前端客户端将以以下形式存储和期望数据 dateTim
  • 使用参数将表单提交到操作,Asp.Net.Core Mvc

    我正在尝试通过 ajax 在 asp net core 中提交排序下拉表单 操作还有其他参数 我也想执行这些参数 但表单不提交其他参数 我认为主要问题是剃须刀的形状部分 这是我行动的一部分 public IActionResult Prod
  • 可以在没有 UIWebView 的情况下运行 javascript 吗?

    是否可以运行一些 javascript 代码 也许有一个NSString作为输入 而不使用UIWebView 我想在单独的线程中运行此代码 因此 UIWebView 是不可能的 并且我真的不想渲染任何内容 只需返回结果即可 我没有尝试过 但
  • 如何从 OpenGL ES 中渲染的纹理读取像素

    我正在尝试从即时生成的纹理 RTT 渲染到纹理 中读取像素 我通过实施 Apple 建议的方法来拍摄此快照here http developer apple com library ios qa qa1704 index html 这对于呈