sách gpt4 ai đã đi

opengl - OpenGL/OpenGLES 中的帧缓冲区纹理行为

In lại 作者:行者123 更新时间:2023-12-02 06:49:40 28 4
mua khóa gpt4 Nike

在 OpenGL/ES 中,在实现渲染到纹理功能时,您必须小心,不要引起反馈循环(从正在写入的同一纹理中读取像素)。由于显而易见的原因,当您读取和写入纹理的相同像素时,行为是未定义的。但是,如果您正在读取和写入同一纹理的不同像素,这也是未定义的行为吗?一个例子是,如果我试图制作一个内部有渲染纹理的纹理图集。当我渲染到纹理时,我从存储在纹理图集中的另一个纹理读取像素。

由于我没有在纹理中读取和写入相同的像素,因此行为仍然被认为是未定义的,只是因为数据来自相同的纹理?

1 Câu trả lời

However, is it also undefined behavior if you are reading and writing to different pixels of the same texture?

Đúng.

缓存是这里的大问题。当您写入像素数据时,它不一定会立即写入图像。写入存储在缓存中,以便可以一次写入多个像素。

纹理访问做同样的事情。问题是它们没有như nhau的缓存。因此,您可能已经写入了写入缓存中的一些数据,但纹理缓存不知道它。

现在,这里的规范有点严厉。 理论上,您可以从纹理的一个区域读取数据并写入另一个区域(但规范未定义),只要您从不从任何位置读取数据即可。已写信给,反之亦然。显然,这没有多大帮助。

NV_texture_barrier 扩展允许您解决这个问题。尽管是 NVIDIA 扩展,但 ATI 硬件也支持它。它的工作方式是,当您想要刷新所有缓存时,调用 glTextureBarrierNV 函数。这样,您就可以确定当您从某个位置读取数据时,您已经写入了该位置。

因此,我们的想法是将纹理的一个区域指定为写入区域,将另一个区域指定为读取区域。渲染完一些内容后,您需要进行读回,您可以触发屏障并交换纹理区域。这就像纹理乒乓球,但不需要附加新纹理或绑定(bind) FBO 或更改绘图缓冲区等繁重操作。

关于opengl - OpenGL/OpenGLES 中的帧缓冲区纹理行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6459339/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com