OpenGL ES 2.x:有什么方法可以重用深度缓冲区进行离屏和屏上渲染?

2023-12-02

我正在进行双通道渲染,第一通道我渲染到纹理,第二通道我渲染到屏幕。

我在两次渲染过程中渲染相同的多边形,但使用不同的着色器。特别是,第二遍使用着色器,该着色器将第一遍生成的纹理作为参数。

目前,我的第一遍有一个帧缓冲区,其中包含用于颜色附件的纹理和用于深度附件的渲染缓冲区(模板已禁用),而第二遍则渲染到默认帧缓冲区 (0)。

我突然想到,由于我在第 2 通道中渲染完全相同的多边形,因此深度缓冲区最终看起来与第 1 通道深度缓冲区相同。如果我能以某种方式将 pass-2 深度缓冲区初始化为 pass-1 的深度缓冲区,那么我就可以将深度测试函数更改为 GL_LEQUAL,并避免 pass-2 片段着色器的大量不必要的工作。此通道也可以禁用深度写入。

那么...有什么方法可以执行以下操作之一吗?

  • 创建我自己的帧缓冲区,它使用屏幕的深度缓冲区(但仍将颜色写入纹理)
  • 将我自己的渲染缓冲区附加到默认帧缓冲区的深度附件

我能想到的唯一解决方法(我还没有尝试过,所以我不知道这会对性能产生什么样的影响)是让第二遍也渲染到纹理,然后进行第三遍这只是将纹理“传输”到屏幕上。


从阅读OpenGL® ES 通用配置文件规范版本 2.0.25看来这两者都不可能。

第 4.4.2 节说:

可附加帧缓冲区的图像可以附加到或分离 应用程序创建的帧缓冲区对象。相比之下,的图像附件 OpenGL ES 可能无法更改窗口系统提供的帧缓冲区.

(强调我的)所以问题中的第二个选项是不可能的。

第 4.4.3 节表明第一个选项也不可能......

无法使用以下命令创建渲染缓冲区对象 名字为零。如果渲染缓冲区为零,则先前与目标的任何绑定都会被破坏 并且目标绑定恢复到初始状态。

在初始状态下,保留名称零绑定到RENDERBUFFER。有 没有与名称零对应的渲染缓冲区对象,因此客户端尝试修改 或查询目标的渲染缓冲区状态RENDERBUFFER当零被束缚时 产生错误。

...虽然这不太明确。不清楚是否还有其他 可用于引用默认帧缓冲区的名称 渲染缓冲区,尽管很难想象什么名字会带来更多 意义大于 0,因为它在其他地方用作默认值。

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

