c++ - 写入纹理数组的一层并从另一层读取

标签 c++ opengl textures

我目前正在 OpenGL 3D 引擎中实现深度剥离。我想将值存储在深度 2D 纹理数组中。该算法在第 n 次执行时,需要读取 n-1 层,如果当前值更大(对象较远),则将当前值插入第 n 层。但是,我们不应该能够在同一纹理中读取和写入。

是否可以从中读取(仅第 n-1 层)并将第 n 层附加为当前 FBO 的深度附件?

最佳答案

However, we are not supposed to be able to read and write in the same texture.

谁说的?

Textures存储图像s。注意复数。不禁止读取和写入相同的纹理。禁令反对reading from and writing to the same image.

阵列纹理包含多个图像。每个数组层都是它自己的二维图像(或一组二维贴图图像)。因此,从一个阵列层读取并写入另一阵列层是完全合法的。从数组层中的一个 mipmap 读取并写入同一数组层中的另一个 mipmap 是完全合法的。

相同数组层的相同 mipmap 上读/写是不合法的。

这就是为什么如果同一纹理附加到 FBO 同时绑定(bind)到渲染上下文以供读取,OpenGL 不会报错的原因。只要您确保您不是在读取/写入同一图像,这是合法的。

关于c++ - 写入纹理数组的一层并从另一层读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294358/

相关文章:

c++ - 来自 std::unordered_set<char> 的有效构造 std::string

java - 使用处理实现用于聚光的 GLSL 着色器

c++ - 摄像头和图像识别

c++ - 使用委托(delegate)调用 C++ 函数时 VS2015 应用程序崩溃

c++ - iostream 迭代器如何工作?

c++ - friend 类对象可以在其成员函数中访问派生类对象的基类私有(private)成员吗?

android - LibGDX 纹理不会在 Android 4.3 上绘制

c++ - IBO 比 GL_TRIANGLE_STRIP 还差?

opencv - 如何使用 Kinect 和 opencv 组合和显示深度和 rgb 图像

opengl - 在 OpenGL 中渲染到纹理数组的一层