首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RTT到TEXTURE_BUFFER

RTT到TEXTURE_BUFFER
EN

Stack Overflow用户
提问于 2013-10-14 12:05:59
回答 1查看 238关注 0票数 2

在一个RenderToTexture上下文中,涉及几个着色器,我需要CPU访问最终的渲染目标之一。使用glGetTexImage很好,不幸的是它将所有纹理数据复制到客户端内存中。

为了避免这种复制,我尝试使用TEXTURE_BUFFER实现RTT,从而将一个单独的缓冲区对象附加到纹理,使用该纹理作为呈现的一部分,然后使用glMapBuffer映射纹理的数据存储并使其可供CPU访问。

除了代码之外,我想问的是这样的策略是否正确(在我的脑海中没有比这更好的),或者它是否违背了任何规范。

我有很多关于TBO作为设置纹理的方法的文档,但是没有关于使用TBO来读取RTT结果的文档。我只是想知道,我想做的事在任何方面都是不合法的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-14 13:46:14

不幸的是,这种方法行不通。缓冲纹理实际上不是一个可以用作渲染目标或2D纹理过滤的开放的2D纹理,如这个相关的问题/答案对中所描述的那样。它实际上只是一个缓冲区的数据,可以作为一个线性一维整数索引数组(伪装成一种特殊的纹理)被着色器访问,因此与普通过滤后的2D纹理没有多大关系。它与OpenGL 4后来引入的阴影存储缓冲器 (但以一种更繁琐、更只读的方式,但在GL 3硬件上可用)或均匀缓冲对象 (但具有更大的大小和使用不同的内存区域)更相似。因此,不能使用TBO作为FBO中的渲染目标。

对于您来说,可能的选择是一个像素缓冲对象(PBO)。虽然这仍然需要从纹理内存复制到一个额外的缓冲区,如果使用得当,您仍然可以从异步读取、特殊主机访问内存之类的东西中获益。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19359898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档