OpenGL ES 2.x:有什么方法可以重用深度缓冲区进行离屏和屏上渲染? 的相关文章

  • OpenGL (ES 2.0) 动态改变线宽

    我目前正在使用大量的工具绘制模型GL LINES全部在统一的半径内 我知道glLineWidth将改变半径all线 但它们各自应该有不同的半径 我想知道是否可以使用glLineWidth 以不同的方式 或其他功能 我还应该怎么做呢 将它们渲
  • Android:了解 OnDrawFrame、FPS 和 VSync (OpenGL ES 2.0)

    一段时间以来 我在 Android 游戏中遇到了运动精灵间歇性 卡顿 的情况 这是一个非常简单的 2D OpenGL ES 2 0 游戏 这是一个持续存在的问题 我已经多次重新访问过 在我的游戏循环中 我有 2 个 计时器 一个用于记录前一
  • Google 的 Android OpenGL 教程是否教授了错误的线性代数?

    在帮助另一位用户解决有关该问题的问题后响应触摸事件 http developer android com training graphics opengl touch htmlAndroid教程 我下载了源代码 并且对我所看到的感到非常困惑
  • 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 上却没有 这可能很重要 大多
  • 为什么单个 Vec4 乘法会大大减慢我的 ogl es 2 片段着色器的速度?

    我正在为 iOS 设备编写 2D OpenGL 游戏 现在 我正在研究 iPad 第一代 上的性能 该游戏有 ogl 1 1 和 2 0 的代码路径 我可以通过 define 使用 ogl 2 0 时 分析器告诉我 我的渲染器利用率 相当稳
  • OpenGL ES 2.0 屏幕闪烁

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

    所以我一直在 Android 上使用 OpenGL ES 2 0 但现在遇到了一个我无法解决的问题 提前道歉 看来我还不能发布两个以上的链接 所以我把我的三张图片放在 Photobucket 相册中 我正在尝试创建一个由透明区域 彩色玻璃
  • 使用 OpenGL ES 绘制地球仪

    我正在尝试渲染一个地球仪 上面有地图的球体 OpenGL ES 1 1 on iOS 我能够绘制球体并绘制边界 但有一个问题 在我看来 不面向前方的线条也被绘制在屏幕上 像这样 在图片中 您可以看到美国渲染得很好 但您可以看到澳大利亚渲染在
  • Android,触摸屏时 jni 中的 openGL 滞后

    我目前正在 Android 平台上测试我的游戏所需的所有功能 我只修改了 hello gl2 示例代码 并在两个渲染通道中添加了一些纹理 VBO FBO 和简单着色器 问题是 当我让应用程序在不触摸屏幕的情况下运行时 我的帧速率约为 35
  • Android opengl在绘制调用后修改顶点数组

    在opengl中 绘制顶点数组后这是不好的做法还是不建议修改它 It s not如果在将顶点数组绘制为普通顶点数组时修改它 这是一种不好的做法 It s如果在绘制方法中使用顶点缓冲区对象 则修改顶点数组是不好的做法 这是因为编辑后您必须将其
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • 三星 S4 上的 Open GL 错误配置错误

    我在 Samsung S4 上收到以下错误 10 21 16 25 44 100 E AndroidRuntime 29778 FATAL EXCEPTION GLThread 11320 10 21 16 25 44 100 E Andr
  • 允许使用 SurfaceTexture 在 GLSurfaceView 渲染器中进行多通道渲染

    我正在显示视频GLSurfaceView使用需要连续应用多个着色器的自定义渲染器 目前 它可以成功地使用一个着色器 但我不确定如何扩展渲染管道以连续应用多个着色器 我知道有一些关于应用多个着色器的示例 使用FrameBuffers and
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • GLSurfaceView onDrawFrame 清除行为

    我在使用 GLSurfaceView 时遇到了不同的行为 据我所知 程序有责任清除每帧的缓冲区 颜色和深度 这意味着 如果我不清除缓冲区 我将获得最后一帧的内容 或双缓冲的前一帧 似乎无论在某些设备上如何 缓冲区都会被清除 我在一些测试设备
  • 改进OpenGL粒子系统

    我正在寻找一种提高粒子系统性能的方法 因为它在 FPS 方面的成本非常高 这是因为我打电话 glDrawElements GL TRIANGLE STRIP mNumberOfIndices GL UNSIGNED SHORT 0 我为应用
  • opengl es api 没有当前上下文

    我已经浏览了解决方案 但还没有真正找到解决方案 我收到此错误是因为执行似乎发生在 gl 线程之外 但是我不知道如何解决这个问题 代码如下 public shape super vertexShader Shader loadShader G
  • 带着色器的 HUD (opengl-es 2.0)

    如何在opengl es 2 0上使用着色器绘制HUD 我有一个在屏幕上绘制纹理四边形的着色器 它使用 MVP 矩阵 四边形有自己的顶点 独立于视图位置等 MVP 矩阵的原因 Matrix frustumM mProjMatrix 0 ra
  • 纹理大小的限制?安卓 Open GL ES 2.0

    我想知道可用于任何 Android Opengl Es 2 0 项目的纹理大小是否有任何限制 据我所知 尺寸为 4096x4096 的巨大纹理意义不大 因为它是在小屏幕上渲染的 但是 如果要求是在运行时在许多纹理之间切换怎么办 如果我想要一

随机推荐

  • 如何使用 SSIS 将大型平面文件加载到数据库表中?

    我不确定它是如何工作的 所以我正在寻找正确的解决方案 我认为 SSIS 是正确的方法 但我以前从未使用过它 设想 每天早上 我都会收到一个包含 800K 记录的制表符分隔文件 我需要将其加载到我的数据库中 从 ftp 或本地获取文件 Fir
  • 在浏览器中 Flash 至全屏

    如何使我的 Flash 应用程序在浏览器中处于全屏模式 我知道舞台可以置于该模式 但是当我在任何浏览器中运行应用程序时 这不起作用 那么 这是可以做到的 但是如何做到呢 在包含 Flash SWF 的 HTML 中 将以下参数添加到 标记中
  • 我应该如何使用 Django 中的电子签名 Web 应用程序的邀请和收件人来构建数据库实体?

    我有兴趣为我的电子签名 Web 应用程序实现以下要求 用户可以创建新的签约合同 该合同可以包括多个用户来签署 合约创建者需要提供emails的收件人 每个收件人都会分配额外的数据 例如签名详细信息 说明等 但是 受邀请的用户仍然可以系统中不
  • 为 XNA 游戏实现简单的基于 XML 的脚本语言

    我正在与一个团队合作使用 C 和 XNA 开发 RPG 引擎 我们计划针对 Windows 和 Windows Phone 7 但在过场动画期间遇到 AI 交互和控制玩家操作的问题 大多数情况下 所有内容都是使用 MVC 设计模式提取的 但
  • 在公共块中拥有全局变量是未定义的行为吗?

    0 c int i 5 int main return i 1 c int i 上面编译得很好gcc 0 c 1 c没有任何链接错误multiple definitions 原因是i生成为common blocks fcommon whic
  • ASP.NET MVC 中使用 SSL 操作过滤器重定向循环

    我正在使用 ActionFilter 见下文 来检测 1 当前控制器 操作是否需要 SSL 以及 2 当前正在使用 SSL 并相应地重定向 这在本地工作正常 在 IIS 7 中使用虚拟证书 但是一旦我在服务器上启动它 我就会收到一条错误 指
  • 在 Android 中发送 HTML 格式的电子邮件

    我已经成功创建了一个 Android 应用程序 它可以计算价格 然后能够以预先格式化的方式将该数据传输到用户选择的电子邮件程序 根据用户在应用程序中创建的数据 包含 HTML 的字符串将被读入意图 我为此的代码是 final Intent
  • 模拟使用外部类的方法,mockito

    我对mockito很陌生 只是想了解它是如何工作的 我有一个方法想要测试 该方法实例化多个类以使用其方法 e g methodToTest class1 c1 new class1 class2 c2 new class2 class3 c
  • TypeScript 条件返回值类型?

    function f x boolean string return x f true boolean string 为什么打字稿不能理解返回值是布尔值 function f x boolean string return typeof x
  • 如何将多维数组传递到 CodeIgniter 中的视图

    这真是让我抓狂了 我将多维数组传递给这样的视图 res this gt deliciouslib gt getRecentPosts 正如你所看到的 这是我正在使用的美味 API result 是一个数组 print r result 给出
  • 同步异步队列

    我计划有一个基于异步队列的生产者 消费者实现来处理实时数据 其中以正确的时间顺序发送数据至关重要 这是它的代码片段 async def produce Q n jobs for i in range n jobs print f Produ
  • 你建议不要使用基于 javascript 的 LESS 吗?

    After I 观看了这个 NetTUTs 视频 我对尝试所示的 LESS js 方法非常感兴趣 除了显而易见的问题之外 如果用户没有启用 javascript 怎么办 或 性能将会受到轻微影响 这是否有原因不能在生产中使用 LESS 本质
  • 如何强制多态中的隐式转换?

    请考虑这个例子 我们如何在第二个参数是指向成员函数的指针的函数中强制隐式转换 在函数的参数列表中显式转换并不是我现在想要实现的目标 相反 我希望编译器以某种方式这样做 就像使用第一个参数一样 struct Base virtual Base
  • java.lang.NoClassDefFoundError:android.support.v7.appcompat.R$styleable

    我正在使用终端 不是 eclipse 我在使用时遇到以下异常错误emulator debug成功并安装成功 但模拟器显示Unfortunatly app has stop 然后我跑 adb logcat它将显示以下内容 java lang
  • Eclipse 变得疯狂(自从 SDK Lollipop 更新以来)

    我好几天都写不出代码了 当我尝试编辑布局时 Eclipse 通常会返回此错误 并创建新项目 新的 xml 文件 尝试运行项目 解析Sdk内容失败java lang ExceptionInInitializerError 解析Sdk内容失败无
  • C 中 *myptr++ 和 *(myptr++) 有什么区别

    我正在使用C 假设我有一个指向名为 myptr 的整数的指针 int myptr 那么以下之间有什么区别 myptr and myptr 谢谢 担 Since 优先级高于 有没有不同两者之间
  • PHP 5.2.14 的 DateTime::CreateFromFormat [重复]

    这个问题在这里已经有答案了 我使用以下代码将用户输入转换为 mysql 时间戳 datetime DateTime createFromFormat m d Y g i a exp timestamp datetime gt format
  • 使用 Google Calendar API (PHP) 插入包含非 ASCII 字符的事件

    我在使用 Google Calendar API PHP v3 插入事件时遇到问题 如果事件的说明包含井号 等字符 则会在日历中创建该事件 但说明留空 似乎对于初始 7 位字符代码 ASCII 代码 0 127 之外的所有字符都是如此 通过
  • 更新 chromium 版本后量角器问题

    我刚刚更新了我的 chromium 版本 getAttribute 总是返回 null 有人知道为什么吗 在此更新之前工作正常 CHROMIUM REVISION 884014 element by id elementId getAttr
  • OpenGL ES 2.x:有什么方法可以重用深度缓冲区进行离屏和屏上渲染?

    我正在进行双通道渲染 第一通道我渲染到纹理 第二通道我渲染到屏幕 我在两次渲染过程中渲染相同的多边形 但使用不同的着色器 特别是 第二遍使用着色器 该着色器将第一遍生成的纹理作为参数 目前 我的第一遍有一个帧缓冲区 其中包含用于颜色附件的纹